<?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>36782</bug_id>
          
          <creation_ts>2010-03-29 14:23:53 -0700</creation_ts>
          <short_desc>Add Layer Tree output capability to DRT</short_desc>
          <delta_ts>2010-04-01 14:59:17 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>205666</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-29 14:23:53 -0700</bug_when>
    <thetext>Today, it&apos;s difficult to do meaningful tests of composited content. There is no way to dump the render tree used for composited content (the GraphicsLayers) like there is for non-composited content. Adding this would give us much better test coverage.

Steps to implement:

1) Implement cross-platform dump format output for the GraphicsLayer tree.
2) Add a layerTreeAsText call to DRT to get this formatted output (with all the plumbing through the system)
3) Add initial tests to use the functionality

This gets us most of the way there, but leaves off one important testing area. Under the GraphicsLayers are platform specific objects which are used to do the actual rendering. On Mac this is based on CALayer, and on Windows it&apos;s based on CACFLayer. There are often multiple platform specific layers for each GraphicsLayer, and these layers have their own hierarchy. The GraphicsLayer and platform specific layer hierarchies must stay in sync, but there is currently no consistency checking going on. We should add such checking to the platform specific subclasses of GraphicsLayer (GraphicsLayerCA and GraphicsLayerCACF) and then assert when the checks fail. That way DRT will assert when testing the debug builds and the consistency checking won&apos;t get in the way of release performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205822</commentid>
    <comment_count>1</comment_count>
      <attachid>51997</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-29 20:33:16 -0700</bug_when>
    <thetext>Created attachment 51997
Patch with test case

Please do not review this patch yet. It is the Mac side. I need to add the Windows side to it. This is just a placeholder so I can put the patch on Windows and finish the work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205823</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-29 20:35:10 -0700</bug_when>
    <thetext>Actually, please do look the patch over. The general structure and test case are final. I just need to add the WebKit and DRT parts of the plumbing for Windows. Please comment on what&apos;s there so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205835</commentid>
    <comment_count>3</comment_count>
      <attachid>51997</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-03-29 21:22:26 -0700</bug_when>
    <thetext>Comment on attachment 51997
Patch with test case

&gt; Index: WebCore/page/Frame.cpp
&gt; ===================================================================

&gt; +String Frame::layerTreeAsText()
&gt; +{
&gt; +    if (!contentRenderer())
&gt; +        return String();
&gt; +
&gt; +    GraphicsLayer* rootLayer = contentRenderer()-&gt;compositor()-&gt;rootPlatformLayer();
&gt; +    if (!rootLayer)
&gt; +        return String();
&gt; +        
&gt; +    return rootLayer-&gt;layerTreeAsText();
&gt; +}

This needs to have #if ENABLE() guards inside it.


&gt; Index: WebCore/page/Frame.h
&gt; ===================================================================

&gt; +        String layerTreeAsText();

This method should be |const|.

&gt; Index: WebCore/platform/graphics/GraphicsLayer.cpp
&gt; ===================================================================

&gt; -void GraphicsLayer::dumpLayer(TextStream&amp; ts, int indent) const
&gt; +void GraphicsLayer::dumpLayer(TextStream&amp; ts, int indent, bool debug) const
&gt;  {
&gt;      writeIndent(ts, indent);
&gt; -    ts &lt;&lt; &quot;(&quot; &lt;&lt; &quot;GraphicsLayer&quot; &lt;&lt; &quot; &quot; &lt;&lt; static_cast&lt;void*&gt;(const_cast&lt;GraphicsLayer*&gt;(this));
&gt; -    ts &lt;&lt; &quot; \&quot;&quot; &lt;&lt; m_name &lt;&lt; &quot;\&quot;\n&quot;;
&gt; -    dumpProperties(ts, indent);
&gt; +    if (debug)
&gt; +        ts &lt;&lt; &quot;(&quot; &lt;&lt; &quot;GraphicsLayer&quot; &lt;&lt; &quot; &quot; &lt;&lt; static_cast&lt;void*&gt;(const_cast&lt;GraphicsLayer*&gt;(this));
&gt; +    else
&gt; +        ts &lt;&lt; &quot;(&quot; &lt;&lt; &quot;GraphicsLayer&quot;;

I&apos;d prefer this as:

  ts &lt;&lt; &quot;(&quot; &lt;&lt; &quot;GraphicsLayer&quot;;
  if (debug)
    ts &lt;&lt; &quot; &quot; &lt;&lt; static_cast&lt;void*&gt;(const_cast&lt;GraphicsLayer*&gt;(this));

&gt; -void GraphicsLayer::dumpProperties(TextStream&amp; ts, int indent) const
&gt; +void GraphicsLayer::dumpProperties(TextStream&amp; ts, int indent, bool debug) const

&gt; +    if (debug) {
&gt; +        if (m_client)
&gt; +            ts &lt;&lt; static_cast&lt;void*&gt;(m_client);
&gt; +        else
&gt; +            ts &lt;&lt; &quot;none&quot;;

Better as &quot;(no client)&quot; I think.

&gt; +        m_replicaLayer-&gt;dumpLayer(ts, indent+2, debug);

Spaces around the &quot;+&quot; please.

&gt; -            m_children[i]-&gt;dumpLayer(ts, indent+2);
&gt; +            m_children[i]-&gt;dumpLayer(ts, indent+2, debug);

Ditto.

&gt; Index: WebCore/platform/graphics/GraphicsLayer.h
&gt; ===================================================================
&gt; +    void dumpLayer(TextStream&amp;, int indent = 0, bool debug = false) const;

I can imagine that we want finer granularity than &quot;debug&quot;/&quot;not debug&quot; in the output in future. I&apos;d like to see this modeled after RenderAsTextBehavior in RenderTreeAsText.h. That also has the advantage of making the callsite easier to read (no mysterious &quot;true&quot; or &quot;false&quot;).

Another nice addition would be a debug-only method that can be called from gdb, just like showLayerTree() in RenderObject.h.


&gt; Index: LayoutTests/compositing/geometry/preserve-3d-switching.html
&gt; ===================================================================

I think this test should be committed separately. It would also be a little neater if the test dumped the layer output into a &lt;pre&gt; element.


&gt; Index: LayoutTests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt
&gt; ===================================================================
&gt; +  (position 0.00 0.00)
&gt; +  (anchor 0.50 0.50)
&gt; +  (bounds 800.00 600.00)
&gt; +  (opacity 1.00)
&gt; +  (usingTiledLayer 0)
&gt; +  (m_preserves3D 0)

Odd that this has m_

&gt; +  (drawsContent 0)
&gt; +  (m_backfaceVisibility visible)

Ditto. Maybe just avoid dumping properties that have default values.

&gt; +    (GraphicsLayer &quot;CALayer(0x105216350) GraphicsLayer(0x105215fe0) Document Node&quot;

This looks like debug output, which should never end up in a test result.

&gt; +          (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])

What is the story with outputting floating point. Can we make sure we don&apos;t get precision issues between platforms?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206724</commentid>
    <comment_count>4</comment_count>
      <attachid>52212</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-31 14:36:42 -0700</bug_when>
    <thetext>Created attachment 52212
Replacement patch

This makes changes from Simon&apos;s review and adds Windows side of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206729</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-31 14:41:37 -0700</bug_when>
    <thetext>Attachment 52212 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/GraphicsLayer.cpp:395:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebCore/platform/graphics/GraphicsLayer.cpp:489:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 5 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206734</commentid>
    <comment_count>6</comment_count>
      <attachid>52212</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-03-31 14:47:22 -0700</bug_when>
    <thetext>Comment on attachment 52212
Replacement patch

&gt; Index: WebCore/page/Frame.cpp
&gt; ===================================================================

&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +String Frame::layerTreeAsText() const

This should be inside the method, so that the method is still present in non-accel-comp builds (which avoids breaking the exports).

The method can return an empty string if ACCELERATED_COMPOSITING is off.

&gt; Index: WebCore/page/Frame.h
&gt; ===================================================================

&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +        String layerTreeAsText() const;
&gt; +#endif

This would not be wrapped here.

&gt; Index: WebCore/platform/graphics/GraphicsLayer.cpp
&gt; ===================================================================

&gt; +#ifndef NDEBUG
&gt; +void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer)
&gt; +{
&gt; +    if (!layer)
&gt; +        return;
&gt; +
&gt; +    WebCore::String output = layer-&gt;layerTreeAsText(LayerTreeAsTextDebug);

Doesn&apos;t LayerTreeAsTextDebug needs to be WebCore::LayerTreeAsTextDebug ?

&gt; Index: WebKit/win/WebFrame.cpp
&gt; ===================================================================

&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +    String text = frame-&gt;layerTreeAsText();
&gt; +#else
&gt; +    String text;
&gt; +#endif

You wouldn&apos;t need the #ifdef here.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207346</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-04-01 13:16:20 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/56934</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207395</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-01 14:05:18 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/56934 appears to have broken Chromium Win Release, Chromium Mac Release, and Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207428</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-01 14:59:17 -0700</bug_when>
    <thetext>Looks like those were just the first builders to break.  Looks like basically all builders broke from this change.

Sad that this got an r+ when the EWS had warned that this broke builds. :(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51997</attachid>
            <date>2010-03-29 20:33:16 -0700</date>
            <delta_ts>2010-03-31 14:36:42 -0700</delta_ts>
            <desc>Patch with test case</desc>
            <filename>36782.patch</filename>
            <type>text/plain</type>
            <size>22537</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Njc1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDMtMjkgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGVkIGxheWVyVHJlZUFzVGV4dCBmdW5jdGlvbiB0byBEUlQgKGZvciBNYWMpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjc4MgorCisgICAgICAgIFRo
aXMgYWRkcyB0aGUgZnVuY3Rpb24sIHBsdW1icyBpdCB0aHJvdWdoIHRvIHRoZSByb290CisgICAg
ICAgIEdyYXBoaWNzTGF5ZXIsIHdoaWNoIHRyYXZlcnNlcyB0aGUgbGF5ZXIgdHJlZSBhbmQgCisg
ICAgICAgIGdlbmVyYXRlcyBhIHN0cmluZyB3aXRoIHRoZSBsYXllciBoaWVyYXJjaHkuIFRoZSAK
KyAgICAgICAgZnVuY3Rpb24gY2FuIGdlbmVyYXRlICJkZWJ1ZyIgaW5mbyBvciBub3QuIERlYnVn
IGluZm8KKyAgICAgICAgaW5jbHVkZXMgZnVuY3Rpb24gcG9pbnRlcnMgd2hpY2ggYXJlIGhlbHBm
dWwgZm9yIGRlYnVnZ2luZworICAgICAgICBidXQgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRv
IG1hdGNoIGV4cGVjdGVkIHJlc3VsdHMuCisgICAgICAgIFdoZW4gRFJUIGNhbGxzIHRoZSBmdW5j
dGlvbiBpdCBwYXNzZXMgZGVidWc9ZmFsc2UuCisKKyAgICAgICAgVGVzdDogY29tcG9zaXRpbmcv
Z2VvbWV0cnkvcHJlc2VydmUtM2Qtc3dpdGNoaW5nLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUu
YmFzZS5leHA6ZXhwb3J0IGZ1bmN0aW9uIHN5bWJvbAorICAgICAgICAqIHBhZ2UvRnJhbWUuY3Bw
OldlYmNvcmUgc2lkZSBvZiBwbHVtYmluZworICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmxheWVy
VHJlZUFzVGV4dCk6CisgICAgICAgICogcGFnZS9GcmFtZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOkdlbmVyYXRpb24gb2YgdGhlIGhpZXJhcmNoeSBz
dHJpbmcKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmR1bXBMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpsYXllclRyZWVBc1RleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoKKwogMjAxMC0wMy0yOSAgQ2hyaXMgRXZhbnMg
IDxjZXZhbnNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgu
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiA1NjYyOSkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNl
LmV4cAkod29ya2luZyBjb3B5KQpAQCAtNTM3LDYgKzUzNyw3IEBAIF9fWk43V2ViQ29yZTVGcmFt
ZTExc2hvdWxkQ2xvc2VFdgogX19aTjdXZWJDb3JlNUZyYW1lMTNyZWFwcGx5U3R5bGVzRXYKIF9f
Wk43V2ViQ29yZTVGcmFtZTEzc2V0Wm9vbUZhY3RvckVmTlNfOFpvb21Nb2RlRQogX19aTjdXZWJD
b3JlNUZyYW1lMTRmcmFtZUZvcldpZGdldEVQS05TXzZXaWRnZXRFCitfX1pON1dlYkNvcmU1RnJh
bWUxNWxheWVyVHJlZUFzVGV4dEV2CiBfX1pON1dlYkNvcmU1RnJhbWUxNXJldmVhbFNlbGVjdGlv
bkVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RWIKIF9fWk43V2ViQ29yZTVGcmFtZTE3c2V0SXNEaXNj
b25uZWN0ZWRFYgogX19aTjdXZWJDb3JlNUZyYW1lMTlzZXRJblZpZXdTb3VyY2VNb2RlRWIKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAkocmV2aXNpb24gNTY2MjkpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgpAQCAtNjMsNiArNjQsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWdlR3JvdXAuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgpAQCAt
MTg1NCw0ICsxODU2LDE2IEBAIEludFJlY3QgRnJhbWU6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVu
dHMKIH0KICNlbmRpZgogCitTdHJpbmcgRnJhbWU6OmxheWVyVHJlZUFzVGV4dCgpCit7CisgICAg
aWYgKCFjb250ZW50UmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
R3JhcGhpY3NMYXllciogcm9vdExheWVyID0gY29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3Io
KS0+cm9vdFBsYXRmb3JtTGF5ZXIoKTsKKyAgICBpZiAoIXJvb3RMYXllcikKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgICAgICAKKyAgICByZXR1cm4gcm9vdExheWVyLT5sYXllclRyZWVB
c1RleHQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDU2
NjI5KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsx
MjIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTY3Jv
bGxiYXJNb2RlID0gU2Nyb2xsYmFyQXV0bywgU2Nyb2xsYmFyTW9kZSA9IFNjcm9sbGJhckF1dG8p
OwogCiAgICAgICAgIHZvaWQgaW5qZWN0VXNlclNjcmlwdHMoVXNlclNjcmlwdEluamVjdGlvblRp
bWUpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBw
ZXJXb3JsZCosIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGlt
ZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJ
KHJldmlzaW9uIDU2NjI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDE3ICszODgsMjMgQEAgc3RhdGljIHZvaWQg
d3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIAogICAgICAgICB0cyA8PCAiICAiOwogfQogCi12
b2lkIEdyYXBoaWNzTGF5ZXI6OmR1bXBMYXllcihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkg
Y29uc3QKK3ZvaWQgR3JhcGhpY3NMYXllcjo6ZHVtcExheWVyKFRleHRTdHJlYW0mIHRzLCBpbnQg
aW5kZW50LCBib29sIGRlYnVnKSBjb25zdAogewogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQp
OwotICAgIHRzIDw8ICIoIiA8PCAiR3JhcGhpY3NMYXllciIgPDwgIiAiIDw8IHN0YXRpY19jYXN0
PHZvaWQqPihjb25zdF9jYXN0PEdyYXBoaWNzTGF5ZXIqPih0aGlzKSk7Ci0gICAgdHMgPDwgIiBc
IiIgPDwgbV9uYW1lIDw8ICJcIlxuIjsKLSAgICBkdW1wUHJvcGVydGllcyh0cywgaW5kZW50KTsK
KyAgICBpZiAoZGVidWcpCisgICAgICAgIHRzIDw8ICIoIiA8PCAiR3JhcGhpY3NMYXllciIgPDwg
IiAiIDw8IHN0YXRpY19jYXN0PHZvaWQqPihjb25zdF9jYXN0PEdyYXBoaWNzTGF5ZXIqPih0aGlz
KSk7CisgICAgZWxzZQorICAgICAgICB0cyA8PCAiKCIgPDwgIkdyYXBoaWNzTGF5ZXIiOworICAg
ICAgICAKKyAgICBpZiAoZGVidWcpCisgICAgICAgIHRzIDw8ICIgXCIiIDw8IG1fbmFtZSA8PCAi
XCIiOworICAgIHRzIDw8ICJcbiI7CisgICAgZHVtcFByb3BlcnRpZXModHMsIGluZGVudCwgZGVi
dWcpOwogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwogICAgIHRzIDw8ICIpXG4iOwogfQog
Ci12b2lkIEdyYXBoaWNzTGF5ZXI6OmR1bXBQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQg
aW5kZW50KSBjb25zdAordm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0U3Ry
ZWFtJiB0cywgaW50IGluZGVudCwgYm9vbCBkZWJ1ZykgY29uc3QKIHsKICAgICB3cml0ZUluZGVu
dCh0cywgaW5kZW50ICsgMSk7CiAgICAgdHMgPDwgIihwb3NpdGlvbiAiIDw8IG1fcG9zaXRpb24u
eCgpIDw8ICIgIiA8PCBtX3Bvc2l0aW9uLnkoKSA8PCAiKVxuIjsKQEAgLTQyNiwxMCArNDMyLDEy
IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6ZHVtcFByb3BlcnRpZXMoVGV4dFMKIAogICAgIHdyaXRl
SW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAgICB0cyA8PCAiKGNsaWVudCAiOwotICAgIGlmICht
X2NsaWVudCkKLSAgICAgICAgdHMgPDwgc3RhdGljX2Nhc3Q8dm9pZCo+KG1fY2xpZW50KTsKLSAg
ICBlbHNlCi0gICAgICAgIHRzIDw8ICJub25lIjsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICAgICAgdHMgPDwgc3RhdGljX2Nhc3Q8dm9pZCo+KG1fY2xp
ZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHMgPDwgIm5vbmUiOworICAgIH0KICAg
ICB0cyA8PCAiKVxuIjsKIAogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKQEAgLTQ2
NiwxMyArNDc0LDE5IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6ZHVtcFByb3BlcnRpZXMoVGV4dFMK
IAogICAgIGlmIChtX3JlcGxpY2FMYXllcikgewogICAgICAgICB3cml0ZUluZGVudCh0cywgaW5k
ZW50ICsgMSk7Ci0gICAgICAgIHRzIDw8ICIocmVwbGljYSBsYXllciAiIDw8IG1fcmVwbGljYUxh
eWVyIDw8ICIpXG4iOwotICAgICAgICBtX3JlcGxpY2FMYXllci0+ZHVtcExheWVyKHRzLCBpbmRl
bnQrMik7CisgICAgICAgIGlmIChkZWJ1ZykKKyAgICAgICAgICAgIHRzIDw8ICIocmVwbGljYSBs
YXllciIgPDwgbV9yZXBsaWNhTGF5ZXIgPDwgIilcbiI7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRzIDw8ICIocmVwbGljYSBsYXllcilcbiI7CisgICAgICAgIG1fcmVwbGljYUxheWVyLT5k
dW1wTGF5ZXIodHMsIGluZGVudCsyLCBkZWJ1Zyk7CiAgICAgfQogCiAgICAgaWYgKG1fcmVwbGlj
YXRlZExheWVyKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKLSAgICAg
ICAgdHMgPDwgIihyZXBsaWNhdGVkIGxheWVyICIgPDwgbV9yZXBsaWNhdGVkTGF5ZXIgPDwgIilc
biI7CisgICAgICAgIGlmIChkZWJ1ZykKKyAgICAgICAgICAgIHRzIDw8ICIocmVwbGljYXRlZCBs
YXllciAiIDw8IG1fcmVwbGljYXRlZExheWVyIDw8ICIpXG4iOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0cyA8PCAiKHJlcGxpY2F0ZWQgbGF5ZXIpXG4iOwogICAgIH0KICAgICAKICAgICBp
ZiAobV9jaGlsZHJlbi5zaXplKCkpIHsKQEAgLTQ4MSwxMiArNDk1LDIwIEBAIHZvaWQgR3JhcGhp
Y3NMYXllcjo6ZHVtcFByb3BlcnRpZXMoVGV4dFMKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVk
IGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgaSsrKQotICAg
ICAgICAgICAgbV9jaGlsZHJlbltpXS0+ZHVtcExheWVyKHRzLCBpbmRlbnQrMik7CisgICAgICAg
ICAgICBtX2NoaWxkcmVuW2ldLT5kdW1wTGF5ZXIodHMsIGluZGVudCsyLCBkZWJ1Zyk7CiAgICAg
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAgICAgICAgdHMgPDwgIilcbiI7CiAg
ICAgfQogfQogCitTdHJpbmcgR3JhcGhpY3NMYXllcjo6bGF5ZXJUcmVlQXNUZXh0KGJvb2wgZGVi
dWcpIGNvbnN0Cit7CisgICAgVGV4dFN0cmVhbSB0czsKKworICAgIGR1bXBMYXllcih0cywgMCwg
ZGVidWcpOworICAgIHJldHVybiB0cy5yZWxlYXNlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiA1NjYyOSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDQsNyArMzA0LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAKLSAgICB2
b2lkIGR1bXBMYXllcihUZXh0U3RyZWFtJiwgaW50IGluZGVudCA9IDApIGNvbnN0OworICAgIHZv
aWQgZHVtcExheWVyKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50ID0gMCwgYm9vbCBkZWJ1ZyA9IGZh
bHNlKSBjb25zdDsKIAogICAgIGludCByZXBhaW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGFpbnRDb3VudDsgfQogICAgIGludCBpbmNyZW1lbnRSZXBhaW50Q291bnQoKSB7IHJldHVybiAr
K21fcmVwYWludENvdW50OyB9CkBAIC0zMzksNiArMzM5LDEwIEBAIHB1YmxpYzoKICAgICAvLyBT
b21lIGNvbXBvc2l0aW5nIHN5c3RlbXMgbWF5IGRvIGludGVybmFsIGJhdGNoaW5nIHRvIHN5bmNo
cm9uaXplIGNvbXBvc2l0aW5nIHVwZGF0ZXMKICAgICAvLyB3aXRoIHVwZGF0ZXMgZHJhd24gaW50
byB0aGUgd2luZG93LiBUaGlzIGlzIGEgc2lnbmFsIHRvIGZsdXNoIGFueSBpbnRlcm5hbCBiYXRj
aGVkIHN0YXRlLgogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpIHsgfQor
ICAgIAorICAgIC8vIFJldHVybiBhIHN0cmluZyB3aXRoIGEgaHVtYW4gcmVhZGFibGUgZm9ybSBv
ZiB0aGUgbGF5ZXIgdHJlZSwgSWYgZGVidWcgaXMgdHJ1ZSAKKyAgICAvLyBwb2ludGVycyBmb3Ig
dGhlIGxheWVycyBhbmQgdGltaW5nIGRhdGEgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJu
ZWQgc3RyaW5nLgorICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoYm9vbCBkZWJ1ZyA9IGZhbHNl
KSBjb25zdDsKIAogcHJvdGVjdGVkOgogCkBAIC0zNTUsNyArMzU5LDcgQEAgcHJvdGVjdGVkOgog
CiAgICAgR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAKLSAgICB2b2lkIGR1
bXBQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKyAgICB2b2lkIGR1
bXBQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBib29sIGRlYnVnKSBjb25zdDsK
IAogICAgIEdyYXBoaWNzTGF5ZXJDbGllbnQqIG1fY2xpZW50OwogICAgIFN0cmluZyBtX25hbWU7
CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gNTY3NTkpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTAzLTI5ICBDaHJpcyBNYXJyaW4gIDxjbWFy
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCBsYXllclRyZWVBc1RleHQgZnVuY3Rpb24gdG8gRFJUIChmb3IgTWFjKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY3ODIKKwor
ICAgICAgICBUaGlzIGlzIHRoZSBXZWJLaXQgc2lkZSBmb3IgTWFjLiBJdCBwbHVtYnMgdGhlCisg
ICAgICAgIGNhbGwgZnJvbSBXZWJDb3JlIHRvIERSVC4KKworICAgICAgICAqIFdlYlZpZXcvV2Vi
RnJhbWUubW06V2ViS2l0IChNYWMpIHNpZGUgb2YgcGx1bWJpbmcKKyAgICAgICAgKC1bV2ViRnJh
bWUgX2xheWVyVHJlZUFzVGV4dF0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVQcml2YXRl
Lmg6CisKIDIwMTAtMDMtMjYgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgpJbmRleDog
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNTY2MjkpCisrKyBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyOTMsNiArMTI5MywxNiBAQCAtICh2
b2lkKXNldEFsd2F5c0hpZGVWZXJ0aWNhbFNjcm9sbGVyOihCCiAgICAgQVNTRVJUKFtbW3NlbGYg
ZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gaXNLaW5kT2ZDbGFzczpbV2ViRHluYW1pY1Njcm9sbEJh
cnNWaWV3IGNsYXNzXV0pOwogICAgIFsoV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3ICopW1tzZWxm
IGZyYW1lVmlld10gX3Njcm9sbFZpZXddIHNldEFsd2F5c0hpZGVWZXJ0aWNhbFNjcm9sbGVyOmZs
YWddOwogfQorCistIChOU1N0cmluZyopX2xheWVyVHJlZUFzVGV4dAoreworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGlmICghY29yZUZyYW1lKQorICAg
ICAgICByZXR1cm4gQCIiOworICAgICAgICAKKyAgICByZXR1cm4gY29yZUZyYW1lLT5sYXllclRy
ZWVBc1RleHQoKTsKK30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViRnJhbWUKSW5kZXg6
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgJKHJldmlzaW9uIDU2NjI5KQorKysgV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAs
NCArMTMwLDcgQEAgQGludGVyZmFjZSBXZWJGcmFtZSAoV2ViUHJpdmF0ZSkKIC8vIFRoaXMgZG9l
cyBub3QgYWZmZWN0IHRoZSBzY3JvbGxhYmlsaXR5IG9mIHRoZSBkb2N1bWVudC4KIC0gKHZvaWQp
c2V0QWx3YXlzSGlkZUhvcml6b250YWxTY3JvbGxlcjooQk9PTClmbGFnOwogLSAodm9pZClzZXRB
bHdheXNIaWRlVmVydGljYWxTY3JvbGxlcjooQk9PTClmbGFnOworCistIChOU1N0cmluZyopX2xh
eWVyVHJlZUFzVGV4dDsKKwogQGVuZApJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNTY3NTkpCisrKyBXZWJL
aXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0w
My0yOSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbGF5ZXJUcmVlQXNUZXh0IGZ1
bmN0aW9uIHRvIERSVCAoZm9yIE1hYykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM2NzgyCisKKyAgICAgICAgVGhpcyBpcyB0aGUgRFJUIHNpZGUuIEl0
IGV4cG9zZXMgdGhlIGNhbGwgdG8gSmF2YVNjcmlwdAorICAgICAgICB0aHJvdWdoIHRoZSBMYXlv
dXRUZXN0Q29udHJvbGxlci4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcDpQbGF0Zm9ybSBpbmRlcGVuZGVudCBKYXZhU2NyaXB0IHNoaW0KKyAgICAg
ICAgKGxheWVyVHJlZUFzVGV4dENhbGxiYWNrKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tOk1hYyBzcGVjaWZpYyBwbHVtYmluZyB0byBXZWJLaXQKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQpOgorCiAyMDEwLTAzLTI5ICBF
cmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNTY2MjkpCisrKyBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
NCw2ICs0NjQsMTMgQEAgc3RhdGljIEpTVmFsdWVSZWYga2VlcFdlYkhpc3RvcnlDYWxsYmFjawog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpT
VmFsdWVSZWYgbGF5ZXJUcmVlQXNUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbnRyb2xsZXItPmxheWVyVHJlZUFzVGV4dCgpLmdl
dCgpKTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgbm90aWZ5RG9uZUNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1l
bnRhdGlvbgpAQCAtMTQzNSw2ICsxNDQyLDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVz
dENvbnRyb2xsZXI6OgogICAgICAgICB7ICJncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNz
aW9uIiwgZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
IAogICAgICAgICB7ICJpc0NvbW1hbmRFbmFibGVkIiwgaXNDb21tYW5kRW5hYmxlZENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgImtlZXBXZWJIaXN0b3J5Iiwga2VlcFdlYkhpc3RvcnlDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAorICAgICAgICB7ICJsYXllclRyZWVBc1RleHQiLCBsYXllclRyZWVBc1Rl
eHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJudW1iZXJPZlBhZ2VzIiwgbnVtYmVyT2ZQ
YWdlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgIm5vdGlmeURvbmUiLCBub3RpZnlEb25l
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAibnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIiwg
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNp
b24gNTY2MjkpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNiArMjQ1LDggQEAgcHVibGljOgogICAgIC8v
IHVuaXQgdGVzdHMgb3V0c2lkZSBvZiBEUlQgb25jZSB0aGV5IGV4aXN0LgogICAgIHZvaWQgYXBp
VGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJp
bmdSZWYgYmFzZVVSTCk7CiAgICAgdm9pZCBhcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0
ZW0oKTsKKyAgICAKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGF5ZXJUcmVlQXNUZXh0
KCkgY29uc3Q7CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Vmlld1dpZHRoOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhWaWV3SGVpZ2h0OwpJbmRleDogV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1h
Yy5tbQkocmV2aXNpb24gNTY2MjkpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2ICsxODEs
MjMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcgogICAgIH0KIH0K
IAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRy
ZWVBc1RleHQoKSBjb25zdAoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmco
QWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilbbWFpbkZyYW1l
IF9sYXllclRyZWVBc1RleHRdKSk7CisgICAgcmV0dXJuIHN0cmluZzsKKy8qCisgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBpZENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGlkKSk7CisgICAgTlNTdHJpbmcgKmlkTlMgPSAoTlNTdHJpbmcgKilp
ZENGLmdldCgpOworCisgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IFtbbWFpbkZyYW1lIERPTURv
Y3VtZW50XSBnZXRFbGVtZW50QnlJZDppZE5TXTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAg
IHJldHVybiAwOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvdW50ZXJWYWx1ZShB
ZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVttYWluRnJhbWUg
Y291bnRlclZhbHVlRm9yRWxlbWVudDplbGVtZW50XSkpOworICAgIHJldHVybiBjb3VudGVyVmFs
dWU7CisqLworfQorCiBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VOdW1iZXJGb3JFbGVt
ZW50QnlJZChKU1N0cmluZ1JlZiBpZCwgZmxvYXQgcGFnZVdpZHRoSW5QaXhlbHMsIGZsb2F0IHBh
Z2VIZWlnaHRJblBpeGVscykKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGlkQ0YoQWRv
cHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgaWQpKTsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDU2NzU5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDMtMjkgIENocmlzIE1hcnJpbiAgPGNtYXJy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZGVkIGxheWVyVHJlZUFzVGV4dCBmdW5jdGlvbiB0byBEUlQgKGZvciBNYWMpCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjc4MgorCisg
ICAgICAgIFNhbXBsZSB0ZXN0IHRvIHNob3cgZnVuY3Rpb25hbGl0eS4gVGhpcyB0ZXN0IHNob3dz
IGEgY2FzZSB3aGVyZSB0aGUgY29tcG9zaXRpbmcKKyAgICAgICAgd2FzIGNvcnJ1cHRlZCBvbiBX
aW5kb3dzLiBUaGlzIHdhcyBmaXhlZCBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC81NjIwMC4KKyAgICAgICAgUmVzdWx0cyBhcmUgcGxhdGZvcm0gc3BlY2lmaWMgYmVjYXVzZSB0
aGUgbGF5ZXIgdHJlZSBvdXRwdXQgY29udGFpbnMgcG9zaXRpb25zIGFuZAorICAgICAgICBzaXpl
cyB0aGF0IHdpbGwgYmUgZGlmZmVyZW50IG9uIE1hYyBhbmQgV2luZG93cy4KKworICAgICAgICAq
IGNvbXBvc2l0aW5nL2dlb21ldHJ5L3ByZXNlcnZlLTNkLXN3aXRjaGluZy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvcHJlc2VydmUtM2Qt
c3dpdGNoaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTAtMDMtMjkgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xh
emtvdi4KSW5kZXg6IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L3ByZXNlcnZlLTNk
LXN3aXRjaGluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dl
b21ldHJ5L3ByZXNlcnZlLTNkLXN3aXRjaGluZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvcHJlc2VydmUtM2Qtc3dpdGNoaW5nLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODkgQEAKKzwhRE9DVFlQRT4KKzxodG1sPgorPGhlYWQ+Cisg
IDx0aXRsZT5Td2l0Y2hpbmcgbGF5ZXIgaW4gYW5kIG91dCBvZiBwcmVzZXJ2ZS0zZDwvdGl0bGU+
CisKKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICBib2R5IHsK
KyAgICAgIGZvbnQtZmFtaWx5OiAnTHVjaWRhIEdyYW5kZScsIFZlcmRhbmEsIEFyaWFsOworICAg
ICAgZm9udC1zaXplOiAxMnB4OworICAgIH0KKyAgICAjY29udGFpbmVyIHsKKyAgICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICAgIGhlaWdodDogMzAwcHg7CisgICAgICB3aWR0aDogMzAwcHg7
CisgICAgICBtYXJnaW46IDUwcHggMTAwcHg7CisgICAgICBib3JkZXI6IDJweCBzb2xpZCBibHVl
OworICAgICAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogNTAwOworICAgIH0KKworICAgICNwYXJlbnQg
eworICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgd2lkdGg6IDI4MHB4OworICAgICAgaGVpZ2h0
OiAyODBweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKKyAgICAgIG9wYWNpdHk6
IDAuODsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDsKKyAgICAg
IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKC02MGRlZykgcm90YXRlWSg0MGRlZyk7CisgICAg
fQorICAgIAorICAgICNwYXJlbnQgPiBkaXYgeworICAgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgICAgdG9wOiA0MHB4OworICAgICAgbGVmdDogNDBweDsKKyAgICAgIHdpZHRoOiAyMDBweDsK
KyAgICAgIGhlaWdodDogMjAwcHg7CisgICAgICBwYWRkaW5nOiAxMHB4OworICAgICAgLXdlYmtp
dC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsK
KyAgICAgIGZvbnQtc2l6ZTogMTJwdDsKKyAgICB9CisKKyAgICAjcGFyZW50ID4gOmZpcnN0LWNo
aWxkIHsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOworICAgICAgb3BhY2l0eTowLjc7
CisgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWig1MHB4KSByb3RhdGVZKC00MGRl
Zyk7CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
Y2hhcnNldD0idXRmLTgiPgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICB0aW1lb3V0
ID0gMTAwOworICAgIAorICAgIGZ1bmN0aW9uIHN0YXJ0UHJvZ3JhbSgpCisgICAgeworICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iikuc3R5bGUud2Via2l0VHJhbnNmb3JtU3R5
bGUgPSAiZmxhdCI7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJwYXJlbnQiKS5zdHlsZS53ZWJraXRUcmFuc2Zvcm1TdHlsZSA9ICJwcmVzZXJ2
ZS0zZCI7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXllclRyZWUgPSBsYXlvdXRUZXN0
Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUubG9nKGxheWVyVHJlZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7CisgICAgICAgICAgICAgICAgICAg
IH0sIHRpbWVvdXQpOworICAgICAgICAgICAgfSwgdGltZW91dCk7CisgICAgfQorICAgIHdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc3RhcnRQcm9ncmFtLCBmYWxzZSkKKyAgICA8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCisgIDxwPlRoZSBncmVlbiBib3ggYXBwZWFyIGFuZ2xl
ZCBvdXQgZnJvbSB0aGUgeWVsbG93IGJveCBhbmQgZW1iZWRkZWQgaW4gaXQuPC9wPgorICA8ZGl2
IGlkPSJjb250YWluZXIiPgorICAgIDxkaXYgaWQ9InBhcmVudCI+CisgICAgICA8ZGl2Pi13ZWJr
aXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMDBweCkgcm90YXRlWSg0NWRlZyk7PC9kaXY+Cisg
ICAgPC9kaXY+CisgIDwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvcHJlc2VydmUtM2Qtc3dpdGNoaW5n
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvY29t
cG9zaXRpbmcvZ2VvbWV0cnkvcHJlc2VydmUtM2Qtc3dpdGNoaW5nLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9jb21wb3NpdGluZy9nZW9tZXRy
eS9wcmVzZXJ2ZS0zZC1zd2l0Y2hpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDk3IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNjc6IChHcmFwaGljc0xheWVyICIiCisg
IChwb3NpdGlvbiAwLjAwIDAuMDApCisgIChhbmNob3IgMC41MCAwLjUwKQorICAoYm91bmRzIDgw
MC4wMCA2MDAuMDApCisgIChvcGFjaXR5IDEuMDApCisgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAg
KG1fcHJlc2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAwKQorICAobV9iYWNrZmFjZVZpc2li
aWxpdHkgdmlzaWJsZSkKKyAgKGNsaWVudCBub25lKQorICAoYmFja2dyb3VuZENvbG9yIG5vbmUp
CisgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkK
KyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXllciAiQ0FMYXllcigweDEwNTIxNjM1MCkg
R3JhcGhpY3NMYXllcigweDEwNTIxNWZlMCkgRG9jdW1lbnQgTm9kZSIKKyAgICAgIChwb3NpdGlv
biAwLjAwIDAuMDApCisgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChib3VuZHMgODAw
LjAwIDYwMC4wMCkKKyAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAodXNpbmdUaWxlZExheWVy
IDApCisgICAgICAobV9wcmVzZXJ2ZXMzRCAwKQorICAgICAgKGRyYXdzQ29udGVudCAwKQorICAg
ICAgKG1fYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAoY2xpZW50IDB4MTA1MjE1
ZjkwKQorICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVu
dGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJl
biAxCisgICAgICAgIChHcmFwaGljc0xheWVyICJDQUxheWVyKDB4MTA1NTVlMzgwKSBHcmFwaGlj
c0xheWVyKDB4MTA1NTVlNDAwKSBSZW5kZXJCbG9jayAocmVsYXRpdmUgcG9zaXRpb25lZCkgY29u
dGFpbmVyIgorICAgICAgICAgIChwb3NpdGlvbiAxMDguMDAgNzMuMDApCisgICAgICAgICAgKGFu
Y2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyAzMDQuMDAgMzA0LjAwKQorICAgICAg
ICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAg
ICAgIChtX3ByZXNlcnZlczNEIDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAg
ICAgIChtX2JhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgIChjbGllbnQgMHgx
MDU1NWUzMzApCisgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0
cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIFsxLjAwIDAu
MDAgMC4wMCAwLjAwXSBbMC4wMCAxLjAwIDAuMDAgMC4wMF0gWzAuMDAgMC4wMCAxLjAwIC0wLjAw
XSBbMC4wMCAwLjAwIDAuMDAgMS4wMF0pCisgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAg
ICAgIChHcmFwaGljc0xheWVyICJDQUxheWVyKDB4MTA1NTVmNjEwKSBHcmFwaGljc0xheWVyKDB4
MTA1NTVmMmEwKSBSZW5kZXJCbG9jayBwYXJlbnQiCisgICAgICAgICAgICAgIChwb3NpdGlvbiAx
Mi4wMCAxMi4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAg
ICAgIChib3VuZHMgMjgwLjAwIDI4MC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMC44MCkK
KyAgICAgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAobV9wcmVz
ZXJ2ZXMzRCAxKQorICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgICAg
IChtX2JhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgICAgICAoY2xpZW50IDB4
MTA1NTVmMjUwKQorICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAg
ICAgICAgICh0cmFuc2Zvcm0gWzAuNzcgLTAuNTYgLTAuMzIgMC4wMF0gWzAuMDAgMC41MCAtMC44
NyAwLjAwXSBbMC42NCAwLjY2IDAuMzggMC4wMF0gWzAuMDAgMC4wMCAwLjAwIDEuMDBdKQorICAg
ICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgIChj
aGlsZHJlbiAxCisgICAgICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIgIkNBTGF5ZXIoMHgxMDU1
NjAzYjApIEdyYXBoaWNzTGF5ZXIoMHgxMDU1NjAwNDApIFJlbmRlckJsb2NrIChwb3NpdGlvbmVk
KSIKKyAgICAgICAgICAgICAgICAgIChwb3NpdGlvbiA0MC4wMCA0MC4wMCkKKyAgICAgICAgICAg
ICAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgICAgICAgICAgKGJvdW5kcyAyMDAu
MDAgMjAwLjAwKQorICAgICAgICAgICAgICAgICAgKG9wYWNpdHkgMC43MCkKKyAgICAgICAgICAg
ICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgICAgIChtX3ByZXNlcnZl
czNEIDApCisgICAgICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgICAg
ICAgICAobV9iYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAgICAgIChj
bGllbnQgMHgxMDU1NWZmZjApCisgICAgICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5v
bmUpCisgICAgICAgICAgICAgICAgICAodHJhbnNmb3JtIFswLjc3IDAuMDAgMC42NCAwLjAwXSBb
MC4wMCAxLjAwIDAuMDAgMC4wMF0gWy0wLjY0IDAuMDAgMC43NyAwLjAwXSBbMC4wMCAwLjAwIDUw
LjAwIDEuMDBdKQorICAgICAgICAgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5
KQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAg
ICAgICAgICkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCitsYXllciBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xh
eWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTQy
CisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MTUKKyAgICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDQ1eDE1CisgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMCkgd2lkdGggNDQ1OiAiVGhlIGdyZWVuIGJveCBhcHBlYXIgYW5nbGVkIG91dCBmcm9t
IHRoZSB5ZWxsb3cgYm94IGFuZCBlbWJlZGRlZCBpbiBpdC4iCitsYXllciBhdCAoMTA4LDczKSBz
aXplIDMwNHgzMDQKKyAgUmVuZGVyQmxvY2sgKHJlbGF0aXZlIHBvc2l0aW9uZWQpIHtESVZ9IGF0
ICgxMDAsNjUpIHNpemUgMzA0eDMwNCBbYm9yZGVyOiAoMnB4IHNvbGlkICMwMDAwRkYpXQorbGF5
ZXIgYXQgKDEyMCw4NSkgc2l6ZSAyODB4MjgwCisgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgxMiwx
Mikgc2l6ZSAyODB4MjgwIFtiZ2NvbG9yPSNGRkZGMDBdCitsYXllciBhdCAoMTYwLDEyNSkgc2l6
ZSAyMDB4MjAwCisgIFJlbmRlckJsb2NrIChwb3NpdGlvbmVkKSB7RElWfSBhdCAoNDAsNDApIHNp
emUgMjAweDIwMCBbYmdjb2xvcj0jMDA4MDAwXQorICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MTAsMTApIHNpemUgMTgweDU0CisgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTApIHdpZHRoIDE4MDog
Ii13ZWJraXQtdHJhbnNmb3JtOiIKKyAgICAgIHRleHQgcnVuIGF0ICgxMCwyOCkgd2lkdGggMTgw
OiAidHJhbnNsYXRlWigtMTAwcHgpIgorICAgICAgdGV4dCBydW4gYXQgKDEwLDQ2KSB3aWR0aCAx
NTA6ICJyb3RhdGVZKDQ1ZGVnKTsiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52212</attachid>
            <date>2010-03-31 14:36:42 -0700</date>
            <delta_ts>2010-03-31 14:47:21 -0700</delta_ts>
            <desc>Replacement patch</desc>
            <filename>36782.patch</filename>
            <type>text/plain</type>
            <size>26536</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Njg2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDMtMzEgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGVkIGxheWVyVHJlZUFzVGV4dCBmdW5jdGlvbiB0byBEUlQgKGZvciBNYWMpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjc4MgorCisgICAgICAgIFRo
aXMgYWRkcyB0aGUgZnVuY3Rpb24sIHBsdW1icyBpdCB0aHJvdWdoIHRvIHRoZSByb290CisgICAg
ICAgIEdyYXBoaWNzTGF5ZXIsIHdoaWNoIHRyYXZlcnNlcyB0aGUgbGF5ZXIgdHJlZSBhbmQgCisg
ICAgICAgIGdlbmVyYXRlcyBhIHN0cmluZyB3aXRoIHRoZSBsYXllciBoaWVyYXJjaHkuIFRoZSAK
KyAgICAgICAgZnVuY3Rpb24gY2FuIGdlbmVyYXRlICJkZWJ1ZyIgaW5mbyBvciBub3QuIERlYnVn
IGluZm8KKyAgICAgICAgaW5jbHVkZXMgZnVuY3Rpb24gcG9pbnRlcnMgd2hpY2ggYXJlIGhlbHBm
dWwgZm9yIGRlYnVnZ2luZworICAgICAgICBidXQgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRv
IG1hdGNoIGV4cGVjdGVkIHJlc3VsdHMuCisgICAgICAgIFdoZW4gRFJUIGNhbGxzIHRoZSBmdW5j
dGlvbiBpdCBwYXNzZXMgZGVidWc9ZmFsc2UuCisKKyAgICAgICAgVGVzdDogY29tcG9zaXRpbmcv
Z2VvbWV0cnkvcHJlc2VydmUtM2Qtc3dpdGNoaW5nLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUu
YmFzZS5leHA6ZXhwb3J0IGZ1bmN0aW9uIHN5bWJvbAorICAgICAgICAqIHBhZ2UvRnJhbWUuY3Bw
OldlYmNvcmUgc2lkZSBvZiBwbHVtYmluZworICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmxheWVy
VHJlZUFzVGV4dCk6CisgICAgICAgICogcGFnZS9GcmFtZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOkdlbmVyYXRpb24gb2YgdGhlIGhpZXJhcmNoeSBz
dHJpbmcKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmR1bXBMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpsYXllclRyZWVBc1RleHQpOgorICAgICAgICAoc2hvd0dy
YXBoaWNzTGF5ZXJUcmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmg6CisKIDIwMTAtMDMtMzEgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERtaXRyeSBUaXRvdi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9u
IDU2MjU3KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTksNiArNTE5LDcgQEAgX19aTjdXZWJDb3JlNUZyYW1lMTFzaG91bGRDbG9zZUV2CiBfX1pON1dl
YkNvcmU1RnJhbWUxM3JlYXBwbHlTdHlsZXNFdgogX19aTjdXZWJDb3JlNUZyYW1lMTNzZXRab29t
RmFjdG9yRWZOU184Wm9vbU1vZGVFCiBfX1pON1dlYkNvcmU1RnJhbWUxNGZyYW1lRm9yV2lkZ2V0
RVBLTlNfNldpZGdldEUKK19fWk43V2ViQ29yZTVGcmFtZTE1bGF5ZXJUcmVlQXNUZXh0RXYKIF9f
Wk43V2ViQ29yZTVGcmFtZTE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRF
YgogX19aTjdXZWJDb3JlNUZyYW1lMTdzZXRJc0Rpc2Nvbm5lY3RlZEViCiBfX1pON1dlYkNvcmU1
RnJhbWUxOXNldEluVmlld1NvdXJjZU1vZGVFYgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiA1NjI1NykK
KysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcg
QEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkBAIC02Myw2ICs2NCw3IEBA
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJl
Z3VsYXJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAj
aW5jbHVkZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCkBAIC0xODQ3LDQgKzE4NDksMTggQEAgSW50UmVj
dCBGcmFtZTo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50cwogfQogI2VuZGlmCiAKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitTdHJpbmcgRnJhbWU6OmxheWVyVHJlZUFzVGV4dCgp
IGNvbnN0Cit7CisgICAgaWYgKCFjb250ZW50UmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyID0gY29udGVudFJlbmRlcmVy
KCktPmNvbXBvc2l0b3IoKS0+cm9vdFBsYXRmb3JtTGF5ZXIoKTsKKyAgICBpZiAoIXJvb3RMYXll
cikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICAKKyAgICByZXR1cm4gcm9vdExh
eWVyLT5sYXllclRyZWVBc1RleHQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvRnJhbWUuaAkocmV2aXNpb24gNTYyNTcpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBTY3JvbGxiYXJNb2RlID0gU2Nyb2xsYmFyQXV0bywgU2Nyb2xs
YmFyTW9kZSA9IFNjcm9sbGJhckF1dG8pOwogCiAgICAgICAgIHZvaWQgaW5qZWN0VXNlclNjcmlw
dHMoVXNlclNjcmlwdEluamVjdGlvblRpbWUpOworICAgICAgICAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsK
KyNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0c0Zv
cldvcmxkKERPTVdyYXBwZXJXb3JsZCosIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2VyU2Ny
aXB0SW5qZWN0aW9uVGltZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDU2MjU3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCkBAIC0zODgsMTcgKzM4OSwyMyBAQCBzdGF0aWMg
dm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgCiAgICAgICAgIHRzIDw8ICIgICI7CiB9
CiAKLXZvaWQgR3JhcGhpY3NMYXllcjo6ZHVtcExheWVyKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5k
ZW50KSBjb25zdAordm9pZCBHcmFwaGljc0xheWVyOjpkdW1wTGF5ZXIoVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQsIExheWVyVHJlZUFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKSBjb25zdAogewog
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICIoIiA8PCAiR3JhcGhpY3NM
YXllciIgPDwgIiAiIDw8IHN0YXRpY19jYXN0PHZvaWQqPihjb25zdF9jYXN0PEdyYXBoaWNzTGF5
ZXIqPih0aGlzKSk7Ci0gICAgdHMgPDwgIiBcIiIgPDwgbV9uYW1lIDw8ICJcIlxuIjsKLSAgICBk
dW1wUHJvcGVydGllcyh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiKCIgPDwgIkdyYXBoaWNzTGF5
ZXIiOw0KKw0KKyAgICBpZiAoYmVoYXZpb3IgJiBMYXllclRyZWVBc1RleHREZWJ1Zykgew0KKyAg
ICAgICAgdHMgPDwgIiAiIDw8IHN0YXRpY19jYXN0PHZvaWQqPihjb25zdF9jYXN0PEdyYXBoaWNz
TGF5ZXIqPih0aGlzKSk7DQorICAgICAgICB0cyA8PCAiIFwiIiA8PCBtX25hbWUgPDwgIlwiIjsK
KyAgICB9CisKKyAgICB0cyA8PCAiXG4iOworICAgIGR1bXBQcm9wZXJ0aWVzKHRzLCBpbmRlbnQs
IGJlaGF2aW9yKTsKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKICAgICB0cyA8PCAiKVxu
IjsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NMYXllcjo6ZHVtcFByb3BlcnRpZXMo
VGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQsIExheWVyVHJlZUFzVGV4dEJlaGF2aW9yIGJlaGF2
aW9yKSBjb25zdAogewogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAgICB0cyA8
PCAiKHBvc2l0aW9uICIgPDwgbV9wb3NpdGlvbi54KCkgPDwgIiAiIDw8IG1fcG9zaXRpb24ueSgp
IDw8ICIpXG4iOwpAQCAtNDE2LDIxICs0MjMsMjMgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpkdW1w
UHJvcGVydGllcyhUZXh0UwogICAgIHRzIDw8ICIodXNpbmdUaWxlZExheWVyICIgPDwgbV91c2lu
Z1RpbGVkTGF5ZXIgPDwgIilcbiI7CiAKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7
Ci0gICAgdHMgPDwgIihtX3ByZXNlcnZlczNEICIgPDwgbV9wcmVzZXJ2ZXMzRCA8PCAiKVxuIjsK
KyAgICB0cyA8PCAiKHByZXNlcnZlczNEICIgPDwgbV9wcmVzZXJ2ZXMzRCA8PCAiKVxuIjsKIAog
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAgICB0cyA8PCAiKGRyYXdzQ29udGVu
dCAiIDw8IG1fZHJhd3NDb250ZW50IDw8ICIpXG4iOwogCiAgICAgd3JpdGVJbmRlbnQodHMsIGlu
ZGVudCArIDEpOwotICAgIHRzIDw8ICIobV9iYWNrZmFjZVZpc2liaWxpdHkgIiA8PCAobV9iYWNr
ZmFjZVZpc2liaWxpdHkgPyAidmlzaWJsZSIgOiAiaGlkZGVuIikgPDwgIilcbiI7CisgICAgdHMg
PDwgIihiYWNrZmFjZVZpc2liaWxpdHkgIiA8PCAobV9iYWNrZmFjZVZpc2liaWxpdHkgPyAidmlz
aWJsZSIgOiAiaGlkZGVuIikgPDwgIilcbiI7CiAKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50
ICsgMSk7Ci0gICAgdHMgPDwgIihjbGllbnQgIjsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAg
IHRzIDw8IHN0YXRpY19jYXN0PHZvaWQqPihtX2NsaWVudCk7Ci0gICAgZWxzZQotICAgICAgICB0
cyA8PCAibm9uZSI7Ci0gICAgdHMgPDwgIilcbiI7CisgICAgaWYgKGJlaGF2aW9yICYgTGF5ZXJU
cmVlQXNUZXh0RGVidWcpIHsKKyAgICAgICAgdHMgPDwgIigiOworICAgICAgICBpZiAobV9jbGll
bnQpCisgICAgICAgICAgICB0cyA8PCAiY2xpZW50ICIgPDwgc3RhdGljX2Nhc3Q8dm9pZCo+KG1f
Y2xpZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHMgPDwgIm5vIGNsaWVudCI7Cisg
ICAgICAgIHRzIDw8ICIpXG4iOworICAgIH0KIAogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQg
KyAxKTsKICAgICB0cyA8PCAiKGJhY2tncm91bmRDb2xvciAiOwpAQCAtNDY2LDEzICs0NzUsMTkg
QEAgdm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0UwogCiAgICAgaWYgKG1f
cmVwbGljYUxheWVyKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKLSAg
ICAgICAgdHMgPDwgIihyZXBsaWNhIGxheWVyICIgPDwgbV9yZXBsaWNhTGF5ZXIgPDwgIilcbiI7
Ci0gICAgICAgIG1fcmVwbGljYUxheWVyLT5kdW1wTGF5ZXIodHMsIGluZGVudCsyKTsKKyAgICAg
ICAgdHMgPDwgIihyZXBsaWNhIGxheWVyIjsKKyAgICAgICAgaWYgKGJlaGF2aW9yICYgTGF5ZXJU
cmVlQXNUZXh0RGVidWcpCisgICAgICAgICAgICB0cyA8PCAiICIgPDwgbV9yZXBsaWNhTGF5ZXI7
CisgICAgICAgIHRzIDw8ICIpXG4iOworICAgICAgICBtX3JlcGxpY2FMYXllci0+ZHVtcExheWVy
KHRzLCBpbmRlbnQgKyAyLCBiZWhhdmlvcik7CiAgICAgfQogCiAgICAgaWYgKG1fcmVwbGljYXRl
ZExheWVyKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKLSAgICAgICAg
dHMgPDwgIihyZXBsaWNhdGVkIGxheWVyICIgPDwgbV9yZXBsaWNhdGVkTGF5ZXIgPDwgIilcbiI7
CisgICAgICAgIHRzIDw8ICIocmVwbGljYXRlZCBsYXllciI7CisgICAgICAgIGlmIChiZWhhdmlv
ciAmIExheWVyVHJlZUFzVGV4dERlYnVnKQorICAgICAgICAgICAgdHMgPDwgIiAiIDw8IG1fcmVw
bGljYXRlZExheWVyOzsKKyAgICAgICAgdHMgPDwgIilcbiI7CiAgICAgfQogICAgIAogICAgIGlm
IChtX2NoaWxkcmVuLnNpemUoKSkgewpAQCAtNDgxLDEyICs0OTYsMzEgQEAgdm9pZCBHcmFwaGlj
c0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0UwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQg
aTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyBpKyspCi0gICAg
ICAgICAgICBtX2NoaWxkcmVuW2ldLT5kdW1wTGF5ZXIodHMsIGluZGVudCsyKTsKKyAgICAgICAg
ICAgIG1fY2hpbGRyZW5baV0tPmR1bXBMYXllcih0cywgaW5kZW50ICsgMiwgYmVoYXZpb3IpOwog
ICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CiAgICAgICAgIHRzIDw8ICIpXG4i
OwogICAgIH0KIH0KIAorU3RyaW5nIEdyYXBoaWNzTGF5ZXI6OmxheWVyVHJlZUFzVGV4dChMYXll
clRyZWVBc1RleHRCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRz
OworCisgICAgZHVtcExheWVyKHRzLCAwLCBiZWhhdmlvcik7CisgICAgcmV0dXJuIHRzLnJlbGVh
c2UoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCisjaWZuZGVmIE5ERUJVRwordm9p
ZCBzaG93R3JhcGhpY3NMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5
ZXIpCit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6
U3RyaW5nIG91dHB1dCA9IGxheWVyLT5sYXllclRyZWVBc1RleHQoTGF5ZXJUcmVlQXNUZXh0RGVi
dWcpOworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG91dHB1dC51dGY4KCkuZGF0YSgpKTsK
K30KKyNlbmRpZgorCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDU2
MjU3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDYgKzc0LDEyIEBAIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1MYXllcjsK
IHR5cGVkZWYgdm9pZCogTmF0aXZlTGF5ZXI7CiAjZW5kaWYKIAorZW51bSBMYXllclRyZWVBc1Rl
eHRCZWhhdmlvckZsYWdzIHsKKyAgICBMYXllclRyZWVBc1RleHRCZWhhdmlvck5vcm1hbCA9IDAs
CisgICAgTGF5ZXJUcmVlQXNUZXh0RGVidWcgPSAxIDw8IDAsIC8vIER1bXAgZXh0cmEgZGVidWdn
aW5nIGluZm8gbGlrZSBsYXllciBhZGRyZXNzZXMuCit9OwordHlwZWRlZiB1bnNpZ25lZCBMYXll
clRyZWVBc1RleHRCZWhhdmlvcjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9h
dFBvaW50M0Q7CkBAIC0zMDQsNyArMzEwLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAK
LSAgICB2b2lkIGR1bXBMYXllcihUZXh0U3RyZWFtJiwgaW50IGluZGVudCA9IDApIGNvbnN0Owor
ICAgIHZvaWQgZHVtcExheWVyKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50ID0gMCwgTGF5ZXJUcmVl
QXNUZXh0QmVoYXZpb3IgPSBMYXllclRyZWVBc1RleHRCZWhhdmlvck5vcm1hbCkgY29uc3Q7CiAK
ICAgICBpbnQgcmVwYWludENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Q291bnQ7IH0K
ICAgICBpbnQgaW5jcmVtZW50UmVwYWludENvdW50KCkgeyByZXR1cm4gKyttX3JlcGFpbnRDb3Vu
dDsgfQpAQCAtMzM5LDYgKzM0NSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gU29tZSBjb21wb3NpdGlu
ZyBzeXN0ZW1zIG1heSBkbyBpbnRlcm5hbCBiYXRjaGluZyB0byBzeW5jaHJvbml6ZSBjb21wb3Np
dGluZyB1cGRhdGVzCiAgICAgLy8gd2l0aCB1cGRhdGVzIGRyYXduIGludG8gdGhlIHdpbmRvdy4g
VGhpcyBpcyBhIHNpZ25hbCB0byBmbHVzaCBhbnkgaW50ZXJuYWwgYmF0Y2hlZCBzdGF0ZS4KICAg
ICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKSB7IH0KKyAgICAKKyAgICAvLyBS
ZXR1cm4gYSBzdHJpbmcgd2l0aCBhIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgdGhlIGxheWVyIHRy
ZWUsIElmIGRlYnVnIGlzIHRydWUgCisgICAgLy8gcG9pbnRlcnMgZm9yIHRoZSBsYXllcnMgYW5k
IHRpbWluZyBkYXRhIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KKyAg
ICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KExheWVyVHJlZUFzVGV4dEJlaGF2aW9yID0gTGF5ZXJU
cmVlQXNUZXh0QmVoYXZpb3JOb3JtYWwpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAKQEAgLTM1NSw3
ICszNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJD
bGllbnQqKTsKIAotICAgIHZvaWQgZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRl
bnQpIGNvbnN0OworICAgIHZvaWQgZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRl
bnQsIExheWVyVHJlZUFzVGV4dEJlaGF2aW9yKSBjb25zdDsKIAogICAgIEdyYXBoaWNzTGF5ZXJD
bGllbnQqIG1fY2xpZW50OwogICAgIFN0cmluZyBtX25hbWU7CkluZGV4OiBXZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNTY4
NjkpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3
IEBACisyMDEwLTAzLTMxICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBsYXllclRy
ZWVBc1RleHQgZnVuY3Rpb24gdG8gRFJUIChmb3IgTWFjKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY3ODIKKworICAgICAgICBUaGlzIGlzIHRoZSBX
ZWJLaXQgc2lkZSBmb3IgTWFjLiBJdCBwbHVtYnMgdGhlCisgICAgICAgIGNhbGwgZnJvbSBXZWJD
b3JlIHRvIERSVC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06V2ViS2l0IChNYWMp
IHNpZGUgb2YgcGx1bWJpbmcKKyAgICAgICAgKC1bV2ViRnJhbWUgX2xheWVyVHJlZUFzVGV4dF0p
OgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmg6CisKIDIwMTAtMDMtMzEgIE1h
cmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEplcmVteSBPcmxvdy4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDU2MjU3
KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
Mjk4LDYgKzEyOTgsMTYgQEAgLSAodm9pZClzZXRBbHdheXNIaWRlVmVydGljYWxTY3JvbGxlcjoo
QgogICAgIEFTU0VSVChbW1tzZWxmIGZyYW1lVmlld10gX3Njcm9sbFZpZXddIGlzS2luZE9mQ2xh
c3M6W1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyBjbGFzc11dKTsKICAgICBbKFdlYkR5bmFtaWNT
Y3JvbGxCYXJzVmlldyAqKVtbc2VsZiBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XSBzZXRBbHdheXNI
aWRlVmVydGljYWxTY3JvbGxlcjpmbGFnXTsKIH0KKworLSAoTlNTdHJpbmcqKV9sYXllclRyZWVB
c1RleHQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAg
ICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEAiIjsKKyAgICAgICAgCisgICAgcmV0
dXJuIGNvcmVGcmFtZS0+bGF5ZXJUcmVlQXNUZXh0KCk7Cit9CisKIEBlbmQKIAogQGltcGxlbWVu
dGF0aW9uIFdlYkZyYW1lCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCShy
ZXZpc2lvbiA1NjI1NykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTMwLDQgKzEzMCw3IEBAIEBpbnRlcmZhY2UgV2ViRnJhbWUgKFdl
YlByaXZhdGUpCiAvLyBUaGlzIGRvZXMgbm90IGFmZmVjdCB0aGUgc2Nyb2xsYWJpbGl0eSBvZiB0
aGUgZG9jdW1lbnQuCiAtICh2b2lkKXNldEFsd2F5c0hpZGVIb3Jpem9udGFsU2Nyb2xsZXI6KEJP
T0wpZmxhZzsKIC0gKHZvaWQpc2V0QWx3YXlzSGlkZVZlcnRpY2FsU2Nyb2xsZXI6KEJPT0wpZmxh
ZzsKKworLSAoTlNTdHJpbmcqKV9sYXllclRyZWVBc1RleHQ7CisKIEBlbmQKSW5kZXg6IFdlYktp
dC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZp
c2lvbiA1Njg2OSkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTAtMDMtMzEgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IGxheWVyVHJlZUFzVGV4dCBmdW5jdGlvbiB0byBEUlQgKGZvciBNYWMpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjc4MgorCisgICAgICAgIFRoaXMg
aXMgdGhlIFdlYktpdCBzaWRlIGZvciBXaW5kb3dzLiBJdCBwbHVtYnMgdGhlCisgICAgICAgIGNh
bGwgZnJvbSBXZWJDb3JlIHRvIERSVC4KKworICAgICAgICAqIEludGVyZmFjZXMvSVdlYkZyYW1l
UHJpdmF0ZS5pZGw6CisgICAgICAgICogV2ViRnJhbWUuY3BwOldlYktpdCAoV2luZG93cykgc2lk
ZSBvZiBwbHVtYmluZworICAgICAgICAoV2ViRnJhbWU6OmxheWVyVHJlZUFzVGV4dCk6CisgICAg
ICAgICogV2ViRnJhbWUuaDoKKwogMjAxMC0wMy0zMSAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpJbmRleDog
V2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJGcmFt
ZS5jcHAJKHJldmlzaW9uIDU2MjU3KQorKysgV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MzUsNiArMTQzNSwyNSBAQCBIUkVTVUxUIFdlYkZyYW1lOjpjYW5Qcm92
aWRlRG9jdW1lbnRTb3VyCiAgICAgcmV0dXJuIGhyOwogfQogCitIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkZyYW1lOjpsYXllclRyZWVBc1RleHQoQlNUUiogcmVzdWx0KQoreworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICpyZXN1bHQgPSAwOwor
CisgICAgRnJhbWUqIGZyYW1lID0gY29yZSh0aGlzKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gRV9GQUlMOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IFN0cmluZyB0ZXh0ID0gZnJhbWUtPmxheWVyVHJlZUFzVGV4dCgpOworI2Vsc2UKKyAgICBTdHJp
bmcgdGV4dDsKKyNlbmRpZgorICAgICpyZXN1bHQgPSBCU3RyaW5nKHRleHQpLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gU19PSzsKK30KKwogdm9pZCBXZWJGcmFtZTo6ZnJhbWVMb2FkZXJEZXN0cm95
ZWQoKQogewogICAgIC8vIFRoZSBGcmFtZUxvYWRlciBnb2luZyBhd2F5IGlzIGVxdWl2YWxlbnQg
dG8gdGhlIEZyYW1lIGdvaW5nIGF3YXksCkBAIC0yNDczLDMgKzI0OTIsNCBAQCB2b2lkIFdlYkZy
YW1lOjp1cGRhdGVCYWNrZ3JvdW5kKCkKIAogICAgIGNvcmVGcmFtZS0+dmlldygpLT51cGRhdGVC
YWNrZ3JvdW5kUmVjdXJzaXZlbHkoYmFja2dyb3VuZENvbG9yLCB3ZWJWaWV3KCktPnRyYW5zcGFy
ZW50KCkpOwogfQorCkluZGV4OiBXZWJLaXQvd2luL1dlYkZyYW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3dpbi9XZWJGcmFtZS5oCShyZXZpc2lvbiA1NjI1NykKKysrIFdlYktpdC93aW4vV2Vi
RnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB2aXNpYmxlQ29udGVudFJlY3QoUkVD
VCopOwogCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGxheWVyVHJlZUFz
VGV4dChCU1RSKik7CisKICAgICAvLyBJV2ViRG9jdW1lbnRUZXh0CiAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHN1cHBvcnRzVGV4dEVuY29kaW5nKCAKICAgICAgICAgLyog
W3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpOwpJbmRleDogV2ViS2l0L3dpbi9JbnRlcmZh
Y2VzL0lXZWJGcmFtZVByaXZhdGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vSW50ZXJm
YWNlcy9JV2ViRnJhbWVQcml2YXRlLmlkbAkocmV2aXNpb24gNTYyNTcpCisrKyBXZWJLaXQvd2lu
L0ludGVyZmFjZXMvSVdlYkZyYW1lUHJpdmF0ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw0
ICsxMDgsNiBAQCBpbnRlcmZhY2UgSVdlYkZyYW1lUHJpdmF0ZSA6IElVbmtub3duCiAgICAgSFJF
U1VMVCBwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQoW2luXSBCU1RSIGlkLCBbaW5dIGZsb2F0IHBh
Z2VXaWR0aEluUGl4ZWxzLCBbaW5dIGZsb2F0IHBhZ2VIZWlnaHRJblBpeGVscywgW291dCwgcmV0
dmFsXSBpbnQqIHBhZ2VOdW1iZXIpOwogCiAgICAgSFJFU1VMVCBudW1iZXJPZlBhZ2VzKFtpbl0g
ZmxvYXQgcGFnZVdpZHRoSW5QaXhlbHMsIFtpbl0gZmxvYXQgcGFnZUhlaWdodEluUGl4ZWxzLCBb
b3V0LCByZXR2YWxdIGludCogcGFnZU51bWJlcik7CisKKyAgICBIUkVTVUxUIGxheWVyVHJlZUFz
VGV4dChbb3V0LCByZXR2YWxdIEJTVFIqIHJlc3VsdCk7CiB9CkluZGV4OiBXZWJLaXRUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1
Njg2OSkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIyIEBACisyMDEwLTAzLTMxICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBsYXll
clRyZWVBc1RleHQgZnVuY3Rpb24gdG8gRFJUIChmb3IgTWFjKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY3ODIKKworICAgICAgICBUaGlzIGlzIHRo
ZSBEUlQgc2lkZS4gSXQgZXhwb3NlcyB0aGUgY2FsbCB0byBKYXZhU2NyaXB0CisgICAgICAgIHRo
cm91Z2ggdGhlIExheW91dFRlc3RDb250cm9sbGVyLgorCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOlBsYXRmb3JtIGluZGVwZW5kZW50IEphdmFTY3Jp
cHQgc2hpbQorICAgICAgICAobGF5ZXJUcmVlQXNUZXh0Q2FsbGJhY2spOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06TWFjIHNwZWNpZmljIHBsdW1iaW5nIHRvIFdl
YktpdAorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDpX
aW5kb3dzIHNwZWNpZmljIHBsdW1iaW5nIHRvIFdlYktpdAorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCk6CisKIDIwMTAtMDMtMzEgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDU2MjU3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsNiArNDU2LDEz
IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGtlZXBXZWJIaXN0b3J5Q2FsbGJhY2sKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGxh
eWVyVHJlZUFzVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0
cmluZyhjb250ZXh0LCBjb250cm9sbGVyLT5sYXllclRyZWVBc1RleHQoKS5nZXQoKSk7Cit9CisK
IHN0YXRpYyBKU1ZhbHVlUmVmIG5vdGlmeURvbmVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCiB7CiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KQEAg
LTE0MjYsNiArMTQzMyw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVy
OjoKICAgICAgICAgeyAiZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbiIsIGdyYW50
RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAKICAgICAgICAg
eyAiaXNDb21tYW5kRW5hYmxlZCIsIGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJrZWVwV2ViSGlzdG9yeSIsIGtlZXBXZWJIaXN0b3J5Q2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKKyAgICAgICAgeyAibGF5ZXJUcmVlQXNUZXh0IiwgbGF5ZXJUcmVlQXNUZXh0Q2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAibnVtYmVyT2ZQYWdlcyIsIG51bWJlck9mUGFnZXNDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJub3RpZnlEb25lIiwgbm90aWZ5RG9uZUNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgIm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyIsIG51bWJlck9mQWN0
aXZlQW5pbWF0aW9uc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDU2MjU3KQor
KysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQzLDYgKzI0Myw4IEBAIHB1YmxpYzoKICAgICAvLyB1bml0IHRlc3Rz
IG91dHNpZGUgb2YgRFJUIG9uY2UgdGhleSBleGlzdC4KICAgICB2b2lkIGFwaVRlc3ROZXdXaW5k
b3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VV
UkwpOwogICAgIHZvaWQgYXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCk7CisgICAg
CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Owog
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFZpZXdXaWR0aDsKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWF4Vmlld0hlaWdodDsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlz
aW9uIDU2MjU3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNiArMTc2LDEyIEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3IKICAgICB9CiB9CiAKK0pTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkg
Y29uc3QKK3sKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW21haW5GcmFtZSBfbGF5ZXJUcmVl
QXNUZXh0XSkpOworICAgIHJldHVybiBzdHJpbmc7Cit9CisKIGludCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkLCBmbG9hdCBwYWdl
V2lkdGhJblBpeGVscywgZmxvYXQgcGFnZUhlaWdodEluUGl4ZWxzKQogewogICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gaWRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBpZCkpOwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiA1
NjI1NykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJv
bGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsMjEgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcgogICAgIGhpc3RvcnktPnNldE9wdGlvbmFs
U2hhcmVkSGlzdG9yeShzaGFyZWRIaXN0b3J5LmdldCgpKTsKIH0KIAorSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAor
eworICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1l
KTsKKyAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
QlNUUiB0ZXh0QlNUUiA9IDA7CisgICAgSFJFU1VMVCBociA9IGZyYW1lUHJpdmF0ZS0+bGF5ZXJU
cmVlQXNUZXh0KCZ0ZXh0QlNUUik7CisKKyAgICB3c3RyaW5nIHRleHQodGV4dEJTVFIsIFN5c1N0
cmluZ0xlbih0ZXh0QlNUUikpOworICAgIFN5c0ZyZWVTdHJpbmcodGV4dEJTVFIpOworICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0ZXh0VmFsdWVKUyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycyh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkpOworICAgIHJldHVybiB0
ZXh0VmFsdWVKUzsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGlj
eURlbGVnYXRlKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA1Njg2OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDEwLTAzLTMxICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRlZCBsYXllclRyZWVBc1RleHQgZnVuY3Rpb24gdG8gRFJUIChmb3IgTWFjKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY3ODIKKworICAgICAgICBT
YW1wbGUgdGVzdCB0byBzaG93IGZ1bmN0aW9uYWxpdHkuIFRoaXMgdGVzdCBzaG93cyBhIGNhc2Ug
d2hlcmUgdGhlIGNvbXBvc2l0aW5nCisgICAgICAgIHdhcyBjb3JydXB0ZWQgb24gV2luZG93cy4g
VGhpcyB3YXMgZml4ZWQgaW4gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNTYyMDAu
CisgICAgICAgIFJlc3VsdHMgYXJlIHBsYXRmb3JtIHNwZWNpZmljIGJlY2F1c2UgdGhlIGxheWVy
IHRyZWUgb3V0cHV0IGNvbnRhaW5zIHBvc2l0aW9ucyBhbmQKKyAgICAgICAgc2l6ZXMgdGhhdCB3
aWxsIGJlIGRpZmZlcmVudCBvbiBNYWMgYW5kIFdpbmRvd3MuCisKKyAgICAgICAgKiBjb21wb3Np
dGluZy9nZW9tZXRyeS9wcmVzZXJ2ZS0zZC1zd2l0Y2hpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBjb21wb3NpdGluZy9nZW9tZXRyeS9wcmVzZXJ2ZS0zZC1zd2l0Y2hpbmcuaHRt
bDogQWRkZWQuCisKIDIwMTAtMDMtMzEgIFFpIFpoYW5nICA8cWkuMi56aGFuZ0Bub2tpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxvIEdvbWJvcy4KSW5kZXg6IExheW91dFRlc3Rz
L2NvbXBvc2l0aW5nL2dlb21ldHJ5L3ByZXNlcnZlLTNkLXN3aXRjaGluZy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvcHJlc2VydmUt
M2Qtc3dpdGNoaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL2dlb21ldHJ5L3ByZXNlcnZlLTNkLXN3aXRjaGluZy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKK1RoZSBncmVlbiBib3ggYXBwZWFyIGFuZ2xlZCBv
dXQgZnJvbSB0aGUgeWVsbG93IGJveCBhbmQgZW1iZWRkZWQgaW4gaXQuCisKKy13ZWJraXQtdHJh
bnNmb3JtOiB0cmFuc2xhdGVaKC0xMDBweCkgcm90YXRlWSg0NWRlZyk7CisoR3JhcGhpY3NMYXll
cgorICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgKGJvdW5k
cyA4MDAuMDAgNjAwLjAwKQorICAob3BhY2l0eSAxLjAwKQorICAodXNpbmdUaWxlZExheWVyIDAp
CisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJhd3NDb250ZW50IDApCisgIChiYWNrZmFjZVZpc2li
aWxpdHkgdmlzaWJsZSkKKyAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICh0cmFuc2Zvcm0g
aWRlbnRpdHkpCisgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEK
KyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChh
bmNob3IgMC41MCAwLjUwKQorICAgICAgKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorICAgICAgKG9w
YWNpdHkgMS4wMCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMz
RCAwKQorICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2
aXNpYmxlKQorICAgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5z
Zm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAg
IChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9u
IDEwOC4wMCA3My4wMCkKKyAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAo
Ym91bmRzIDMwNC4wMCAzMDQuMDApCisgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAg
ICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAg
ICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJs
ZSkKKyAgICAgICAgICAgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAg
ICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIFsxLjAw
IDAuMDAgMC4wMCAwLjAwXSBbMC4wMCAxLjAwIDAuMDAgMC4wMF0gWzAuMDAgMC4wMCAxLjAwIC0w
LjAwXSBbMC4wMCAwLjAwIDAuMDAgMS4wMF0pCisgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAg
ICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgICAgIChwb3NpdGlvbiAxMi4wMCAxMi4w
MCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgICAgIChib3Vu
ZHMgMjgwLjAwIDI4MC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMC44MCkKKyAgICAgICAg
ICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAocHJlc2VydmVzM0QgMSkK
KyAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAoYmFja2ZhY2VW
aXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhY2tncm91
bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAodHJhbnNmb3JtIFswLjc3IC0wLjU2IC0wLjMy
IDAuMDBdIFswLjAwIDAuNTAgLTAuODcgMC4wMF0gWzAuNjQgMC42NiAwLjM4IDAuMDBdIFswLjAw
IDAuMDAgMC4wMCAxLjAwXSkKKyAgICAgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50
aXR5KQorICAgICAgICAgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAgICAgICAgIChHcmFwaGlj
c0xheWVyCisgICAgICAgICAgICAgICAgICAocG9zaXRpb24gNDAuMDAgNDAuMDApCisgICAgICAg
ICAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAgICAgICAgIChib3VuZHMg
MjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAgICAgICAgIChvcGFjaXR5IDAuNzApCisgICAgICAg
ICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgICAgICAgICAocHJlc2Vy
dmVzM0QgMCkKKyAgICAgICAgICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAg
ICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAgICAgICAg
ICh0cmFuc2Zvcm0gWzAuNzcgMC4wMCAwLjY0IDAuMDBdIFswLjAwIDEuMDAgMC4wMCAwLjAwXSBb
LTAuNjQgMC4wMCAwLjc3IDAuMDBdIFswLjAwIDAuMDAgNTAuMDAgMS4wMF0pCisgICAgICAgICAg
ICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgICAgKQor
ICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisg
ICAgICApCisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dl
b21ldHJ5L3ByZXNlcnZlLTNkLXN3aXRjaGluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L3ByZXNlcnZlLTNkLXN3aXRjaGluZy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvcHJlc2VydmUtM2Qt
c3dpdGNoaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKzwhRE9DVFlQRT4K
KzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5Td2l0Y2hpbmcgbGF5ZXIgaW4gYW5kIG91dCBvZiBw
cmVzZXJ2ZS0zZDwvdGl0bGU+CisKKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2Ny
ZWVuIj4KKyAgICBib2R5IHsKKyAgICAgIGZvbnQtZmFtaWx5OiAnTHVjaWRhIEdyYW5kZScsIFZl
cmRhbmEsIEFyaWFsOworICAgICAgZm9udC1zaXplOiAxMnB4OworICAgIH0KKyAgICAjY29udGFp
bmVyIHsKKyAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgIGhlaWdodDogMzAwcHg7Cisg
ICAgICB3aWR0aDogMzAwcHg7CisgICAgICBtYXJnaW46IDUwcHggMTAwcHg7CisgICAgICBib3Jk
ZXI6IDJweCBzb2xpZCBibHVlOworICAgICAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogNTAwOworICAg
IH0KKworICAgICNwYXJlbnQgeworICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgd2lkdGg6IDI4
MHB4OworICAgICAgaGVpZ2h0OiAyODBweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHllbGxv
dzsKKyAgICAgIG9wYWNpdHk6IDAuODsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOiBw
cmVzZXJ2ZS0zZDsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKC02MGRlZykgcm90
YXRlWSg0MGRlZyk7CisgICAgfQorICAgIAorICAgICNwYXJlbnQgPiBkaXYgeworICAgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgICAgdG9wOiA0MHB4OworICAgICAgbGVmdDogNDBweDsKKyAg
ICAgIHdpZHRoOiAyMDBweDsKKyAgICAgIGhlaWdodDogMjAwcHg7CisgICAgICBwYWRkaW5nOiAx
MHB4OworICAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgZm9udC1m
YW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgIGZvbnQtc2l6ZTogMTJwdDsKKyAgICB9CisKKyAgICAj
cGFyZW50ID4gOmZpcnN0LWNoaWxkIHsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOwor
ICAgICAgb3BhY2l0eTowLjc7CisgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWig1
MHB4KSByb3RhdGVZKC00MGRlZyk7CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9Cisg
ICAgCisgICAgdGltZW91dCA9IDEwMDsKKyAgICAKKyAgICBmdW5jdGlvbiBzdGFydFByb2dyYW0o
KQorICAgIHsKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIpLnN0eWxlLndl
YmtpdFRyYW5zZm9ybVN0eWxlID0gImZsYXQiOworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iikuc3R5bGUud2Via2l0VHJhbnNmb3Jt
U3R5bGUgPSAicHJlc2VydmUtM2QiOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91
dChmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVl
QXNUZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5ZXJU
cmVlID0gbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGF5ZXJU
cmVlIikuaW5uZXJIVE1MID0gIjxwcmU+IiArIGxheWVyVHJlZSArICI8L3ByZT4iOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpOworICAg
ICAgICAgICAgICAgICAgICB9LCB0aW1lb3V0KTsKKyAgICAgICAgICAgIH0sIHRpbWVvdXQpOwor
ICAgIH0KKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHN0YXJ0UHJvZ3JhbSwg
ZmFsc2UpCisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworICA8cD5UaGUgZ3JlZW4g
Ym94IGFwcGVhciBhbmdsZWQgb3V0IGZyb20gdGhlIHllbGxvdyBib3ggYW5kIGVtYmVkZGVkIGlu
IGl0LjwvcD4KKyAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJwYXJlbnQiPgor
ICAgICAgPGRpdj4td2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTAwcHgpIHJvdGF0ZVko
NDVkZWcpOzwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9ImxheWVyVHJlZSI+PC9kaXY+
CisgIDwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="35629"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>