<?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>8191</bug_id>
          
          <creation_ts>2006-04-04 21:59:41 -0700</creation_ts>
          <short_desc>DOMAttrModified mutation event support</short_desc>
          <delta_ts>2014-05-20 03:14:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>416.x</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc>http://www.gtalbot.org/DHTMLSection/DOM2MutationEvents.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6590</blocked>
    
    <blocked>20162</blocked>
    
    <blocked>20517</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Gérard Talbot (no longer involved)">browserbugs2</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>a.neumann</cc>
    
    <cc>ap</cc>
    
    <cc>a.renevier</cc>
    
    <cc>aroben</cc>
    
    <cc>bdakin</cc>
    
    <cc>bdginc</cc>
    
    <cc>bugmail</cc>
    
    <cc>clown</cc>
    
    <cc>david.bolter</cc>
    
    <cc>dbates</cc>
    
    <cc>dieter</cc>
    
    <cc>emacemac7</cc>
    
    <cc>golod95</cc>
    
    <cc>ian</cc>
    
    <cc>illenberger</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdv</cc>
    
    <cc>jeff</cc>
    
    <cc>john.david.dalton</cc>
    
    <cc>kangax</cc>
    
    <cc>lon</cc>
    
    <cc>manyoso</cc>
    
    <cc>ml</cc>
    
    <cc>nicolas.paton</cc>
    
    <cc>ojan</cc>
    
    <cc>p.jacquemart</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>rob.moore</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>shogun70</cc>
    
    <cc>syoichi</cc>
    
    <cc>the1geek</cc>
    
    <cc>webdev</cc>
    
    <cc>yonathan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>38581</commentid>
    <comment_count>0</comment_count>
    <who name="Gérard Talbot (no longer involved)">browserbugs2</who>
    <bug_when>2006-04-04 21:59:41 -0700</bug_when>
    <thetext>DOMAttrModified mutation event is not supported by Safari 2.02 (416.13). Opera 7.2+ and Mozilla-based browsers support it.

Steps to reproduce:
1- Load the provided URL
2- Hover the mouse over the Chinese flag

Expected results:
An alert box should report this text along with the related/correspondent event properties:

&quot;The attribute (evt.attrName) &quot; + evt.attrName + &quot; node of the &quot; + evt.target.nodeName + &quot; identified as &quot; + evt.target.id + &quot; has been modified. This alert proves that the current browser supports the &quot; + evt.type + &quot; mutation event. The type of change which triggered the DOMAttrModified event (evt.attrChange) is &quot; + evt.attrChange + &quot; and the name of the attribute (evt.attrName) is &quot; + evt.attrName + &quot;.\nThe previous value was \&quot;&quot; + evt.prevValue + &quot;\&quot;\nand its new value is \&quot;&quot; + evt.newValue + &quot;\&quot;\nThe relatedNode (evt.relatedNode) property value is &quot; + evt.relatedNode + &quot; and the relatedNode nodeName (evt.relatedNode.nodeName) is &quot; + evt.relatedNode.nodeName

which would output as

&quot;The attribute (evt.attrName) src node of the IMG identified as idMediumChina has been modified. This alert proves that the current browser supports the DOMAttrModified mutation event. The type of change which triggered the DOMAttrModified event (evt.attrChange) is 1 and the name of the attribute (evt.attrName) is src.
The previous value was &quot;http://www.gtalbot.org/GRAPHICS/PNG/MediumChinaFlagMouseOut.png&quot;
and its new value is &quot;http://www.gtalbot.org/GRAPHICS/PNG/MediumChinaFlagMouseOver.png&quot;
The relatedNode (evt.relatedNode) property value is [object Attr] and the relatedNode nodeName (evt.relatedNode.nodeName) is src

Another alert should popup for the switch back of the src of the image (since this is a rollover image).

I searched for a duplicate and couldn&apos;t find any.

Reference:
http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-MutationEvent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35868</commentid>
    <comment_count>1</comment_count>
    <who name="Andreas Neumann">a.neumann</who>
    <bug_when>2007-01-10 13:57:45 -0800</bug_when>
    <thetext>Here is another mutation event example that doesn&apos;t work:
http://www.carto.net/papers/svg/eventhandling/example4_mutationevent_properties_and_methods.svg

This is implemented correctly in Opera 9 and Batik if you want to have a look for the correct values. Opera 9 normalizes the color values though, while it shouldn&apos;t in SVG 1.1. Batik does everything correctly.

Thanks for having a look at this example as well when fixing this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74965</commentid>
    <comment_count>2</comment_count>
    <who name="Frank Illenberger">illenberger</who>
    <bug_when>2008-03-24 04:17:24 -0700</bug_when>
    <thetext>Please consider enabling the support for DOMAttrModified events as they are the only important missing DOM events. 
WebCore&apos;s Element.cpp contains a disabled implementation:

void Element::dispatchAttrAdditionEvent(Attribute *attr)
{
    ASSERT(!eventDispatchForbidden());
#if 0
    if (!document()-&gt;hasListenerType(Document::DOMATTRMODIFIED_LISTENER))
        return;
    ExceptionCode ec = 0;
    dispatchEvent(new MutationEvent(DOMAttrModifiedEvent, true, false, attr, attr-&gt;value(),
        attr-&gt;value(),document()-&gt;attrName(attr-&gt;id()), MutationEvent::ADDITION), ec);
#endif
}

Why is this disabled? Are these events causing any problems?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79989</commentid>
    <comment_count>3</comment_count>
    <who name="David Bolter">david.bolter</who>
    <bug_when>2008-05-09 10:32:04 -0700</bug_when>
    <thetext>I&apos;d like to see this enabled as well. We are considering writable WAI-ARIA properties at the PFWG (W3C), which would require web app authors to respond to DOM property mutation.

On FF, we are able to watch DOMAttrModified events. Like Frank, I too am curious, why is this code ifdef&apos;ed out in WebKit?  I&apos;m guessing some performance concern?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86684</commentid>
    <comment_count>4</comment_count>
      <attachid>22435</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-07-22 15:51:45 -0700</bug_when>
    <thetext>Created attachment 22435
Proposed fix for comments

Here is a patch to enable them. Note, we do not have code for the MODIFICATION type. Only add/remove. Not really ready to land since there are no tests, etc. Someone should take this and run with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89383</commentid>
    <comment_count>5</comment_count>
    <who name="Brad">bdginc</who>
    <bug_when>2008-08-26 08:10:02 -0700</bug_when>
    <thetext>This missing event (along with DOMNodeInserted) is becoming ever more important as people will start using javascript implementations of XBL 2.0.  When addressing dynamic changes to bound elements, these events are necessary to detect when changes / additions are made to bound elements and their custom attributes.

This standard event is already supported in FF and Opera.  It would be really nice if Webkit/Safari included it as well.  Since there is a patch (previously submitted) attached, I added the EasyFix keyword.

Further samples: http://www.quirksmode.org/dom/events/ (scroll for DOMAttrModified and see the test page).
Thanks!!!!
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91897</commentid>
    <comment_count>6</comment_count>
    <who name="David Harrison">harrison</who>
    <bug_when>2008-09-20 09:33:06 -0700</bug_when>
    <thetext>Without support for MODIFICATION, WebKit will still fail the DOM mutation event test (#13) at http://www.w3.org/2008/06/mobile-test/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92118</commentid>
    <comment_count>7</comment_count>
    <who name="David Bolter">david.bolter</who>
    <bug_when>2008-09-22 06:49:57 -0700</bug_when>
    <thetext>+1 to bump this bug&apos;s severity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106708</commentid>
    <comment_count>8</comment_count>
    <who name="Antoine Quint">ml</who>
    <bug_when>2009-01-22 22:56:16 -0800</bug_when>
    <thetext>It would be tremendously useful to have the support for this event turned on, for all the reasons listed above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106709</commentid>
    <comment_count>9</comment_count>
    <who name="Gérard Talbot (no longer involved)">browserbugs2</who>
    <bug_when>2009-01-22 23:35:16 -0800</bug_when>
    <thetext>+2 to bump this bug&apos;s severity.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106739</commentid>
    <comment_count>10</comment_count>
    <who name="David Bolter">david.bolter</who>
    <bug_when>2009-01-23 05:26:25 -0800</bug_when>
    <thetext>Note you could keep performance by doing this via lazy instantiation. Only create and fire the events if there is a listener. Seems the best of both worlds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107501</commentid>
    <comment_count>11</comment_count>
    <who name="Anthony Ricaud">rik</who>
    <bug_when>2009-01-29 02:53:15 -0800</bug_when>
    <thetext>*** Bug 23589 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110046</commentid>
    <comment_count>12</comment_count>
    <who name="Rene Trost">r.trost</who>
    <bug_when>2009-02-17 20:24:33 -0800</bug_when>
    <thetext>Simplified testcase:
http://www.syncbyte.com/webkit/dom_modified_event.html

Extracted test #13: http://www.w3.org/2008/06/mobile-test/
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119540</commentid>
    <comment_count>13</comment_count>
    <who name="Newton Chan">the1geek</who>
    <bug_when>2009-04-30 16:23:11 -0700</bug_when>
    <thetext>Please move this issue to high priority. It breaks many web apps.
Whereas IE has onpropertychange, and Mozilla supports DOMAttrModified, what is Webkit (Safari &amp; Chrome) alternative. For now I sway all my users from using Safari and Chrome!

 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128251</commentid>
    <comment_count>14</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-25 13:31:09 -0700</bug_when>
    <thetext>&lt;rdar://problem/7007800&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160760</commentid>
    <comment_count>15</comment_count>
      <attachid>42551</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2009-11-05 01:12:25 -0800</bug_when>
    <thetext>Created attachment 42551
Patch with test case

Work in progress.

Based of an earlier patch by Timothy Hatcher.

Passes &lt;http://www.gtalbot.org/DHTMLSection/DOM2MutationEvents.html&gt;.
Passes the W3C DOM mutation test case at &lt;http://www.w3.org/2008/06/mobile-test/&gt;
Passes &lt;http://www.syncbyte.com/webkit/dom_modified_event.html&gt; (thanks Rene Trost for the reduction).

Included is a DRT/manual-test test case that checks that we conform to the W3C DOM Level 2 mutation event types spec. with respect to non-style DOM attributes.

I&apos;m heading off to bed now. I hope to finish up on the DRT/manual-test for the style attribute sometime tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160765</commentid>
    <comment_count>16</comment_count>
      <attachid>42552</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2009-11-05 01:22:56 -0800</bug_when>
    <thetext>Created attachment 42552
Self-contained Layout test

For convenience, here is a self-contained version of the test case included in my patch.

This test case checks only non-style DOM attribute addition, modification, and removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160891</commentid>
    <comment_count>17</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-11-05 11:22:53 -0800</bug_when>
    <thetext>Do we really want to add support for this? There&apos;s general agreement on www-dom@w3.org that MutationEvents are something we want to move away from. Specifically, the use-cases that they do meet, they don&apos;t meet well and they are frought with problems. Mainly, they are inherently non-performant and invite crashiness. 

A relevant thread from www-dom:
http://lists.w3.org/Archives/Public/www-dom/2009JanMar/0007.html

An alternate proposal on public-webapps that addresses both the performance and crashiness issues:
http://lists.w3.org/Archives/Public/public-webapps/2009AprJun/0745.html

There are some good use-cases for these types of events, but the current incarnation of MutationEvents is something noone seems happy with (not browser vendors or web developers).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160913</commentid>
    <comment_count>18</comment_count>
    <who name="John-David Dalton">john.david.dalton</who>
    <bug_when>2009-11-05 12:05:52 -0800</bug_when>
    <thetext>I would like to add that mutation events are great if you use them properly. NWMatcher (a JavaScript CSS Selector engine) has no problems with them. View my fork here http://github.com/jdalton/nwmatcher/raw/master/src/nwmatcher.js.

1) Avoid compatibility issues through feature detection.

2) Avoid the `slow down` by removing the mutation event listener the first time it fires and set it up again on subsequent calls.

3) Detect if you are in an abusive while-loop and temporarily pause setting mutation events.

With proper feature detection mutation events give NWMatcher a boost by allowing it to cache dom results under certain situations. 

Just because something is buggy doesn&apos;t mean it should be ripped-out/abandoned. Currently by viewing nwmatcher.js you will find it covers a lot of bugs in querySelectorAll(). This does not mean that continued support for querySelectorAll() should be dropped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161030</commentid>
    <comment_count>19</comment_count>
      <attachid>42614</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2009-11-05 17:53:06 -0800</bug_when>
    <thetext>Created attachment 42614
Patch with test cases

Added code to test MODIFICATION firing from CSS property change to file &quot;fire-DOMAttrModified-events.html&quot;. Added a new test file &quot;fire-DOMAttrModified-MODIFICATION-when-handling-MODIFICATION-no-infinite-loop.html&quot; to ensure that we do not go into an infinite loop when changing an attribute while servicing a MODIFICATION event (for example: http://www.syncbyte.com/webkit/dom_modified_event.html).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161031</commentid>
    <comment_count>20</comment_count>
      <attachid>42615</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2009-11-05 17:59:27 -0800</bug_when>
    <thetext>Created attachment 42615
Patch with test cases

Oops, accidentally left some code in the test cases that was used for debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161034</commentid>
    <comment_count>21</comment_count>
      <attachid>42616</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2009-11-05 18:31:27 -0800</bug_when>
    <thetext>Created attachment 42616
Self contained Layout test &quot;fire-DOMAttrModified-events&quot;

For convenience, a self-contained version of the layout test &quot;fire-DOMAttrModified-events.html&quot; that is included in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161048</commentid>
    <comment_count>22</comment_count>
      <attachid>42615</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-05 19:33:43 -0800</bug_when>
    <thetext>Comment on attachment 42615
Patch with test cases

r- per comment 17.

I suggest posting to webkit-dev for wider discussion of whether we want this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272846</commentid>
    <comment_count>23</comment_count>
    <who name="Matt">symmet</who>
    <bug_when>2010-09-01 09:37:30 -0700</bug_when>
    <thetext>This feature is necessary for webkit to be used with the next generation of web apps. More and more apps are needing precise control over DOM elements and the DOMAttrModified event is a critical part of that control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272850</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-09-01 09:45:58 -0700</bug_when>
    <thetext>I suggest posting to webkit-dev, explaining your precise use case. As we&apos;re currently don&apos;t intend to implement more DOM modification events, we need to know the use case in order to come up with a more robust solution that covers it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273579</commentid>
    <comment_count>25</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2010-09-02 14:33:18 -0700</bug_when>
    <thetext>Please note that the DOM Working Group intends to deprecate DOMAttrModified in DOM 3 due to lack of support and performance considerations.

We have suggested a replacement, DOMAttrChangeRequest, as part of a &quot;User Interface Independence&quot; proposal sent to the WWW-DOM working group (and HTMLWG, PFWG, etc.)
http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0106/UserInterfaceIndependence.html

Sent as an attachment to this email.
http://lists.w3.org/Archives/Public/www-dom/2010JulSep/0106.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295293</commentid>
    <comment_count>26</comment_count>
    <who name="Eli Grey (:sephr)">bugmail</who>
    <bug_when>2010-10-17 16:09:39 -0700</bug_when>
    <thetext>Lack of DOMAttrModified support introduces a security vulnerability in the Mutaprophylaxis JS library that protects nodes from unauthorized mutations by browser extensions and XSS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535480</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-12 23:49:25 -0800</bug_when>
    <thetext>*** Bug 76230 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673962</commentid>
    <comment_count>28</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-19 15:12:41 -0700</bug_when>
    <thetext>MutationObservers are the new hotness in this area.  I don&apos;t think we want to implement DOMAttrModified.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22435</attachid>
            <date>2008-07-22 15:51:45 -0700</date>
            <delta_ts>2009-11-05 01:12:25 -0800</delta_ts>
            <desc>Proposed fix for comments</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>2095</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKaW5kZXggM2JhZGVjZi4uYmQ1NGEzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTMxLDEyICszMSwxNCBA
QAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkVkaXRvci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJO
YW1lZEF0dHJNYXAuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
QEAgLTQ4LDYgKzUwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3Bh
Y2UgWE1MTmFtZXM7CiAKQEAgLTkzNSwyOCArOTM4LDI0IEBAIHZvaWQgRWxlbWVudDo6ZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCkKICAgICBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXModGhpcywg
cmVuZGVyU3R5bGUoKSwgdHJ1ZSwgbGFzdENoaWxkKCksIDAsIDApOwogfQogCi12b2lkIEVsZW1l
bnQ6OmRpc3BhdGNoQXR0clJlbW92YWxFdmVudChBdHRyaWJ1dGUqKQordm9pZCBFbGVtZW50Ojpk
aXNwYXRjaEF0dHJSZW1vdmFsRXZlbnQoQXR0cmlidXRlKiBhdHRyKQogewogICAgIEFTU0VSVCgh
ZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSNpZiAwCiAgICAgaWYgKCFkb2N1bWVudCgpLT5o
YXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUFUVFJNT0RJRklFRF9MSVNURU5FUikpCiAgICAg
ICAgIHJldHVybjsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2ZW50
KG5ldyBNdXRhdGlvbkV2ZW50KERPTUF0dHJNb2RpZmllZEV2ZW50LCB0cnVlLCBmYWxzZSwgYXR0
ciwgYXR0ci0+dmFsdWUoKSwKLSAgICAgICAgYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKS0+YXR0
ck5hbWUoYXR0ci0+aWQoKSksIE11dGF0aW9uRXZlbnQ6OlJFTU9WQUwpLCBlYyk7Ci0jZW5kaWYK
KyAgICBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShET01BdHRyTW9kaWZpZWRF
dmVudCwgdHJ1ZSwgZmFsc2UsIGF0dHItPmF0dHIoKSwgYXR0ci0+dmFsdWUoKSwKKyAgICAgICAg
YXR0ci0+dmFsdWUoKSwgYXR0ci0+bmFtZSgpLnRvU3RyaW5nKCksIE11dGF0aW9uRXZlbnQ6OlJF
TU9WQUwpLCBlYyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyQWRkaXRpb25FdmVu
dChBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVu
KCkpOwotI2lmIDAKICAgICBpZiAoIWRvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVu
dDo6RE9NQVRUUk1PRElGSUVEX0xJU1RFTkVSKSkKICAgICAgICAgcmV0dXJuOwogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIGRpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnQoRE9N
QXR0ck1vZGlmaWVkRXZlbnQsIHRydWUsIGZhbHNlLCBhdHRyLCBhdHRyLT52YWx1ZSgpLAotICAg
ICAgICBhdHRyLT52YWx1ZSgpLGRvY3VtZW50KCktPmF0dHJOYW1lKGF0dHItPmlkKCkpLCBNdXRh
dGlvbkV2ZW50OjpBRERJVElPTiksIGVjKTsKLSNlbmRpZgorICAgIGRpc3BhdGNoRXZlbnQoTXV0
YXRpb25FdmVudDo6Y3JlYXRlKERPTUF0dHJNb2RpZmllZEV2ZW50LCB0cnVlLCBmYWxzZSwgYXR0
ci0+YXR0cigpLCBhdHRyLT52YWx1ZSgpLAorICAgICAgICBhdHRyLT52YWx1ZSgpLCBhdHRyLT5u
YW1lKCkudG9TdHJpbmcoKSwgTXV0YXRpb25FdmVudDo6QURESVRJT04pLCBlYyk7CiB9CiAKIFN0
cmluZyBFbGVtZW50OjpvcGVuVGFnU3RhcnRUb1N0cmluZygpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42551</attachid>
            <date>2009-11-05 01:12:25 -0800</date>
            <delta_ts>2009-11-05 17:53:06 -0800</delta_ts>
            <desc>Patch with test case</desc>
            <filename>Bug8191_1.patch</filename>
            <type>text/plain</type>
            <size>15120</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDU1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMTEtMDUgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTkxCisgICAgICAgIEFuZAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzAwNzgwMD4KKworICAgICAgICBJbXBsZW1lbnRzIHN1
cHBvcnQgZm9yIERPTSBMZXZlbCAyIG11dGF0aW9uIGV2ZW50IHR5cGVzLAorICAgICAgICA8aHR0
cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItRXZlbnRzLTIwMDAxMTEzL2V2
ZW50cy5odG1sI0V2ZW50cy1NdXRhdGlvbkV2ZW50Pi4KKworICAgICAgICBUZXN0OiBmYXN0L2V2
ZW50cy9kb20tbXV0YXRpb24tZXZlbnRzLWF0dHJpYnV0ZXMuaHRtbAorCisgICAgICAgICogY3Nz
L0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6IE1vZGlmaWVkIHRvIGNhbGwgCisg
ICAgICAgIEVsZW1lbnQ6OmRpc3BhdGNoQXR0ck1vZGlmaWNhdGlvbkV2ZW50LgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZGlzcGF0Y2hBdHRyTW9kaWZp
Y2F0aW9uRXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNo
QXR0clJlbW92YWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpkaXNwYXRjaEF0
dHJBZGRpdGlvbkV2ZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorCiAyMDA5LTExLTA0
ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHJldmlzaW9uIDUwNTMzKQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTUgQEAKICNp
bmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTdHls
ZWRFbGVtZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwogQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkKICAgICA6IG1fbm9kZSgwKQogICAg
ICwgbV92YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQoMCkKQEAgLTUyMSw2ICs1MjQsMTAgQEAg
Ym9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKKyAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwcmV2aW91cyB2
YWx1ZSBvZiB0aGlzIDxzdHlsZT4gZWxlbWVudCBzbyB0aGF0IHdlIGNhbiBkaXNwYXRjaAorICAg
IC8vIGEgRE9NQXR0ck1vZGlmaWVkIGV2ZW50IChiZWxvdykuCisgICAgU3RyaW5nIHByZXZpb3Vz
Q1NTdGV4dCA9IGNzc1RleHQoKTsgCisKICAgICAvLyBXaGVuIHJlcGxhY2luZyBhbiBleGlzdGlu
ZyBwcm9wZXJ0eSB2YWx1ZSwgdGhpcyBtb3ZlcyB0aGUgcHJvcGVydHkgdG8gdGhlIGVuZCBvZiB0
aGUgbGlzdC4KICAgICAvLyBGaXJlZm94IHByZXNlcnZlcyB0aGUgcG9zaXRpb24sIGFuZCBNU0lF
IG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgYmVnaW5uaW5nLgogICAgIENTU1BhcnNlciBwYXJz
ZXIodXNlU3RyaWN0UGFyc2luZygpKTsKQEAgLTUzMSw2ICs1MzgsMTEgQEAgYm9vbCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcAogICAgIH0gZWxzZSBpZiAobm90aWZ5Q2hhbmdl
ZCkKICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogCisgICAgaWYgKG1fbm9kZSAmJiBt
X25vZGUtPmlzU3R5bGVkRWxlbWVudCgpKSB7CisgICAgICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0
dHIgPSBBdHRyaWJ1dGU6OmNyZWF0ZShzdHlsZUF0dHIsIGNzc1RleHQoKSk7CisgICAgICAgIHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX25vZGUpLT5kaXNwYXRjaEF0dHJNb2RpZmljYXRp
b25FdmVudChhdHRyLmdldCgpLCBwcmV2aW91c0NTU3RleHQpOworICAgIH0KKwogICAgIHJldHVy
biBzdWNjZXNzOwogfQogICAgIApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDUwNTMzKQorKysgV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEyICszNiwxNCBAQAog
I2luY2x1ZGUgIkNsaWVudFJlY3RMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFbGVtZW50UmFyZURhdGEuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJNdXRhdGlvbkV2ZW50Lmgi
CiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKQEAgLTUzMiw4ICs1MzQsMTAgQEAgdm9pZCBFbGVtZW50
OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljUwogICAgIGVsc2UgaWYgKCFvbGQgJiYgIXZhbHVl
LmlzTnVsbCgpKQogICAgICAgICBuYW1lZEF0dHJNYXAtPmFkZEF0dHJpYnV0ZShjcmVhdGVBdHRy
aWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBudWxsQXRvbSksIHZhbHVl
KSk7CiAgICAgZWxzZSBpZiAob2xkICYmICF2YWx1ZS5pc051bGwoKSkgeworICAgICAgICBTdHJp
bmcgcHJldmlvdXNWYWx1ZSA9IG9sZC0+dmFsdWUoKS5zdHJpbmcoKTsKICAgICAgICAgb2xkLT5z
ZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQob2xkKTsKKyAgICAgICAg
ZGlzcGF0Y2hBdHRyTW9kaWZpY2F0aW9uRXZlbnQob2xkLCBwcmV2aW91c1ZhbHVlKTsKICAgICB9
CiB9CiAKQEAgLTU1Miw4ICs1NTYsMTAgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaQogICAgIGVsc2UgaWYgKCFvbGQgJiYgIXZhbHVlLmlzTnVsbCgpKQogICAgICAg
ICBuYW1lZEF0dHJNYXAtPmFkZEF0dHJpYnV0ZShjcmVhdGVBdHRyaWJ1dGUobmFtZSwgdmFsdWUp
KTsKICAgICBlbHNlIGlmIChvbGQpIHsKKyAgICAgICAgU3RyaW5nIHByZXZpb3VzVmFsdWUgPSBv
bGQtPnZhbHVlKCkuc3RyaW5nKCk7CiAgICAgICAgIG9sZC0+c2V0VmFsdWUodmFsdWUpOwogICAg
ICAgICBhdHRyaWJ1dGVDaGFuZ2VkKG9sZCk7CisgICAgICAgIGRpc3BhdGNoQXR0ck1vZGlmaWNh
dGlvbkV2ZW50KG9sZCwgcHJldmlvdXNWYWx1ZSk7CiAgICAgfQogfQogCkBAIC05OTAsMjggKzk5
NiwzNyBAQCB2b2lkIEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiAgICAgY2hlY2tG
b3JTaWJsaW5nU3R5bGVDaGFuZ2VzKHRoaXMsIHJlbmRlclN0eWxlKCksIHRydWUsIGxhc3RDaGls
ZCgpLCAwLCAwKTsKIH0KIAotdm9pZCBFbGVtZW50OjpkaXNwYXRjaEF0dHJSZW1vdmFsRXZlbnQo
QXR0cmlidXRlKikKK3ZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyTW9kaWZpY2F0aW9uRXZlbnQo
QXR0cmlidXRlKiBhdHRyLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmFsdWUpCiB7CiAgICAgQVNT
RVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotI2lmIDAKKyAgICAKICAgICBpZiAoIWRv
Y3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NQVRUUk1PRElGSUVEX0xJU1RF
TkVSKSkKICAgICAgICAgcmV0dXJuOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRp
c3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnQoRE9NQXR0ck1vZGlmaWVkRXZlbnQsIHRydWUs
IGZhbHNlLCBhdHRyLCBhdHRyLT52YWx1ZSgpLAotICAgICAgICBhdHRyLT52YWx1ZSgpLCBkb2N1
bWVudCgpLT5hdHRyTmFtZShhdHRyLT5pZCgpKSwgTXV0YXRpb25FdmVudDo6UkVNT1ZBTCksIGVj
KTsKLSNlbmRpZgorICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5ET01BdHRyTW9kaWZpZWRFdmVudCwgdHJ1ZSwgYXR0ci0+Y3JlYXRlQXR0cklmTmVl
ZGVkKHRoaXMpLCAKKyAgICAgICAgIHByZXZpb3VzVmFsdWUsIGF0dHItPnZhbHVlKCksIGF0dHIt
Pm5hbWUoKS50b1N0cmluZygpLCBNdXRhdGlvbkV2ZW50OjpNT0RJRklDQVRJT04pLCBlYyk7CiB9
CiAKLXZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyQWRkaXRpb25FdmVudChBdHRyaWJ1dGUqKQor
dm9pZCBFbGVtZW50OjpkaXNwYXRjaEF0dHJSZW1vdmFsRXZlbnQoQXR0cmlidXRlKiBhdHRyKQog
ewogICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSNpZiAwCisKICAgICBp
ZiAoIWRvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NQVRUUk1PRElGSUVE
X0xJU1RFTkVSKSkKICAgICAgICAgcmV0dXJuOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGRpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnQoRE9NQXR0ck1vZGlmaWVkRXZlbnQs
IHRydWUsIGZhbHNlLCBhdHRyLCBhdHRyLT52YWx1ZSgpLAotICAgICAgICBhdHRyLT52YWx1ZSgp
LCBkb2N1bWVudCgpLT5hdHRyTmFtZShhdHRyLT5pZCgpKSwgTXV0YXRpb25FdmVudDo6QURESVRJ
T04pLCBlYyk7Ci0jZW5kaWYKKyAgICBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuRE9NQXR0ck1vZGlmaWVkRXZlbnQsIHRydWUsIGF0dHItPmNyZWF0ZUF0
dHJJZk5lZWRlZCh0aGlzKSwgCisgICAgICAgIGF0dHItPnZhbHVlKCksIFN0cmluZygpLCBhdHRy
LT5uYW1lKCkudG9TdHJpbmcoKSwgTXV0YXRpb25FdmVudDo6UkVNT1ZBTCksIGVjKTsKK30KKwor
dm9pZCBFbGVtZW50OjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2ZW50KEF0dHJpYnV0ZSogYXR0cikK
K3sKKyAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CisKKyAgICBpZiAoIWRv
Y3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NQVRUUk1PRElGSUVEX0xJU1RF
TkVSKSkKKyAgICAgICAgcmV0dXJuOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRp
c3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01BdHRyTW9k
aWZpZWRFdmVudCwgdHJ1ZSwgYXR0ci0+Y3JlYXRlQXR0cklmTmVlZGVkKHRoaXMpLCAKKyAgICAg
ICAgU3RyaW5nKCksIGF0dHItPnZhbHVlKCksIGF0dHItPm5hbWUoKS50b1N0cmluZygpLCBNdXRh
dGlvbkV2ZW50OjpBRERJVElPTiksIGVjKTsKIH0KIAogU3RyaW5nIEVsZW1lbnQ6Om9wZW5UYWdT
dGFydFRvU3RyaW5nKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDUwNTMzKQorKysgV2ViQ29y
ZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZSgpOwogCisgICAgdm9p
ZCBkaXNwYXRjaEF0dHJNb2RpZmljYXRpb25FdmVudChBdHRyaWJ1dGUqLCBjb25zdCBTdHJpbmcm
IHByZXZpb3VzVmFsdWUpOwogICAgIHZvaWQgZGlzcGF0Y2hBdHRyUmVtb3ZhbEV2ZW50KEF0dHJp
YnV0ZSopOwogICAgIHZvaWQgZGlzcGF0Y2hBdHRyQWRkaXRpb25FdmVudChBdHRyaWJ1dGUqKTsK
IApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gNTA1NTcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0xMS0wNSAgRGFuaWVsIEJhdGVzICA8
ZGJhdGVzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxOTEK
KyAgICAgICAgQW5kCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MDA3ODAwPgorCisgICAgICAg
IFRlc3RzIHRoYXQgRE9NIExldmVsIDIgbXV0YXRpb24gZXZlbnRzIHdvcmsgYW5kIGNvbmZvcm0g
dG8gdGhlIFczQyBzcGVjLAorICAgICAgICA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMt
RE9NLUxldmVsLTItRXZlbnRzLTIwMDAxMTEzL2V2ZW50cy5odG1sI0V2ZW50cy1NdXRhdGlvbkV2
ZW50Pi4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL2RvbS1tdXRhdGlvbi1ldmVudHMtYXR0cmli
dXRlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2RvbS1tdXRh
dGlvbi1ldmVudHMtYXR0cmlidXRlcy5odG1sOiBBZGRlZC4KKwogMjAwOS0xMS0wMyAgSnVzdGlu
IEdhcmNpYSAgPGp1c3Rpbi5nYXJjaWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFkZWxlIFBldGVyc29uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZG9tLW11dGF0
aW9uLWV2ZW50cy1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9kb20tbXV0YXRpb24tZXZlbnRzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZG9tLW11dGF0aW9u
LWV2ZW50cy1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
MCBAQAorVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IERPTSBMZXZlbCAyIG11dGF0aW9uIGV2ZW50IHR5
cGVzIHdvcmsgYW5kIGNvbmZvcm0gdG8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9N
LUxldmVsLTItRXZlbnRzLTIwMDAxMTEzL2V2ZW50cy5odG1sI0V2ZW50cy1NdXRhdGlvbkV2ZW50
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitGb3IgQURESVRJT046CisKK1BB
U1MgcmVzdWx0c1siYWRkaXRpb24iXS5hdHRyQ2hhbmdlIGlzIDIKK1BBU1MgcmVzdWx0c1siYWRk
aXRpb24iXS5hdHRyTmFtZSBpcyAiY2xhc3MiCitQQVNTIHJlc3VsdHNbImFkZGl0aW9uIl0ubmV3
VmFsdWUgaXMgInJlZC1iYWNrZ3JvdW5kIgorUEFTUyByZXN1bHRzWyJhZGRpdGlvbiJdLnByZXZW
YWx1ZSBpcyAiIgorCitGb3IgTU9ESUZJQ0FUSU9OOgorCitQQVNTIHJlc3VsdHNbIm1vZGlmaWNh
dGlvbiJdLmF0dHJDaGFuZ2UgaXMgMQorUEFTUyByZXN1bHRzWyJtb2RpZmljYXRpb24iXS5hdHRy
TmFtZSBpcyAiY2xhc3MiCitQQVNTIHJlc3VsdHNbIm1vZGlmaWNhdGlvbiJdLm5ld1ZhbHVlIGlz
ICJibHVlLWJhY2tncm91bmQiCitQQVNTIHJlc3VsdHNbIm1vZGlmaWNhdGlvbiJdLnByZXZWYWx1
ZSBpcyAieWVsbG93LWJhY2tncm91bmQiCitQQVNTIHJlc3VsdHNbIm1vZGlmaWNhdGlvbiJdLnJl
bGF0ZWROb2RlID09ICdbb2JqZWN0IEF0dHJdJyBpcyB0cnVlCisKK0ZvciBSRU1PVkFMOgorCitQ
QVNTIHJlc3VsdHNbInJlbW92YWwiXS5hdHRyQ2hhbmdlIGlzIDMKK1BBU1MgcmVzdWx0c1sicmVt
b3ZhbCJdLmF0dHJOYW1lIGlzICJjbGFzcyIKK1BBU1MgcmVzdWx0c1sicmVtb3ZhbCJdLm5ld1Zh
bHVlIGlzICIiCitQQVNTIHJlc3VsdHNbInJlbW92YWwiXS5wcmV2VmFsdWUgaXMgImJsYWNrLWJh
Y2tncm91bmQiCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvZG9tLW11dGF0aW9uLWV2ZW50cy1hdHRyaWJ1dGVzLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvZG9tLW11dGF0aW9uLWV2ZW50cy1hdHRyaWJ1dGVzLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kb20tbXV0YXRpb24tZXZl
bnRzLWF0dHJpYnV0ZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTUgQEAKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKyNhZGRpdGlvbiwgI21vZGlmaWNhdGlvbiwgI3Jl
bW92YWwgeyB3aWR0aDogNjRweDsgaGVpZ2h0OiA2NHB4OyBkaXNwbGF5OiB0YWJsZS1jZWxsOyB0
ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGJvcmRlcjogMXB4IHNv
bGlkIGJsYWNrOyB9CisjYWRkaXRpb24geyBjb2xvcjogd2hpdGU7IH0KKyNtb2RpZmljYXRpb24g
eyBjb2xvcjogeWVsbG93OyB9CisucmVkLWJhY2tncm91bmQgeyBiYWNrZ3JvdW5kOiByZWQ7IH0K
Ky55ZWxsb3ctYmFja2dyb3VuZCB7IGJhY2tncm91bmQ6IHllbGxvdzsgfQorLmJsdWUtYmFja2dy
b3VuZCB7IGJhY2tncm91bmQ6IGJsdWU7IH0KKy5ibGFjay1iYWNrZ3JvdW5kIHsgYmFja2dyb3Vu
ZDogYmxhY2s7IH0KKzwvc3R5bGU+Cis8c2NyaXB0PgorICAgIHZhciBhZGRpdGlvbkVsZW1lbnQ7
CisgICAgdmFyIG1vZGlmaWNhdGlvbkVsZW1lbnQ7CisgICAgdmFyIHJlbW92YWxFbGVtZW50Owor
ICAgIAorICAgIHZhciBXM0NfUkVGRVJFTkNFX1VSTCA9ICJodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAwL1JFQy1ET00tTGV2ZWwtMi1FdmVudHMtMjAwMDExMTMvZXZlbnRzLmh0bWwjRXZlbnRzLU11
dGF0aW9uRXZlbnQiOworICAgIAorICAgIHZhciBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9BID0g
InJlZC1iYWNrZ3JvdW5kIjsKKyAgICB2YXIgRVhQRUNURURfQkFDS0dST1VORF9GT1JfQiA9ICJi
bHVlLWJhY2tncm91bmQiOworICAgIHZhciBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9DID0gbnVs
bDsKKyAgICAKKyAgICB2YXIgdGVzdEVsZW1lbnRJZDsKKyAgICB2YXIgcmVzdWx0czsKKworICAg
IHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICBhZGRpdGlvbkVsZW1l
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRkaXRpb24iKTsKKyAgICAgICAgbW9kaWZp
Y2F0aW9uRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb2RpZmljYXRpb24iKTsK
KyAgICAgICAgcmVtb3ZhbEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVtb3Zh
bCIpOworICAgICAgICAKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0KKyAgICAKKyAgICBmdW5j
dGlvbiBmaXJlQWRkaXRpb25FdmVudCgpCisgICAgeworICAgICAgICBpZiAoYWRkaXRpb25FbGVt
ZW50KQorICAgICAgICAgICAgYWRkaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCBF
WFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9BKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gZmly
ZU1vZGlmaWNhdGlvbkV2ZW50KCkKKyAgICB7CisgICAgICAgIGlmIChtb2RpZmljYXRpb25FbGVt
ZW50KQorICAgICAgICAgICAgbW9kaWZpY2F0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoImNsYXNz
IiwgRVhQRUNURURfQkFDS0dST1VORF9GT1JfQik7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9u
IGZpcmVSZW1vdmFsRXZlbnQoKQorICAgIHsKKyAgICAgICAgaWYgKHJlbW92YWxFbGVtZW50KQor
ICAgICAgICAgICAgcmVtb3ZhbEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpOworICAg
IH0KKyAgICAKKyAgICBmdW5jdGlvbiBpbnNwZWN0RE9NTXV0YXRpb25FdmVudChlKQorICAgIHsK
KyAgICAgICAgZGVidWcoJ2F0dHJDaGFuZ2U6ICcgKyBlLmF0dHJDaGFuZ2UgKyAnLCBhdHRyTmFt
ZTogJyArIGUuYXR0ck5hbWUgKyAnLCBuZXdWYWx1ZTogJyArIGUubmV3VmFsdWUgKyAKKyAgICAg
ICAgICAgICcsIHByZXZWYWx1ZTogJyArIGUucHJldlZhbHVlICsgIiwgcmVsYXRlZE5vZGU6ICIg
KyBlLnJlbGF0ZWROb2RlKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcmVjb3JkRE9NTXV0
YXRpb25FdmVudChlKQorICAgIHsKKyAgICAgICAgaWYgKCF0ZXN0RWxlbWVudElkKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFyZXN1bHRzKQorICAgICAgICAg
ICAgcmVzdWx0cyA9IG5ldyBBcnJheSgpOworICAgICAgICByZXN1bHRzW3Rlc3RFbGVtZW50SWRd
ID0gZTsKKyAgICAgICAgdGVzdEVsZW1lbnRJZCA9IG51bGw7CisgICAgfQorICAgIAorICAgIGZ1
bmN0aW9uIGNoZWNrUmVzdWx0cygpCisgICAgeworICAgICAgICAvLyBDaGVjayBBZGRpdGlvbiBF
dmVudAorICAgICAgICBkZWJ1ZygnPGJyIC8+Rm9yIEFERElUSU9OOjxiciAvPicpOworICAgICAg
ICBpZiAoIXJlc3VsdHMgfHwgIXJlc3VsdHNbImFkZGl0aW9uIl0pCisgICAgICAgICAgICB0ZXN0
RmFpbGVkKCdUaGUgQURESVRJT04gbXV0YXRpb24gZXZlbnQgdHlwZSBkaWQgbm90IGZpcmUuJyk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygncmVzdWx0c1si
YWRkaXRpb24iXS5hdHRyQ2hhbmdlJywgTXV0YXRpb25FdmVudC5BRERJVElPTik7CisgICAgICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbImFkZGl0aW9uIl0uYXR0ck5hbWUn
LCAiY2xhc3MiKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1si
YWRkaXRpb24iXS5uZXdWYWx1ZScsIEVYUEVDVEVEX0JBQ0tHUk9VTkRfRk9SX0EpOworICAgICAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJhZGRpdGlvbiJdLnByZXZWYWx1
ZScsICIiKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0c1siYWRkaXRpb24iXS5yZWxhdGVkTm9k
ZSkKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCdyZXN1bHRzWyJhZGRpdGlvbiJdLnJlbGF0
ZWROb2RlIHNob3VsZCBub3QgaGF2ZSBiZWVuIG51bGwsIGJ1dCBpdCB3YXMgbnVsbC4nKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdHNbImFkZGl0aW9uIl0ucmVsYXRlZE5vZGUubmFtZSAh
PSByZXN1bHRzWyJhZGRpdGlvbiJdLmF0dHJOYW1lKQorICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQoJ3Jlc3VsdHNbImFkZGl0aW9uIl0ucmVsYXRlZE5vZGUubmFtZSBzaG91bGQgYmUgY2xhc3Ms
IGluc3RlYWQgaXQgd2FzICcgKyByZXN1bHRzWyJhZGRpdGlvbiJdLmF0dHJOYW1lKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgTW9kaWZpY2F0aW9uIEV2ZW50CisgICAg
ICAgIGRlYnVnKCc8YnIgLz5Gb3IgTU9ESUZJQ0FUSU9OOjxiciAvPicpOworICAgICAgICBpZiAo
IXJlc3VsdHMgfHwgIXJlc3VsdHNbIm1vZGlmaWNhdGlvbiJdKQorICAgICAgICAgICAgdGVzdEZh
aWxlZCgnVGhlIE1PRElGSUNBVElPTiBtdXRhdGlvbiBldmVudCB0eXBlIGRpZCBub3QgZmlyZS4n
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdyZXN1bHRz
WyJtb2RpZmljYXRpb24iXS5hdHRyQ2hhbmdlJywgTXV0YXRpb25FdmVudC5NT0RJRklDQVRJT04p
OworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJtb2RpZmljYXRp
b24iXS5hdHRyTmFtZScsICJjbGFzcyIpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdyZXN1bHRzWyJtb2RpZmljYXRpb24iXS5uZXdWYWx1ZScsIEVYUEVDVEVEX0JBQ0tHUk9V
TkRfRk9SX0IpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJt
b2RpZmljYXRpb24iXS5wcmV2VmFsdWUnLCAieWVsbG93LWJhY2tncm91bmQiKTsKKyAgICAgICAg
ICAgIHNob3VsZEV2YWx1YXRlVG8oJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbiJdLnJlbGF0ZWROb2Rl
JywgbW9kaWZpY2F0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCJjbGFzcyIpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgUmVtb3ZhbCBFdmVudAorICAgICAgICBk
ZWJ1ZygnPGJyIC8+Rm9yIFJFTU9WQUw6PGJyIC8+Jyk7CisgICAgICAgIGlmICghcmVzdWx0cyB8
fCAhcmVzdWx0c1sicmVtb3ZhbCJdKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgnVGhlIFJFTU9W
QUwgbXV0YXRpb24gZXZlbnQgdHlwZSBkaWQgbm90IGZpcmUuJyk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygncmVzdWx0c1sicmVtb3ZhbCJdLmF0dHJDaGFu
Z2UnLCBNdXRhdGlvbkV2ZW50LlJFTU9WQUwpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdyZXN1bHRzWyJyZW1vdmFsIl0uYXR0ck5hbWUnLCAiY2xhc3MiKTsKKyAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1sicmVtb3ZhbCJdLm5ld1ZhbHVlJywg
IiIpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJyZW1vdmFs
Il0ucHJldlZhbHVlJywgImJsYWNrLWJhY2tncm91bmQiKTsKKyAgICAgICAgICAgIGlmICghcmVz
dWx0c1sicmVtb3ZhbCJdLnJlbGF0ZWROb2RlKQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQo
J3Jlc3VsdHNbInJlbW92YWwiXS5yZWxhdGVkTm9kZSBzaG91bGQgbm90IGhhdmUgYmVlbiBudWxs
LCBidXQgaXQgd2FzLicpOworICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0c1sicmVtb3ZhbCJd
LnJlbGF0ZWROb2RlLm5hbWUgIT0gcmVzdWx0c1siYWRkaXRpb24iXS5hdHRyTmFtZSkKKyAgICAg
ICAgICAgICAgICB0ZXN0RmFpbGVkKCdyZXN1bHRzWyJyZW1vdmFsIl0ucmVsYXRlZE5vZGUubmFt
ZSBzaG91bGQgYmUgY2xhc3MsIGluc3RlYWQgaXQgd2FzICcgKyByZXN1bHRzWyJyZW1vdmFsIl0u
YXR0ck5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHJ1blRlc3Qo
KQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgCisgICAg
ICAgIHRlc3RFbGVtZW50SWQgPSAiYWRkaXRpb24iOworICAgICAgICBmaXJlQWRkaXRpb25FdmVu
dCgpOworICAgICAgICB0ZXN0RWxlbWVudElkID0gIm1vZGlmaWNhdGlvbiI7CisgICAgICAgIGZp
cmVNb2RpZmljYXRpb25FdmVudCgpOworICAgICAgICB0ZXN0RWxlbWVudElkID0gInJlbW92YWwi
OworICAgICAgICBmaXJlUmVtb3ZhbEV2ZW50KCk7CisgICAgICAgIGNoZWNrUmVzdWx0cygpOwor
ICAgICAgICAKKyAgICAgICAgdmFyIHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidGVzdC1jb250YWluZXIiKTsKKyAgICAgICAgaWYgKHRlc3RDb250YWluZXIpCisgICAg
ICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RDb250YWluZXIpOworICAgICAg
ICBkZWJ1ZygnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7
CisgICAgfQorICAgIAorICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUF0dHJNb2Rp
ZmllZCIsIHJlY29yZERPTU11dGF0aW9uRXZlbnQsIGZhbHNlKTsKKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisgICAgPGRpdiBpZD0idGVz
dC1jb250YWluZXIiPgorICAgICAgICA8ZGl2IGlkPSJhZGRpdGlvbiI+QTwvZGl2PgorICAgICAg
ICA8YnIvPgorICAgICAgICA8ZGl2IGlkPSJtb2RpZmljYXRpb24iIGNsYXNzPSJ5ZWxsb3ctYmFj
a2dyb3VuZCI+QjwvZGl2PgorICAgICAgICA8YnIvPgorICAgICAgICA8ZGl2IGlkPSJyZW1vdmFs
IiBjbGFzcz0iYmxhY2stYmFja2dyb3VuZCI+QzwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGRlc2NyaXB0aW9uKCJU
aGlzIHRlc3QgY2hlY2tzIHRoYXQgRE9NIExldmVsIDIgbXV0YXRpb24gZXZlbnQgdHlwZXMgd29y
ayBhbmQgY29uZm9ybSB0byAiICsKKyAgICAgICAgICAgICAgICAgICAgIjxhIGhyZWY9JyIgKyBX
M0NfUkVGRVJFTkNFX1VSTCArICInPiIgKyBXM0NfUkVGRVJFTkNFX1VSTCArICI8L2E+LiIpOwor
ICAgICAgICB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICA8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>42552</attachid>
            <date>2009-11-05 01:22:56 -0800</date>
            <delta_ts>2009-11-05 17:53:06 -0800</delta_ts>
            <desc>Self-contained Layout test</desc>
            <filename>dom-mutation-events-attributes-selfcontained.html</filename>
            <type>text/html</type>
            <size>12386</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c2NyaXB0PgovLyBFeHRyYWN0ZWQgZnJvbSBmaWxlIExheW91dFRlc3Rz
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzCmZ1bmN0aW9uIGRlc2NyaXB0aW9uKG1z
ZykKewogICAgLy8gRm9yIE1TSUUgNiBjb21wYXRpYmlsaXR5CiAgICB2YXIgc3BhbiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHNwYW4uaW5uZXJIVE1MID0gJzxwPicgKyBt
c2cgKyAnPC9wPjxwPk9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiPHNwYW4g
Y2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIjxzcGFuIGNs
YXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPiIuPC9wPic7CiAgICB2YXIgZGVzY3JpcHRp
b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVzY3JpcHRpb24iKTsKICAgIGlmIChkZXNj
cmlwdGlvbi5maXJzdENoaWxkKQogICAgICAgIGRlc2NyaXB0aW9uLnJlcGxhY2VDaGlsZChzcGFu
LCBkZXNjcmlwdGlvbi5maXJzdENoaWxkKTsKICAgIGVsc2UKICAgICAgICBkZXNjcmlwdGlvbi5h
cHBlbmRDaGlsZChzcGFuKTsKfQoKZnVuY3Rpb24gZGVidWcobXNnKQp7CiAgICB2YXIgc3BhbiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBY
SFRNTCBrbm93cyB0aGUgbmFtZXNwYWNlCiAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIg
Lz4nOwp9CgpmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCnsKICAgIHJldHVybiB0ZXh0LnJlcGxh
Y2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOwp9CgpmdW5jdGlvbiB0ZXN0
UGFzc2VkKG1zZykKewogICAgZGVidWcoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9z
cGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKfQoKZnVuY3Rpb24gdGVzdEZh
aWxlZChtc2cpCnsKICAgIGRlYnVnKCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bh
bj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cn0KCmZ1bmN0aW9uIGFyZUFycmF5
c0VxdWFsKF9hLCBfYikKewogICAgaWYgKF9hLmxlbmd0aCAhPT0gX2IubGVuZ3RoKQogICAgICAg
IHJldHVybiBmYWxzZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2EubGVuZ3RoOyBpKyspCiAg
ICAgICAgaWYgKF9hW2ldICE9PSBfYltpXSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
cmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGlzTWludXNaZXJvKG4pCnsKICAgIC8vIHRoZSBvbmx5
IHdheSB0byB0ZWxsIDAgZnJvbSAtMCBpbiBKUyBpcyB0aGUgZmFjdCB0aGF0IDEvLTAgaXMKICAg
IC8vIC1JbmZpbml0eSBpbnN0ZWFkIG9mIEluZmluaXR5CiAgICByZXR1cm4gbiA9PT0gMCAmJiAx
L24gPCAwOwp9CgpmdW5jdGlvbiBpc1Jlc3VsdENvcnJlY3QoX2FjdHVhbCwgX2V4cGVjdGVkKQp7
CiAgICBpZiAoX2V4cGVjdGVkID09PSAwKQogICAgICAgIHJldHVybiBfYWN0dWFsID09PSBfZXhw
ZWN0ZWQgJiYgKDEvX2FjdHVhbCkgPT09ICgxL19leHBlY3RlZCk7CiAgICBpZiAoX2FjdHVhbCA9
PT0gX2V4cGVjdGVkKQogICAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGVvZihfZXhwZWN0
ZWQpID09ICJudW1iZXIiICYmIGlzTmFOKF9leHBlY3RlZCkpCiAgICAgICAgcmV0dXJuIHR5cGVv
ZihfYWN0dWFsKSA9PSAibnVtYmVyIiAmJiBpc05hTihfYWN0dWFsKTsKICAgIGlmIChPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoX2V4cGVjdGVkKSA9PSBPYmplY3QucHJvdG90eXBlLnRv
U3RyaW5nLmNhbGwoW10pKQogICAgICAgIHJldHVybiBhcmVBcnJheXNFcXVhbChfYWN0dWFsLCBf
ZXhwZWN0ZWQpOwogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBzdHJpbmdpZnkodikKewog
ICAgaWYgKHYgPT09IDAgJiYgMS92IDwgMCkKICAgICAgICByZXR1cm4gIi0wIjsKICAgIGVsc2Ug
cmV0dXJuICIiICsgdjsKfQoKZnVuY3Rpb24gZXZhbEFuZExvZyhfYSkKewogIGlmICh0eXBlb2Yg
X2EgIT0gInN0cmluZyIpCiAgICBkZWJ1ZygiV0FSTjogdHJ5QW5kTG9nKCkgZXhwZWN0cyBhIHN0
cmluZyBhcmd1bWVudCIpOwoKICAvLyBMb2cgZmlyc3QgaW4gY2FzZSB0aGluZ3MgZ28gaG9ycmli
bHkgd3Jvbmcgb3IgdGhpcyBjYXVzZXMgYSBzeW5jIGV2ZW50LgogIGRlYnVnKF9hKTsKCiAgdmFy
IF9hdjsKICB0cnkgewogICAgIF9hdiA9IGV2YWwoX2EpOwogIH0gY2F0Y2ggKGUpIHsKICAgIHRl
c3RGYWlsZWQoX2EgKyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZSk7CiAgfQp9CgpmdW5jdGlvbiBz
aG91bGRCZShfYSwgX2IpCnsKICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBf
YiAhPSAic3RyaW5nIikKICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZSgpIGV4cGVjdHMgc3RyaW5n
IGFyZ3VtZW50cyIpOwogIHZhciBleGNlcHRpb247CiAgdmFyIF9hdjsKICB0cnkgewogICAgIF9h
diA9IGV2YWwoX2EpOwogIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwogIH0KICB2
YXIgX2J2ID0gZXZhbChfYik7CgogIGlmIChleGNlcHRpb24pCiAgICB0ZXN0RmFpbGVkKF9hICsg
IiBzaG91bGQgYmUgIiArIF9idiArICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsK
ICBlbHNlIGlmIChpc1Jlc3VsdENvcnJlY3QoX2F2LCBfYnYpKQogICAgdGVzdFBhc3NlZChfYSAr
ICIgaXMgIiArIF9iKTsKICBlbHNlIGlmICh0eXBlb2YoX2F2KSA9PSB0eXBlb2YoX2J2KSkKICAg
IHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsgIi4gV2FzICIgKyBzdHJpbmdp
ZnkoX2F2KSArICIuIik7CiAgZWxzZQogICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIg
KyBfYnYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgX2J2ICsgIikuIFdhcyAiICsgX2F2ICsgIiAo
b2YgdHlwZSAiICsgdHlwZW9mIF9hdiArICIpLiIpOwp9CgpmdW5jdGlvbiBzaG91bGRCZVRydWUo
X2EpIHsgc2hvdWxkQmUoX2EsICJ0cnVlIik7IH0KZnVuY3Rpb24gc2hvdWxkQmVGYWxzZShfYSkg
eyBzaG91bGRCZShfYSwgImZhbHNlIik7IH0KZnVuY3Rpb24gc2hvdWxkQmVOYU4oX2EpIHsgc2hv
dWxkQmUoX2EsICJOYU4iKTsgfQpmdW5jdGlvbiBzaG91bGRCZU51bGwoX2EpIHsgc2hvdWxkQmUo
X2EsICJudWxsIik7IH0KCmZ1bmN0aW9uIHNob3VsZEJlRXF1YWxUb1N0cmluZyhhLCBiKQp7CiAg
dmFyIHVuZXZhbGVkU3RyaW5nID0gJyInICsgYi5yZXBsYWNlKC8iL2csICJcIiIpICsgJyInOwog
IHNob3VsZEJlKGEsIHVuZXZhbGVkU3RyaW5nKTsKfQoKZnVuY3Rpb24gc2hvdWxkRXZhbHVhdGVU
byhhY3R1YWwsIGV4cGVjdGVkKSB7CiAgLy8gQSBnZW5lcmFsLXB1cnBvc2UgY29tcGFyYXRvci4g
ICdhY3R1YWwnIHNob3VsZCBiZSBhIHN0cmluZyB0byBiZQogIC8vIGV2YWx1YXRlZCwgYXMgZm9y
IHNob3VsZEJlKCkuICdleHBlY3RlZCcgbWF5IGJlIGFueSB0eXBlIGFuZCB3aWxsIGJlCiAgLy8g
dXNlZCB3aXRob3V0IGJlaW5nIGV2YWwnZWQuCiAgaWYgKGV4cGVjdGVkID09IG51bGwpIHsKICAg
IC8vIERvIHRoaXMgYmVmb3JlIHRoZSBvYmplY3QgdGVzdCwgc2luY2UgbnVsbCBpcyBvZiB0eXBl
ICdvYmplY3QnLgogICAgc2hvdWxkQmVOdWxsKGFjdHVhbCk7CiAgfSBlbHNlIGlmICh0eXBlb2Yg
ZXhwZWN0ZWQgPT0gInVuZGVmaW5lZCIpIHsKICAgIHNob3VsZEJlVW5kZWZpbmVkKGFjdHVhbCk7
CiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gImZ1bmN0aW9uIikgewogICAgLy8gQWxs
IHRoaXMgZnVzcyBpcyB0byBhdm9pZCB0aGUgc3RyaW5nLWFyZyB3YXJuaW5nIGZyb20gc2hvdWxk
QmUoKS4KICAgIHRyeSB7CiAgICAgIGFjdHVhbFZhbHVlID0gZXZhbChhY3R1YWwpOwogICAgfSBj
YXRjaCAoZSkgewogICAgICB0ZXN0RmFpbGVkKCJFdmFsdWF0aW5nICIgKyBhY3R1YWwgKyAiOiBU
aHJldyBleGNlcHRpb24gIiArIGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBzaG91bGRCZSgi
JyIgKyBhY3R1YWxWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xuL2csICIiKSArICInIiwKICAg
ICAgICAgICAgICInIiArIGV4cGVjdGVkLnRvU3RyaW5nKCkucmVwbGFjZSgvXG4vZywgIiIpICsg
IiciKTsKICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAib2JqZWN0IikgewogICAgc2hv
dWxkQmVUcnVlKGFjdHVhbCArICIgPT0gJyIgKyBleHBlY3RlZCArICInIik7CiAgfSBlbHNlIGlm
ICh0eXBlb2YgZXhwZWN0ZWQgPT0gInN0cmluZyIpIHsKICAgIHNob3VsZEJlKGFjdHVhbCwgZXhw
ZWN0ZWQpOwogIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJib29sZWFuIikgewogICAg
c2hvdWxkQmUoInR5cGVvZiAiICsgYWN0dWFsLCAiJ2Jvb2xlYW4nIik7CiAgICBpZiAoZXhwZWN0
ZWQpCiAgICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwpOwogICAgZWxzZQogICAgICBzaG91bGRCZUZh
bHNlKGFjdHVhbCk7CiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gIm51bWJlciIpIHsK
ICAgIHNob3VsZEJlKGFjdHVhbCwgc3RyaW5naWZ5KGV4cGVjdGVkKSk7CiAgfSBlbHNlIHsKICAg
IGRlYnVnKGV4cGVjdGVkICsgIiBpcyB1bmtub3duIHR5cGUgIiArIHR5cGVvZiBleHBlY3RlZCk7
CiAgICBzaG91bGRCZVRydWUoYWN0dWFsLCAiJyIgICtleHBlY3RlZC50b1N0cmluZygpICsgIici
KTsKICB9Cn0KCmZ1bmN0aW9uIHNob3VsZEJlVW5kZWZpbmVkKF9hKQp7CiAgdmFyIGV4Y2VwdGlv
bjsKICB2YXIgX2F2OwogIHRyeSB7CiAgICAgX2F2ID0gZXZhbChfYSk7CiAgfSBjYXRjaCAoZSkg
ewogICAgIGV4Y2VwdGlvbiA9IGU7CiAgfQoKICBpZiAoZXhjZXB0aW9uKQogICAgdGVzdEZhaWxl
ZChfYSArICIgc2hvdWxkIGJlIHVuZGVmaW5lZC4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRp
b24pOwogIGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCiAgICB0ZXN0UGFzc2Vk
KF9hICsgIiBpcyB1bmRlZmluZWQuIik7CiAgZWxzZQogICAgdGVzdEZhaWxlZChfYSArICIgc2hv
dWxkIGJlIHVuZGVmaW5lZC4gV2FzICIgKyBfYXYpOwp9CgoKZnVuY3Rpb24gc2hvdWxkVGhyb3co
X2EsIF9lKQp7CiAgdmFyIGV4Y2VwdGlvbjsKICB2YXIgX2F2OwogIHRyeSB7CiAgICAgX2F2ID0g
ZXZhbChfYSk7CiAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CiAgfQoKICB2YXIg
X2V2OwogIGlmIChfZSkKICAgICAgX2V2ID0gIGV2YWwoX2UpOwoKICBpZiAoZXhjZXB0aW9uKSB7
CiAgICBpZiAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiIHx8IGV4Y2VwdGlvbiA9PSBfZXYpCiAg
ICAgIHRlc3RQYXNzZWQoX2EgKyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uICsgIi4i
KTsKICAgIGVsc2UKICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93ICIgKyAodHlw
ZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4gVGhyZXcg
ZXhjZXB0aW9uICIgKyBleGNlcHRpb24gKyAiLiIpOwogIH0gZWxzZSBpZiAodHlwZW9mIF9hdiA9
PSAidW5kZWZpbmVkIikKICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5
cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIuIFdhcyB1
bmRlZmluZWQuIik7CiAgZWxzZQogICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93ICIg
KyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4g
V2FzICIgKyBfYXYgKyAiLiIpOwp9CgpmdW5jdGlvbiBnYygpIHsKICAgIGlmICh0eXBlb2YgR0ND
b250cm9sbGVyICE9PSAidW5kZWZpbmVkIikKICAgICAgICBHQ0NvbnRyb2xsZXIuY29sbGVjdCgp
OwogICAgZWxzZSB7CiAgICAgICAgZnVuY3Rpb24gZ2NSZWMobikgewogICAgICAgICAgICBpZiAo
biA8IDEpCiAgICAgICAgICAgICAgICByZXR1cm4ge307CiAgICAgICAgICAgIHZhciB0ZW1wID0g
e2k6ICJhYiIgKyBpICsgKGkgLyAxMDAwMDApfTsKICAgICAgICAgICAgdGVtcCArPSAiZm9vIjsK
ICAgICAgICAgICAgZ2NSZWMobi0xKTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwOyBpKyspCiAgICAgICAgICAgIGdjUmVjKDEwKQogICAgfQp9Cjwvc2NyaXB0Pgo8
L3NjcmlwdD4KPHN0eWxlPgojYWRkaXRpb24sICNtb2RpZmljYXRpb24sICNyZW1vdmFsIHsgd2lk
dGg6IDY0cHg7IGhlaWdodDogNjRweDsgZGlzcGxheTogdGFibGUtY2VsbDsgdGV4dC1hbGlnbjog
Y2VudGVyOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsg
fQojYWRkaXRpb24geyBjb2xvcjogd2hpdGU7IH0KI21vZGlmaWNhdGlvbiB7IGNvbG9yOiB5ZWxs
b3c7IH0KLnJlZC1iYWNrZ3JvdW5kIHsgYmFja2dyb3VuZDogcmVkOyB9Ci55ZWxsb3ctYmFja2dy
b3VuZCB7IGJhY2tncm91bmQ6IHllbGxvdzsgfQouYmx1ZS1iYWNrZ3JvdW5kIHsgYmFja2dyb3Vu
ZDogYmx1ZTsgfQouYmxhY2stYmFja2dyb3VuZCB7IGJhY2tncm91bmQ6IGJsYWNrOyB9CgovKiBF
eHRyYWN0ZWQgZnJvbSBmaWxlIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzICovCi5wYXNzIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiBncmVlbjsgfQou
ZmFpbCB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogcmVkOyB9CiNjb25zb2xlIHsgd2hpdGUt
c3BhY2U6IHByZS13cmFwOyBmb250LWZhbWlseTogbW9ub3NwYWNlOyB9Cjwvc3R5bGU+CjxzY3Jp
cHQ+CiAgICB2YXIgYWRkaXRpb25FbGVtZW50OwogICAgdmFyIG1vZGlmaWNhdGlvbkVsZW1lbnQ7
CiAgICB2YXIgcmVtb3ZhbEVsZW1lbnQ7CiAgICAKICAgIHZhciBXM0NfUkVGRVJFTkNFX1VSTCA9
ICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1FdmVudHMtMjAwMDEx
MTMvZXZlbnRzLmh0bWwjRXZlbnRzLU11dGF0aW9uRXZlbnQiOwogICAgCiAgICB2YXIgRVhQRUNU
RURfQkFDS0dST1VORF9GT1JfQSA9ICJyZWQtYmFja2dyb3VuZCI7CiAgICB2YXIgRVhQRUNURURf
QkFDS0dST1VORF9GT1JfQiA9ICJibHVlLWJhY2tncm91bmQiOwogICAgdmFyIEVYUEVDVEVEX0JB
Q0tHUk9VTkRfRk9SX0MgPSBudWxsOwogICAgCiAgICB2YXIgdGVzdEVsZW1lbnRJZDsKICAgIHZh
ciByZXN1bHRzOwoKICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg
YWRkaXRpb25FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZGl0aW9uIik7CiAg
ICAgICAgbW9kaWZpY2F0aW9uRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb2Rp
ZmljYXRpb24iKTsKICAgICAgICByZW1vdmFsRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyZW1vdmFsIik7CiAgICAgICAgCiAgICAgICAgcnVuVGVzdCgpOwogICAgfQogICAgCiAg
ICBmdW5jdGlvbiBmaXJlQWRkaXRpb25FdmVudCgpCiAgICB7CiAgICAgICAgaWYgKGFkZGl0aW9u
RWxlbWVudCkKICAgICAgICAgICAgYWRkaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgiY2xhc3Mi
LCBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9BKTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZmly
ZU1vZGlmaWNhdGlvbkV2ZW50KCkKICAgIHsKICAgICAgICBpZiAobW9kaWZpY2F0aW9uRWxlbWVu
dCkKICAgICAgICAgICAgbW9kaWZpY2F0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwg
RVhQRUNURURfQkFDS0dST1VORF9GT1JfQik7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGZpcmVS
ZW1vdmFsRXZlbnQoKQogICAgewogICAgICAgIGlmIChyZW1vdmFsRWxlbWVudCkKICAgICAgICAg
ICAgcmVtb3ZhbEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpOwogICAgfQogICAgCiAg
ICBmdW5jdGlvbiBpbnNwZWN0RE9NTXV0YXRpb25FdmVudChlKQogICAgewogICAgICAgIGRlYnVn
KCdhdHRyQ2hhbmdlOiAnICsgZS5hdHRyQ2hhbmdlICsgJywgYXR0ck5hbWU6ICcgKyBlLmF0dHJO
YW1lICsgJywgbmV3VmFsdWU6ICcgKyBlLm5ld1ZhbHVlICsgCiAgICAgICAgICAgICcsIHByZXZW
YWx1ZTogJyArIGUucHJldlZhbHVlICsgIiwgcmVsYXRlZE5vZGU6ICIgKyBlLnJlbGF0ZWROb2Rl
KTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gcmVjb3JkRE9NTXV0YXRpb25FdmVudChlKQogICAg
ewogICAgICAgIGlmICghdGVzdEVsZW1lbnRJZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
IAogICAgICAgIGlmICghcmVzdWx0cykKICAgICAgICAgICAgcmVzdWx0cyA9IG5ldyBBcnJheSgp
OwogICAgICAgIHJlc3VsdHNbdGVzdEVsZW1lbnRJZF0gPSBlOwogICAgICAgIHRlc3RFbGVtZW50
SWQgPSBudWxsOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdHMoKQogICAgewog
ICAgICAgIC8vIENoZWNrIEFkZGl0aW9uIEV2ZW50CiAgICAgICAgZGVidWcoJzxiciAvPkZvciBB
RERJVElPTjo8YnIgLz4nKTsKICAgICAgICBpZiAoIXJlc3VsdHMgfHwgIXJlc3VsdHNbImFkZGl0
aW9uIl0pCiAgICAgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBBRERJVElPTiBtdXRhdGlvbiBldmVu
dCB0eXBlIGRpZCBub3QgZmlyZS4nKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgc2hvdWxk
RXZhbHVhdGVUbygncmVzdWx0c1siYWRkaXRpb24iXS5hdHRyQ2hhbmdlJywgTXV0YXRpb25FdmVu
dC5BRERJVElPTik7CiAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1si
YWRkaXRpb24iXS5hdHRyTmFtZScsICJjbGFzcyIpOwogICAgICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ3Jlc3VsdHNbImFkZGl0aW9uIl0ubmV3VmFsdWUnLCBFWFBFQ1RFRF9CQUNLR1JP
VU5EX0ZPUl9BKTsKICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJh
ZGRpdGlvbiJdLnByZXZWYWx1ZScsICIiKTsKICAgICAgICAgICAgaWYgKCFyZXN1bHRzWyJhZGRp
dGlvbiJdLnJlbGF0ZWROb2RlKQogICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgncmVzdWx0c1si
YWRkaXRpb24iXS5yZWxhdGVkTm9kZSBzaG91bGQgbm90IGhhdmUgYmVlbiBudWxsLCBidXQgaXQg
d2FzIG51bGwuJyk7CiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdHNbImFkZGl0aW9uIl0ucmVs
YXRlZE5vZGUubmFtZSAhPSByZXN1bHRzWyJhZGRpdGlvbiJdLmF0dHJOYW1lKQogICAgICAgICAg
ICAgICAgdGVzdEZhaWxlZCgncmVzdWx0c1siYWRkaXRpb24iXS5yZWxhdGVkTm9kZS5uYW1lIHNo
b3VsZCBiZSBjbGFzcywgaW5zdGVhZCBpdCB3YXMgJyArIHJlc3VsdHNbImFkZGl0aW9uIl0uYXR0
ck5hbWUpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBDaGVjayBNb2RpZmljYXRpb24g
RXZlbnQKICAgICAgICBkZWJ1ZygnPGJyIC8+Rm9yIE1PRElGSUNBVElPTjo8YnIgLz4nKTsKICAg
ICAgICBpZiAoIXJlc3VsdHMgfHwgIXJlc3VsdHNbIm1vZGlmaWNhdGlvbiJdKQogICAgICAgICAg
ICB0ZXN0RmFpbGVkKCdUaGUgTU9ESUZJQ0FUSU9OIG11dGF0aW9uIGV2ZW50IHR5cGUgZGlkIG5v
dCBmaXJlLicpOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdy
ZXN1bHRzWyJtb2RpZmljYXRpb24iXS5hdHRyQ2hhbmdlJywgTXV0YXRpb25FdmVudC5NT0RJRklD
QVRJT04pOwogICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbIm1vZGlm
aWNhdGlvbiJdLmF0dHJOYW1lJywgImNsYXNzIik7CiAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygncmVzdWx0c1sibW9kaWZpY2F0aW9uIl0ubmV3VmFsdWUnLCBFWFBFQ1RFRF9CQUNL
R1JPVU5EX0ZPUl9CKTsKICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRz
WyJtb2RpZmljYXRpb24iXS5wcmV2VmFsdWUnLCAieWVsbG93LWJhY2tncm91bmQiKTsKICAgICAg
ICAgICAgc2hvdWxkRXZhbHVhdGVUbygncmVzdWx0c1sibW9kaWZpY2F0aW9uIl0ucmVsYXRlZE5v
ZGUnLCBtb2RpZmljYXRpb25FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoImNsYXNzIikpOwogICAg
ICAgIH0KICAgICAgICAKICAgICAgICAvLyBDaGVjayBSZW1vdmFsIEV2ZW50CiAgICAgICAgZGVi
dWcoJzxiciAvPkZvciBSRU1PVkFMOjxiciAvPicpOwogICAgICAgIGlmICghcmVzdWx0cyB8fCAh
cmVzdWx0c1sicmVtb3ZhbCJdKQogICAgICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgUkVNT1ZBTCBt
dXRhdGlvbiBldmVudCB0eXBlIGRpZCBub3QgZmlyZS4nKTsKICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgc2hvdWxkRXZhbHVhdGVUbygncmVzdWx0c1sicmVtb3ZhbCJdLmF0dHJDaGFuZ2UnLCBN
dXRhdGlvbkV2ZW50LlJFTU9WQUwpOwogICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J3Jlc3VsdHNbInJlbW92YWwiXS5hdHRyTmFtZScsICJjbGFzcyIpOwogICAgICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbInJlbW92YWwiXS5uZXdWYWx1ZScsICIiKTsKICAg
ICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJyZW1vdmFsIl0ucHJldlZh
bHVlJywgImJsYWNrLWJhY2tncm91bmQiKTsKICAgICAgICAgICAgaWYgKCFyZXN1bHRzWyJyZW1v
dmFsIl0ucmVsYXRlZE5vZGUpCiAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCdyZXN1bHRzWyJy
ZW1vdmFsIl0ucmVsYXRlZE5vZGUgc2hvdWxkIG5vdCBoYXZlIGJlZW4gbnVsbCwgYnV0IGl0IHdh
cy4nKTsKICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0c1sicmVtb3ZhbCJdLnJlbGF0ZWROb2Rl
Lm5hbWUgIT0gcmVzdWx0c1siYWRkaXRpb24iXS5hdHRyTmFtZSkKICAgICAgICAgICAgICAgIHRl
c3RGYWlsZWQoJ3Jlc3VsdHNbInJlbW92YWwiXS5yZWxhdGVkTm9kZS5uYW1lIHNob3VsZCBiZSBj
bGFzcywgaW5zdGVhZCBpdCB3YXMgJyArIHJlc3VsdHNbInJlbW92YWwiXS5hdHRyTmFtZSk7CiAg
ICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBydW5UZXN0KCkKICAgIHsKICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAgICAgCiAgICAgICAgdGVzdEVsZW1lbnRJZCA9ICJh
ZGRpdGlvbiI7CiAgICAgICAgZmlyZUFkZGl0aW9uRXZlbnQoKTsKICAgICAgICB0ZXN0RWxlbWVu
dElkID0gIm1vZGlmaWNhdGlvbiI7CiAgICAgICAgZmlyZU1vZGlmaWNhdGlvbkV2ZW50KCk7CiAg
ICAgICAgdGVzdEVsZW1lbnRJZCA9ICJyZW1vdmFsIjsKICAgICAgICBmaXJlUmVtb3ZhbEV2ZW50
KCk7CiAgICAgICAgY2hlY2tSZXN1bHRzKCk7CiAgICAgICAgCiAgICAgICAgdmFyIHRlc3RDb250
YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdC1jb250YWluZXIiKTsKICAgICAg
ICBpZiAodGVzdENvbnRhaW5lcikKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGls
ZCh0ZXN0Q29udGFpbmVyKTsKICAgICAgICBkZWJ1ZygnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3Mi
PlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7CiAgICB9CiAgICAKICAgIGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIoIkRPTUF0dHJNb2RpZmllZCIsIHJlY29yZERPTU11dGF0aW9uRXZlbnQsIGZhbHNl
KTsKPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+CiAgICA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
ICAgIDxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGlkPSJhZGRpdGlvbiI+
QTwvZGl2PgogICAgICAgIDxici8+CiAgICAgICAgPGRpdiBpZD0ibW9kaWZpY2F0aW9uIiBjbGFz
cz0ieWVsbG93LWJhY2tncm91bmQiPkI8L2Rpdj4KICAgICAgICA8YnIvPgogICAgICAgIDxkaXYg
aWQ9InJlbW92YWwiIGNsYXNzPSJibGFjay1iYWNrZ3JvdW5kIj5DPC9kaXY+CiAgICA8L2Rpdj4K
ICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgICBkZXNjcmlw
dGlvbigiVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IERPTSBMZXZlbCAyIG11dGF0aW9uIGV2ZW50IHR5
cGVzIHdvcmsgYW5kIGNvbmZvcm0gdG8gIiArCiAgICAgICAgICAgICAgICAgICAgIjxhIGhyZWY9
JyIgKyBXM0NfUkVGRVJFTkNFX1VSTCArICInPiIgKyBXM0NfUkVGRVJFTkNFX1VSTCArICI8L2E+
LiIpOwogICAgICAgIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogICAgPC9zY3JpcHQ+
CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42614</attachid>
            <date>2009-11-05 17:53:06 -0800</date>
            <delta_ts>2009-11-05 17:59:27 -0800</delta_ts>
            <desc>Patch with test cases</desc>
            <filename>Bug8191_2.patch</filename>
            <type>text/plain</type>
            <size>22977</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDU4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMTEtMDUgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTkxCisgICAgICAgIEFuZAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzAwNzgwMD4KKworICAgICAgICBJbXBsZW1lbnRzIHN1
cHBvcnQgZm9yIHRoZSBET00gTGV2ZWwgMiBET01BdHRyTW9kaWZpZWQgbXV0YXRpb24gZXZlbnQg
dHlwZSwKKyAgICAgICAgPGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0y
LUV2ZW50cy0yMDAwMTExMy9ldmVudHMuaHRtbCNFdmVudHMtTXV0YXRpb25FdmVudD4uCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvZXZlbnRzL2ZpcmUtRE9NQXR0ck1vZGlmaWVkLU1PRElGSUNBVElP
Ti13aGVuLWhhbmRsaW5nLU1PRElGSUNBVElPTi1uby1pbmZpbml0ZS1sb29wLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3QvZXZlbnRzL2ZpcmUtRE9NQXR0ck1vZGlmaWVkLWV2ZW50cy5odG1sCisK
KyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KTogTW9kaWZp
ZWQgdG8gY2FsbCAKKyAgICAgICAgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyTW9kaWZpY2F0aW9uRXZl
bnQuCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6c2V0QXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpkaXNw
YXRjaEF0dHJNb2RpZmljYXRpb25FdmVudCk6IEFkZGVkIHRvIHN1cHBvcnQgTU9ESUZJQ0FUSU9O
IGV2ZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoQXR0clJlbW92YWxF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2
ZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorCiAyMDA5LTExLTA1ICBDaHJpcyBKZXJk
b25layAgPGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5jcHAJKHJldmlzaW9uIDUwNTMzKQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTUgQEAKICNpbmNsdWRl
ICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkKICAgICA6IG1fbm9kZSgwKQogICAgICwgbV92
YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQoMCkKQEAgLTUyMSw2ICs1MjQsMTAgQEAgYm9vbCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKKyAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwcmV2aW91cyB2YWx1ZSBv
ZiB0aGlzIDxzdHlsZT4gZWxlbWVudCBzbyB0aGF0IHdlIGNhbiBkaXNwYXRjaAorICAgIC8vIGEg
RE9NQXR0ck1vZGlmaWVkIGV2ZW50IChiZWxvdykuCisgICAgU3RyaW5nIHByZXZpb3VzQ1NTdGV4
dCA9IChtX25vZGUgJiYgbV9ub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSk/IGNzc1RleHQoKSA6IFN0
cmluZygpOyAKKwogICAgIC8vIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHByb3BlcnR5IHZh
bHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAg
IC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBwb3NpdGlvbiwgYW5kIE1TSUUgbW92ZXMgdGhlIHBy
b3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCiAgICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQ
YXJzaW5nKCkpOwpAQCAtNTMxLDYgKzUzOCwxMSBAQCBib29sIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpzZXRQcm9wCiAgICAgfSBlbHNlIGlmIChub3RpZnlDaGFuZ2VkKQogICAgICAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKKyAgICBpZiAobV9ub2RlICYmIG1fbm9kZS0+aXNTdHls
ZWRFbGVtZW50KCkpIHsKKyAgICAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0ciA9IEF0dHJpYnV0
ZTo6Y3JlYXRlKHN0eWxlQXR0ciwgY3NzVGV4dCgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KG1fbm9kZSktPmRpc3BhdGNoQXR0ck1vZGlmaWNhdGlvbkV2ZW50KGF0dHIu
Z2V0KCksIHByZXZpb3VzQ1NTdGV4dCk7CisgICAgfQorCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9
CiAgICAgCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNTA1MzMpCisrKyBXZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE0IEBACiAjaW5jbHVkZSAiQ2xp
ZW50UmVjdExpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRS
YXJlRGF0YS5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJO
YW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5k
ZXJTdHlsZS5oIgpAQCAtNTMyLDggKzUzNCwxMCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTCiAgICAgZWxzZSBpZiAoIW9sZCAmJiAhdmFsdWUuaXNOdWxsKCkpCiAg
ICAgICAgIG5hbWVkQXR0ck1hcC0+YWRkQXR0cmlidXRlKGNyZWF0ZUF0dHJpYnV0ZShRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG51bGxBdG9tKSwgdmFsdWUpKTsKICAgICBlbHNl
IGlmIChvbGQgJiYgIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgIFN0cmluZyBwcmV2aW91c1Zh
bHVlID0gb2xkLT52YWx1ZSgpLnN0cmluZygpOwogICAgICAgICBvbGQtPnNldFZhbHVlKHZhbHVl
KTsKICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChvbGQpOworICAgICAgICBkaXNwYXRjaEF0dHJN
b2RpZmljYXRpb25FdmVudChvbGQsIHByZXZpb3VzVmFsdWUpOwogICAgIH0KIH0KIApAQCAtNTUy
LDggKzU1NiwxMCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpCiAg
ICAgZWxzZSBpZiAoIW9sZCAmJiAhdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIG5hbWVkQXR0ck1h
cC0+YWRkQXR0cmlidXRlKGNyZWF0ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpOwogICAgIGVsc2Ug
aWYgKG9sZCkgeworICAgICAgICBTdHJpbmcgcHJldmlvdXNWYWx1ZSA9IG9sZC0+dmFsdWUoKS5z
dHJpbmcoKTsKICAgICAgICAgb2xkLT5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGF0dHJpYnV0
ZUNoYW5nZWQob2xkKTsKKyAgICAgICAgZGlzcGF0Y2hBdHRyTW9kaWZpY2F0aW9uRXZlbnQob2xk
LCBwcmV2aW91c1ZhbHVlKTsKICAgICB9CiB9CiAKQEAgLTk5MCwyOCArOTk2LDQwIEBAIHZvaWQg
RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKICAgICBjaGVja0ZvclNpYmxpbmdTdHls
ZUNoYW5nZXModGhpcywgcmVuZGVyU3R5bGUoKSwgdHJ1ZSwgbGFzdENoaWxkKCksIDAsIDApOwog
fQogCi12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoQXR0clJlbW92YWxFdmVudChBdHRyaWJ1dGUqKQor
dm9pZCBFbGVtZW50OjpkaXNwYXRjaEF0dHJNb2RpZmljYXRpb25FdmVudChBdHRyaWJ1dGUqIGF0
dHIsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWYWx1ZSkKIHsKICAgICBBU1NFUlQoIWV2ZW50RGlz
cGF0Y2hGb3JiaWRkZW4oKSk7Ci0jaWYgMAorCiAgICAgaWYgKCFkb2N1bWVudCgpLT5oYXNMaXN0
ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUFUVFJNT0RJRklFRF9MSVNURU5FUikpCiAgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghcHJldmlvdXNWYWx1ZS5pc0VtcHR5KCkgJiYgYXR0ci0+dmFsdWUo
KSA9PSBwcmV2aW91c1ZhbHVlKQorICAgICAgICByZXR1cm47IC8vIFRvIHByZXZlbnQgZW50ZXJp
bmcgYW4gaW5maW5pdGUgbG9vcC4KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNw
YXRjaEV2ZW50KG5ldyBNdXRhdGlvbkV2ZW50KERPTUF0dHJNb2RpZmllZEV2ZW50LCB0cnVlLCBm
YWxzZSwgYXR0ciwgYXR0ci0+dmFsdWUoKSwKLSAgICAgICAgYXR0ci0+dmFsdWUoKSwgZG9jdW1l
bnQoKS0+YXR0ck5hbWUoYXR0ci0+aWQoKSksIE11dGF0aW9uRXZlbnQ6OlJFTU9WQUwpLCBlYyk7
Ci0jZW5kaWYKKyAgICBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuRE9NQXR0ck1vZGlmaWVkRXZlbnQsIHRydWUsIGF0dHItPmNyZWF0ZUF0dHJJZk5lZWRl
ZCh0aGlzKSwgCisgICAgICAgICBwcmV2aW91c1ZhbHVlLCBhdHRyLT52YWx1ZSgpLCBhdHRyLT5u
YW1lKCkudG9TdHJpbmcoKSwgTXV0YXRpb25FdmVudDo6TU9ESUZJQ0FUSU9OKSwgZWMpOwogfQog
Ci12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoQXR0ckFkZGl0aW9uRXZlbnQoQXR0cmlidXRlKikKK3Zv
aWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyUmVtb3ZhbEV2ZW50KEF0dHJpYnV0ZSogYXR0cikKIHsK
ICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0jaWYgMAorCiAgICAgaWYg
KCFkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUFUVFJNT0RJRklFRF9M
SVNURU5FUikpCiAgICAgICAgIHJldHVybjsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBkaXNwYXRjaEV2ZW50KG5ldyBNdXRhdGlvbkV2ZW50KERPTUF0dHJNb2RpZmllZEV2ZW50LCB0
cnVlLCBmYWxzZSwgYXR0ciwgYXR0ci0+dmFsdWUoKSwKLSAgICAgICAgYXR0ci0+dmFsdWUoKSwg
ZG9jdW1lbnQoKS0+YXR0ck5hbWUoYXR0ci0+aWQoKSksIE11dGF0aW9uRXZlbnQ6OkFERElUSU9O
KSwgZWMpOwotI2VuZGlmCisgICAgZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLkRPTUF0dHJNb2RpZmllZEV2ZW50LCB0cnVlLCBhdHRyLT5jcmVhdGVBdHRy
SWZOZWVkZWQodGhpcyksIAorICAgICAgICBhdHRyLT52YWx1ZSgpLCBTdHJpbmcoKSwgYXR0ci0+
bmFtZSgpLnRvU3RyaW5nKCksIE11dGF0aW9uRXZlbnQ6OlJFTU9WQUwpLCBlYyk7Cit9CisKK3Zv
aWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyQWRkaXRpb25FdmVudChBdHRyaWJ1dGUqIGF0dHIpCit7
CisgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOworCisgICAgaWYgKCFkb2N1
bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUFUVFJNT0RJRklFRF9MSVNURU5F
UikpCisgICAgICAgIHJldHVybjsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBkaXNw
YXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQXR0ck1vZGlm
aWVkRXZlbnQsIHRydWUsIGF0dHItPmNyZWF0ZUF0dHJJZk5lZWRlZCh0aGlzKSwgCisgICAgICAg
IFN0cmluZygpLCBhdHRyLT52YWx1ZSgpLCBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKSwgTXV0YXRp
b25FdmVudDo6QURESVRJT04pLCBlYyk7CiB9CiAKIFN0cmluZyBFbGVtZW50OjpvcGVuVGFnU3Rh
cnRUb1N0cmluZygpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA1MDUzMykKKysrIFdlYkNvcmUv
ZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nyw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoKTsKIAorICAgIHZvaWQg
ZGlzcGF0Y2hBdHRyTW9kaWZpY2F0aW9uRXZlbnQoQXR0cmlidXRlKiwgY29uc3QgU3RyaW5nJiBw
cmV2aW91c1ZhbHVlKTsKICAgICB2b2lkIGRpc3BhdGNoQXR0clJlbW92YWxFdmVudChBdHRyaWJ1
dGUqKTsKICAgICB2b2lkIGRpc3BhdGNoQXR0ckFkZGl0aW9uRXZlbnQoQXR0cmlidXRlKik7CiAK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUwNTg0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMTEtMDUgIERhbmllbCBCYXRlcyAgPGRi
YXRlc0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTkxCisg
ICAgICAgIEFuZAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzAwNzgwMD4KKworICAgICAgICBU
ZXN0cyB0aGF0IHRoZSBET00gTGV2ZWwgMiBET01BdHRyTW9kaWZpZWQgbXV0YXRpb24gZXZlbnQg
d29ya3MgYW5kIGNvbmZvcm0gdG8gdGhlIFczQyBzcGVjLiwKKyAgICAgICAgPGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUV2ZW50cy0yMDAwMTExMy9ldmVudHMuaHRt
bCNFdmVudHMtTXV0YXRpb25FdmVudD4uCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9maXJlLURP
TUF0dHJNb2RpZmllZC1NT0RJRklDQVRJT04td2hlbi1oYW5kbGluZy1NT0RJRklDQVRJT04tbm8t
aW5maW5pdGUtbG9vcC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRz
L2ZpcmUtRE9NQXR0ck1vZGlmaWVkLU1PRElGSUNBVElPTi13aGVuLWhhbmRsaW5nLU1PRElGSUNB
VElPTi1uby1pbmZpbml0ZS1sb29wLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRz
L2ZpcmUtRE9NQXR0ck1vZGlmaWVkLWV2ZW50cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL2ZpcmUtRE9NQXR0ck1vZGlmaWVkLWV2ZW50cy5odG1sOiBBZGRlZC4K
KwogMjAwOS0xMS0wNSAgQWxpY2UgTGl1ICA8YWxpY2UubGl1QGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGRpbmcgYSByZXNvdXJjZSB0aGF0IHNlZW1zIHRvIGJlIG1pc3NpbmcuICBXaXRob3V0IGl0
LCBzZXZlcmFsIHRlc3RzIGluCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9maXJlLURP
TUF0dHJNb2RpZmllZC1NT0RJRklDQVRJT04td2hlbi1oYW5kbGluZy1NT0RJRklDQVRJT04tbm8t
aW5maW5pdGUtbG9vcC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvZmlyZS1ET01BdHRyTW9kaWZpZWQtTU9ESUZJQ0FUSU9OLXdoZW4taGFuZGxpbmct
TU9ESUZJQ0FUSU9OLW5vLWluZmluaXRlLWxvb3AtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZmlyZS1ET01BdHRyTW9kaWZpZWQtTU9ESUZJQ0FU
SU9OLXdoZW4taGFuZGxpbmctTU9ESUZJQ0FUSU9OLW5vLWluZmluaXRlLWxvb3AtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACitUaGlzIHRlc3QgY2hlY2tzIHRoYXQg
Y2hhbmdpbmcgYSBDU1MgcHJvcGVydHkgKE1PRElGSUNBVElPTikgd2hlbiBoYW5kbGluZyBhbiBh
bHJlYWR5IGRpc3BhdGNoZWQgRE9NIExldmVsIDIgIkRPTUF0dHJNb2RpZmllZCIgTU9ESUZJQ0FU
SU9OIG11dGF0aW9uIGV2ZW50IGRvZXMgbm90IHJlc3VsdCBpbiBhbiBpbmZpbml0ZSBsb29wLgor
CitXaGVuIHRoaXMgdGVzdCBpcyBydW4gaXQgd2lsbCBwcmludCB0aGUgdG90YWwgbnVtYmVyIG9m
IGNhdWdodCBET01BdHRyTW9kaWZpZWQgZXZlbnRzLgorCitUaGlzIHRlc3QgaGFzIFBBU1NFRCBp
ZiBib3RoIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CisKK1lvdSBzZWUgdGhlIGZvbGxvd2lu
ZyBvdXRwdXQ6CisgICAgICAgICAgICAgICAgQ2F1Z2h0IGEgdG90YWwgb2YgMSBtdXRhdGlvbiBl
dmVudC4KKyAgICAgICAgICAgICAgICBDYXVnaHQgYSB0b3RhbCBvZiAyIG11dGF0aW9uIGV2ZW50
cy4KKyAgICAgICAgICAgIAorVGhlcmUgYXJlIG5vIEZBSUwgbWVzc2FnZXMuCisKK0NhdWdodCBh
IHRvdGFsIG9mIDEgbXV0YXRpb24gZXZlbnQuCitDYXVnaHQgYSB0b3RhbCBvZiAyIG11dGF0aW9u
IGV2ZW50cy4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZmlyZS1ET01BdHRyTW9k
aWZpZWQtTU9ESUZJQ0FUSU9OLXdoZW4taGFuZGxpbmctTU9ESUZJQ0FUSU9OLW5vLWluZmluaXRl
LWxvb3AuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9maXJlLURP
TUF0dHJNb2RpZmllZC1NT0RJRklDQVRJT04td2hlbi1oYW5kbGluZy1NT0RJRklDQVRJT04tbm8t
aW5maW5pdGUtbG9vcC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvZmlyZS1ET01BdHRyTW9kaWZpZWQtTU9ESUZJQ0FUSU9OLXdoZW4taGFuZGxpbmctTU9ESUZJ
Q0FUSU9OLW5vLWluZmluaXRlLWxvb3AuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBA
QAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlPgorI21vZGlmaWNhdGlvbi1zdHlsZSB7
IHdpZHRoOiA2NHB4OyBoZWlnaHQ6IDY0cHg7IGRpc3BsYXk6IHRhYmxlLWNlbGw7IHRleHQtYWxp
Z246IGNlbnRlcjsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgYm9yZGVyOiAxcHggc29saWQgYmxh
Y2s7IGNvbG9yOiB3aGl0ZTsgfQorPC9zdHlsZT4KKzxzY3JpcHQ+CisgICAgdmFyIG1vZGlmaWNh
dGlvbk9mU3R5bGVFbGVtZW50OworICAgIAorICAgIHZhciBCQUNLR1JPVU5EXzEgPSAicmVkIjsK
KyAgICB2YXIgQkFDS0dST1VORF8yID0gImJsdWUiOworICAgIAorICAgIHZhciBudW1NdXRhdGlv
bkV2ZW50c0ZpcmVkID0gMDsKKworICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBtb2RpZmljYXRpb25PZlN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJtb2RpZmljYXRpb24tc3R5bGUiKTsKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0K
KyAgICAKKyAgICBmdW5jdGlvbiBpbnNwZWN0RE9NTXV0YXRpb25FdmVudChlKQorICAgIHsKKyAg
ICAgICAgZGVidWcoJ2F0dHJDaGFuZ2U6ICcgKyBlLmF0dHJDaGFuZ2UgKyAnLCBhdHRyTmFtZTog
JyArIGUuYXR0ck5hbWUgKyAnLCBuZXdWYWx1ZTogJyArIGUubmV3VmFsdWUgKyAKKyAgICAgICAg
ICAgICcsIHByZXZWYWx1ZTogJyArIGUucHJldlZhbHVlICsgIiwgcmVsYXRlZE5vZGU6ICIgKyBl
LnJlbGF0ZWROb2RlKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gZmlyZUFub3RoZXJNdXRh
dGlvbkV2ZW50QW5kQ2hlY2tGb3JGYWlsdXJlKGUpCisgICAgeworICAgICAgICArK251bU11dGF0
aW9uRXZlbnRzRmlyZWQ7CisgICAgICAgIGRlYnVnKCdDYXVnaHQgYSB0b3RhbCBvZiAnICsgbnVt
TXV0YXRpb25FdmVudHNGaXJlZCArICcgbXV0YXRpb24gJyArICgobnVtTXV0YXRpb25FdmVudHNG
aXJlZCA+IDEpPyAnZXZlbnRzLicgOiAnZXZlbnQuJykpOworICAgICAgICBpZiAobnVtTXV0YXRp
b25FdmVudHNGaXJlZCA+IDIpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCdzaG91bGQgaGF2ZSBv
bmx5IGZpcmVkIDIgbXV0YXRpb24gZXZlbnRzLCBpbnN0ZWFkIGZpcmVkICcgKyBudW1NdXRhdGlv
bkV2ZW50c0ZpcmVkICsgJy4nKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW9kaWZpY2F0
aW9uT2ZTdHlsZUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9IEJBQ0tHUk9VTkRfMjsgLy8gRmly
ZSB0aGUgc2Vjb25kL3RoaXJkIG11dGF0aW9uIGV2ZW50LgorICAgIH0KKyAgICAKKyAgICBmdW5j
dGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAobW9kaWZpY2F0aW9uT2ZTdHlsZUVsZW1lbnQpCisgICAgICAg
ICAgICBtb2RpZmljYXRpb25PZlN0eWxlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gQkFDS0dS
T1VORF8xOyAvLyBGaXJlIHRoZSBmaXJzdCBtdXRhdGlvbiBldmVudC4KKyAgICAgICAKKyAgICAg
ICAgdmFyIHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdC1jb250
YWluZXIiKTsKKyAgICAgICAgaWYgKHRlc3RDb250YWluZXIpCisgICAgICAgICAgICBkb2N1bWVu
dC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RDb250YWluZXIpOworICAgIH0KKyAgICAKKyAgICBkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01BdHRyTW9kaWZpZWQiLCBmaXJlQW5vdGhlck11dGF0
aW9uRXZlbnRBbmRDaGVja0ZvckZhaWx1cmUsIGZhbHNlKTsKKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3QgY2hlY2tzIHRoYXQgY2hh
bmdpbmcgYSBDU1MgcHJvcGVydHkgKE1PRElGSUNBVElPTikgd2hlbiBoYW5kbGluZyBhbiBhbHJl
YWR5IGRpc3BhdGNoZWQgRE9NIExldmVsIDIgJnF1b3Q7RE9NQXR0ck1vZGlmaWVkJnF1b3Q7IE1P
RElGSUNBVElPTiBtdXRhdGlvbiBldmVudCBkb2VzIG5vdCByZXN1bHQgaW4gYW4gaW5maW5pdGUg
bG9vcC48L3A+CisgICAgPHA+V2hlbiB0aGlzIHRlc3QgaXMgcnVuIGl0IHdpbGwgcHJpbnQgdGhl
IHRvdGFsIG51bWJlciBvZiBjYXVnaHQgRE9NQXR0ck1vZGlmaWVkIGV2ZW50cy48L3A+CisgICAg
PHA+VGhpcyB0ZXN0IGhhcyA8c3BhbiBjbGFzcz0icGFzcyI+UEFTU0VEPC9zcGFuPiBpZiBib3Ro
IG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6PC9wPgorICAgIDxvbD4KKyAgICAgICAgPGxpPllv
dSBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQ6CisgICAgICAgICAgICA8cHJlPgorICAgICAgICAg
ICAgICAgIENhdWdodCBhIHRvdGFsIG9mIDEgbXV0YXRpb24gZXZlbnQuCisgICAgICAgICAgICAg
ICAgQ2F1Z2h0IGEgdG90YWwgb2YgMiBtdXRhdGlvbiBldmVudHMuCisgICAgICAgICAgICA8L3By
ZT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPlRoZXJlIGFyZSBubyA8c3BhbiBjbGFzcz0i
ZmFpbCI+RkFJTDwvc3Bhbj4gbWVzc2FnZXMuPC9saT4KKyAgICA8L29sPgorICAgIDxkaXYgaWQ9
InRlc3QtY29udGFpbmVyIj4KKyAgICAgICAgPGRpdiBpZD0ibW9kaWZpY2F0aW9uLXN0eWxlIj5B
PC9kaXY+CisgICAgPC9kaXY+CisgICAgPGhyLz4KKyAgICA8YnIvPgorICAgIDxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorICAgIDxzY3JpcHQ+CisgICAgICAgIHZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvZmlyZS1ET01BdHRyTW9kaWZpZWQtZXZlbnRzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9maXJlLURPTUF0dHJNb2Rp
ZmllZC1ldmVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvZmlyZS1ET01BdHRyTW9kaWZpZWQtZXZlbnRzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzOCBAQAorVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBET00gTGV2
ZWwgMiAiRE9NQXR0ck1vZGlmaWVkIiBtdXRhdGlvbiBldmVudCB0eXBlIHdvcmtzIGFuZCBjb25m
b3JtIHRvIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUV2ZW50cy0y
MDAwMTExMy9ldmVudHMuaHRtbCNFdmVudHMtTXV0YXRpb25FdmVudC4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKKworQ2F1Z2h0IEFERElUSU9OOgorCitQQVNTIHJlc3VsdHNbImFk
ZGl0aW9uIl0uYXR0ckNoYW5nZSBpcyAyCitQQVNTIHJlc3VsdHNbImFkZGl0aW9uIl0uYXR0ck5h
bWUgaXMgImNsYXNzIgorUEFTUyByZXN1bHRzWyJhZGRpdGlvbiJdLm5ld1ZhbHVlIGlzICJyZWQt
YmFja2dyb3VuZCIKK1BBU1MgcmVzdWx0c1siYWRkaXRpb24iXS5wcmV2VmFsdWUgaXMgIiIKKwor
Q2F1Z2h0IE1PRElGSUNBVElPTjoKKworUEFTUyByZXN1bHRzWyJtb2RpZmljYXRpb24iXS5hdHRy
Q2hhbmdlIGlzIDEKK1BBU1MgcmVzdWx0c1sibW9kaWZpY2F0aW9uIl0uYXR0ck5hbWUgaXMgImNs
YXNzIgorUEFTUyByZXN1bHRzWyJtb2RpZmljYXRpb24iXS5uZXdWYWx1ZSBpcyAiYmx1ZS1iYWNr
Z3JvdW5kIgorUEFTUyByZXN1bHRzWyJtb2RpZmljYXRpb24iXS5wcmV2VmFsdWUgaXMgInllbGxv
dy1iYWNrZ3JvdW5kIgorUEFTUyByZXN1bHRzWyJtb2RpZmljYXRpb24iXS5yZWxhdGVkTm9kZSA9
PSAnW29iamVjdCBBdHRyXScgaXMgdHJ1ZQorCitDYXVnaHQgTU9ESUZJQ0FUSU9OIChvZiBDU1Mg
cHJvcGVydHkpOgorCitQQVNTIHJlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdLmF0dHJDaGFu
Z2UgaXMgMQorUEFTUyByZXN1bHRzWyJtb2RpZmljYXRpb24tc3R5bGUiXS5hdHRyTmFtZSBpcyAi
c3R5bGUiCitQQVNTIHJlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdLm5ld1ZhbHVlIGNvbnRh
aW5lZCBwcm9wZXJ0eSAiYmFja2dyb3VuZC1jb2xvcjogcHVycGxlIi4KK1BBU1MgcmVzdWx0c1si
bW9kaWZpY2F0aW9uLXN0eWxlIl0ucHJldlZhbHVlIGlzICIiCitQQVNTIHJlc3VsdHNbIm1vZGlm
aWNhdGlvbi1zdHlsZSJdLnJlbGF0ZWROb2RlIGluc3RhbmNlb2YgQXR0ciBpcyB0cnVlCisKK0Nh
dWdodCBSRU1PVkFMOgorCitQQVNTIHJlc3VsdHNbInJlbW92YWwiXS5hdHRyQ2hhbmdlIGlzIDMK
K1BBU1MgcmVzdWx0c1sicmVtb3ZhbCJdLmF0dHJOYW1lIGlzICJjbGFzcyIKK1BBU1MgcmVzdWx0
c1sicmVtb3ZhbCJdLm5ld1ZhbHVlIGlzICIiCitQQVNTIHJlc3VsdHNbInJlbW92YWwiXS5wcmV2
VmFsdWUgaXMgImJsYWNrLWJhY2tncm91bmQiCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvZmlyZS1ET01BdHRyTW9kaWZpZWQtZXZlbnRzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZmlyZS1ET01BdHRyTW9kaWZpZWQt
ZXZlbnRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9maXJl
LURPTUF0dHJNb2RpZmllZC1ldmVudHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODgg
QEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKyNhZGRpdGlvbiwgI21vZGlmaWNh
dGlvbiwgI3JlbW92YWwsICNtb2RpZmljYXRpb24tc3R5bGUgeyB3aWR0aDogNjRweDsgaGVpZ2h0
OiA2NHB4OyBkaXNwbGF5OiB0YWJsZS1jZWxsOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2Fs
LWFsaWduOiBtaWRkbGU7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyB9CisjYWRkaXRpb24geyBj
b2xvcjogd2hpdGU7IH0KKyNtb2RpZmljYXRpb24geyBjb2xvcjogeWVsbG93OyB9CisucmVkLWJh
Y2tncm91bmQgeyBiYWNrZ3JvdW5kOiByZWQ7IH0KKy55ZWxsb3ctYmFja2dyb3VuZCB7IGJhY2tn
cm91bmQ6IHllbGxvdzsgfQorLmJsdWUtYmFja2dyb3VuZCB7IGJhY2tncm91bmQ6IGJsdWU7IH0K
Ky5ibGFjay1iYWNrZ3JvdW5kIHsgYmFja2dyb3VuZDogYmxhY2s7IH0KKzwvc3R5bGU+Cis8c2Ny
aXB0PgorICAgIHZhciBhZGRpdGlvbkVsZW1lbnQ7CisgICAgdmFyIG1vZGlmaWNhdGlvbkVsZW1l
bnQ7CisgICAgdmFyIG1vZGlmaWNhdGlvbk9mU3R5bGVFbGVtZW50OworICAgIHZhciByZW1vdmFs
RWxlbWVudDsKKyAgICAKKyAgICB2YXIgVzNDX1JFRkVSRU5DRV9VUkwgPSAiaHR0cDovL3d3dy53
My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItRXZlbnRzLTIwMDAxMTEzL2V2ZW50cy5odG1s
I0V2ZW50cy1NdXRhdGlvbkV2ZW50IjsKKyAgICAKKyAgICB2YXIgRVhQRUNURURfQkFDS0dST1VO
RF9GT1JfQSA9ICJyZWQtYmFja2dyb3VuZCI7CisgICAgdmFyIEVYUEVDVEVEX0JBQ0tHUk9VTkRf
Rk9SX0IgPSAiYmx1ZS1iYWNrZ3JvdW5kIjsKKyAgICB2YXIgRVhQRUNURURfQkFDS0dST1VORF9G
T1JfQyA9IG51bGw7CisgICAgdmFyIEVYUEVDVEVEX0JBQ0tHUk9VTkRfRk9SX0QgPSAicHVycGxl
IjsKKyAgICB2YXIgRVhQRUNURURfQ1NTX1BST1BFUlRZX0ZPUl9EXzEgPSAiYmFja2dyb3VuZDog
IiArIEVYUEVDVEVEX0JBQ0tHUk9VTkRfRk9SX0Q7IC8vIEZpcmVmb3ggcmV0dXJucyB0aGlzLgor
ICAgIHZhciBFWFBFQ1RFRF9DU1NfUFJPUEVSVFlfRk9SX0RfMiA9ICJiYWNrZ3JvdW5kLWNvbG9y
OiAiICsgRVhQRUNURURfQkFDS0dST1VORF9GT1JfRDsgLy8gV2ViS2l0IHJldHVybnMgdGhpcy4K
KyAgICAKKyAgICB2YXIgdGVzdEVsZW1lbnRJZDsKKyAgICB2YXIgcmVzdWx0czsKKworICAgIHdp
bmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICBhZGRpdGlvbkVsZW1lbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRkaXRpb24iKTsKKyAgICAgICAgbW9kaWZpY2F0
aW9uRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb2RpZmljYXRpb24iKTsKKyAg
ICAgICAgcmVtb3ZhbEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVtb3ZhbCIp
OworICAgICAgICBtb2RpZmljYXRpb25PZlN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJtb2RpZmljYXRpb24tc3R5bGUiKTsKKyAgICAgICAgCisgICAgICAgIHJ1blRlc3Qo
KTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gZmlyZUFkZGl0aW9uRXZlbnQoKQorICAgIHsK
KyAgICAgICAgaWYgKGFkZGl0aW9uRWxlbWVudCkKKyAgICAgICAgICAgIGFkZGl0aW9uRWxlbWVu
dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgRVhQRUNURURfQkFDS0dST1VORF9GT1JfQSk7CisgICAg
fQorICAgIAorICAgIGZ1bmN0aW9uIGZpcmVNb2RpZmljYXRpb25FdmVudCgpCisgICAgeworICAg
ICAgICBpZiAobW9kaWZpY2F0aW9uRWxlbWVudCkKKyAgICAgICAgICAgIG1vZGlmaWNhdGlvbkVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIEVYUEVDVEVEX0JBQ0tHUk9VTkRfRk9SX0IpOwor
ICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBmaXJlUmVtb3ZhbEV2ZW50KCkKKyAgICB7CisgICAg
ICAgIGlmIChyZW1vdmFsRWxlbWVudCkKKyAgICAgICAgICAgIHJlbW92YWxFbGVtZW50LnJlbW92
ZUF0dHJpYnV0ZSgiY2xhc3MiKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gZmlyZU1vZGlm
aWNhdGlvbk9mU3R5bGVQcm9wZXJ0eUV2ZW50KCkKKyAgICB7CisgICAgICAgIGlmIChtb2RpZmlj
YXRpb25PZlN0eWxlRWxlbWVudCkKKyAgICAgICAgICAgIG1vZGlmaWNhdGlvbk9mU3R5bGVFbGVt
ZW50LnN0eWxlLmJhY2tncm91bmQgPSBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9EOworICAgIH0K
KyAgICAKKyAgICBmdW5jdGlvbiBpbnNwZWN0RE9NTXV0YXRpb25FdmVudChlKQorICAgIHsKKyAg
ICAgICAgZGVidWcoJ2F0dHJDaGFuZ2U6ICcgKyBlLmF0dHJDaGFuZ2UgKyAnLCBhdHRyTmFtZTog
JyArIGUuYXR0ck5hbWUgKyAnLCBuZXdWYWx1ZTogJyArIGUubmV3VmFsdWUgKyAKKyAgICAgICAg
ICAgICcsIHByZXZWYWx1ZTogJyArIGUucHJldlZhbHVlICsgIiwgcmVsYXRlZE5vZGU6ICIgKyBl
LnJlbGF0ZWROb2RlKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcmVjb3JkRE9NTXV0YXRp
b25FdmVudChlKQorICAgIHsKKyAgICAgICAgaWYgKCF0ZXN0RWxlbWVudElkKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFyZXN1bHRzKQorICAgICAgICAgICAg
cmVzdWx0cyA9IG5ldyBBcnJheSgpOworICAgICAgICByZXN1bHRzW3Rlc3RFbGVtZW50SWRdID0g
ZTsKKyAgICAgICAgdGVzdEVsZW1lbnRJZCA9IG51bGw7CisgICAgfQorICAgIAorICAgIGZ1bmN0
aW9uIGNoZWNrUmVzdWx0cygpCisgICAgeworICAgICAgICAvLyBDaGVjayBBZGRpdGlvbiBFdmVu
dAorICAgICAgICBkZWJ1ZygnPGJyIC8+Q2F1Z2h0IEFERElUSU9OOjxiciAvPicpOworICAgICAg
ICBpZiAoIXJlc3VsdHMgfHwgIXJlc3VsdHNbImFkZGl0aW9uIl0pCisgICAgICAgICAgICB0ZXN0
RmFpbGVkKCdUaGUgQURESVRJT04gbXV0YXRpb24gZXZlbnQgdHlwZSBkaWQgbm90IGZpcmUuJyk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygncmVzdWx0c1si
YWRkaXRpb24iXS5hdHRyQ2hhbmdlJywgTXV0YXRpb25FdmVudC5BRERJVElPTik7CisgICAgICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbImFkZGl0aW9uIl0uYXR0ck5hbWUn
LCAiY2xhc3MiKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1si
YWRkaXRpb24iXS5uZXdWYWx1ZScsIEVYUEVDVEVEX0JBQ0tHUk9VTkRfRk9SX0EpOworICAgICAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJhZGRpdGlvbiJdLnByZXZWYWx1
ZScsICIiKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0c1siYWRkaXRpb24iXS5yZWxhdGVkTm9k
ZSkKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCdyZXN1bHRzWyJhZGRpdGlvbiJdLnJlbGF0
ZWROb2RlIHNob3VsZCBub3QgaGF2ZSBiZWVuIG51bGwsIGJ1dCBpdCB3YXMgbnVsbC4nKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdHNbImFkZGl0aW9uIl0ucmVsYXRlZE5vZGUubmFtZSAh
PSByZXN1bHRzWyJhZGRpdGlvbiJdLmF0dHJOYW1lKQorICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQoJ3Jlc3VsdHNbImFkZGl0aW9uIl0ucmVsYXRlZE5vZGUubmFtZSBzaG91bGQgYmUgY2xhc3Ms
IGluc3RlYWQgaXQgd2FzICcgKyByZXN1bHRzWyJhZGRpdGlvbiJdLmF0dHJOYW1lKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgTW9kaWZpY2F0aW9uIEV2ZW50IGZvciBI
VE1MIGF0dHJpYnV0ZQorICAgICAgICBkZWJ1ZygnPGJyIC8+Q2F1Z2h0IE1PRElGSUNBVElPTjo8
YnIgLz4nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRzIHx8ICFyZXN1bHRzWyJtb2RpZmljYXRpb24i
XSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBNT0RJRklDQVRJT04gbXV0YXRpb24gZXZl
bnQgdHlwZSBkaWQgbm90IGZpcmUuJyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2hv
dWxkRXZhbHVhdGVUbygncmVzdWx0c1sibW9kaWZpY2F0aW9uIl0uYXR0ckNoYW5nZScsIE11dGF0
aW9uRXZlbnQuTU9ESUZJQ0FUSU9OKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygncmVzdWx0c1sibW9kaWZpY2F0aW9uIl0uYXR0ck5hbWUnLCAiY2xhc3MiKTsKKyAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1sibW9kaWZpY2F0aW9uIl0ubmV3VmFs
dWUnLCBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9CKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygncmVzdWx0c1sibW9kaWZpY2F0aW9uIl0ucHJldlZhbHVlJywgInllbGxvdy1i
YWNrZ3JvdW5kIik7CisgICAgICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdyZXN1bHRzWyJtb2Rp
ZmljYXRpb24iXS5yZWxhdGVkTm9kZScsIG1vZGlmaWNhdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRl
Tm9kZSgiY2xhc3MiKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIE1v
ZGlmaWNhdGlvbiBFdmVudCBmb3IgQ1NTIHByb3BlcnR5CisgICAgICAgIGRlYnVnKCc8YnIgLz5D
YXVnaHQgTU9ESUZJQ0FUSU9OIChvZiBDU1MgcHJvcGVydHkpOjxiciAvPicpOworICAgICAgICBp
ZiAoIXJlc3VsdHMgfHwgIXJlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdKQorICAgICAgICAg
ICAgdGVzdEZhaWxlZCgnVGhlIE1PRElGSUNBVElPTiBtdXRhdGlvbiBldmVudCB0eXBlIGRpZCBu
b3QgZmlyZS4nKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzaG91bGRFdmFsdWF0ZVRv
KCdyZXN1bHRzWyJtb2RpZmljYXRpb24tc3R5bGUiXS5hdHRyQ2hhbmdlJywgTXV0YXRpb25FdmVu
dC5NT0RJRklDQVRJT04pOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1
bHRzWyJtb2RpZmljYXRpb24tc3R5bGUiXS5hdHRyTmFtZScsICJzdHlsZSIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAocmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFs
dWUgJiYgcmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUuaW5kZXhPZihFWFBF
Q1RFRF9DU1NfUFJPUEVSVFlfRk9SX0RfMSkgPiAtMSkKKyAgICAgICAgICAgICAgICB0ZXN0UGFz
c2VkKCdyZXN1bHRzWyJtb2RpZmljYXRpb24tc3R5bGUiXS5uZXdWYWx1ZSBjb250YWluZWQgcHJv
cGVydHkgIicgKyBFWFBFQ1RFRF9DU1NfUFJPUEVSVFlfRk9SX0RfMSArICciLicpOworICAgICAg
ICAgICAgZWxzZSBpZiAocmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUgJiYg
cmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUuaW5kZXhPZihFWFBFQ1RFRF9D
U1NfUFJPUEVSVFlfRk9SX0RfMikgPiAtMSkKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCdy
ZXN1bHRzWyJtb2RpZmljYXRpb24tc3R5bGUiXS5uZXdWYWx1ZSBjb250YWluZWQgcHJvcGVydHkg
IicgKyBFWFBFQ1RFRF9DU1NfUFJPUEVSVFlfRk9SX0RfMiArICciLicpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbi1z
dHlsZSJdLm5ld1ZhbHVlIHNob3VsZCBlaXRoZXIgY29udGFpbiAiJyArIEVYUEVDVEVEX0NTU19Q
Uk9QRVJUWV9GT1JfRF8xICsKKyAgICAgICAgICAgICAgICAgICAgJyIgb3IgIicgKyBFWFBFQ1RF
RF9DU1NfUFJPUEVSVFlfRk9SX0RfMiArICciLiBXYXMgIicgKyByZXN1bHRzWyJtb2RpZmljYXRp
b24tc3R5bGUiXS5uZXdWYWx1ZSArICciLicpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdLnByZXZW
YWx1ZScsICIiKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgncmVzdWx0c1sibW9kaWZpY2F0
aW9uLXN0eWxlIl0ucmVsYXRlZE5vZGUgaW5zdGFuY2VvZiBBdHRyJyk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIENoZWNrIFJlbW92YWwgRXZlbnQKKyAgICAgICAgZGVidWcoJzxi
ciAvPkNhdWdodCBSRU1PVkFMOjxiciAvPicpOworICAgICAgICBpZiAoIXJlc3VsdHMgfHwgIXJl
c3VsdHNbInJlbW92YWwiXSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBSRU1PVkFMIG11
dGF0aW9uIGV2ZW50IHR5cGUgZGlkIG5vdCBmaXJlLicpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ3Jlc3VsdHNbInJlbW92YWwiXS5hdHRyQ2hhbmdlJywg
TXV0YXRpb25FdmVudC5SRU1PVkFMKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygncmVzdWx0c1sicmVtb3ZhbCJdLmF0dHJOYW1lJywgImNsYXNzIik7CisgICAgICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbInJlbW92YWwiXS5uZXdWYWx1ZScsICIiKTsK
KyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1sicmVtb3ZhbCJdLnBy
ZXZWYWx1ZScsICJibGFjay1iYWNrZ3JvdW5kIik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdHNb
InJlbW92YWwiXS5yZWxhdGVkTm9kZSkKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCdyZXN1
bHRzWyJyZW1vdmFsIl0ucmVsYXRlZE5vZGUgc2hvdWxkIG5vdCBiZSBudWxsLiBXYXMgJyArIHJl
c3VsdHNbInJlbW92YWwiXS5yZWxhdGVkTm9kZSArICcuJyk7CisgICAgICAgICAgICBlbHNlIGlm
IChyZXN1bHRzWyJyZW1vdmFsIl0ucmVsYXRlZE5vZGUubmFtZSAhPSByZXN1bHRzWyJhZGRpdGlv
biJdLmF0dHJOYW1lKQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoJ3Jlc3VsdHNbInJlbW92
YWwiXS5yZWxhdGVkTm9kZS5uYW1lIHNob3VsZCBiZSBjbGFzcy4gV2FzICcgKyByZXN1bHRzWyJy
ZW1vdmFsIl0uYXR0ck5hbWUgKyAnLicpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZ1
bmN0aW9uIHJ1blRlc3QoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgCisgICAgICAgIHRlc3RFbGVtZW50SWQgPSAiYWRkaXRpb24iOworICAgICAgICBm
aXJlQWRkaXRpb25FdmVudCgpOworICAgICAgICB0ZXN0RWxlbWVudElkID0gIm1vZGlmaWNhdGlv
biI7CisgICAgICAgIGZpcmVNb2RpZmljYXRpb25FdmVudCgpOworICAgICAgICB0ZXN0RWxlbWVu
dElkID0gInJlbW92YWwiOworICAgICAgICBmaXJlUmVtb3ZhbEV2ZW50KCk7CisgICAgICAgIHRl
c3RFbGVtZW50SWQgPSAibW9kaWZpY2F0aW9uLXN0eWxlIjsKKyAgICAgICAgZmlyZU1vZGlmaWNh
dGlvbk9mU3R5bGVQcm9wZXJ0eUV2ZW50KCk7CisgICAgICAgIC8vZGVidWcobW9kaWZpY2F0aW9u
T2ZTdHlsZUVsZW1lbnQuc3R5bGUuY3NzVGV4dCk7CisgICAgICAgIGNoZWNrUmVzdWx0cygpOwor
ICAgICAgICAKKyAgICAgICAgdmFyIHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidGVzdC1jb250YWluZXIiKTsKKyAgICAgICAgaWYgKHRlc3RDb250YWluZXIpCisgICAg
ICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RDb250YWluZXIpOworICAgICAg
ICBkZWJ1ZygnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7
CisgICAgfQorICAgIAorICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUF0dHJNb2Rp
ZmllZCIsIHJlY29yZERPTU11dGF0aW9uRXZlbnQsIGZhbHNlKTsKKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisgICAgPGRpdiBpZD0idGVz
dC1jb250YWluZXIiPgorICAgICAgICA8ZGl2IGlkPSJhZGRpdGlvbiI+QTwvZGl2PgorICAgICAg
ICA8ZGl2IGlkPSJtb2RpZmljYXRpb24iIGNsYXNzPSJ5ZWxsb3ctYmFja2dyb3VuZCI+QjwvZGl2
PgorICAgICAgICA8ZGl2IGlkPSJyZW1vdmFsIiBjbGFzcz0iYmxhY2stYmFja2dyb3VuZCI+Qzwv
ZGl2PgorICAgICAgICA8ZGl2IGlkPSJtb2RpZmljYXRpb24tc3R5bGUiPkQ8L2Rpdj4KKyAgICA8
L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8c2NyaXB0PgorICAgICAg
ICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBET00gTGV2ZWwgMiAmcXVv
dDtET01BdHRyTW9kaWZpZWQmcXVvdDsgbXV0YXRpb24gZXZlbnQgdHlwZSB3b3JrcyBhbmQgY29u
Zm9ybSB0byAiICsKKyAgICAgICAgICAgICAgICAgICAgIjxhIGhyZWY9JyIgKyBXM0NfUkVGRVJF
TkNFX1VSTCArICInPiIgKyBXM0NfUkVGRVJFTkNFX1VSTCArICI8L2E+LiIpOworICAgICAgICB2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42615</attachid>
            <date>2009-11-05 17:59:27 -0800</date>
            <delta_ts>2010-06-10 20:03:09 -0700</delta_ts>
            <desc>Patch with test cases</desc>
            <filename>Bug8191_3.patch</filename>
            <type>text/plain</type>
            <size>22417</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDU4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMTEtMDUgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTkxCisgICAgICAgIEFuZAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzAwNzgwMD4KKworICAgICAgICBJbXBsZW1lbnRzIHN1
cHBvcnQgZm9yIHRoZSBET00gTGV2ZWwgMiBET01BdHRyTW9kaWZpZWQgbXV0YXRpb24gZXZlbnQg
dHlwZSwKKyAgICAgICAgPGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0y
LUV2ZW50cy0yMDAwMTExMy9ldmVudHMuaHRtbCNFdmVudHMtTXV0YXRpb25FdmVudD4uCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvZXZlbnRzL2ZpcmUtRE9NQXR0ck1vZGlmaWVkLU1PRElGSUNBVElP
Ti13aGVuLWhhbmRsaW5nLU1PRElGSUNBVElPTi1uby1pbmZpbml0ZS1sb29wLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3QvZXZlbnRzL2ZpcmUtRE9NQXR0ck1vZGlmaWVkLWV2ZW50cy5odG1sCisK
KyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KTogTW9kaWZp
ZWQgdG8gY2FsbCAKKyAgICAgICAgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyTW9kaWZpY2F0aW9uRXZl
bnQuCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6c2V0QXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpkaXNw
YXRjaEF0dHJNb2RpZmljYXRpb25FdmVudCk6IEFkZGVkIHRvIHN1cHBvcnQgTU9ESUZJQ0FUSU9O
IGV2ZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoQXR0clJlbW92YWxF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2
ZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorCiAyMDA5LTExLTA1ICBDaHJpcyBKZXJk
b25layAgPGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5jcHAJKHJldmlzaW9uIDUwNTMzKQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTUgQEAKICNpbmNsdWRl
ICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkKICAgICA6IG1fbm9kZSgwKQogICAgICwgbV92
YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQoMCkKQEAgLTUyMSw2ICs1MjQsMTAgQEAgYm9vbCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKKyAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwcmV2aW91cyB2YWx1ZSBv
ZiB0aGlzIDxzdHlsZT4gZWxlbWVudCBzbyB0aGF0IHdlIGNhbiBkaXNwYXRjaAorICAgIC8vIGEg
RE9NQXR0ck1vZGlmaWVkIGV2ZW50IChiZWxvdykuCisgICAgU3RyaW5nIHByZXZpb3VzQ1NTdGV4
dCA9IChtX25vZGUgJiYgbV9ub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSk/IGNzc1RleHQoKSA6IFN0
cmluZygpOyAKKwogICAgIC8vIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHByb3BlcnR5IHZh
bHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAg
IC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBwb3NpdGlvbiwgYW5kIE1TSUUgbW92ZXMgdGhlIHBy
b3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCiAgICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQ
YXJzaW5nKCkpOwpAQCAtNTMxLDYgKzUzOCwxMSBAQCBib29sIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpzZXRQcm9wCiAgICAgfSBlbHNlIGlmIChub3RpZnlDaGFuZ2VkKQogICAgICAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKKyAgICBpZiAobV9ub2RlICYmIG1fbm9kZS0+aXNTdHls
ZWRFbGVtZW50KCkpIHsKKyAgICAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0ciA9IEF0dHJpYnV0
ZTo6Y3JlYXRlKHN0eWxlQXR0ciwgY3NzVGV4dCgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KG1fbm9kZSktPmRpc3BhdGNoQXR0ck1vZGlmaWNhdGlvbkV2ZW50KGF0dHIu
Z2V0KCksIHByZXZpb3VzQ1NTdGV4dCk7CisgICAgfQorCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9
CiAgICAgCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNTA1MzMpCisrKyBXZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE0IEBACiAjaW5jbHVkZSAiQ2xp
ZW50UmVjdExpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRS
YXJlRGF0YS5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJO
YW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5k
ZXJTdHlsZS5oIgpAQCAtNTMyLDggKzUzNCwxMCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTCiAgICAgZWxzZSBpZiAoIW9sZCAmJiAhdmFsdWUuaXNOdWxsKCkpCiAg
ICAgICAgIG5hbWVkQXR0ck1hcC0+YWRkQXR0cmlidXRlKGNyZWF0ZUF0dHJpYnV0ZShRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG51bGxBdG9tKSwgdmFsdWUpKTsKICAgICBlbHNl
IGlmIChvbGQgJiYgIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgIFN0cmluZyBwcmV2aW91c1Zh
bHVlID0gb2xkLT52YWx1ZSgpLnN0cmluZygpOwogICAgICAgICBvbGQtPnNldFZhbHVlKHZhbHVl
KTsKICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChvbGQpOworICAgICAgICBkaXNwYXRjaEF0dHJN
b2RpZmljYXRpb25FdmVudChvbGQsIHByZXZpb3VzVmFsdWUpOwogICAgIH0KIH0KIApAQCAtNTUy
LDggKzU1NiwxMCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpCiAg
ICAgZWxzZSBpZiAoIW9sZCAmJiAhdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIG5hbWVkQXR0ck1h
cC0+YWRkQXR0cmlidXRlKGNyZWF0ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpOwogICAgIGVsc2Ug
aWYgKG9sZCkgeworICAgICAgICBTdHJpbmcgcHJldmlvdXNWYWx1ZSA9IG9sZC0+dmFsdWUoKS5z
dHJpbmcoKTsKICAgICAgICAgb2xkLT5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGF0dHJpYnV0
ZUNoYW5nZWQob2xkKTsKKyAgICAgICAgZGlzcGF0Y2hBdHRyTW9kaWZpY2F0aW9uRXZlbnQob2xk
LCBwcmV2aW91c1ZhbHVlKTsKICAgICB9CiB9CiAKQEAgLTk5MCwyOCArOTk2LDQwIEBAIHZvaWQg
RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKICAgICBjaGVja0ZvclNpYmxpbmdTdHls
ZUNoYW5nZXModGhpcywgcmVuZGVyU3R5bGUoKSwgdHJ1ZSwgbGFzdENoaWxkKCksIDAsIDApOwog
fQogCi12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoQXR0clJlbW92YWxFdmVudChBdHRyaWJ1dGUqKQor
dm9pZCBFbGVtZW50OjpkaXNwYXRjaEF0dHJNb2RpZmljYXRpb25FdmVudChBdHRyaWJ1dGUqIGF0
dHIsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWYWx1ZSkKIHsKICAgICBBU1NFUlQoIWV2ZW50RGlz
cGF0Y2hGb3JiaWRkZW4oKSk7Ci0jaWYgMAorCiAgICAgaWYgKCFkb2N1bWVudCgpLT5oYXNMaXN0
ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUFUVFJNT0RJRklFRF9MSVNURU5FUikpCiAgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghcHJldmlvdXNWYWx1ZS5pc0VtcHR5KCkgJiYgYXR0ci0+dmFsdWUo
KSA9PSBwcmV2aW91c1ZhbHVlKQorICAgICAgICByZXR1cm47IC8vIFRvIHByZXZlbnQgZW50ZXJp
bmcgYW4gaW5maW5pdGUgbG9vcC4KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNw
YXRjaEV2ZW50KG5ldyBNdXRhdGlvbkV2ZW50KERPTUF0dHJNb2RpZmllZEV2ZW50LCB0cnVlLCBm
YWxzZSwgYXR0ciwgYXR0ci0+dmFsdWUoKSwKLSAgICAgICAgYXR0ci0+dmFsdWUoKSwgZG9jdW1l
bnQoKS0+YXR0ck5hbWUoYXR0ci0+aWQoKSksIE11dGF0aW9uRXZlbnQ6OlJFTU9WQUwpLCBlYyk7
Ci0jZW5kaWYKKyAgICBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuRE9NQXR0ck1vZGlmaWVkRXZlbnQsIHRydWUsIGF0dHItPmNyZWF0ZUF0dHJJZk5lZWRl
ZCh0aGlzKSwgCisgICAgICAgICBwcmV2aW91c1ZhbHVlLCBhdHRyLT52YWx1ZSgpLCBhdHRyLT5u
YW1lKCkudG9TdHJpbmcoKSwgTXV0YXRpb25FdmVudDo6TU9ESUZJQ0FUSU9OKSwgZWMpOwogfQog
Ci12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoQXR0ckFkZGl0aW9uRXZlbnQoQXR0cmlidXRlKikKK3Zv
aWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyUmVtb3ZhbEV2ZW50KEF0dHJpYnV0ZSogYXR0cikKIHsK
ICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0jaWYgMAorCiAgICAgaWYg
KCFkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUFUVFJNT0RJRklFRF9M
SVNURU5FUikpCiAgICAgICAgIHJldHVybjsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBkaXNwYXRjaEV2ZW50KG5ldyBNdXRhdGlvbkV2ZW50KERPTUF0dHJNb2RpZmllZEV2ZW50LCB0
cnVlLCBmYWxzZSwgYXR0ciwgYXR0ci0+dmFsdWUoKSwKLSAgICAgICAgYXR0ci0+dmFsdWUoKSwg
ZG9jdW1lbnQoKS0+YXR0ck5hbWUoYXR0ci0+aWQoKSksIE11dGF0aW9uRXZlbnQ6OkFERElUSU9O
KSwgZWMpOwotI2VuZGlmCisgICAgZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLkRPTUF0dHJNb2RpZmllZEV2ZW50LCB0cnVlLCBhdHRyLT5jcmVhdGVBdHRy
SWZOZWVkZWQodGhpcyksIAorICAgICAgICBhdHRyLT52YWx1ZSgpLCBTdHJpbmcoKSwgYXR0ci0+
bmFtZSgpLnRvU3RyaW5nKCksIE11dGF0aW9uRXZlbnQ6OlJFTU9WQUwpLCBlYyk7Cit9CisKK3Zv
aWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyQWRkaXRpb25FdmVudChBdHRyaWJ1dGUqIGF0dHIpCit7
CisgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOworCisgICAgaWYgKCFkb2N1
bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUFUVFJNT0RJRklFRF9MSVNURU5F
UikpCisgICAgICAgIHJldHVybjsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBkaXNw
YXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQXR0ck1vZGlm
aWVkRXZlbnQsIHRydWUsIGF0dHItPmNyZWF0ZUF0dHJJZk5lZWRlZCh0aGlzKSwgCisgICAgICAg
IFN0cmluZygpLCBhdHRyLT52YWx1ZSgpLCBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKSwgTXV0YXRp
b25FdmVudDo6QURESVRJT04pLCBlYyk7CiB9CiAKIFN0cmluZyBFbGVtZW50OjpvcGVuVGFnU3Rh
cnRUb1N0cmluZygpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA1MDUzMykKKysrIFdlYkNvcmUv
ZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nyw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoKTsKIAorICAgIHZvaWQg
ZGlzcGF0Y2hBdHRyTW9kaWZpY2F0aW9uRXZlbnQoQXR0cmlidXRlKiwgY29uc3QgU3RyaW5nJiBw
cmV2aW91c1ZhbHVlKTsKICAgICB2b2lkIGRpc3BhdGNoQXR0clJlbW92YWxFdmVudChBdHRyaWJ1
dGUqKTsKICAgICB2b2lkIGRpc3BhdGNoQXR0ckFkZGl0aW9uRXZlbnQoQXR0cmlidXRlKik7CiAK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUwNTg0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMTEtMDUgIERhbmllbCBCYXRlcyAgPGRi
YXRlc0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTkxCisg
ICAgICAgIEFuZAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzAwNzgwMD4KKworICAgICAgICBU
ZXN0cyB0aGF0IHRoZSBET00gTGV2ZWwgMiBET01BdHRyTW9kaWZpZWQgbXV0YXRpb24gZXZlbnQg
d29ya3MgYW5kIGNvbmZvcm0gdG8gdGhlIFczQyBzcGVjLiwKKyAgICAgICAgPGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUV2ZW50cy0yMDAwMTExMy9ldmVudHMuaHRt
bCNFdmVudHMtTXV0YXRpb25FdmVudD4uCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9maXJlLURP
TUF0dHJNb2RpZmllZC1NT0RJRklDQVRJT04td2hlbi1oYW5kbGluZy1NT0RJRklDQVRJT04tbm8t
aW5maW5pdGUtbG9vcC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRz
L2ZpcmUtRE9NQXR0ck1vZGlmaWVkLU1PRElGSUNBVElPTi13aGVuLWhhbmRsaW5nLU1PRElGSUNB
VElPTi1uby1pbmZpbml0ZS1sb29wLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRz
L2ZpcmUtRE9NQXR0ck1vZGlmaWVkLWV2ZW50cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL2ZpcmUtRE9NQXR0ck1vZGlmaWVkLWV2ZW50cy5odG1sOiBBZGRlZC4K
KwogMjAwOS0xMS0wNSAgQWxpY2UgTGl1ICA8YWxpY2UubGl1QGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGRpbmcgYSByZXNvdXJjZSB0aGF0IHNlZW1zIHRvIGJlIG1pc3NpbmcuICBXaXRob3V0IGl0
LCBzZXZlcmFsIHRlc3RzIGluCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9maXJlLURP
TUF0dHJNb2RpZmllZC1NT0RJRklDQVRJT04td2hlbi1oYW5kbGluZy1NT0RJRklDQVRJT04tbm8t
aW5maW5pdGUtbG9vcC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvZmlyZS1ET01BdHRyTW9kaWZpZWQtTU9ESUZJQ0FUSU9OLXdoZW4taGFuZGxpbmct
TU9ESUZJQ0FUSU9OLW5vLWluZmluaXRlLWxvb3AtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZmlyZS1ET01BdHRyTW9kaWZpZWQtTU9ESUZJQ0FU
SU9OLXdoZW4taGFuZGxpbmctTU9ESUZJQ0FUSU9OLW5vLWluZmluaXRlLWxvb3AtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACitUaGlzIHRlc3QgY2hlY2tzIHRoYXQg
Y2hhbmdpbmcgYSBDU1MgcHJvcGVydHkgKE1PRElGSUNBVElPTikgd2hlbiBoYW5kbGluZyBhbiBh
bHJlYWR5IGRpc3BhdGNoZWQgRE9NIExldmVsIDIgIkRPTUF0dHJNb2RpZmllZCIgTU9ESUZJQ0FU
SU9OIG11dGF0aW9uIGV2ZW50IGRvZXMgbm90IHJlc3VsdCBpbiBhbiBpbmZpbml0ZSBsb29wLgor
CitXaGVuIHRoaXMgdGVzdCBpcyBydW4gaXQgd2lsbCBwcmludCB0aGUgdG90YWwgbnVtYmVyIG9m
IGNhdWdodCBET01BdHRyTW9kaWZpZWQgZXZlbnRzLgorCitUaGlzIHRlc3QgaGFzIFBBU1NFRCBp
ZiBib3RoIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CisKK1lvdSBzZWUgdGhlIGZvbGxvd2lu
ZyBvdXRwdXQ6CisgICAgICAgICAgICAgICAgQ2F1Z2h0IGEgdG90YWwgb2YgMSBtdXRhdGlvbiBl
dmVudC4KKyAgICAgICAgICAgICAgICBDYXVnaHQgYSB0b3RhbCBvZiAyIG11dGF0aW9uIGV2ZW50
cy4KKyAgICAgICAgICAgIAorVGhlcmUgYXJlIG5vIEZBSUwgbWVzc2FnZXMuCisKK0NhdWdodCBh
IHRvdGFsIG9mIDEgbXV0YXRpb24gZXZlbnQuCitDYXVnaHQgYSB0b3RhbCBvZiAyIG11dGF0aW9u
IGV2ZW50cy4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZmlyZS1ET01BdHRyTW9k
aWZpZWQtTU9ESUZJQ0FUSU9OLXdoZW4taGFuZGxpbmctTU9ESUZJQ0FUSU9OLW5vLWluZmluaXRl
LWxvb3AuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9maXJlLURP
TUF0dHJNb2RpZmllZC1NT0RJRklDQVRJT04td2hlbi1oYW5kbGluZy1NT0RJRklDQVRJT04tbm8t
aW5maW5pdGUtbG9vcC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvZmlyZS1ET01BdHRyTW9kaWZpZWQtTU9ESUZJQ0FUSU9OLXdoZW4taGFuZGxpbmctTU9ESUZJ
Q0FUSU9OLW5vLWluZmluaXRlLWxvb3AuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlPgorI21vZGlmaWNhdGlvbi1zdHlsZSB7
IHdpZHRoOiA2NHB4OyBoZWlnaHQ6IDY0cHg7IGRpc3BsYXk6IHRhYmxlLWNlbGw7IHRleHQtYWxp
Z246IGNlbnRlcjsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgYm9yZGVyOiAxcHggc29saWQgYmxh
Y2s7IGNvbG9yOiB3aGl0ZTsgfQorPC9zdHlsZT4KKzxzY3JpcHQ+CisgICAgdmFyIG1vZGlmaWNh
dGlvbk9mU3R5bGVFbGVtZW50OworICAgIAorICAgIHZhciBCQUNLR1JPVU5EXzEgPSAicmVkIjsK
KyAgICB2YXIgQkFDS0dST1VORF8yID0gImJsdWUiOworICAgIAorICAgIHZhciBudW1NdXRhdGlv
bkV2ZW50c0ZpcmVkID0gMDsKKworICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBtb2RpZmljYXRpb25PZlN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJtb2RpZmljYXRpb24tc3R5bGUiKTsKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0K
KyAgICAKKyAgICBmdW5jdGlvbiBmaXJlQW5vdGhlck11dGF0aW9uRXZlbnRBbmRDaGVja0ZvckZh
aWx1cmUoZSkKKyAgICB7CisgICAgICAgICsrbnVtTXV0YXRpb25FdmVudHNGaXJlZDsKKyAgICAg
ICAgZGVidWcoJ0NhdWdodCBhIHRvdGFsIG9mICcgKyBudW1NdXRhdGlvbkV2ZW50c0ZpcmVkICsg
JyBtdXRhdGlvbiAnICsgKChudW1NdXRhdGlvbkV2ZW50c0ZpcmVkID4gMSk/ICdldmVudHMuJyA6
ICdldmVudC4nKSk7CisgICAgICAgIGlmIChudW1NdXRhdGlvbkV2ZW50c0ZpcmVkID4gMikKKyAg
ICAgICAgICAgIHRlc3RGYWlsZWQoJ3Nob3VsZCBoYXZlIG9ubHkgZmlyZWQgMiBtdXRhdGlvbiBl
dmVudHMsIGluc3RlYWQgZmlyZWQgJyArIG51bU11dGF0aW9uRXZlbnRzRmlyZWQgKyAnLicpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtb2RpZmljYXRpb25PZlN0eWxlRWxlbWVudC5zdHls
ZS5iYWNrZ3JvdW5kID0gQkFDS0dST1VORF8yOyAvLyBGaXJlIHRoZSBzZWNvbmQvdGhpcmQgbXV0
YXRpb24gZXZlbnQuCisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAgIHsK
KyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICht
b2RpZmljYXRpb25PZlN0eWxlRWxlbWVudCkKKyAgICAgICAgICAgIG1vZGlmaWNhdGlvbk9mU3R5
bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSBCQUNLR1JPVU5EXzE7IC8vIEZpcmUgdGhlIGZp
cnN0IG11dGF0aW9uIGV2ZW50LgorICAgICAgIAorICAgICAgICB2YXIgdGVzdENvbnRhaW5lciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0LWNvbnRhaW5lciIpOworICAgICAgICBpZiAo
dGVzdENvbnRhaW5lcikKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVz
dENvbnRhaW5lcik7CisgICAgfQorICAgIAorICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
IkRPTUF0dHJNb2RpZmllZCIsIGZpcmVBbm90aGVyTXV0YXRpb25FdmVudEFuZENoZWNrRm9yRmFp
bHVyZSwgZmFsc2UpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cCBpZD0iZGVz
Y3JpcHRpb24iPlRoaXMgdGVzdCBjaGVja3MgdGhhdCBjaGFuZ2luZyBhIENTUyBwcm9wZXJ0eSAo
TU9ESUZJQ0FUSU9OKSB3aGVuIGhhbmRsaW5nIGFuIGFscmVhZHkgZGlzcGF0Y2hlZCBET00gTGV2
ZWwgMiAmcXVvdDtET01BdHRyTW9kaWZpZWQmcXVvdDsgTU9ESUZJQ0FUSU9OIG11dGF0aW9uIGV2
ZW50IGRvZXMgbm90IHJlc3VsdCBpbiBhbiBpbmZpbml0ZSBsb29wLjwvcD4KKyAgICA8cD5XaGVu
IHRoaXMgdGVzdCBpcyBydW4gaXQgd2lsbCBwcmludCB0aGUgdG90YWwgbnVtYmVyIG9mIGNhdWdo
dCBET01BdHRyTW9kaWZpZWQgZXZlbnRzLjwvcD4KKyAgICA8cD5UaGlzIHRlc3QgaGFzIDxzcGFu
IGNsYXNzPSJwYXNzIj5QQVNTRUQ8L3NwYW4+IGlmIGJvdGggb2YgdGhlIGZvbGxvd2luZyBhcmUg
dHJ1ZTo8L3A+CisgICAgPG9sPgorICAgICAgICA8bGk+WW91IHNlZSB0aGUgZm9sbG93aW5nIG91
dHB1dDoKKyAgICAgICAgICAgIDxwcmU+CisgICAgICAgICAgICAgICAgQ2F1Z2h0IGEgdG90YWwg
b2YgMSBtdXRhdGlvbiBldmVudC4KKyAgICAgICAgICAgICAgICBDYXVnaHQgYSB0b3RhbCBvZiAy
IG11dGF0aW9uIGV2ZW50cy4KKyAgICAgICAgICAgIDwvcHJlPgorICAgICAgICA8L2xpPgorICAg
ICAgICA8bGk+VGhlcmUgYXJlIG5vIDxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiBtZXNz
YWdlcy48L2xpPgorICAgIDwvb2w+CisgICAgPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAg
ICAgICA8ZGl2IGlkPSJtb2RpZmljYXRpb24tc3R5bGUiPkE8L2Rpdj4KKyAgICA8L2Rpdj4KKyAg
ICA8aHIvPgorICAgIDxici8+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNj
cmlwdD4KKyAgICAgICAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9maXJl
LURPTUF0dHJNb2RpZmllZC1ldmVudHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2ZpcmUtRE9NQXR0ck1vZGlmaWVkLWV2ZW50cy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9maXJlLURPTUF0dHJN
b2RpZmllZC1ldmVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBA
CitUaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIERPTSBMZXZlbCAyICJET01BdHRyTW9kaWZpZWQi
IG11dGF0aW9uIGV2ZW50IHR5cGUgd29ya3MgYW5kIGNvbmZvcm0gdG8gaHR0cDovL3d3dy53My5v
cmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItRXZlbnRzLTIwMDAxMTEzL2V2ZW50cy5odG1sI0V2
ZW50cy1NdXRhdGlvbkV2ZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitD
YXVnaHQgQURESVRJT046CisKK1BBU1MgcmVzdWx0c1siYWRkaXRpb24iXS5hdHRyQ2hhbmdlIGlz
IDIKK1BBU1MgcmVzdWx0c1siYWRkaXRpb24iXS5hdHRyTmFtZSBpcyAiY2xhc3MiCitQQVNTIHJl
c3VsdHNbImFkZGl0aW9uIl0ubmV3VmFsdWUgaXMgInJlZC1iYWNrZ3JvdW5kIgorUEFTUyByZXN1
bHRzWyJhZGRpdGlvbiJdLnByZXZWYWx1ZSBpcyAiIgorCitDYXVnaHQgTU9ESUZJQ0FUSU9OOgor
CitQQVNTIHJlc3VsdHNbIm1vZGlmaWNhdGlvbiJdLmF0dHJDaGFuZ2UgaXMgMQorUEFTUyByZXN1
bHRzWyJtb2RpZmljYXRpb24iXS5hdHRyTmFtZSBpcyAiY2xhc3MiCitQQVNTIHJlc3VsdHNbIm1v
ZGlmaWNhdGlvbiJdLm5ld1ZhbHVlIGlzICJibHVlLWJhY2tncm91bmQiCitQQVNTIHJlc3VsdHNb
Im1vZGlmaWNhdGlvbiJdLnByZXZWYWx1ZSBpcyAieWVsbG93LWJhY2tncm91bmQiCitQQVNTIHJl
c3VsdHNbIm1vZGlmaWNhdGlvbiJdLnJlbGF0ZWROb2RlID09ICdbb2JqZWN0IEF0dHJdJyBpcyB0
cnVlCisKK0NhdWdodCBNT0RJRklDQVRJT04gKG9mIENTUyBwcm9wZXJ0eSk6CisKK1BBU1MgcmVz
dWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0uYXR0ckNoYW5nZSBpcyAxCitQQVNTIHJlc3VsdHNb
Im1vZGlmaWNhdGlvbi1zdHlsZSJdLmF0dHJOYW1lIGlzICJzdHlsZSIKK1BBU1MgcmVzdWx0c1si
bW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUgY29udGFpbmVkIHByb3BlcnR5ICJiYWNrZ3Jv
dW5kLWNvbG9yOiBwdXJwbGUiLgorUEFTUyByZXN1bHRzWyJtb2RpZmljYXRpb24tc3R5bGUiXS5w
cmV2VmFsdWUgaXMgIiIKK1BBU1MgcmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ucmVsYXRl
ZE5vZGUgaW5zdGFuY2VvZiBBdHRyIGlzIHRydWUKKworQ2F1Z2h0IFJFTU9WQUw6CisKK1BBU1Mg
cmVzdWx0c1sicmVtb3ZhbCJdLmF0dHJDaGFuZ2UgaXMgMworUEFTUyByZXN1bHRzWyJyZW1vdmFs
Il0uYXR0ck5hbWUgaXMgImNsYXNzIgorUEFTUyByZXN1bHRzWyJyZW1vdmFsIl0ubmV3VmFsdWUg
aXMgIiIKK1BBU1MgcmVzdWx0c1sicmVtb3ZhbCJdLnByZXZWYWx1ZSBpcyAiYmxhY2stYmFja2dy
b3VuZCIKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9m
aXJlLURPTUF0dHJNb2RpZmllZC1ldmVudHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9maXJlLURPTUF0dHJNb2RpZmllZC1ldmVudHMuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2ZpcmUtRE9NQXR0ck1vZGlmaWVkLWV2ZW50
cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHN0eWxlPgorI2FkZGl0aW9uLCAjbW9kaWZpY2F0aW9uLCAjcmVtb3ZhbCwgI21vZGlm
aWNhdGlvbi1zdHlsZSB7IHdpZHRoOiA2NHB4OyBoZWlnaHQ6IDY0cHg7IGRpc3BsYXk6IHRhYmxl
LWNlbGw7IHRleHQtYWxpZ246IGNlbnRlcjsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgYm9yZGVy
OiAxcHggc29saWQgYmxhY2s7IH0KKyNhZGRpdGlvbiB7IGNvbG9yOiB3aGl0ZTsgfQorI21vZGlm
aWNhdGlvbiB7IGNvbG9yOiB5ZWxsb3c7IH0KKy5yZWQtYmFja2dyb3VuZCB7IGJhY2tncm91bmQ6
IHJlZDsgfQorLnllbGxvdy1iYWNrZ3JvdW5kIHsgYmFja2dyb3VuZDogeWVsbG93OyB9CisuYmx1
ZS1iYWNrZ3JvdW5kIHsgYmFja2dyb3VuZDogYmx1ZTsgfQorLmJsYWNrLWJhY2tncm91bmQgeyBi
YWNrZ3JvdW5kOiBibGFjazsgfQorPC9zdHlsZT4KKzxzY3JpcHQ+CisgICAgdmFyIGFkZGl0aW9u
RWxlbWVudDsKKyAgICB2YXIgbW9kaWZpY2F0aW9uRWxlbWVudDsKKyAgICB2YXIgbW9kaWZpY2F0
aW9uT2ZTdHlsZUVsZW1lbnQ7CisgICAgdmFyIHJlbW92YWxFbGVtZW50OworICAgIAorICAgIHZh
ciBXM0NfUkVGRVJFTkNFX1VSTCA9ICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00t
TGV2ZWwtMi1FdmVudHMtMjAwMDExMTMvZXZlbnRzLmh0bWwjRXZlbnRzLU11dGF0aW9uRXZlbnQi
OworICAgIAorICAgIHZhciBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9BID0gInJlZC1iYWNrZ3Jv
dW5kIjsKKyAgICB2YXIgRVhQRUNURURfQkFDS0dST1VORF9GT1JfQiA9ICJibHVlLWJhY2tncm91
bmQiOworICAgIHZhciBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9DID0gbnVsbDsKKyAgICB2YXIg
RVhQRUNURURfQkFDS0dST1VORF9GT1JfRCA9ICJwdXJwbGUiOworICAgIHZhciBFWFBFQ1RFRF9D
U1NfUFJPUEVSVFlfRk9SX0RfMSA9ICJiYWNrZ3JvdW5kOiAiICsgRVhQRUNURURfQkFDS0dST1VO
RF9GT1JfRDsgLy8gRmlyZWZveCByZXR1cm5zIHRoaXMuCisgICAgdmFyIEVYUEVDVEVEX0NTU19Q
Uk9QRVJUWV9GT1JfRF8yID0gImJhY2tncm91bmQtY29sb3I6ICIgKyBFWFBFQ1RFRF9CQUNLR1JP
VU5EX0ZPUl9EOyAvLyBXZWJLaXQgcmV0dXJucyB0aGlzLgorICAgIAorICAgIHZhciB0ZXN0RWxl
bWVudElkOworICAgIHZhciByZXN1bHRzOworCisgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIGFkZGl0aW9uRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJhZGRpdGlvbiIpOworICAgICAgICBtb2RpZmljYXRpb25FbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm1vZGlmaWNhdGlvbiIpOworICAgICAgICByZW1vdmFsRWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZW1vdmFsIik7CisgICAgICAgIG1vZGlmaWNhdGlv
bk9mU3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vZGlmaWNhdGlvbi1z
dHlsZSIpOworICAgICAgICAKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0KKyAgICAKKyAgICBm
dW5jdGlvbiBmaXJlQWRkaXRpb25FdmVudCgpCisgICAgeworICAgICAgICBpZiAoYWRkaXRpb25F
bGVtZW50KQorICAgICAgICAgICAgYWRkaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgiY2xhc3Mi
LCBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9BKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24g
ZmlyZU1vZGlmaWNhdGlvbkV2ZW50KCkKKyAgICB7CisgICAgICAgIGlmIChtb2RpZmljYXRpb25F
bGVtZW50KQorICAgICAgICAgICAgbW9kaWZpY2F0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoImNs
YXNzIiwgRVhQRUNURURfQkFDS0dST1VORF9GT1JfQik7CisgICAgfQorICAgIAorICAgIGZ1bmN0
aW9uIGZpcmVSZW1vdmFsRXZlbnQoKQorICAgIHsKKyAgICAgICAgaWYgKHJlbW92YWxFbGVtZW50
KQorICAgICAgICAgICAgcmVtb3ZhbEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpOwor
ICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBmaXJlTW9kaWZpY2F0aW9uT2ZTdHlsZVByb3BlcnR5
RXZlbnQoKQorICAgIHsKKyAgICAgICAgaWYgKG1vZGlmaWNhdGlvbk9mU3R5bGVFbGVtZW50KQor
ICAgICAgICAgICAgbW9kaWZpY2F0aW9uT2ZTdHlsZUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9
IEVYUEVDVEVEX0JBQ0tHUk9VTkRfRk9SX0Q7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHJl
Y29yZERPTU11dGF0aW9uRXZlbnQoZSkKKyAgICB7CisgICAgICAgIGlmICghdGVzdEVsZW1lbnRJ
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghcmVzdWx0cykK
KyAgICAgICAgICAgIHJlc3VsdHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgcmVzdWx0c1t0ZXN0
RWxlbWVudElkXSA9IGU7CisgICAgICAgIHRlc3RFbGVtZW50SWQgPSBudWxsOworICAgIH0KKyAg
ICAKKyAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdHMoKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sg
QWRkaXRpb24gRXZlbnQKKyAgICAgICAgZGVidWcoJzxiciAvPkNhdWdodCBBRERJVElPTjo8YnIg
Lz4nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRzIHx8ICFyZXN1bHRzWyJhZGRpdGlvbiJdKQorICAg
ICAgICAgICAgdGVzdEZhaWxlZCgnVGhlIEFERElUSU9OIG11dGF0aW9uIGV2ZW50IHR5cGUgZGlk
IG5vdCBmaXJlLicpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNob3VsZEV2YWx1YXRl
VG8oJ3Jlc3VsdHNbImFkZGl0aW9uIl0uYXR0ckNoYW5nZScsIE11dGF0aW9uRXZlbnQuQURESVRJ
T04pOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJhZGRpdGlv
biJdLmF0dHJOYW1lJywgImNsYXNzIik7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoJ3Jlc3VsdHNbImFkZGl0aW9uIl0ubmV3VmFsdWUnLCBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZP
Ul9BKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1siYWRkaXRp
b24iXS5wcmV2VmFsdWUnLCAiIik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdHNbImFkZGl0aW9u
Il0ucmVsYXRlZE5vZGUpCisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgncmVzdWx0c1siYWRk
aXRpb24iXS5yZWxhdGVkTm9kZSBzaG91bGQgbm90IGhhdmUgYmVlbiBudWxsLCBidXQgaXQgd2Fz
IG51bGwuJyk7CisgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRzWyJhZGRpdGlvbiJdLnJlbGF0
ZWROb2RlLm5hbWUgIT0gcmVzdWx0c1siYWRkaXRpb24iXS5hdHRyTmFtZSkKKyAgICAgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCdyZXN1bHRzWyJhZGRpdGlvbiJdLnJlbGF0ZWROb2RlLm5hbWUgc2hv
dWxkIGJlIGNsYXNzLCBpbnN0ZWFkIGl0IHdhcyAnICsgcmVzdWx0c1siYWRkaXRpb24iXS5hdHRy
TmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIE1vZGlmaWNhdGlv
biBFdmVudCBmb3IgSFRNTCBhdHRyaWJ1dGUKKyAgICAgICAgZGVidWcoJzxiciAvPkNhdWdodCBN
T0RJRklDQVRJT046PGJyIC8+Jyk7CisgICAgICAgIGlmICghcmVzdWx0cyB8fCAhcmVzdWx0c1si
bW9kaWZpY2F0aW9uIl0pCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgTU9ESUZJQ0FUSU9O
IG11dGF0aW9uIGV2ZW50IHR5cGUgZGlkIG5vdCBmaXJlLicpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbiJdLmF0dHJD
aGFuZ2UnLCBNdXRhdGlvbkV2ZW50Lk1PRElGSUNBVElPTik7CisgICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbiJdLmF0dHJOYW1lJywgImNsYXNz
Iik7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbIm1vZGlmaWNh
dGlvbiJdLm5ld1ZhbHVlJywgRVhQRUNURURfQkFDS0dST1VORF9GT1JfQik7CisgICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbiJdLnByZXZWYWx1
ZScsICJ5ZWxsb3ctYmFja2dyb3VuZCIpOworICAgICAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygn
cmVzdWx0c1sibW9kaWZpY2F0aW9uIl0ucmVsYXRlZE5vZGUnLCBtb2RpZmljYXRpb25FbGVtZW50
LmdldEF0dHJpYnV0ZU5vZGUoImNsYXNzIikpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBDaGVjayBNb2RpZmljYXRpb24gRXZlbnQgZm9yIENTUyBwcm9wZXJ0eQorICAgICAgICBk
ZWJ1ZygnPGJyIC8+Q2F1Z2h0IE1PRElGSUNBVElPTiAob2YgQ1NTIHByb3BlcnR5KTo8YnIgLz4n
KTsKKyAgICAgICAgaWYgKCFyZXN1bHRzIHx8ICFyZXN1bHRzWyJtb2RpZmljYXRpb24tc3R5bGUi
XSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBNT0RJRklDQVRJT04gbXV0YXRpb24gZXZl
bnQgdHlwZSBkaWQgbm90IGZpcmUuJyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2hv
dWxkRXZhbHVhdGVUbygncmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0uYXR0ckNoYW5nZScs
IE11dGF0aW9uRXZlbnQuTU9ESUZJQ0FUSU9OKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygncmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0uYXR0ck5hbWUnLCAic3R5bGUi
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHJlc3VsdHNbIm1vZGlmaWNhdGlvbi1z
dHlsZSJdLm5ld1ZhbHVlICYmIHJlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdLm5ld1ZhbHVl
LmluZGV4T2YoRVhQRUNURURfQ1NTX1BST1BFUlRZX0ZPUl9EXzEpID4gLTEpCisgICAgICAgICAg
ICAgICAgdGVzdFBhc3NlZCgncmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUg
Y29udGFpbmVkIHByb3BlcnR5ICInICsgRVhQRUNURURfQ1NTX1BST1BFUlRZX0ZPUl9EXzEgKyAn
Ii4nKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJd
Lm5ld1ZhbHVlICYmIHJlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdLm5ld1ZhbHVlLmluZGV4
T2YoRVhQRUNURURfQ1NTX1BST1BFUlRZX0ZPUl9EXzIpID4gLTEpCisgICAgICAgICAgICAgICAg
dGVzdFBhc3NlZCgncmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUgY29udGFp
bmVkIHByb3BlcnR5ICInICsgRVhQRUNURURfQ1NTX1BST1BFUlRZX0ZPUl9EXzIgKyAnIi4nKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCdyZXN1bHRzWyJt
b2RpZmljYXRpb24tc3R5bGUiXS5uZXdWYWx1ZSBzaG91bGQgZWl0aGVyIGNvbnRhaW4gIicgKyBF
WFBFQ1RFRF9DU1NfUFJPUEVSVFlfRk9SX0RfMSArCisgICAgICAgICAgICAgICAgICAgICciIG9y
ICInICsgRVhQRUNURURfQ1NTX1BST1BFUlRZX0ZPUl9EXzIgKyAnIi4gV2FzICInICsgcmVzdWx0
c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUgKyAnIi4nKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJtb2RpZmljYXRpb24t
c3R5bGUiXS5wcmV2VmFsdWUnLCAiIik7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ3Jlc3Vs
dHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdLnJlbGF0ZWROb2RlIGluc3RhbmNlb2YgQXR0cicpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayBSZW1vdmFsIEV2ZW50CisgICAg
ICAgIGRlYnVnKCc8YnIgLz5DYXVnaHQgUkVNT1ZBTDo8YnIgLz4nKTsKKyAgICAgICAgaWYgKCFy
ZXN1bHRzIHx8ICFyZXN1bHRzWyJyZW1vdmFsIl0pCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCdU
aGUgUkVNT1ZBTCBtdXRhdGlvbiBldmVudCB0eXBlIGRpZCBub3QgZmlyZS4nKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdyZXN1bHRzWyJyZW1vdmFsIl0u
YXR0ckNoYW5nZScsIE11dGF0aW9uRXZlbnQuUkVNT1ZBTCk7CisgICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbInJlbW92YWwiXS5hdHRyTmFtZScsICJjbGFzcyIpOwor
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJyZW1vdmFsIl0ubmV3
VmFsdWUnLCAiIik7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNb
InJlbW92YWwiXS5wcmV2VmFsdWUnLCAiYmxhY2stYmFja2dyb3VuZCIpOworICAgICAgICAgICAg
aWYgKCFyZXN1bHRzWyJyZW1vdmFsIl0ucmVsYXRlZE5vZGUpCisgICAgICAgICAgICAgICAgdGVz
dEZhaWxlZCgncmVzdWx0c1sicmVtb3ZhbCJdLnJlbGF0ZWROb2RlIHNob3VsZCBub3QgYmUgbnVs
bC4gV2FzICcgKyByZXN1bHRzWyJyZW1vdmFsIl0ucmVsYXRlZE5vZGUgKyAnLicpOworICAgICAg
ICAgICAgZWxzZSBpZiAocmVzdWx0c1sicmVtb3ZhbCJdLnJlbGF0ZWROb2RlLm5hbWUgIT0gcmVz
dWx0c1siYWRkaXRpb24iXS5hdHRyTmFtZSkKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCdy
ZXN1bHRzWyJyZW1vdmFsIl0ucmVsYXRlZE5vZGUubmFtZSBzaG91bGQgYmUgY2xhc3MuIFdhcyAn
ICsgcmVzdWx0c1sicmVtb3ZhbCJdLmF0dHJOYW1lICsgJy4nKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgICAgIAorICAgICAgICB0ZXN0RWxlbWVudElkID0gImFkZGl0aW9u
IjsKKyAgICAgICAgZmlyZUFkZGl0aW9uRXZlbnQoKTsKKyAgICAgICAgdGVzdEVsZW1lbnRJZCA9
ICJtb2RpZmljYXRpb24iOworICAgICAgICBmaXJlTW9kaWZpY2F0aW9uRXZlbnQoKTsKKyAgICAg
ICAgdGVzdEVsZW1lbnRJZCA9ICJyZW1vdmFsIjsKKyAgICAgICAgZmlyZVJlbW92YWxFdmVudCgp
OworICAgICAgICB0ZXN0RWxlbWVudElkID0gIm1vZGlmaWNhdGlvbi1zdHlsZSI7CisgICAgICAg
IGZpcmVNb2RpZmljYXRpb25PZlN0eWxlUHJvcGVydHlFdmVudCgpOworICAgICAgICBjaGVja1Jl
c3VsdHMoKTsKKyAgICAgICAgCisgICAgICAgIHZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInRlc3QtY29udGFpbmVyIik7CisgICAgICAgIGlmICh0ZXN0Q29udGFp
bmVyKQorICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVy
KTsKKyAgICAgICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRF
PC9zcGFuPicpOworICAgIH0KKyAgICAKKyAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJE
T01BdHRyTW9kaWZpZWQiLCByZWNvcmRET01NdXRhdGlvbkV2ZW50LCBmYWxzZSk7Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorICAgIDxk
aXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICAgICAgPGRpdiBpZD0iYWRkaXRpb24iPkE8L2Rp
dj4KKyAgICAgICAgPGRpdiBpZD0ibW9kaWZpY2F0aW9uIiBjbGFzcz0ieWVsbG93LWJhY2tncm91
bmQiPkI8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0icmVtb3ZhbCIgY2xhc3M9ImJsYWNrLWJhY2tn
cm91bmQiPkM8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0ibW9kaWZpY2F0aW9uLXN0eWxlIj5EPC9k
aXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlw
dD4KKyAgICAgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgRE9NIExl
dmVsIDIgJnF1b3Q7RE9NQXR0ck1vZGlmaWVkJnF1b3Q7IG11dGF0aW9uIGV2ZW50IHR5cGUgd29y
a3MgYW5kIGNvbmZvcm0gdG8gIiArCisgICAgICAgICAgICAgICAgICAgICI8YSBocmVmPSciICsg
VzNDX1JFRkVSRU5DRV9VUkwgKyAiJz4iICsgVzNDX1JFRkVSRU5DRV9VUkwgKyAiPC9hPi4iKTsK
KyAgICAgICAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="24176"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>42616</attachid>
            <date>2009-11-05 18:31:27 -0800</date>
            <delta_ts>2009-11-05 18:31:27 -0800</delta_ts>
            <desc>Self contained Layout test &quot;fire-DOMAttrModified-events&quot;</desc>
            <filename>fire-DOMAttrModified-events-self-contained.html</filename>
            <type>text/html</type>
            <size>14416</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c2NyaXB0PgovLyBFeHRyYWN0ZWQgZnJvbSBmaWxlIExheW91dFRlc3Rz
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzCmZ1bmN0aW9uIGRlc2NyaXB0aW9uKG1z
ZykKewogICAgLy8gRm9yIE1TSUUgNiBjb21wYXRpYmlsaXR5CiAgICB2YXIgc3BhbiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHNwYW4uaW5uZXJIVE1MID0gJzxwPicgKyBt
c2cgKyAnPC9wPjxwPk9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiPHNwYW4g
Y2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIjxzcGFuIGNs
YXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPiIuPC9wPic7CiAgICB2YXIgZGVzY3JpcHRp
b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVzY3JpcHRpb24iKTsKICAgIGlmIChkZXNj
cmlwdGlvbi5maXJzdENoaWxkKQogICAgICAgIGRlc2NyaXB0aW9uLnJlcGxhY2VDaGlsZChzcGFu
LCBkZXNjcmlwdGlvbi5maXJzdENoaWxkKTsKICAgIGVsc2UKICAgICAgICBkZXNjcmlwdGlvbi5h
cHBlbmRDaGlsZChzcGFuKTsKfQoKZnVuY3Rpb24gZGVidWcobXNnKQp7CiAgICB2YXIgc3BhbiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBY
SFRNTCBrbm93cyB0aGUgbmFtZXNwYWNlCiAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIg
Lz4nOwp9CgpmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCnsKICAgIHJldHVybiB0ZXh0LnJlcGxh
Y2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOwp9CgpmdW5jdGlvbiB0ZXN0
UGFzc2VkKG1zZykKewogICAgZGVidWcoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9z
cGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKfQoKZnVuY3Rpb24gdGVzdEZh
aWxlZChtc2cpCnsKICAgIGRlYnVnKCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bh
bj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cn0KCmZ1bmN0aW9uIGFyZUFycmF5
c0VxdWFsKF9hLCBfYikKewogICAgaWYgKF9hLmxlbmd0aCAhPT0gX2IubGVuZ3RoKQogICAgICAg
IHJldHVybiBmYWxzZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2EubGVuZ3RoOyBpKyspCiAg
ICAgICAgaWYgKF9hW2ldICE9PSBfYltpXSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
cmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGlzTWludXNaZXJvKG4pCnsKICAgIC8vIHRoZSBvbmx5
IHdheSB0byB0ZWxsIDAgZnJvbSAtMCBpbiBKUyBpcyB0aGUgZmFjdCB0aGF0IDEvLTAgaXMKICAg
IC8vIC1JbmZpbml0eSBpbnN0ZWFkIG9mIEluZmluaXR5CiAgICByZXR1cm4gbiA9PT0gMCAmJiAx
L24gPCAwOwp9CgpmdW5jdGlvbiBpc1Jlc3VsdENvcnJlY3QoX2FjdHVhbCwgX2V4cGVjdGVkKQp7
CiAgICBpZiAoX2V4cGVjdGVkID09PSAwKQogICAgICAgIHJldHVybiBfYWN0dWFsID09PSBfZXhw
ZWN0ZWQgJiYgKDEvX2FjdHVhbCkgPT09ICgxL19leHBlY3RlZCk7CiAgICBpZiAoX2FjdHVhbCA9
PT0gX2V4cGVjdGVkKQogICAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGVvZihfZXhwZWN0
ZWQpID09ICJudW1iZXIiICYmIGlzTmFOKF9leHBlY3RlZCkpCiAgICAgICAgcmV0dXJuIHR5cGVv
ZihfYWN0dWFsKSA9PSAibnVtYmVyIiAmJiBpc05hTihfYWN0dWFsKTsKICAgIGlmIChPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoX2V4cGVjdGVkKSA9PSBPYmplY3QucHJvdG90eXBlLnRv
U3RyaW5nLmNhbGwoW10pKQogICAgICAgIHJldHVybiBhcmVBcnJheXNFcXVhbChfYWN0dWFsLCBf
ZXhwZWN0ZWQpOwogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBzdHJpbmdpZnkodikKewog
ICAgaWYgKHYgPT09IDAgJiYgMS92IDwgMCkKICAgICAgICByZXR1cm4gIi0wIjsKICAgIGVsc2Ug
cmV0dXJuICIiICsgdjsKfQoKZnVuY3Rpb24gZXZhbEFuZExvZyhfYSkKewogIGlmICh0eXBlb2Yg
X2EgIT0gInN0cmluZyIpCiAgICBkZWJ1ZygiV0FSTjogdHJ5QW5kTG9nKCkgZXhwZWN0cyBhIHN0
cmluZyBhcmd1bWVudCIpOwoKICAvLyBMb2cgZmlyc3QgaW4gY2FzZSB0aGluZ3MgZ28gaG9ycmli
bHkgd3Jvbmcgb3IgdGhpcyBjYXVzZXMgYSBzeW5jIGV2ZW50LgogIGRlYnVnKF9hKTsKCiAgdmFy
IF9hdjsKICB0cnkgewogICAgIF9hdiA9IGV2YWwoX2EpOwogIH0gY2F0Y2ggKGUpIHsKICAgIHRl
c3RGYWlsZWQoX2EgKyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZSk7CiAgfQp9CgpmdW5jdGlvbiBz
aG91bGRCZShfYSwgX2IpCnsKICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBf
YiAhPSAic3RyaW5nIikKICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZSgpIGV4cGVjdHMgc3RyaW5n
IGFyZ3VtZW50cyIpOwogIHZhciBleGNlcHRpb247CiAgdmFyIF9hdjsKICB0cnkgewogICAgIF9h
diA9IGV2YWwoX2EpOwogIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwogIH0KICB2
YXIgX2J2ID0gZXZhbChfYik7CgogIGlmIChleGNlcHRpb24pCiAgICB0ZXN0RmFpbGVkKF9hICsg
IiBzaG91bGQgYmUgIiArIF9idiArICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsK
ICBlbHNlIGlmIChpc1Jlc3VsdENvcnJlY3QoX2F2LCBfYnYpKQogICAgdGVzdFBhc3NlZChfYSAr
ICIgaXMgIiArIF9iKTsKICBlbHNlIGlmICh0eXBlb2YoX2F2KSA9PSB0eXBlb2YoX2J2KSkKICAg
IHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsgIi4gV2FzICIgKyBzdHJpbmdp
ZnkoX2F2KSArICIuIik7CiAgZWxzZQogICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIg
KyBfYnYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgX2J2ICsgIikuIFdhcyAiICsgX2F2ICsgIiAo
b2YgdHlwZSAiICsgdHlwZW9mIF9hdiArICIpLiIpOwp9CgpmdW5jdGlvbiBzaG91bGRCZVRydWUo
X2EpIHsgc2hvdWxkQmUoX2EsICJ0cnVlIik7IH0KZnVuY3Rpb24gc2hvdWxkQmVGYWxzZShfYSkg
eyBzaG91bGRCZShfYSwgImZhbHNlIik7IH0KZnVuY3Rpb24gc2hvdWxkQmVOYU4oX2EpIHsgc2hv
dWxkQmUoX2EsICJOYU4iKTsgfQpmdW5jdGlvbiBzaG91bGRCZU51bGwoX2EpIHsgc2hvdWxkQmUo
X2EsICJudWxsIik7IH0KCmZ1bmN0aW9uIHNob3VsZEJlRXF1YWxUb1N0cmluZyhhLCBiKQp7CiAg
dmFyIHVuZXZhbGVkU3RyaW5nID0gJyInICsgYi5yZXBsYWNlKC8iL2csICJcIiIpICsgJyInOwog
IHNob3VsZEJlKGEsIHVuZXZhbGVkU3RyaW5nKTsKfQoKZnVuY3Rpb24gc2hvdWxkRXZhbHVhdGVU
byhhY3R1YWwsIGV4cGVjdGVkKSB7CiAgLy8gQSBnZW5lcmFsLXB1cnBvc2UgY29tcGFyYXRvci4g
ICdhY3R1YWwnIHNob3VsZCBiZSBhIHN0cmluZyB0byBiZQogIC8vIGV2YWx1YXRlZCwgYXMgZm9y
IHNob3VsZEJlKCkuICdleHBlY3RlZCcgbWF5IGJlIGFueSB0eXBlIGFuZCB3aWxsIGJlCiAgLy8g
dXNlZCB3aXRob3V0IGJlaW5nIGV2YWwnZWQuCiAgaWYgKGV4cGVjdGVkID09IG51bGwpIHsKICAg
IC8vIERvIHRoaXMgYmVmb3JlIHRoZSBvYmplY3QgdGVzdCwgc2luY2UgbnVsbCBpcyBvZiB0eXBl
ICdvYmplY3QnLgogICAgc2hvdWxkQmVOdWxsKGFjdHVhbCk7CiAgfSBlbHNlIGlmICh0eXBlb2Yg
ZXhwZWN0ZWQgPT0gInVuZGVmaW5lZCIpIHsKICAgIHNob3VsZEJlVW5kZWZpbmVkKGFjdHVhbCk7
CiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gImZ1bmN0aW9uIikgewogICAgLy8gQWxs
IHRoaXMgZnVzcyBpcyB0byBhdm9pZCB0aGUgc3RyaW5nLWFyZyB3YXJuaW5nIGZyb20gc2hvdWxk
QmUoKS4KICAgIHRyeSB7CiAgICAgIGFjdHVhbFZhbHVlID0gZXZhbChhY3R1YWwpOwogICAgfSBj
YXRjaCAoZSkgewogICAgICB0ZXN0RmFpbGVkKCJFdmFsdWF0aW5nICIgKyBhY3R1YWwgKyAiOiBU
aHJldyBleGNlcHRpb24gIiArIGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBzaG91bGRCZSgi
JyIgKyBhY3R1YWxWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xuL2csICIiKSArICInIiwKICAg
ICAgICAgICAgICInIiArIGV4cGVjdGVkLnRvU3RyaW5nKCkucmVwbGFjZSgvXG4vZywgIiIpICsg
IiciKTsKICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAib2JqZWN0IikgewogICAgc2hv
dWxkQmVUcnVlKGFjdHVhbCArICIgPT0gJyIgKyBleHBlY3RlZCArICInIik7CiAgfSBlbHNlIGlm
ICh0eXBlb2YgZXhwZWN0ZWQgPT0gInN0cmluZyIpIHsKICAgIHNob3VsZEJlKGFjdHVhbCwgZXhw
ZWN0ZWQpOwogIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJib29sZWFuIikgewogICAg
c2hvdWxkQmUoInR5cGVvZiAiICsgYWN0dWFsLCAiJ2Jvb2xlYW4nIik7CiAgICBpZiAoZXhwZWN0
ZWQpCiAgICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwpOwogICAgZWxzZQogICAgICBzaG91bGRCZUZh
bHNlKGFjdHVhbCk7CiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gIm51bWJlciIpIHsK
ICAgIHNob3VsZEJlKGFjdHVhbCwgc3RyaW5naWZ5KGV4cGVjdGVkKSk7CiAgfSBlbHNlIHsKICAg
IGRlYnVnKGV4cGVjdGVkICsgIiBpcyB1bmtub3duIHR5cGUgIiArIHR5cGVvZiBleHBlY3RlZCk7
CiAgICBzaG91bGRCZVRydWUoYWN0dWFsLCAiJyIgICtleHBlY3RlZC50b1N0cmluZygpICsgIici
KTsKICB9Cn0KCmZ1bmN0aW9uIHNob3VsZEJlVW5kZWZpbmVkKF9hKQp7CiAgdmFyIGV4Y2VwdGlv
bjsKICB2YXIgX2F2OwogIHRyeSB7CiAgICAgX2F2ID0gZXZhbChfYSk7CiAgfSBjYXRjaCAoZSkg
ewogICAgIGV4Y2VwdGlvbiA9IGU7CiAgfQoKICBpZiAoZXhjZXB0aW9uKQogICAgdGVzdEZhaWxl
ZChfYSArICIgc2hvdWxkIGJlIHVuZGVmaW5lZC4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRp
b24pOwogIGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCiAgICB0ZXN0UGFzc2Vk
KF9hICsgIiBpcyB1bmRlZmluZWQuIik7CiAgZWxzZQogICAgdGVzdEZhaWxlZChfYSArICIgc2hv
dWxkIGJlIHVuZGVmaW5lZC4gV2FzICIgKyBfYXYpOwp9CgoKZnVuY3Rpb24gc2hvdWxkVGhyb3co
X2EsIF9lKQp7CiAgdmFyIGV4Y2VwdGlvbjsKICB2YXIgX2F2OwogIHRyeSB7CiAgICAgX2F2ID0g
ZXZhbChfYSk7CiAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CiAgfQoKICB2YXIg
X2V2OwogIGlmIChfZSkKICAgICAgX2V2ID0gIGV2YWwoX2UpOwoKICBpZiAoZXhjZXB0aW9uKSB7
CiAgICBpZiAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiIHx8IGV4Y2VwdGlvbiA9PSBfZXYpCiAg
ICAgIHRlc3RQYXNzZWQoX2EgKyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uICsgIi4i
KTsKICAgIGVsc2UKICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93ICIgKyAodHlw
ZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4gVGhyZXcg
ZXhjZXB0aW9uICIgKyBleGNlcHRpb24gKyAiLiIpOwogIH0gZWxzZSBpZiAodHlwZW9mIF9hdiA9
PSAidW5kZWZpbmVkIikKICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5
cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIuIFdhcyB1
bmRlZmluZWQuIik7CiAgZWxzZQogICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93ICIg
KyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4g
V2FzICIgKyBfYXYgKyAiLiIpOwp9CgpmdW5jdGlvbiBnYygpIHsKICAgIGlmICh0eXBlb2YgR0ND
b250cm9sbGVyICE9PSAidW5kZWZpbmVkIikKICAgICAgICBHQ0NvbnRyb2xsZXIuY29sbGVjdCgp
OwogICAgZWxzZSB7CiAgICAgICAgZnVuY3Rpb24gZ2NSZWMobikgewogICAgICAgICAgICBpZiAo
biA8IDEpCiAgICAgICAgICAgICAgICByZXR1cm4ge307CiAgICAgICAgICAgIHZhciB0ZW1wID0g
e2k6ICJhYiIgKyBpICsgKGkgLyAxMDAwMDApfTsKICAgICAgICAgICAgdGVtcCArPSAiZm9vIjsK
ICAgICAgICAgICAgZ2NSZWMobi0xKTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwOyBpKyspCiAgICAgICAgICAgIGdjUmVjKDEwKQogICAgfQp9Cjwvc2NyaXB0Pgo8
c3R5bGU+CiNhZGRpdGlvbiwgI21vZGlmaWNhdGlvbiwgI3JlbW92YWwsICNtb2RpZmljYXRpb24t
c3R5bGUgeyB3aWR0aDogNjRweDsgaGVpZ2h0OiA2NHB4OyBkaXNwbGF5OiB0YWJsZS1jZWxsOyB0
ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGJvcmRlcjogMXB4IHNv
bGlkIGJsYWNrOyB9CiNhZGRpdGlvbiB7IGNvbG9yOiB3aGl0ZTsgfQojbW9kaWZpY2F0aW9uIHsg
Y29sb3I6IHllbGxvdzsgfQoucmVkLWJhY2tncm91bmQgeyBiYWNrZ3JvdW5kOiByZWQ7IH0KLnll
bGxvdy1iYWNrZ3JvdW5kIHsgYmFja2dyb3VuZDogeWVsbG93OyB9Ci5ibHVlLWJhY2tncm91bmQg
eyBiYWNrZ3JvdW5kOiBibHVlOyB9Ci5ibGFjay1iYWNrZ3JvdW5kIHsgYmFja2dyb3VuZDogYmxh
Y2s7IH0KCi8qIEV4dHJhY3RlZCBmcm9tIGZpbGUgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MgKi8KLnBhc3MgeyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6
IGdyZWVuOyB9Ci5mYWlsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiByZWQ7IH0KI2NvbnNv
bGUgeyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IH0KPC9z
dHlsZT4KPHNjcmlwdD4KICAgIHZhciBhZGRpdGlvbkVsZW1lbnQ7CiAgICB2YXIgbW9kaWZpY2F0
aW9uRWxlbWVudDsKICAgIHZhciBtb2RpZmljYXRpb25PZlN0eWxlRWxlbWVudDsKICAgIHZhciBy
ZW1vdmFsRWxlbWVudDsKICAgIAogICAgdmFyIFczQ19SRUZFUkVOQ0VfVVJMID0gImh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUV2ZW50cy0yMDAwMTExMy9ldmVudHMu
aHRtbCNFdmVudHMtTXV0YXRpb25FdmVudCI7CiAgICAKICAgIHZhciBFWFBFQ1RFRF9CQUNLR1JP
VU5EX0ZPUl9BID0gInJlZC1iYWNrZ3JvdW5kIjsKICAgIHZhciBFWFBFQ1RFRF9CQUNLR1JPVU5E
X0ZPUl9CID0gImJsdWUtYmFja2dyb3VuZCI7CiAgICB2YXIgRVhQRUNURURfQkFDS0dST1VORF9G
T1JfQyA9IG51bGw7CiAgICB2YXIgRVhQRUNURURfQkFDS0dST1VORF9GT1JfRCA9ICJwdXJwbGUi
OwogICAgdmFyIEVYUEVDVEVEX0NTU19QUk9QRVJUWV9GT1JfRF8xID0gImJhY2tncm91bmQ6ICIg
KyBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9EOyAvLyBGaXJlZm94IHJldHVybnMgdGhpcy4KICAg
IHZhciBFWFBFQ1RFRF9DU1NfUFJPUEVSVFlfRk9SX0RfMiA9ICJiYWNrZ3JvdW5kLWNvbG9yOiAi
ICsgRVhQRUNURURfQkFDS0dST1VORF9GT1JfRDsgLy8gV2ViS2l0IHJldHVybnMgdGhpcy4KICAg
IAogICAgdmFyIHRlc3RFbGVtZW50SWQ7CiAgICB2YXIgcmVzdWx0czsKCiAgICB3aW5kb3cub25s
b2FkID0gZnVuY3Rpb24oKQogICAgewogICAgICAgIGFkZGl0aW9uRWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJhZGRpdGlvbiIpOwogICAgICAgIG1vZGlmaWNhdGlvbkVsZW1lbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9kaWZpY2F0aW9uIik7CiAgICAgICAgcmVtb3Zh
bEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVtb3ZhbCIpOwogICAgICAgIG1v
ZGlmaWNhdGlvbk9mU3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vZGlm
aWNhdGlvbi1zdHlsZSIpOwogICAgICAgIAogICAgICAgIHJ1blRlc3QoKTsKICAgIH0KICAgIAog
ICAgZnVuY3Rpb24gZmlyZUFkZGl0aW9uRXZlbnQoKQogICAgewogICAgICAgIGlmIChhZGRpdGlv
bkVsZW1lbnQpCiAgICAgICAgICAgIGFkZGl0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoImNsYXNz
IiwgRVhQRUNURURfQkFDS0dST1VORF9GT1JfQSk7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGZp
cmVNb2RpZmljYXRpb25FdmVudCgpCiAgICB7CiAgICAgICAgaWYgKG1vZGlmaWNhdGlvbkVsZW1l
bnQpCiAgICAgICAgICAgIG1vZGlmaWNhdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIs
IEVYUEVDVEVEX0JBQ0tHUk9VTkRfRk9SX0IpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBmaXJl
UmVtb3ZhbEV2ZW50KCkKICAgIHsKICAgICAgICBpZiAocmVtb3ZhbEVsZW1lbnQpCiAgICAgICAg
ICAgIHJlbW92YWxFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKTsKICAgIH0KICAgIAog
ICAgZnVuY3Rpb24gZmlyZU1vZGlmaWNhdGlvbk9mU3R5bGVQcm9wZXJ0eUV2ZW50KCkKICAgIHsK
ICAgICAgICBpZiAobW9kaWZpY2F0aW9uT2ZTdHlsZUVsZW1lbnQpCiAgICAgICAgICAgIG1vZGlm
aWNhdGlvbk9mU3R5bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSBFWFBFQ1RFRF9CQUNLR1JP
VU5EX0ZPUl9EOwogICAgfQogICAgCiAgICBmdW5jdGlvbiByZWNvcmRET01NdXRhdGlvbkV2ZW50
KGUpCiAgICB7CiAgICAgICAgaWYgKCF0ZXN0RWxlbWVudElkKQogICAgICAgICAgICByZXR1cm47
CiAgICAgICAgCiAgICAgICAgaWYgKCFyZXN1bHRzKQogICAgICAgICAgICByZXN1bHRzID0gbmV3
IEFycmF5KCk7CiAgICAgICAgcmVzdWx0c1t0ZXN0RWxlbWVudElkXSA9IGU7CiAgICAgICAgdGVz
dEVsZW1lbnRJZCA9IG51bGw7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGNoZWNrUmVzdWx0cygp
CiAgICB7CiAgICAgICAgLy8gQ2hlY2sgQWRkaXRpb24gRXZlbnQKICAgICAgICBkZWJ1ZygnPGJy
IC8+Q2F1Z2h0IEFERElUSU9OOjxiciAvPicpOwogICAgICAgIGlmICghcmVzdWx0cyB8fCAhcmVz
dWx0c1siYWRkaXRpb24iXSkKICAgICAgICAgICAgdGVzdEZhaWxlZCgnVGhlIEFERElUSU9OIG11
dGF0aW9uIGV2ZW50IHR5cGUgZGlkIG5vdCBmaXJlLicpOwogICAgICAgIGVsc2UgewogICAgICAg
ICAgICBzaG91bGRFdmFsdWF0ZVRvKCdyZXN1bHRzWyJhZGRpdGlvbiJdLmF0dHJDaGFuZ2UnLCBN
dXRhdGlvbkV2ZW50LkFERElUSU9OKTsKICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdyZXN1bHRzWyJhZGRpdGlvbiJdLmF0dHJOYW1lJywgImNsYXNzIik7CiAgICAgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1siYWRkaXRpb24iXS5uZXdWYWx1ZScsIEVYUEVD
VEVEX0JBQ0tHUk9VTkRfRk9SX0EpOwogICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J3Jlc3VsdHNbImFkZGl0aW9uIl0ucHJldlZhbHVlJywgIiIpOwogICAgICAgICAgICBpZiAoIXJl
c3VsdHNbImFkZGl0aW9uIl0ucmVsYXRlZE5vZGUpCiAgICAgICAgICAgICAgICB0ZXN0RmFpbGVk
KCdyZXN1bHRzWyJhZGRpdGlvbiJdLnJlbGF0ZWROb2RlIHNob3VsZCBub3QgaGF2ZSBiZWVuIG51
bGwsIGJ1dCBpdCB3YXMgbnVsbC4nKTsKICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0c1siYWRk
aXRpb24iXS5yZWxhdGVkTm9kZS5uYW1lICE9IHJlc3VsdHNbImFkZGl0aW9uIl0uYXR0ck5hbWUp
CiAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCdyZXN1bHRzWyJhZGRpdGlvbiJdLnJlbGF0ZWRO
b2RlLm5hbWUgc2hvdWxkIGJlIGNsYXNzLCBpbnN0ZWFkIGl0IHdhcyAnICsgcmVzdWx0c1siYWRk
aXRpb24iXS5hdHRyTmFtZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIENoZWNrIE1v
ZGlmaWNhdGlvbiBFdmVudCBmb3IgSFRNTCBhdHRyaWJ1dGUKICAgICAgICBkZWJ1ZygnPGJyIC8+
Q2F1Z2h0IE1PRElGSUNBVElPTjo8YnIgLz4nKTsKICAgICAgICBpZiAoIXJlc3VsdHMgfHwgIXJl
c3VsdHNbIm1vZGlmaWNhdGlvbiJdKQogICAgICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgTU9ESUZJ
Q0FUSU9OIG11dGF0aW9uIGV2ZW50IHR5cGUgZGlkIG5vdCBmaXJlLicpOwogICAgICAgIGVsc2Ug
ewogICAgICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdyZXN1bHRzWyJtb2RpZmljYXRpb24iXS5h
dHRyQ2hhbmdlJywgTXV0YXRpb25FdmVudC5NT0RJRklDQVRJT04pOwogICAgICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbiJdLmF0dHJOYW1lJywgImNs
YXNzIik7CiAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1sibW9kaWZp
Y2F0aW9uIl0ubmV3VmFsdWUnLCBFWFBFQ1RFRF9CQUNLR1JPVU5EX0ZPUl9CKTsKICAgICAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJtb2RpZmljYXRpb24iXS5wcmV2VmFs
dWUnLCAieWVsbG93LWJhY2tncm91bmQiKTsKICAgICAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygn
cmVzdWx0c1sibW9kaWZpY2F0aW9uIl0ucmVsYXRlZE5vZGUnLCBtb2RpZmljYXRpb25FbGVtZW50
LmdldEF0dHJpYnV0ZU5vZGUoImNsYXNzIikpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAv
LyBDaGVjayBNb2RpZmljYXRpb24gRXZlbnQgZm9yIENTUyBwcm9wZXJ0eQogICAgICAgIGRlYnVn
KCc8YnIgLz5DYXVnaHQgTU9ESUZJQ0FUSU9OIChvZiBDU1MgcHJvcGVydHkpOjxiciAvPicpOwog
ICAgICAgIGlmICghcmVzdWx0cyB8fCAhcmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0pCiAg
ICAgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBNT0RJRklDQVRJT04gbXV0YXRpb24gZXZlbnQgdHlw
ZSBkaWQgbm90IGZpcmUuJyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHNob3VsZEV2YWx1
YXRlVG8oJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdLmF0dHJDaGFuZ2UnLCBNdXRhdGlv
bkV2ZW50Lk1PRElGSUNBVElPTik7CiAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
cmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0uYXR0ck5hbWUnLCAic3R5bGUiKTsKICAgICAg
ICAgICAgCiAgICAgICAgICAgIGlmIChyZXN1bHRzWyJtb2RpZmljYXRpb24tc3R5bGUiXS5uZXdW
YWx1ZSAmJiByZXN1bHRzWyJtb2RpZmljYXRpb24tc3R5bGUiXS5uZXdWYWx1ZS5pbmRleE9mKEVY
UEVDVEVEX0NTU19QUk9QRVJUWV9GT1JfRF8xKSA+IC0xKQogICAgICAgICAgICAgICAgdGVzdFBh
c3NlZCgncmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUgY29udGFpbmVkIHBy
b3BlcnR5ICInICsgRVhQRUNURURfQ1NTX1BST1BFUlRZX0ZPUl9EXzEgKyAnIi4nKTsKICAgICAg
ICAgICAgZWxzZSBpZiAocmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUgJiYg
cmVzdWx0c1sibW9kaWZpY2F0aW9uLXN0eWxlIl0ubmV3VmFsdWUuaW5kZXhPZihFWFBFQ1RFRF9D
U1NfUFJPUEVSVFlfRk9SX0RfMikgPiAtMSkKICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoJ3Jl
c3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdLm5ld1ZhbHVlIGNvbnRhaW5lZCBwcm9wZXJ0eSAi
JyArIEVYUEVDVEVEX0NTU19QUk9QRVJUWV9GT1JfRF8yICsgJyIuJyk7CiAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHls
ZSJdLm5ld1ZhbHVlIHNob3VsZCBlaXRoZXIgY29udGFpbiAiJyArIEVYUEVDVEVEX0NTU19QUk9Q
RVJUWV9GT1JfRF8xICsKICAgICAgICAgICAgICAgICAgICAnIiBvciAiJyArIEVYUEVDVEVEX0NT
U19QUk9QRVJUWV9GT1JfRF8yICsgJyIuIFdhcyAiJyArIHJlc3VsdHNbIm1vZGlmaWNhdGlvbi1z
dHlsZSJdLm5ld1ZhbHVlICsgJyIuJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ3Jlc3VsdHNbIm1vZGlmaWNhdGlvbi1zdHlsZSJdLnByZXZWYWx1ZScs
ICIiKTsKICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCdyZXN1bHRzWyJtb2RpZmljYXRpb24tc3R5
bGUiXS5yZWxhdGVkTm9kZSBpbnN0YW5jZW9mIEF0dHInKTsKICAgICAgICB9CiAgICAgICAgCiAg
ICAgICAgLy8gQ2hlY2sgUmVtb3ZhbCBFdmVudAogICAgICAgIGRlYnVnKCc8YnIgLz5DYXVnaHQg
UkVNT1ZBTDo8YnIgLz4nKTsKICAgICAgICBpZiAoIXJlc3VsdHMgfHwgIXJlc3VsdHNbInJlbW92
YWwiXSkKICAgICAgICAgICAgdGVzdEZhaWxlZCgnVGhlIFJFTU9WQUwgbXV0YXRpb24gZXZlbnQg
dHlwZSBkaWQgbm90IGZpcmUuJyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHNob3VsZEV2
YWx1YXRlVG8oJ3Jlc3VsdHNbInJlbW92YWwiXS5hdHRyQ2hhbmdlJywgTXV0YXRpb25FdmVudC5S
RU1PVkFMKTsKICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZXN1bHRzWyJyZW1v
dmFsIl0uYXR0ck5hbWUnLCAiY2xhc3MiKTsKICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdyZXN1bHRzWyJyZW1vdmFsIl0ubmV3VmFsdWUnLCAiIik7CiAgICAgICAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygncmVzdWx0c1sicmVtb3ZhbCJdLnByZXZWYWx1ZScsICJibGFjay1i
YWNrZ3JvdW5kIik7CiAgICAgICAgICAgIGlmICghcmVzdWx0c1sicmVtb3ZhbCJdLnJlbGF0ZWRO
b2RlKQogICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgncmVzdWx0c1sicmVtb3ZhbCJdLnJlbGF0
ZWROb2RlIHNob3VsZCBub3QgYmUgbnVsbC4gV2FzICcgKyByZXN1bHRzWyJyZW1vdmFsIl0ucmVs
YXRlZE5vZGUgKyAnLicpOwogICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRzWyJyZW1vdmFsIl0u
cmVsYXRlZE5vZGUubmFtZSAhPSByZXN1bHRzWyJhZGRpdGlvbiJdLmF0dHJOYW1lKQogICAgICAg
ICAgICAgICAgdGVzdEZhaWxlZCgncmVzdWx0c1sicmVtb3ZhbCJdLnJlbGF0ZWROb2RlLm5hbWUg
c2hvdWxkIGJlIGNsYXNzLiBXYXMgJyArIHJlc3VsdHNbInJlbW92YWwiXS5hdHRyTmFtZSArICcu
Jyk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBydW5UZXN0KCkKICAgIHsKICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAgICAgCiAgICAgICAgdGVzdEVsZW1lbnRJ
ZCA9ICJhZGRpdGlvbiI7CiAgICAgICAgZmlyZUFkZGl0aW9uRXZlbnQoKTsKICAgICAgICB0ZXN0
RWxlbWVudElkID0gIm1vZGlmaWNhdGlvbiI7CiAgICAgICAgZmlyZU1vZGlmaWNhdGlvbkV2ZW50
KCk7CiAgICAgICAgdGVzdEVsZW1lbnRJZCA9ICJyZW1vdmFsIjsKICAgICAgICBmaXJlUmVtb3Zh
bEV2ZW50KCk7CiAgICAgICAgdGVzdEVsZW1lbnRJZCA9ICJtb2RpZmljYXRpb24tc3R5bGUiOwog
ICAgICAgIGZpcmVNb2RpZmljYXRpb25PZlN0eWxlUHJvcGVydHlFdmVudCgpOwogICAgICAgIGNo
ZWNrUmVzdWx0cygpOwogICAgICAgIAogICAgICAgIHZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QtY29udGFpbmVyIik7CiAgICAgICAgaWYgKHRlc3RDb250
YWluZXIpCiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5l
cik7CiAgICAgICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRF
PC9zcGFuPicpOwogICAgfQogICAgCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01B
dHRyTW9kaWZpZWQiLCByZWNvcmRET01NdXRhdGlvbkV2ZW50LCBmYWxzZSk7Cjwvc2NyaXB0Pgo8
L2hlYWQ+Cjxib2R5PgogICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CiAgICA8ZGl2IGlkPSJ0
ZXN0LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0iYWRkaXRpb24iPkE8L2Rpdj4KICAgICAg
ICA8ZGl2IGlkPSJtb2RpZmljYXRpb24iIGNsYXNzPSJ5ZWxsb3ctYmFja2dyb3VuZCI+QjwvZGl2
PgogICAgICAgIDxkaXYgaWQ9InJlbW92YWwiIGNsYXNzPSJibGFjay1iYWNrZ3JvdW5kIj5DPC9k
aXY+CiAgICAgICAgPGRpdiBpZD0ibW9kaWZpY2F0aW9uLXN0eWxlIj5EPC9kaXY+CiAgICA8L2Rp
dj4KICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgICBkZXNj
cmlwdGlvbigiVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBET00gTGV2ZWwgMiAmcXVvdDtET01B
dHRyTW9kaWZpZWQmcXVvdDsgbXV0YXRpb24gZXZlbnQgdHlwZSB3b3JrcyBhbmQgY29uZm9ybSB0
byAiICsKICAgICAgICAgICAgICAgICAgICAiPGEgaHJlZj0nIiArIFczQ19SRUZFUkVOQ0VfVVJM
ICsgIic+IiArIFczQ19SRUZFUkVOQ0VfVVJMICsgIjwvYT4uIik7CiAgICAgICAgdmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CiAgICA8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>