<?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>149541</bug_id>
          
          <creation_ts>2015-09-24 14:18:58 -0700</creation_ts>
          <short_desc>Add support for the imageSmoothingQuality property for CanvasRenderingContext2D</short_desc>
          <delta_ts>2015-10-05 11:32:14 -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>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kat Graff">kgraff</reporter>
          <assigned_to name="Kat Graff">kgraff</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>eoconnor</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1128582</commentid>
    <comment_count>0</comment_count>
    <who name="Kat Graff">kgraff</who>
    <bug_when>2015-09-24 14:18:58 -0700</bug_when>
    <thetext>Adding support for the new imageSmoothingQuality property for CanvasRenderingContext2D as documented in the HTML Living Standard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128583</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-09-24 14:20:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/22845558&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128585</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-09-24 14:21:01 -0700</bug_when>
    <thetext>&lt;rdar://problem/22845570&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128619</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-09-24 17:02:09 -0700</bug_when>
    <thetext>Was https://github.com/whatwg/html/pull/136</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129467</commentid>
    <comment_count>4</comment_count>
      <attachid>262129</attachid>
    <who name="Kat Graff">kgraff</who>
    <bug_when>2015-09-29 18:32:31 -0700</bug_when>
    <thetext>Created attachment 262129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129476</commentid>
    <comment_count>5</comment_count>
      <attachid>262129</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-29 19:24:21 -0700</bug_when>
    <thetext>Comment on attachment 262129
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=262129&amp;action=review

&gt; Source/WebCore/ChangeLog:3
&gt; +        Added support for the new imageSmoothingQuality attribute for CanvasRenderingContext2D, which exposes the smooothing quality of algorithms used for scaling images. Valid input values are low, medium, and high: associated algorithms are expected to vary for differing hardware. setImageSmoothingQuality provides a handle into CGInterpolationQuality.

This title line should be: &quot;Add support for the imageSmoothingQuality property for CanvasRenderingContext2D&quot;. Move the description below, after the reviewed by line.

&gt; Source/WebCore/ChangeLog:4
&gt; +

No blank line here.

&gt; Source/WebCore/ChangeLog:8
&gt; +

Description should come here.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2551
&gt; +        return WTF::ASCIILiteral(&quot;low&quot;);

No need for WTF:: (same remark below)

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2559
&gt; +    return emptyString();

Hmm, I would WTF::ASCIILiteral(&quot;low&quot;) here so that it is a valid value.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.h:387
&gt; +    static inline SmoothingQuality parseSmoothingQuality(const String&amp; smoothingQualityString)

Move the whole thing to the cpp.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.h:399
&gt; +    static inline InterpolationQuality smoothingToInterpolationQuality(SmoothingQuality quality)

Move the whole thing to the cpp.

&gt; LayoutTests/ChangeLog:9
&gt; +

You&apos;re missing the corresponding -expected.txt file.

&gt; .gitignore:1
&gt; +*.png

What&apos;s this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129477</commentid>
    <comment_count>6</comment_count>
      <attachid>262129</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-29 19:38:00 -0700</bug_when>
    <thetext>Comment on attachment 262129
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=262129&amp;action=review

&gt; Source/WebCore/ChangeLog:3
&gt; +        Added support for the new imageSmoothingQuality attribute for CanvasRenderingContext2D, which exposes the smooothing quality of algorithms used for scaling images. Valid input values are low, medium, and high: associated algorithms are expected to vary for differing hardware. setImageSmoothingQuality provides a handle into CGInterpolationQuality.

This should appear below the bug URL with line breaks.

&gt; Source/WebCore/ChangeLog:5
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=149541

This line should be preceded by the bug title line.  See other entries.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.h:387
&gt; +    static inline SmoothingQuality parseSmoothingQuality(const String&amp; smoothingQualityString)

This shouldn&apos;t be in the class declaration.  Move it to .cpp file.
Also, there&apos;s no need to have it as a separate function.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.h:399
&gt; +    static inline InterpolationQuality smoothingToInterpolationQuality(SmoothingQuality quality)

Ditto. This should be moved to the cpp file.

&gt; LayoutTests/ChangeLog:8
&gt; +        * fast/canvas/canvas-imageSmoothingQuality.html: Added.

You&apos;re missing -expected.txt.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:45
&gt; +    	return scaleImageData(canvas, &apos;&apos;);

Wrong indentation with a tab. Always indent by 4 spaces.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:47
&gt; +    	return scaleImageData(canvas, quality);

Ditto.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:54
&gt; +     	context.imageSmoothingQuality = quality;

Ditto.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:72
&gt; +shouldBe(&quot;JSON.stringify(defaultData)&quot;, &quot;JSON.stringify(lowData)&quot;);

Instead of calling scaleImageData outside shouldBe, call it inside so that the expected result contains the code that got executed:
e.g. shouldBe(&quot;JSON.stringify(scaleTestResults(&apos;default&apos;))&quot;, &quot;JSON.stringify(lowData)&quot;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129480</commentid>
    <comment_count>7</comment_count>
      <attachid>262129</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-29 19:39:16 -0700</bug_when>
    <thetext>Comment on attachment 262129
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=262129&amp;action=review

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +
&gt; 
&gt; Description should come here.

Also, please provide a link to the specification of this new property.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2575
&gt; +    if (GraphicsContext* context = drawingContext())

auto*

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:15
&gt; +var source = document.getElementById(&apos;source&apos;);

You sometimes use single quotes, sometimes double ones, please be consistent.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:30
&gt; +    y = 1;

What is this?

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:45
&gt; +    	return scaleImageData(canvas, &apos;&apos;);

I would use undefined instead of the empty string.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:54
&gt; +     	context.imageSmoothingQuality = quality;

too many spaces

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:65
&gt; +shouldNotBe(&quot;JSON.stringify(lowData)&quot;, &quot;JSON.stringify(mediumData)&quot;);

It seems like you might want to write a utility function for this. This would make your checks a lot more readable.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:75
&gt; +debug(&quot;Testing imageSmoothingQuality value persistent after imageSmoothingEnabled changed.\n&quot;);

debug() should add the trailing \n for you.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:81
&gt; +debug(&quot;Testing various invalid input.\n&quot;);

debug() should add the trailing \n for you.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:82
&gt; +persistData = scaleImageData(high, &apos;3223&apos;);

shouldNotThrow(&quot;persistData = scaleImageData(high, &apos;3223&apos;)&quot;);

Ditto for the ones below.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:90
&gt; +

You should also check that imageSmoothingQuality gets updated even if image smoothing is not enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129708</commentid>
    <comment_count>8</comment_count>
    <who name="Theresa O&apos;Connor">eoconnor</who>
    <bug_when>2015-09-30 16:17:57 -0700</bug_when>
    <thetext>Best spec link is https://html.spec.whatwg.org/multipage/scripting.html#image-smoothing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129771</commentid>
    <comment_count>9</comment_count>
      <attachid>262217</attachid>
    <who name="Kat Graff">kgraff</who>
    <bug_when>2015-09-30 17:46:21 -0700</bug_when>
    <thetext>Created attachment 262217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129774</commentid>
    <comment_count>10</comment_count>
      <attachid>262217</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-30 18:01:11 -0700</bug_when>
    <thetext>Comment on attachment 262217
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=262217&amp;action=review

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2544
&gt; +static inline InterpolationQuality smoothingToInterpolationQuality(CanvasRenderingContext2D::SmoothingQuality quality)

&quot;inline&quot; keyword is not necessary here.
Since the function definition appears in the same translation unit,
modern C++ compiler will inline it anyway.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality-expected.txt:20
&gt; +TEST: invalid input does not throw or change attribute.

Can we add a blank line before this by calling debug(&apos;&apos;)?
Also this &quot;TEST:&quot; prefix worsens the readability of the output.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:38
&gt; +	canvas.id = quality+&quot;Canvas&quot;;

Nit: space around +.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:62
&gt; +debug(&quot;TEST: imageSmoothingQuality &apos;low&apos;, &apos;medium, &apos;high&apos; values supported.&quot;);

I don&apos;t think we need this label.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:67
&gt; +debug(&quot;TEST: &apos;low&apos;, &apos;medium&apos;, and &apos;high&apos; produce distinct results.&quot;);

I don&apos;t think this comment is necessary. The output is quite self explanatory.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:73
&gt; +debug(&quot;TEST: &apos;low&apos; alpha &gt; &apos;medium&apos; alpha &gt; &apos;high&apos; alpha values.&quot;);
&gt; +shouldBeGreaterThanOrEqual(&quot;lowData[3]&quot;, &quot;mediumData[3]&quot;);

Instead of adding a comment, we should just add a helper function like &quot;function alpha(data) { return [3] }&quot;
and do shouldBeGreaterThanOrEqual(&quot;alpha(lowData)&quot;, &quot;alpha(mediumData)&quot;);
so that the output is self explanatory.

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:82
&gt; +debug(&quot;TEST: imageSmoothingQuality value persistent after imageSmoothingEnabled value changed.&quot;);
&gt; +var highCanvas = document.getElementById(&quot;highCanvas&quot;);
&gt; +highCanvas.getContext(&quot;2d&quot;).imageSmoothingEnabled = false;
&gt; +shouldBe(&quot;highCanvas.getContext(&apos;2d&apos;).imageSmoothingQuality&quot;, &quot;&apos;high&apos;&quot;);

Instead of adding a comment, I suggest running the code inside shouldBe so that it&apos;s included in the output.
Also, we should verify that the initial value of imageSmoothingQuality was &quot;high&quot; on highCanvas.
e.g.
shouldBe(&quot;highCanvas.getContext(&apos;2d&apos;).imageSmoothingQuality&quot;, &quot;&apos;high&apos;&quot;);
shouldBe(&quot;highCanvas.getContext(&quot;2d&quot;).imageSmoothingEnabled = false; highCanvas.getContext(&apos;2d&apos;).imageSmoothingQuality&quot;, &quot;&apos;high&apos;&quot;);

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:88
&gt; +highCanvas.getContext(&quot;2d&quot;).imageSmoothingQuality = &apos;medium&apos;;
&gt; +shouldBe(&quot;highCanvas.getContext(&apos;2d&apos;).imageSmoothingQuality&quot;, &quot;&apos;medium&apos;&quot;);
&gt; +highCanvas.getContext(&quot;2d&quot;).imageSmoothingQuality = &apos;high&apos;;
&gt; +highCanvas.getContext(&quot;2d&quot;).imageSmoothingEnabled = true;

Ditto about executing it inside shouldBe and adding more ShouldBe&apos;s

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:90
&gt; +debug(&quot;TEST: invalid input does not throw or change attribute.&quot;);

I don&apos;t think this label is necessary since the test code and output is pretty self explanatory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129795</commentid>
    <comment_count>11</comment_count>
      <attachid>262222</attachid>
    <who name="Kat Graff">kgraff</who>
    <bug_when>2015-09-30 19:05:37 -0700</bug_when>
    <thetext>Created attachment 262222
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129796</commentid>
    <comment_count>12</comment_count>
      <attachid>262222</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-30 19:13:20 -0700</bug_when>
    <thetext>Comment on attachment 262222
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=262222&amp;action=review

&gt; LayoutTests/fast/canvas/canvas-imageSmoothingQuality.html:104
&gt; +

You should also test that context.save() and context.restore().
See LayoutTests/fast/canvas/script-tests/canvas-imageSmoothingEnabled.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129798</commentid>
    <comment_count>13</comment_count>
      <attachid>262224</attachid>
    <who name="Kat Graff">kgraff</who>
    <bug_when>2015-09-30 19:26:15 -0700</bug_when>
    <thetext>Created attachment 262224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129805</commentid>
    <comment_count>14</comment_count>
      <attachid>262224</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-30 20:17:53 -0700</bug_when>
    <thetext>Comment on attachment 262224
Patch

Clearing flags on attachment: 262224

Committed r190383: &lt;http://trac.webkit.org/changeset/190383&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129806</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-30 20:17:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130066</commentid>
    <comment_count>16</comment_count>
      <attachid>262292</attachid>
    <who name="Kat Graff">kgraff</who>
    <bug_when>2015-10-01 15:45:35 -0700</bug_when>
    <thetext>Created attachment 262292
Demo case for eyeballs.

Visual check to see if imageSmoothingQuality looks as though it is behaving properly, possibly useful because there is no good way to pixel test against every hardware&apos;s afforded scaling algorithms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130149</commentid>
    <comment_count>17</comment_count>
      <attachid>262224</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-01 21:07:55 -0700</bug_when>
    <thetext>Comment on attachment 262224
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=262224&amp;action=review

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2584
&gt; +        ASSERT_NOT_REACHED();

This assertion is incorrect. Webpage content can set imageSmoothingQuality to an invalid value, and it&apos;s not appropriate to assert in that case.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2594
&gt; +    if (!modifiableState().imageSmoothingEnabled)

This should probably be state(), not modifiableState().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130151</commentid>
    <comment_count>18</comment_count>
      <attachid>262224</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-01 21:09:32 -0700</bug_when>
    <thetext>Comment on attachment 262224
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=262224&amp;action=review

&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2584
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; This assertion is incorrect. Webpage content can set imageSmoothingQuality to an invalid value, and it&apos;s not appropriate to assert in that case.

Actually the JS bindings will not call the implementation method if the input value is not a valid enum value, which is why I suggested the assertion. Also note that this is covered by the layout test in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130153</commentid>
    <comment_count>19</comment_count>
      <attachid>262224</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-01 21:12:18 -0700</bug_when>
    <thetext>Comment on attachment 262224
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=262224&amp;action=review

&gt;&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2584
&gt;&gt;&gt; +        ASSERT_NOT_REACHED();
&gt;&gt; 
&gt;&gt; This assertion is incorrect. Webpage content can set imageSmoothingQuality to an invalid value, and it&apos;s not appropriate to assert in that case.
&gt; 
&gt; Actually the JS bindings will not call the implementation method if the input value is not a valid enum value, which is why I suggested the assertion. Also note that this is covered by the layout test in this patch.

OK, sounds good. Sorry, my mistake.

Seems like a waste that the bindings check that the enum is a valid value, but then we have to repeat checking against all the valid values in the C++ DOM code. We should change how the bindings work so the strings don’t have to appear at all in the C++ DOM code!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130154</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-01 21:15:35 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Comment on attachment 262224 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=262224&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2584
&gt; &gt;&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; &gt;&gt; 
&gt; &gt;&gt; This assertion is incorrect. Webpage content can set imageSmoothingQuality to an invalid value, and it&apos;s not appropriate to assert in that case.
&gt; &gt; 
&gt; &gt; Actually the JS bindings will not call the implementation method if the input value is not a valid enum value, which is why I suggested the assertion. Also note that this is covered by the layout test in this patch.
&gt; 
&gt; OK, sounds good. Sorry, my mistake.
&gt; 
&gt; Seems like a waste that the bindings check that the enum is a valid value,
&gt; but then we have to repeat checking against all the valid values in the C++
&gt; DOM code. We should change how the bindings work so the strings don’t have
&gt; to appear at all in the C++ DOM code!

Agreed, I actually started working on a patch where the bindings code would convert the string to a enum value before handing it over to the implementation. Our C++ implementation really shouldn&apos;t have to deal with string enumerations. However, I got side-tracked and haven&apos;t had a chance to finish this patch yet. I&apos;ll try to pick it up again soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130636</commentid>
    <comment_count>21</comment_count>
    <who name="Kat Graff">kgraff</who>
    <bug_when>2015-10-05 09:29:23 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Comment on attachment 262224 [details]
&gt; Patch
&gt;
&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2594
&gt; &gt; +    if (!modifiableState().imageSmoothingEnabled)
&gt; 
&gt; This should probably be state(), not modifiableState().

Thanks, Darin! Patching now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130660</commentid>
    <comment_count>22</comment_count>
    <who name="Kat Graff">kgraff</who>
    <bug_when>2015-10-05 10:43:32 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130661</commentid>
    <comment_count>23</comment_count>
      <attachid>262447</attachid>
    <who name="Kat Graff">kgraff</who>
    <bug_when>2015-10-05 10:43:35 -0700</bug_when>
    <thetext>Created attachment 262447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130665</commentid>
    <comment_count>24</comment_count>
      <attachid>262447</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-05 10:46:26 -0700</bug_when>
    <thetext>Comment on attachment 262447
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130677</commentid>
    <comment_count>25</comment_count>
      <attachid>262447</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-05 11:32:08 -0700</bug_when>
    <thetext>Comment on attachment 262447
Patch

Clearing flags on attachment: 262447

Committed r190567: &lt;http://trac.webkit.org/changeset/190567&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130678</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-05 11:32:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262129</attachid>
            <date>2015-09-29 18:32:31 -0700</date>
            <delta_ts>2015-09-30 17:46:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149541-20150929183338.patch</filename>
            <type>text/plain</type>
            <size>12411</size>
            <attacher name="Kat Graff">kgraff</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmIxMzY2NjRhZjA0ZTRi
ZmFiMTg5MWM3MjM4MDBlNTNhZGQzZDZkNy4uOTY5NDQ2ODMxODAzZjgxNGRiYTdkZTc3MGYzOTE5
NGY5MTNhZDgwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE1LTA5LTI5ICBLYXRs
eW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9y
IHRoZSBuZXcgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGF0dHJpYnV0ZSBmb3IgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELCB3aGljaCBleHBvc2VzIHRoZSBzbW9vb3RoaW5nIHF1YWxpdHkgb2YgYWxn
b3JpdGhtcyB1c2VkIGZvciBzY2FsaW5nIGltYWdlcy4gVmFsaWQgaW5wdXQgdmFsdWVzIGFyZSBs
b3csIG1lZGl1bSwgYW5kIGhpZ2g6IGFzc29jaWF0ZWQgYWxnb3JpdGhtcyBhcmUgZXhwZWN0ZWQg
dG8gdmFyeSBmb3IgZGlmZmVyaW5nIGhhcmR3YXJlLiBzZXRJbWFnZVNtb290aGluZ1F1YWxpdHkg
cHJvdmlkZXMgYSBoYW5kbGUgaW50byBDR0ludGVycG9sYXRpb25RdWFsaXR5LgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk1NDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZh
cy9jYW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Lmh0bWwKKworICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlN0YXRlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRJbWFnZVNtb290aGluZ0VuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppbWFnZVNtb290
aGluZ1F1YWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzZXRJbWFnZVNtb290aGluZ1F1YWxpdHkpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5pZGw6CisKIDIwMTUtMDktMjQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBw
bGUuY29tPgogCiAgICAgICAgIEtlZXAgdGhlIGFscmVhZHktcGFyc2VkIGxpc3Qgb2YgdGVybXMg
aW4gY3VzdG9tIHByb3BlcnR5IHZhbHVlcyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtcGFy
c2UgdGhlbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggOWMxMDk3YmE2MGI4YjEwZjllNzdjYmQ1YzU5ZmM4
NzY3YzczYjIzOS4uNTQ2Njk2MTU1ZGFkOGMxNDhlZmQxMzI2ZTkxMzkxMmEyMDcxMjBiYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiRE9NUGF0aC5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCkBAIC0xNzMsNiArMTcyLDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6
U3RhdGUoKQogICAgICwgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSh0cnVlKQogICAgICwgbGluZURh
c2hPZmZzZXQoMCkKICAgICAsIGltYWdlU21vb3RoaW5nRW5hYmxlZCh0cnVlKQorICAgICwgaW1h
Z2VTbW9vdGhpbmdRdWFsaXR5KFNtb290aGluZ1F1YWxpdHk6OkxvdykKICAgICAsIHRleHRBbGln
bihTdGFydFRleHRBbGlnbikKICAgICAsIHRleHRCYXNlbGluZShBbHBoYWJldGljVGV4dEJhc2Vs
aW5lKQogICAgICwgZGlyZWN0aW9uKERpcmVjdGlvbjo6SW5oZXJpdCkKQEAgLTE5OSw2ICsxOTks
NyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlN0YXRlOjpTdGF0ZShjb25zdCBTdGF0ZSYg
b3RoZXIpCiAgICAgLCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKG90aGVyLmhhc0ludmVydGlibGVU
cmFuc2Zvcm0pCiAgICAgLCBsaW5lRGFzaE9mZnNldChvdGhlci5saW5lRGFzaE9mZnNldCkKICAg
ICAsIGltYWdlU21vb3RoaW5nRW5hYmxlZChvdGhlci5pbWFnZVNtb290aGluZ0VuYWJsZWQpCisg
ICAgLCBpbWFnZVNtb290aGluZ1F1YWxpdHkob3RoZXIuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5KQog
ICAgICwgdGV4dEFsaWduKG90aGVyLnRleHRBbGlnbikKICAgICAsIHRleHRCYXNlbGluZShvdGhl
ci50ZXh0QmFzZWxpbmUpCiAgICAgLCBkaXJlY3Rpb24ob3RoZXIuZGlyZWN0aW9uKQpAQCAtMjI5
LDYgKzIzMCw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGUmIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6U3RhdGU6Om9wZXJhdG9yPShjb25zCiAgICAgdHJhbnNmb3JtID0gb3Ro
ZXIudHJhbnNmb3JtOwogICAgIGhhc0ludmVydGlibGVUcmFuc2Zvcm0gPSBvdGhlci5oYXNJbnZl
cnRpYmxlVHJhbnNmb3JtOwogICAgIGltYWdlU21vb3RoaW5nRW5hYmxlZCA9IG90aGVyLmltYWdl
U21vb3RoaW5nRW5hYmxlZDsKKyAgICBpbWFnZVNtb290aGluZ1F1YWxpdHkgPSBvdGhlci5pbWFn
ZVNtb290aGluZ1F1YWxpdHk7CiAgICAgdGV4dEFsaWduID0gb3RoZXIudGV4dEFsaWduOwogICAg
IHRleHRCYXNlbGluZSA9IG90aGVyLnRleHRCYXNlbGluZTsKICAgICBkaXJlY3Rpb24gPSBvdGhl
ci5kaXJlY3Rpb247CkBAIC0yNTM5LDcgKzI1NDEsMzkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEltYWdlU21vb3RoaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgbW9k
aWZpYWJsZVN0YXRlKCkuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZW5hYmxlZDsKICAgICBHcmFw
aGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmIChjKQotICAgICAgICBj
LT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGVuYWJsZWQgPyBEZWZhdWx0SW50ZXJwb2xh
dGlvblF1YWxpdHkgOiBJbnRlcnBvbGF0aW9uTm9uZSk7CisgICAgICAgIGMtPnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoZW5hYmxlZCA/IHNtb290aGluZ1RvSW50ZXJwb2xhdGlvblF1YWxp
dHkoc3RhdGUoKS5pbWFnZVNtb290aGluZ1F1YWxpdHkpIDogSW50ZXJwb2xhdGlvbk5vbmUpOwor
fQorCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppbWFnZVNtb290aGluZ1F1YWxp
dHkoKSBjb25zdAoreworICAgIHN3aXRjaCAoc3RhdGUoKS5pbWFnZVNtb290aGluZ1F1YWxpdHkp
IHsKKyAgICBjYXNlIFNtb290aGluZ1F1YWxpdHk6OkxvdzoKKyAgICAgICAgcmV0dXJuIFdURjo6
QVNDSUlMaXRlcmFsKCJsb3ciKTsKKyAgICBjYXNlIFNtb290aGluZ1F1YWxpdHk6Ok1lZGl1bToK
KyAgICAgICAgcmV0dXJuIFdURjo6QVNDSUlMaXRlcmFsKCJtZWRpdW0iKTsKKyAgICBjYXNlIFNt
b290aGluZ1F1YWxpdHk6OkhpZ2g6CisgICAgICAgIHJldHVybiBXVEY6OkFTQ0lJTGl0ZXJhbCgi
aGlnaCIpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0SW1h
Z2VTbW9vdGhpbmdRdWFsaXR5KGNvbnN0IFN0cmluZyYgc21vb3RoaW5nUXVhbGl0eVN0cmluZykK
K3sKKyAgICBTbW9vdGhpbmdRdWFsaXR5IHF1YWxpdHkgPSBwYXJzZVNtb290aGluZ1F1YWxpdHko
c21vb3RoaW5nUXVhbGl0eVN0cmluZyk7CisKKyAgICBpZiAocXVhbGl0eSA9PSBzdGF0ZSgpLmlt
YWdlU21vb3RoaW5nUXVhbGl0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVhbGl6ZVNhdmVz
KCk7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gcXVhbGl0
eTsKKworICAgIGlmICghbW9kaWZpYWJsZVN0YXRlKCkuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gZHJh
d2luZ0NvbnRleHQoKSkKKyAgICAgICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShzbW9vdGhpbmdUb0ludGVycG9sYXRpb25RdWFsaXR5KHF1YWxpdHkpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCAzNTI3MWQyY2Y2MjQxOWYyZWY0ZTA1
NGJlZmRhYTg2NzE4ODFhMDhjLi5hZGUyYmZjM2RkMzM3NjUyMTJhOGIxNmJjNDNhOGFmOGNmZTM0
Mjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTIyOCw2ICsyMjks
OSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpbWFnZVNtb290aGluZ0VuYWJsZWQoKSBjb25zdDsKICAg
ICB2b2lkIHNldEltYWdlU21vb3RoaW5nRW5hYmxlZChib29sKTsKIAorICAgIFN0cmluZyBpbWFn
ZVNtb290aGluZ1F1YWxpdHkoKSBjb25zdDsKKyAgICB2b2lkIHNldEltYWdlU21vb3RoaW5nUXVh
bGl0eShjb25zdCBTdHJpbmcmKTsKKwogcHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIERpcmVjdGlv
biB7CiAgICAgICAgIEluaGVyaXQsCkBAIC0yMzUsNiArMjM5LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgIExUUgogICAgIH07CiAKKyAgICBlbnVtIGNsYXNzIFNtb290aGluZ1F1YWxpdHkgeworICAg
ICAgICBMb3csCisgICAgICAgIE1lZGl1bSwKKyAgICAgICAgSGlnaAorICAgIH07CisKICAgICBj
bGFzcyBGb250UHJveHkgOiBwdWJsaWMgRm9udFNlbGVjdG9yQ2xpZW50IHsKICAgICBwdWJsaWM6
CiAgICAgICAgIEZvbnRQcm94eSgpID0gZGVmYXVsdDsKQEAgLTI4MSw2ICsyOTEsNyBAQCBwcml2
YXRlOgogICAgICAgICBWZWN0b3I8ZmxvYXQ+IGxpbmVEYXNoOwogICAgICAgICBmbG9hdCBsaW5l
RGFzaE9mZnNldDsKICAgICAgICAgYm9vbCBpbWFnZVNtb290aGluZ0VuYWJsZWQ7CisgICAgICAg
IFNtb290aGluZ1F1YWxpdHkgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5OwogCiAgICAgICAgIC8vIFRl
eHQgc3RhdGUuCiAgICAgICAgIFRleHRBbGlnbiB0ZXh0QWxpZ247CkBAIC0zNzIsNiArMzgzLDMz
IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICB2aXJ0
dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKICNlbmRp
ZgorICAgIAorICAgIHN0YXRpYyBpbmxpbmUgU21vb3RoaW5nUXVhbGl0eSBwYXJzZVNtb290aGlu
Z1F1YWxpdHkoY29uc3QgU3RyaW5nJiBzbW9vdGhpbmdRdWFsaXR5U3RyaW5nKQorICAgIHsKKyAg
ICAgICAgaWYgKHNtb290aGluZ1F1YWxpdHlTdHJpbmcgPT0gImxvdyIpCisgICAgICAgICAgICBy
ZXR1cm4gU21vb3RoaW5nUXVhbGl0eTo6TG93OworICAgICAgICBpZiAoc21vb3RoaW5nUXVhbGl0
eVN0cmluZyA9PSAibWVkaXVtIikKKyAgICAgICAgICAgIHJldHVybiBTbW9vdGhpbmdRdWFsaXR5
OjpNZWRpdW07CisgICAgICAgIGlmIChzbW9vdGhpbmdRdWFsaXR5U3RyaW5nID09ICJoaWdoIikK
KyAgICAgICAgICAgIHJldHVybiBTbW9vdGhpbmdRdWFsaXR5OjpIaWdoOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNtb290aGluZ1F1YWxpdHk6OkxvdzsK
KyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIEludGVycG9sYXRpb25RdWFsaXR5IHNtb290aGlu
Z1RvSW50ZXJwb2xhdGlvblF1YWxpdHkoU21vb3RoaW5nUXVhbGl0eSBxdWFsaXR5KQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChxdWFsaXR5KSB7CisgICAgICAgIGNhc2UgU21vb3RoaW5nUXVhbGl0
eTo6TG93OgorICAgICAgICAgICAgcmV0dXJuIEludGVycG9sYXRpb25Mb3c7CisgICAgICAgIGNh
c2UgU21vb3RoaW5nUXVhbGl0eTo6TWVkaXVtOgorICAgICAgICAgICAgcmV0dXJuIEludGVycG9s
YXRpb25NZWRpdW07CisgICAgICAgIGNhc2UgU21vb3RoaW5nUXVhbGl0eTo6SGlnaDoKKyAgICAg
ICAgICAgIHJldHVybiBJbnRlcnBvbGF0aW9uSGlnaDsKKyAgICAgICAgfQorCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkxvdzsKKyAg
ICB9CiAKICAgICBWZWN0b3I8U3RhdGUsIDE+IG1fc3RhdGVTdGFjazsKICAgICB1bnNpZ25lZCBt
X3VucmVhbGl6ZWRTYXZlQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAppbmRleCA1ZGUzNWVkNjlmYTgwMDc3
MDRiNzg0M2YzMDkxOTFkZGE0OTkxYjIzLi45NmYwOGNjZmRiM2Q3NTQ5YTBkMWQ3ZTRmY2EwYzll
ODg0NjJhYmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKQEAgLTIzLDYgKzIzLDcgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAorZW51bSBJbWFnZVNtb290aGluZ1F1YWxpdHkgeyAibG93IiwgIm1lZGl1bSIs
ICJoaWdoIiB9OwogZW51bSBDYW52YXNXaW5kaW5nUnVsZSB7ICJub256ZXJvIiwgImV2ZW5vZGQi
IH07CiAKIGludGVyZmFjZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgOiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0IHsKQEAgLTE4OCw1ICsxODksNiBAQCBpbnRlcmZhY2UgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAKICAgICBhdHRyaWJ1dGUgYm9v
bGVhbiBpbWFnZVNtb290aGluZ0VuYWJsZWQ7CiAgICAgW0ltcGxlbWVudGVkQXM9aW1hZ2VTbW9v
dGhpbmdFbmFibGVkXSBhdHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRJbWFnZVNtb290aGluZ0VuYWJs
ZWQ7CisgICAgYXR0cmlidXRlIEltYWdlU21vb3RoaW5nUXVhbGl0eSBpbWFnZVNtb290aGluZ1F1
YWxpdHk7CiB9OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTdlYjRjODI1OTI3ZWViNzRmMWZmYWE2MTMwNjJjMTJlZDNm
ZGQ4Yy4uMzY1MDM4Y2UyNzZlYjZmOTIyZGQ3ZTAzZTJiYjg0NTc0ZDFmYmZkMiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDE1LTA5LTI5ICBLYXRseW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29t
PgorCisgICAgICAgIFRlc3RzIGZvciB0aGUgbmV3IGltYWdlU21vb3RoaW5nUXVhbGl0eSBhdHRy
aWJ1dGUgZm9yIENhbnZhcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0OTU0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZmFzdC9jYW52YXMvY2FudmFzLWltYWdlU21vb3RoaW5nUXVhbGl0eS5odG1s
OiBBZGRlZC4KKwogMjAxNS0wOS0yNCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgVGhlIHNhbWUgcHJvYmxlbSBoYXBwZW5zIG9uIEVsIENhcGl0YW4uCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFs
aXR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Y4NjA4MGY5MTg4M2YxMmQxZjE5MzI4OTAxMjdlMjBlMTdk
MmU3MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1p
bWFnZVNtb290aGluZ1F1YWxpdHkuaHRtbApAQCAtMCwwICsxLDkzIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGJvZHk+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8Y2FudmFzIGlkPSJzb3VyY2UiPjwvY2FudmFzPgorCis8c2NyaXB0
PgorCitkZXNjcmlwdGlvbigiVGVzdHMgZm9yIHRoZSBpbWFnZVNtb290aGluZ1F1YWxpdHkgYXR0
cmlidXRlLiIpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICB0ZXN0UnVubmVyLm92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0Q2FudmFzVXNlc0FjY2VsZXJhdGVkRHJhd2luZyIsIDApOwor
Cit2YXIgc291cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpOworc291cmNl
LndpZHRoID0gNjA7Citzb3VyY2UuaGVpZ2h0ID0gMTI7Cit2YXIgc291cmNlQ29udGV4dCA9IHNv
dXJjZS5nZXRDb250ZXh0KCcyZCcpOwordmFyIHNvdXJjZUltYWdlID0gc291cmNlQ29udGV4dC5j
cmVhdGVJbWFnZURhdGEoc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTsKKworZnVuY3Rpb24g
ZHJhd0JsYWNrRG90KHgsIHkpIHsKKyAgICB2YXIgb2Zmc2V0ID0geSAqIDQgKiBzb3VyY2Uud2lk
dGggKyB4ICogNDsKKyAgICBzb3VyY2VJbWFnZS5kYXRhW29mZnNldCArIDBdID0gMDsgLy8gUgor
ICAgIHNvdXJjZUltYWdlLmRhdGFbb2Zmc2V0ICsgMV0gPSAwOyAvLyBHCisgICAgc291cmNlSW1h
Z2UuZGF0YVtvZmZzZXQgKyAyXSA9IDA7IC8vIEIKKyAgICBzb3VyY2VJbWFnZS5kYXRhW29mZnNl
dCArIDNdID0gMjU1OyAvLyBBbHBoYQorfQorCitmb3IgKHZhciB4ID0gMDsgeCA8IHNvdXJjZS53
aWR0aDsgeCsrKSB7CisgICAgeSA9IDE7CisgICAgZHJhd0JsYWNrRG90KHgsIDEpCisgICAgZHJh
d0JsYWNrRG90KHgsIDIpOworfQorCitzb3VyY2VDb250ZXh0LnB1dEltYWdlRGF0YShzb3VyY2VJ
bWFnZSwgMCwgMCk7CisKK2Z1bmN0aW9uIHNjYWxlVGVzdFJlc3VsdHMocXVhbGl0eSl7CisJdmFy
IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworCWNhbnZhcy5pZCA9
IHF1YWxpdHk7CisJZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjYW52YXMpOworCWRlYnVnKCJU
ZXN0aW5nIGltYWdlU21vb3RoaW5nUXVhbGl0eSAiICsgcXVhbGl0eSArICIgdmFsdWUgYXNzaWdu
bWVudC5cbiIpOworICAgIGNhbnZhcy53aWR0aCA9IHNvdXJjZUltYWdlLndpZHRoIC8gNDsKKyAg
ICBjYW52YXMuaGVpZ2h0ID0gc291cmNlSW1hZ2UuaGVpZ2h0IC8gNDsKKyAgICBpZiAocXVhbGl0
eSA9PSAnZGVmYXVsdCcpCisgICAgCXJldHVybiBzY2FsZUltYWdlRGF0YShjYW52YXMsICcnKTsK
KyAgICBlbHNlCisgICAgCXJldHVybiBzY2FsZUltYWdlRGF0YShjYW52YXMsIHF1YWxpdHkpOwor
fQorCitmdW5jdGlvbiBzY2FsZUltYWdlRGF0YShkZXN0aW5hdGlvbkNhbnZhcywgcXVhbGl0eSkg
eworICAgIHZhciBjb250ZXh0ID0gZGVzdGluYXRpb25DYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsK
KworICAgIGlmIChxdWFsaXR5KQorICAgICAJY29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkg
PSBxdWFsaXR5OworICAgIAorICAgIGNvbnRleHQuZHJhd0ltYWdlKHNvdXJjZSwgMCwgMCwgZGVz
dGluYXRpb25DYW52YXMud2lkdGgsIGRlc3RpbmF0aW9uQ2FudmFzLmhlaWdodCk7CisgICAgdmFy
IGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKS5kYXRhOworICAgIGNvbnRl
eHQuY2xlYXJSZWN0KDAsIDAsIGRlc3RpbmF0aW9uQ2FudmFzLndpZHRoLCBkZXN0aW5hdGlvbkNh
bnZhcy5oZWlnaHQpOworICAgIHJldHVybiBkYXRhOworfQorCit2YXIgbG93RGF0YSA9IHNjYWxl
VGVzdFJlc3VsdHMoJ2xvdycpOwordmFyIG1lZGl1bURhdGEgPSBzY2FsZVRlc3RSZXN1bHRzKCdt
ZWRpdW0nKTsKK3ZhciBoaWdoRGF0YSA9IHNjYWxlVGVzdFJlc3VsdHMoJ2hpZ2gnKTsKK3Nob3Vs
ZE5vdEJlKCJKU09OLnN0cmluZ2lmeShsb3dEYXRhKSIsICJKU09OLnN0cmluZ2lmeShtZWRpdW1E
YXRhKSIpOworc2hvdWxkTm90QmUoIkpTT04uc3RyaW5naWZ5KG1lZGl1bURhdGEpIiwgIkpTT04u
c3RyaW5naWZ5KGhpZ2hEYXRhKSIpOworc2hvdWxkTm90QmUoIkpTT04uc3RyaW5naWZ5KGxvd0Rh
dGEpIiwgIkpTT04uc3RyaW5naWZ5KGhpZ2hEYXRhKSIpOworc2hvdWxkQmVHcmVhdGVyVGhhbk9y
RXF1YWwoImxvd0RhdGFbM10iLCAibWVkaXVtRGF0YVszXSIpOworc2hvdWxkQmVHcmVhdGVyVGhh
bk9yRXF1YWwoIm1lZGl1bURhdGFbM10iLCAiaGlnaERhdGFbM10iKTsKKwordmFyIGRlZmF1bHRE
YXRhID0gc2NhbGVUZXN0UmVzdWx0cygnZGVmYXVsdCcpOworc2hvdWxkQmUoIkpTT04uc3RyaW5n
aWZ5KGRlZmF1bHREYXRhKSIsICJKU09OLnN0cmluZ2lmeShsb3dEYXRhKSIpOworCit2YXIgaGln
aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaWdoJyk7CitkZWJ1ZygiVGVzdGluZyBpbWFn
ZVNtb290aGluZ1F1YWxpdHkgdmFsdWUgcGVyc2lzdGVudCBhZnRlciBpbWFnZVNtb290aGluZ0Vu
YWJsZWQgY2hhbmdlZC5cbiIpOworaGlnaC5nZXRDb250ZXh0KCcyZCcpLmltYWdlU21vb3RoaW5n
RW5hYmxlZCA9IGZhbHNlOworaGlnaC5nZXRDb250ZXh0KCcyZCcpLmltYWdlU21vb3RoaW5nRW5h
YmxlZCA9IHRydWU7Cit2YXIgcGVyc2lzdERhdGEgPSBzY2FsZUltYWdlRGF0YShoaWdoLCAnJyk7
CitzaG91bGRCZSgiSlNPTi5zdHJpbmdpZnkocGVyc2lzdERhdGEpIiwgIkpTT04uc3RyaW5naWZ5
KGhpZ2hEYXRhKSIpOworCitkZWJ1ZygiVGVzdGluZyB2YXJpb3VzIGludmFsaWQgaW5wdXQuXG4i
KTsKK3BlcnNpc3REYXRhID0gc2NhbGVJbWFnZURhdGEoaGlnaCwgJzMyMjMnKTsKK3Nob3VsZEJl
KCJKU09OLnN0cmluZ2lmeShwZXJzaXN0RGF0YSkiLCAiSlNPTi5zdHJpbmdpZnkoaGlnaERhdGEp
Iik7CitwZXJzaXN0RGF0YSA9IHNjYWxlSW1hZ2VEYXRhKGhpZ2gsICdiYWQgaW5wdXQnKTsKK3No
b3VsZEJlKCJKU09OLnN0cmluZ2lmeShwZXJzaXN0RGF0YSkiLCAiSlNPTi5zdHJpbmdpZnkoaGln
aERhdGEpIik7CitwZXJzaXN0RGF0YSA9IHNjYWxlSW1hZ2VEYXRhKGhpZ2gsICdMT1cnKTsKK3No
b3VsZEJlKCJKU09OLnN0cmluZ2lmeShwZXJzaXN0RGF0YSkiLCAiSlNPTi5zdHJpbmdpZnkoaGln
aERhdGEpIik7CitwZXJzaXN0RGF0YSA9IHNjYWxlSW1hZ2VEYXRhKGhpZ2gsICdNZWRpdW0nKTsK
K3Nob3VsZEJlKCJKU09OLnN0cmluZ2lmeShwZXJzaXN0RGF0YSkiLCAiSlNPTi5zdHJpbmdpZnko
aGlnaERhdGEpIik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
LmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggNmNjZDNiY2RhZDMyM2ZhZjQ0NzFkNzE3NTcw
ZDUzMTdjZWM2Y2ZmMC4uNjNmZGEyZjFjNWEzOWQ5N2IxYWM3MTkxMDI1YWM1NzIyYjY0ODczOCAx
MDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xLDMgKzEsNCBAQAor
Ki5wbmcKICoubW9kZSoKICoucGJ4dXNlcgogKi5wZXJzcGVjdGl2ZSoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262217</attachid>
            <date>2015-09-30 17:46:21 -0700</date>
            <delta_ts>2015-09-30 19:05:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149541-20150930174724.patch</filename>
            <type>text/plain</type>
            <size>14663</size>
            <attacher name="Kat Graff">kgraff</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGIyYjM5YWRkYjVjMDY5
MmQ2YmRkY2JlZGFiNjEwNTQzMjUwNDNiZC4uOTA3NmJjMTZiMmQwMzNmNTM4YWZlOTc3NmRiODdj
MGYxNWIxODcxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE1LTA5LTMwICBLYXRs
eW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0
aGUgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IHByb3BlcnR5IGZvciBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDk1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
cyBkb2N1bWVudGVkIGhlcmU6IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdl
L3NjcmlwdGluZy5odG1sI2ltYWdlLXNtb290aGluZworICAgICAgICBFeHBvc2VzIHRoZSBzbW9v
b3RoaW5nIHF1YWxpdHkgb2YgYWxnb3JpdGhtcyB1c2VkIGZvciBzY2FsaW5nIGltYWdlcy4gVmFs
aWQgaW5wdXQKKyAgICAgICAgdmFsdWVzIGFyZSBsb3csIG1lZGl1bSwgYW5kIGhpZ2g6IGFzc29j
aWF0ZWQgYWxnb3JpdGhtcyBhcmUgZXhwZWN0ZWQgdG8gdmFyeSBmb3IKKyAgICAgICAgZGlmZmVy
aW5nIGhhcmR3YXJlLiBzZXRJbWFnZVNtb290aGluZ1F1YWxpdHkgcHJvdmlkZXMgYSBoYW5kbGUg
aW50byBDR0ludGVycG9sYXRpb25RdWFsaXR5LgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFz
L2NhbnZhcy1pbWFnZVNtb290aGluZ1F1YWxpdHkuaHRtbAorCisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpzbW9vdGhpbmdUb0ludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aW1hZ2VTbW9vdGhpbmdRdWFsaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0SW1hZ2VTbW9vdGhpbmdR
dWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
SW1hZ2VTbW9vdGhpbmdFbmFibGVkKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaWRsOgorCiAyMDE1LTA5LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbCBvdXQgcjE4ODMzMTogIk5ldHdvcmtQcm9j
ZXNzOiBETlMgcHJlZmV0Y2ggaGFwcGVucyBpbiB0aGUgV2ViIFByb2Nlc3MiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAppbmRleCBjODMxNzgwODEzYWI2NWExY2IxMjY5ZWQ4YmFkYWZlMTdiNDNhN2U4Li4yMmEwMjVi
MDA4YjkyMWM2ZDNlOTFlYWM0Yzc2ODcwZTYwYTBjMDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTQy
LDcgKzQyLDYgQEAKICNpbmNsdWRlICJET01QYXRoLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAgLTE3Myw2ICsxNzIs
NyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlN0YXRlOjpTdGF0ZSgpCiAgICAgLCBoYXNJ
bnZlcnRpYmxlVHJhbnNmb3JtKHRydWUpCiAgICAgLCBsaW5lRGFzaE9mZnNldCgwKQogICAgICwg
aW1hZ2VTbW9vdGhpbmdFbmFibGVkKHRydWUpCisgICAgLCBpbWFnZVNtb290aGluZ1F1YWxpdHko
U21vb3RoaW5nUXVhbGl0eTo6TG93KQogICAgICwgdGV4dEFsaWduKFN0YXJ0VGV4dEFsaWduKQog
ICAgICwgdGV4dEJhc2VsaW5lKEFscGhhYmV0aWNUZXh0QmFzZWxpbmUpCiAgICAgLCBkaXJlY3Rp
b24oRGlyZWN0aW9uOjpJbmhlcml0KQpAQCAtMTk5LDYgKzE5OSw3IEBAIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKGNvbnN0IFN0YXRlJiBvdGhlcikKICAgICAsIGhhc0lu
dmVydGlibGVUcmFuc2Zvcm0ob3RoZXIuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKICAgICAsIGxp
bmVEYXNoT2Zmc2V0KG90aGVyLmxpbmVEYXNoT2Zmc2V0KQogICAgICwgaW1hZ2VTbW9vdGhpbmdF
bmFibGVkKG90aGVyLmltYWdlU21vb3RoaW5nRW5hYmxlZCkKKyAgICAsIGltYWdlU21vb3RoaW5n
UXVhbGl0eShvdGhlci5pbWFnZVNtb290aGluZ1F1YWxpdHkpCiAgICAgLCB0ZXh0QWxpZ24ob3Ro
ZXIudGV4dEFsaWduKQogICAgICwgdGV4dEJhc2VsaW5lKG90aGVyLnRleHRCYXNlbGluZSkKICAg
ICAsIGRpcmVjdGlvbihvdGhlci5kaXJlY3Rpb24pCkBAIC0yMjksNiArMjMwLDcgQEAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZSYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0
ZTo6b3BlcmF0b3I9KGNvbnMKICAgICB0cmFuc2Zvcm0gPSBvdGhlci50cmFuc2Zvcm07CiAgICAg
aGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSA9IG90aGVyLmhhc0ludmVydGlibGVUcmFuc2Zvcm07CiAg
ICAgaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gb3RoZXIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkOwor
ICAgIGltYWdlU21vb3RoaW5nUXVhbGl0eSA9IG90aGVyLmltYWdlU21vb3RoaW5nUXVhbGl0eTsK
ICAgICB0ZXh0QWxpZ24gPSBvdGhlci50ZXh0QWxpZ247CiAgICAgdGV4dEJhc2VsaW5lID0gb3Ro
ZXIudGV4dEJhc2VsaW5lOwogICAgIGRpcmVjdGlvbiA9IG90aGVyLmRpcmVjdGlvbjsKQEAgLTI1
MzksNiArMjU0MSw2MyBAQCBQbGF0Zm9ybUxheWVyKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgSW50ZXJw
b2xhdGlvblF1YWxpdHkgc21vb3RoaW5nVG9JbnRlcnBvbGF0aW9uUXVhbGl0eShDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OlNtb290aGluZ1F1YWxpdHkgcXVhbGl0eSkKK3sKKyAgICBzd2l0Y2gg
KHF1YWxpdHkpIHsKKyAgICBjYXNlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U21vb3RoaW5n
UXVhbGl0eTo6TG93OgorICAgICAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkxvdzsKKyAgICBjYXNl
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U21vb3RoaW5nUXVhbGl0eTo6TWVkaXVtOgorICAg
ICAgICByZXR1cm4gSW50ZXJwb2xhdGlvbk1lZGl1bTsKKyAgICBjYXNlIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6U21vb3RoaW5nUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIEludGVy
cG9sYXRpb25IaWdoOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBJbnRlcnBvbGF0aW9uTG93OworfTsKKworU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6aW1hZ2VTbW9vdGhpbmdRdWFsaXR5KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHN0YXRl
KCkuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5KSB7CisgICAgY2FzZSBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OlNtb290aGluZ1F1YWxpdHk6OkxvdzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgibG93Iik7CisgICAgY2FzZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlNtb290aGluZ1F1
YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWVkaXVtIik7Cisg
ICAgY2FzZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlNtb290aGluZ1F1YWxpdHk6OkhpZ2g6
CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImhpZ2giKTsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJsb3ciKTsKK30KKwor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEltYWdlU21vb3RoaW5nUXVhbGl0eShj
b25zdCBTdHJpbmcmIHNtb290aGluZ1F1YWxpdHlTdHJpbmcpCit7CisgICAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpTbW9vdGhpbmdRdWFsaXR5IHF1YWxpdHk7CisgICAgaWYgKHNtb290aGlu
Z1F1YWxpdHlTdHJpbmcgPT0gImxvdyIpCisgICAgICAgIHF1YWxpdHkgPSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OlNtb290aGluZ1F1YWxpdHk6OkxvdzsKKyAgICBlbHNlIGlmIChzbW9vdGhp
bmdRdWFsaXR5U3RyaW5nID09ICJtZWRpdW0iKQorICAgICAgICBxdWFsaXR5ID0gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpTbW9vdGhpbmdRdWFsaXR5OjpNZWRpdW07CisgICAgZWxzZSBpZiAo
c21vb3RoaW5nUXVhbGl0eVN0cmluZyA9PSAiaGlnaCIpCisgICAgICAgIHF1YWxpdHkgPSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlNtb290aGluZ1F1YWxpdHk6OkhpZ2g7CisgICAgZWxzZSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHF1YWxpdHkgPT0gc3RhdGUoKS5pbWFnZVNtb290aGluZ1F1YWxpdHkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHJlYWxpemVTYXZlcygpOworICAgIG1vZGlmaWFibGVTdGF0ZSgp
LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9IHF1YWxpdHk7CisKKyAgICBpZiAoIW1vZGlmaWFibGVT
dGF0ZSgpLmltYWdlU21vb3RoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGF1dG8qIGNvbnRleHQgPSBkcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBjb250ZXh0LT5zZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KHNtb290aGluZ1RvSW50ZXJwb2xhdGlvblF1YWxpdHko
cXVhbGl0eSkpOworfQorCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aW1hZ2VTbW9v
dGhpbmdFbmFibGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RhdGUoKS5pbWFnZVNtb290aGlu
Z0VuYWJsZWQ7CkBAIC0yNTUzLDcgKzI2MTIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBtb2RpZmlh
YmxlU3RhdGUoKS5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBlbmFibGVkOwogICAgIEdyYXBoaWNz
Q29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKGMpCi0gICAgICAgIGMtPnNl
dEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoZW5hYmxlZCA/IERlZmF1bHRJbnRlcnBvbGF0aW9u
UXVhbGl0eSA6IEludGVycG9sYXRpb25Ob25lKTsKKyAgICAgICAgYy0+c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShlbmFibGVkID8gc21vb3RoaW5nVG9JbnRlcnBvbGF0aW9uUXVhbGl0eShz
dGF0ZSgpLmltYWdlU21vb3RoaW5nUXVhbGl0eSkgOiBJbnRlcnBvbGF0aW9uTm9uZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggMzUyNzFkMmNmNjI0MTlmMmVm
NGUwNTRiZWZkYWE4NjcxODgxYTA4Yy4uM2YwYTNlNWFlZTNjNjdmNDQ3M2IyYjM0ZTQxNjBiNzU0
MzE5ZmM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDb2xvclNw
YWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC0yMjgsNiAr
MjI5LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGltYWdlU21vb3RoaW5nRW5hYmxlZCgpIGNvbnN0
OwogICAgIHZvaWQgc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGJvb2wpOwogCisgICAgZW51bSBj
bGFzcyBTbW9vdGhpbmdRdWFsaXR5IHsKKyAgICAgICAgTG93LAorICAgICAgICBNZWRpdW0sCisg
ICAgICAgIEhpZ2gKKyAgICB9OworCisgICAgU3RyaW5nIGltYWdlU21vb3RoaW5nUXVhbGl0eSgp
IGNvbnN0OworICAgIHZvaWQgc2V0SW1hZ2VTbW9vdGhpbmdRdWFsaXR5KGNvbnN0IFN0cmluZyYp
OworCiBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uIHsKICAgICAgICAgSW5oZXJp
dCwKQEAgLTI4MSw2ICsyOTEsNyBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8ZmxvYXQ+IGxp
bmVEYXNoOwogICAgICAgICBmbG9hdCBsaW5lRGFzaE9mZnNldDsKICAgICAgICAgYm9vbCBpbWFn
ZVNtb290aGluZ0VuYWJsZWQ7CisgICAgICAgIFNtb290aGluZ1F1YWxpdHkgaW1hZ2VTbW9vdGhp
bmdRdWFsaXR5OwogCiAgICAgICAgIC8vIFRleHQgc3RhdGUuCiAgICAgICAgIFRleHRBbGlnbiB0
ZXh0QWxpZ247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmlkbAppbmRleCA1ZGUzNWVkNjlmYTgwMDc3MDRiNzg0M2YzMDkx
OTFkZGE0OTkxYjIzLi45NmYwOGNjZmRiM2Q3NTQ5YTBkMWQ3ZTRmY2EwYzllODg0NjJhYmJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5pZGwKQEAgLTIzLDYgKzIzLDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAor
ZW51bSBJbWFnZVNtb290aGluZ1F1YWxpdHkgeyAibG93IiwgIm1lZGl1bSIsICJoaWdoIiB9Owog
ZW51bSBDYW52YXNXaW5kaW5nUnVsZSB7ICJub256ZXJvIiwgImV2ZW5vZGQiIH07CiAKIGludGVy
ZmFjZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsK
QEAgLTE4OCw1ICsxODksNiBAQCBpbnRlcmZhY2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIDog
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAKICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBpbWFnZVNt
b290aGluZ0VuYWJsZWQ7CiAgICAgW0ltcGxlbWVudGVkQXM9aW1hZ2VTbW9vdGhpbmdFbmFibGVk
XSBhdHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQ7CisgICAgYXR0
cmlidXRlIEltYWdlU21vb3RoaW5nUXVhbGl0eSBpbWFnZVNtb290aGluZ1F1YWxpdHk7CiB9Owog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMTI5OWIwNjQ0ZWRjOTJlM2U2NzVmZDY5NTE3YzM5YmU4ZTVmZDFkOC4uMzhiNzc4
NzI5N2UyMWI2ZTRjYzE0ZWRiNzgyYjJlZjUxMWI3NWJkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDE1LTA5LTMwICBLYXRseW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgorCisgICAgICAg
IFRlc3RzIHN1cHBvcnQgZm9yIGltYWdlU21vb3RoaW5nUXVhbGl0eSBhdHRyaWJ1dGUgb2YgQ2Fu
dmFzIGVsZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDk1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0cyBsb3csIG1lZGl1bSwgaGlnaCwgYW5kIGRlZmF1bHQgdmFsdWVzLCB2YWx1ZSBw
ZXJzaXN0ZW5jZSB3aGVuCisgICAgICAgIGltYWdlU21vb3RoaW5nRW5hYmxlZCBpcyBjaGFuZ2Vk
LCBhbmQgaW52YWxpZCBpbnB1dC4KKworICAgICAgICAqIGZhc3QvY2FudmFzL2NhbnZhcy1pbWFn
ZVNtb290aGluZ1F1YWxpdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy9jYW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Lmh0bWw6IEFkZGVkLgorCiAyMDE1LTA5
LTMwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbGFu
ZGluZyByMTkwMjg5IGFmdGVyIGZpeGVzIHRyYWNrZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0OTYxOQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvY2FudmFzLWltYWdlU21vb3RoaW5nUXVhbGl0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNzcyNGY2NGU4MjI0OWY3YmFmYmRiYjYzMWUxMDc0MDA3NTdiNDQzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWltYWdlU21v
b3RoaW5nUXVhbGl0eS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMiBAQAorVGVzdHMgZm9yIHRo
ZSBpbWFnZVNtb290aGluZ1F1YWxpdHkgYXR0cmlidXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworVEVTVDogaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ICdsb3cnLCAnbWVkaXVtLCAn
aGlnaCcgdmFsdWVzIHN1cHBvcnRlZC4KK1RFU1Q6ICdsb3cnLCAnbWVkaXVtJywgYW5kICdoaWdo
JyBwcm9kdWNlIGRpc3RpbmN0IHJlc3VsdHMuCitQQVNTIGxvd0RhdGEgaXMgbm90IG1lZGl1bURh
dGEKK1BBU1MgbWVkaXVtRGF0YSBpcyBub3QgaGlnaERhdGEKK1BBU1MgbG93RGF0YSBpcyBub3Qg
aGlnaERhdGEKK1RFU1Q6ICdsb3cnIGFscGhhID4gJ21lZGl1bScgYWxwaGEgPiAnaGlnaCcgYWxw
aGEgdmFsdWVzLgorUEFTUyBsb3dEYXRhWzNdIGlzID49IG1lZGl1bURhdGFbM10KK1BBU1MgbWVk
aXVtRGF0YVszXSBpcyA+PSBoaWdoRGF0YVszXQorVEVTVDogaW1hZ2VTbW9vdGhpbmdRdWFsaXR5
IGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlICdsb3cnLgorUEFTUyBzb3VyY2UuZ2V0Q29udGV4dCgn
MmQnKS5pbWFnZVNtb290aGluZ1F1YWxpdHkgaXMgJ2xvdycKK1RFU1Q6IGltYWdlU21vb3RoaW5n
UXVhbGl0eSB2YWx1ZSBwZXJzaXN0ZW50IGFmdGVyIGltYWdlU21vb3RoaW5nRW5hYmxlZCB2YWx1
ZSBjaGFuZ2VkLgorUEFTUyBoaWdoQ2FudmFzLmdldENvbnRleHQoJzJkJykuaW1hZ2VTbW9vdGhp
bmdRdWFsaXR5IGlzICdoaWdoJworVEVTVDogaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IHZhbHVlIGNh
biBiZSBzZXQgd2hpbGUgaW1hZ2VTbW9vdGhpbmdFbmFibGVkIGV2YWx1YXRlcyBmYWxzZS4KK1BB
U1MgaGlnaENhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmltYWdlU21vb3RoaW5nUXVhbGl0eSBpcyAn
bWVkaXVtJworVEVTVDogaW52YWxpZCBpbnB1dCBkb2VzIG5vdCB0aHJvdyBvciBjaGFuZ2UgYXR0
cmlidXRlLgorUEFTUyBzY2FsZUltYWdlRGF0YShoaWdoQ2FudmFzLCAnMzIyMycpIGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgorUEFTUyBoaWdoQ2FudmFzLmdldENvbnRleHQoJzJkJykuaW1hZ2VT
bW9vdGhpbmdRdWFsaXR5IGlzICdoaWdoJworUEFTUyBzY2FsZUltYWdlRGF0YShoaWdoQ2FudmFz
LCAnYmFkX2lucHV0JykgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGhpZ2hDYW52YXMu
Z2V0Q29udGV4dCgnMmQnKS5pbWFnZVNtb290aGluZ1F1YWxpdHkgaXMgJ2hpZ2gnCitQQVNTIHNj
YWxlSW1hZ2VEYXRhKGhpZ2hDYW52YXMsICdMT1cnKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4K
K1BBU1MgaGlnaENhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmltYWdlU21vb3RoaW5nUXVhbGl0eSBp
cyAnaGlnaCcKK1BBU1Mgc2NhbGVJbWFnZURhdGEoaGlnaENhbnZhcywgJ01lZGl1bScpIGRpZCBu
b3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBoaWdoQ2FudmFzLmdldENvbnRleHQoJzJkJykuaW1h
Z2VTbW9vdGhpbmdRdWFsaXR5IGlzICdoaWdoJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy9jYW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy9jYW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODI2
MGQ2ODhjNTM4ZDE1ZjIyZTYzYmM0ODA5NDZhODU4M2YyMDg4YwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1pbWFnZVNtb290aGluZ1F1YWxpdHkuaHRt
bApAQCAtMCwwICsxLDk4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CisKKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8Y2FudmFz
IGlkPSJzb3VyY2UiPjwvY2FudmFzPgorCis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdHMg
Zm9yIHRoZSBpbWFnZVNtb290aGluZ1F1YWxpdHkgYXR0cmlidXRlLiIpOworCitpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICB0ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0Q2Fu
dmFzVXNlc0FjY2VsZXJhdGVkRHJhd2luZyIsIDApOworCit2YXIgc291cmNlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInNvdXJjZSIpOworc291cmNlLndpZHRoID0gNjA7Citzb3VyY2UuaGVp
Z2h0ID0gMTI7Cit2YXIgc291cmNlQ29udGV4dCA9IHNvdXJjZS5nZXRDb250ZXh0KCIyZCIpOwor
dmFyIHNvdXJjZUltYWdlID0gc291cmNlQ29udGV4dC5jcmVhdGVJbWFnZURhdGEoc291cmNlLndp
ZHRoLCBzb3VyY2UuaGVpZ2h0KTsKKworZnVuY3Rpb24gZHJhd0JsYWNrRG90KHgsIHkpIHsKKyAg
ICB2YXIgb2Zmc2V0ID0geSAqIDQgKiBzb3VyY2Uud2lkdGggKyB4ICogNDsKKyAgICBzb3VyY2VJ
bWFnZS5kYXRhW29mZnNldCArIDBdID0gMDsgLy8gUgorICAgIHNvdXJjZUltYWdlLmRhdGFbb2Zm
c2V0ICsgMV0gPSAwOyAvLyBHCisgICAgc291cmNlSW1hZ2UuZGF0YVtvZmZzZXQgKyAyXSA9IDA7
IC8vIEIKKyAgICBzb3VyY2VJbWFnZS5kYXRhW29mZnNldCArIDNdID0gMjU1OyAvLyBBbHBoYQor
fQorCitmb3IgKHZhciB4ID0gMDsgeCA8IHNvdXJjZS53aWR0aDsgeCsrKSB7CisgICAgZHJhd0Js
YWNrRG90KHgsIDEpCisgICAgZHJhd0JsYWNrRG90KHgsIDIpOworfQorCitzb3VyY2VDb250ZXh0
LnB1dEltYWdlRGF0YShzb3VyY2VJbWFnZSwgMCwgMCk7CisKK2Z1bmN0aW9uIHNjYWxlVGVzdFJl
c3VsdHMocXVhbGl0eSl7CisJdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNh
bnZhcyIpOworCWNhbnZhcy5pZCA9IHF1YWxpdHkrIkNhbnZhcyI7CisJZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChjYW52YXMpOworCWNhbnZhcy53aWR0aCA9IHNvdXJjZUltYWdlLndpZHRoIC8g
NDsKKyAgICBjYW52YXMuaGVpZ2h0ID0gc291cmNlSW1hZ2UuaGVpZ2h0IC8gNDsKKyAgICByZXR1
cm4gc2NhbGVJbWFnZURhdGEoY2FudmFzLCBxdWFsaXR5KTsKK30KKworZnVuY3Rpb24gc2NhbGVJ
bWFnZURhdGEoZGVzdGluYXRpb25DYW52YXMsIHF1YWxpdHkpIHsKKyAgICB2YXIgY29udGV4dCA9
IGRlc3RpbmF0aW9uQ2FudmFzLmdldENvbnRleHQoIjJkIik7CisKKyAgICBpZiAocXVhbGl0eSkK
KyAgICAgICAgY29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkgPSBxdWFsaXR5OworCisgICAg
Y29udGV4dC5kcmF3SW1hZ2Uoc291cmNlLCAwLCAwLCBkZXN0aW5hdGlvbkNhbnZhcy53aWR0aCwg
ZGVzdGluYXRpb25DYW52YXMuaGVpZ2h0KTsKKyAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1h
Z2VEYXRhKDAsIDAsIDEsIDEpLmRhdGE7CisgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgZGVz
dGluYXRpb25DYW52YXMud2lkdGgsIGRlc3RpbmF0aW9uQ2FudmFzLmhlaWdodCk7CisgICAgcmV0
dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpOworfQorCitmdW5jdGlvbiB0ZXN0SW52YWxpZElucHV0
KGJhZElucHV0KXsKKwlzaG91bGROb3RUaHJvdyhiYWRJbnB1dCk7CisJc2hvdWxkQmUoImhpZ2hD
YW52YXMuZ2V0Q29udGV4dCgnMmQnKS5pbWFnZVNtb290aGluZ1F1YWxpdHkiLCAiJ2hpZ2gnIik7
Cit9CisKK2RlYnVnKCJURVNUOiBpbWFnZVNtb290aGluZ1F1YWxpdHkgJ2xvdycsICdtZWRpdW0s
ICdoaWdoJyB2YWx1ZXMgc3VwcG9ydGVkLiIpOwordmFyIGxvd0RhdGEgPSBzY2FsZVRlc3RSZXN1
bHRzKCJsb3ciKTsKK3ZhciBtZWRpdW1EYXRhID0gc2NhbGVUZXN0UmVzdWx0cygibWVkaXVtIik7
Cit2YXIgaGlnaERhdGEgPSBzY2FsZVRlc3RSZXN1bHRzKCJoaWdoIik7CisKK2RlYnVnKCJURVNU
OiAnbG93JywgJ21lZGl1bScsIGFuZCAnaGlnaCcgcHJvZHVjZSBkaXN0aW5jdCByZXN1bHRzLiIp
Oworc2hvdWxkTm90QmUoImxvd0RhdGEiLCAibWVkaXVtRGF0YSIpOworc2hvdWxkTm90QmUoIm1l
ZGl1bURhdGEiLCAiaGlnaERhdGEiKTsKK3Nob3VsZE5vdEJlKCJsb3dEYXRhIiwgImhpZ2hEYXRh
Iik7CisKK2RlYnVnKCJURVNUOiAnbG93JyBhbHBoYSA+ICdtZWRpdW0nIGFscGhhID4gJ2hpZ2gn
IGFscGhhIHZhbHVlcy4iKTsKK3Nob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCJsb3dEYXRhWzNd
IiwgIm1lZGl1bURhdGFbM10iKTsKK3Nob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCJtZWRpdW1E
YXRhWzNdIiwgImhpZ2hEYXRhWzNdIik7CisKK2RlYnVnKCJURVNUOiBpbWFnZVNtb290aGluZ1F1
YWxpdHkgZGVmYXVsdCB2YWx1ZSBzaG91bGQgYmUgJ2xvdycuIik7CitzaG91bGRCZSgic291cmNl
LmdldENvbnRleHQoJzJkJykuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IiwgIidsb3cnIik7CisKK2Rl
YnVnKCJURVNUOiBpbWFnZVNtb290aGluZ1F1YWxpdHkgdmFsdWUgcGVyc2lzdGVudCBhZnRlciBp
bWFnZVNtb290aGluZ0VuYWJsZWQgdmFsdWUgY2hhbmdlZC4iKTsKK3ZhciBoaWdoQ2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhpZ2hDYW52YXMiKTsKK2hpZ2hDYW52YXMuZ2V0Q29u
dGV4dCgiMmQiKS5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTsKK3Nob3VsZEJlKCJoaWdo
Q2FudmFzLmdldENvbnRleHQoJzJkJykuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IiwgIidoaWdoJyIp
OworCitkZWJ1ZygiVEVTVDogaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IHZhbHVlIGNhbiBiZSBzZXQg
d2hpbGUgaW1hZ2VTbW9vdGhpbmdFbmFibGVkIGV2YWx1YXRlcyBmYWxzZS4iKTsKK2hpZ2hDYW52
YXMuZ2V0Q29udGV4dCgiMmQiKS5pbWFnZVNtb290aGluZ1F1YWxpdHkgPSAnbWVkaXVtJzsKK3No
b3VsZEJlKCJoaWdoQ2FudmFzLmdldENvbnRleHQoJzJkJykuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5
IiwgIidtZWRpdW0nIik7CitoaWdoQ2FudmFzLmdldENvbnRleHQoIjJkIikuaW1hZ2VTbW9vdGhp
bmdRdWFsaXR5ID0gJ2hpZ2gnOworaGlnaENhbnZhcy5nZXRDb250ZXh0KCIyZCIpLmltYWdlU21v
b3RoaW5nRW5hYmxlZCA9IHRydWU7CisKK2RlYnVnKCJURVNUOiBpbnZhbGlkIGlucHV0IGRvZXMg
bm90IHRocm93IG9yIGNoYW5nZSBhdHRyaWJ1dGUuIik7Cit0ZXN0SW52YWxpZElucHV0KCJzY2Fs
ZUltYWdlRGF0YShoaWdoQ2FudmFzLCAnMzIyMycpIik7Cit0ZXN0SW52YWxpZElucHV0KCJzY2Fs
ZUltYWdlRGF0YShoaWdoQ2FudmFzLCAnYmFkX2lucHV0JykiKTsKK3Rlc3RJbnZhbGlkSW5wdXQo
InNjYWxlSW1hZ2VEYXRhKGhpZ2hDYW52YXMsICdMT1cnKSIpOwordGVzdEludmFsaWRJbnB1dCgi
c2NhbGVJbWFnZURhdGEoaGlnaENhbnZhcywgJ01lZGl1bScpIik7CisKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262222</attachid>
            <date>2015-09-30 19:05:37 -0700</date>
            <delta_ts>2015-09-30 19:26:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149541-20150930190640.patch</filename>
            <type>text/plain</type>
            <size>14207</size>
            <attacher name="Kat Graff">kgraff</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGIyYjM5YWRkYjVjMDY5
MmQ2YmRkY2JlZGFiNjEwNTQzMjUwNDNiZC4uOTA3NmJjMTZiMmQwMzNmNTM4YWZlOTc3NmRiODdj
MGYxNWIxODcxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE1LTA5LTMwICBLYXRs
eW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0
aGUgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IHByb3BlcnR5IGZvciBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDk1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
cyBkb2N1bWVudGVkIGhlcmU6IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdl
L3NjcmlwdGluZy5odG1sI2ltYWdlLXNtb290aGluZworICAgICAgICBFeHBvc2VzIHRoZSBzbW9v
b3RoaW5nIHF1YWxpdHkgb2YgYWxnb3JpdGhtcyB1c2VkIGZvciBzY2FsaW5nIGltYWdlcy4gVmFs
aWQgaW5wdXQKKyAgICAgICAgdmFsdWVzIGFyZSBsb3csIG1lZGl1bSwgYW5kIGhpZ2g6IGFzc29j
aWF0ZWQgYWxnb3JpdGhtcyBhcmUgZXhwZWN0ZWQgdG8gdmFyeSBmb3IKKyAgICAgICAgZGlmZmVy
aW5nIGhhcmR3YXJlLiBzZXRJbWFnZVNtb290aGluZ1F1YWxpdHkgcHJvdmlkZXMgYSBoYW5kbGUg
aW50byBDR0ludGVycG9sYXRpb25RdWFsaXR5LgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFz
L2NhbnZhcy1pbWFnZVNtb290aGluZ1F1YWxpdHkuaHRtbAorCisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpzbW9vdGhpbmdUb0ludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aW1hZ2VTbW9vdGhpbmdRdWFsaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0SW1hZ2VTbW9vdGhpbmdR
dWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
SW1hZ2VTbW9vdGhpbmdFbmFibGVkKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaWRsOgorCiAyMDE1LTA5LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbCBvdXQgcjE4ODMzMTogIk5ldHdvcmtQcm9j
ZXNzOiBETlMgcHJlZmV0Y2ggaGFwcGVucyBpbiB0aGUgV2ViIFByb2Nlc3MiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAppbmRleCBjODMxNzgwODEzYWI2NWExY2IxMjY5ZWQ4YmFkYWZlMTdiNDNhN2U4Li41NWY1YTM3
MWFkMjY5N2E4NzMzNWI4NDY1OTE3YjQ0NzU0OTdjYjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTQy
LDcgKzQyLDYgQEAKICNpbmNsdWRlICJET01QYXRoLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAgLTE3Myw2ICsxNzIs
NyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlN0YXRlOjpTdGF0ZSgpCiAgICAgLCBoYXNJ
bnZlcnRpYmxlVHJhbnNmb3JtKHRydWUpCiAgICAgLCBsaW5lRGFzaE9mZnNldCgwKQogICAgICwg
aW1hZ2VTbW9vdGhpbmdFbmFibGVkKHRydWUpCisgICAgLCBpbWFnZVNtb290aGluZ1F1YWxpdHko
U21vb3RoaW5nUXVhbGl0eTo6TG93KQogICAgICwgdGV4dEFsaWduKFN0YXJ0VGV4dEFsaWduKQog
ICAgICwgdGV4dEJhc2VsaW5lKEFscGhhYmV0aWNUZXh0QmFzZWxpbmUpCiAgICAgLCBkaXJlY3Rp
b24oRGlyZWN0aW9uOjpJbmhlcml0KQpAQCAtMTk5LDYgKzE5OSw3IEBAIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKGNvbnN0IFN0YXRlJiBvdGhlcikKICAgICAsIGhhc0lu
dmVydGlibGVUcmFuc2Zvcm0ob3RoZXIuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKICAgICAsIGxp
bmVEYXNoT2Zmc2V0KG90aGVyLmxpbmVEYXNoT2Zmc2V0KQogICAgICwgaW1hZ2VTbW9vdGhpbmdF
bmFibGVkKG90aGVyLmltYWdlU21vb3RoaW5nRW5hYmxlZCkKKyAgICAsIGltYWdlU21vb3RoaW5n
UXVhbGl0eShvdGhlci5pbWFnZVNtb290aGluZ1F1YWxpdHkpCiAgICAgLCB0ZXh0QWxpZ24ob3Ro
ZXIudGV4dEFsaWduKQogICAgICwgdGV4dEJhc2VsaW5lKG90aGVyLnRleHRCYXNlbGluZSkKICAg
ICAsIGRpcmVjdGlvbihvdGhlci5kaXJlY3Rpb24pCkBAIC0yMjksNiArMjMwLDcgQEAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZSYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0
ZTo6b3BlcmF0b3I9KGNvbnMKICAgICB0cmFuc2Zvcm0gPSBvdGhlci50cmFuc2Zvcm07CiAgICAg
aGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSA9IG90aGVyLmhhc0ludmVydGlibGVUcmFuc2Zvcm07CiAg
ICAgaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gb3RoZXIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkOwor
ICAgIGltYWdlU21vb3RoaW5nUXVhbGl0eSA9IG90aGVyLmltYWdlU21vb3RoaW5nUXVhbGl0eTsK
ICAgICB0ZXh0QWxpZ24gPSBvdGhlci50ZXh0QWxpZ247CiAgICAgdGV4dEJhc2VsaW5lID0gb3Ro
ZXIudGV4dEJhc2VsaW5lOwogICAgIGRpcmVjdGlvbiA9IG90aGVyLmRpcmVjdGlvbjsKQEAgLTI1
MzksNiArMjU0MSw2MyBAQCBQbGF0Zm9ybUxheWVyKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogfQogI2VuZGlmCiAKK3N0YXRpYyBJbnRlcnBvbGF0aW9u
UXVhbGl0eSBzbW9vdGhpbmdUb0ludGVycG9sYXRpb25RdWFsaXR5KENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6U21vb3RoaW5nUXVhbGl0eSBxdWFsaXR5KQoreworICAgIHN3aXRjaCAocXVhbGl0
eSkgeworICAgIGNhc2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTbW9vdGhpbmdRdWFsaXR5
OjpMb3c6CisgICAgICAgIHJldHVybiBJbnRlcnBvbGF0aW9uTG93OworICAgIGNhc2UgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpTbW9vdGhpbmdRdWFsaXR5OjpNZWRpdW06CisgICAgICAgIHJl
dHVybiBJbnRlcnBvbGF0aW9uTWVkaXVtOworICAgIGNhc2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpTbW9vdGhpbmdRdWFsaXR5OjpIaWdoOgorICAgICAgICByZXR1cm4gSW50ZXJwb2xhdGlv
bkhpZ2g7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIElu
dGVycG9sYXRpb25Mb3c7Cit9OworCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpp
bWFnZVNtb290aGluZ1F1YWxpdHkoKSBjb25zdAoreworICAgIHN3aXRjaCAoc3RhdGUoKS5pbWFn
ZVNtb290aGluZ1F1YWxpdHkpIHsKKyAgICBjYXNlIFNtb290aGluZ1F1YWxpdHk6OkxvdzoKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibG93Iik7CisgICAgY2FzZSBTbW9vdGhpbmdRdWFs
aXR5OjpNZWRpdW06CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1lZGl1bSIpOworICAg
IGNhc2UgU21vb3RoaW5nUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiaGlnaCIpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoImxvdyIpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0SW1hZ2VTbW9vdGhpbmdRdWFsaXR5KGNvbnN0IFN0cmluZyYgc21vb3RoaW5nUXVhbGl0
eVN0cmluZykKK3sKKyAgICBTbW9vdGhpbmdRdWFsaXR5IHF1YWxpdHk7CisgICAgaWYgKHNtb290
aGluZ1F1YWxpdHlTdHJpbmcgPT0gImxvdyIpCisgICAgICAgIHF1YWxpdHkgPSBTbW9vdGhpbmdR
dWFsaXR5OjpMb3c7CisgICAgZWxzZSBpZiAoc21vb3RoaW5nUXVhbGl0eVN0cmluZyA9PSAibWVk
aXVtIikKKyAgICAgICAgcXVhbGl0eSA9IFNtb290aGluZ1F1YWxpdHk6Ok1lZGl1bTsKKyAgICBl
bHNlIGlmIChzbW9vdGhpbmdRdWFsaXR5U3RyaW5nID09ICJoaWdoIikKKyAgICAgICAgcXVhbGl0
eSA9IFNtb290aGluZ1F1YWxpdHk6OkhpZ2g7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHF1YWxpdHkg
PT0gc3RhdGUoKS5pbWFnZVNtb290aGluZ1F1YWxpdHkpCisgICAgICAgIHJldHVybjsKKworICAg
IHJlYWxpemVTYXZlcygpOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLmltYWdlU21vb3RoaW5nUXVh
bGl0eSA9IHF1YWxpdHk7CisKKyAgICBpZiAoIW1vZGlmaWFibGVTdGF0ZSgpLmltYWdlU21vb3Ro
aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBk
cmF3aW5nQ29udGV4dCgpKQorICAgICAgICBjb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KHNtb290aGluZ1RvSW50ZXJwb2xhdGlvblF1YWxpdHkocXVhbGl0eSkpOworfQorCiBi
b29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aW1hZ2VTbW9vdGhpbmdFbmFibGVkKCkgY29u
c3QKIHsKICAgICByZXR1cm4gc3RhdGUoKS5pbWFnZVNtb290aGluZ0VuYWJsZWQ7CkBAIC0yNTUz
LDcgKzI2MTIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0SW1hZ2VTbW9v
dGhpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5pbWFnZVNt
b290aGluZ0VuYWJsZWQgPSBlbmFibGVkOwogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdp
bmdDb250ZXh0KCk7CiAgICAgaWYgKGMpCi0gICAgICAgIGMtPnNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoZW5hYmxlZCA/IERlZmF1bHRJbnRlcnBvbGF0aW9uUXVhbGl0eSA6IEludGVycG9s
YXRpb25Ob25lKTsKKyAgICAgICAgYy0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShlbmFi
bGVkID8gc21vb3RoaW5nVG9JbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZSgpLmltYWdlU21vb3Ro
aW5nUXVhbGl0eSkgOiBJbnRlcnBvbGF0aW9uTm9uZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgKaW5kZXggMzUyNzFkMmNmNjI0MTlmMmVmNGUwNTRiZWZkYWE4NjcxODgx
YTA4Yy4uYTQ0ZTZiOTMwZGM2NWNlNDE0MDhlMDNiMjU0NTFmNzAwY2JhMmExOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC0yMjgsNiArMjI5LDE1IEBAIHB1YmxpYzoK
ICAgICBib29sIGltYWdlU21vb3RoaW5nRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SW1h
Z2VTbW9vdGhpbmdFbmFibGVkKGJvb2wpOwogCisgICAgU3RyaW5nIGltYWdlU21vb3RoaW5nUXVh
bGl0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0SW1hZ2VTbW9vdGhpbmdRdWFsaXR5KGNvbnN0IFN0
cmluZyYpOworCisgICAgZW51bSBjbGFzcyBTbW9vdGhpbmdRdWFsaXR5IHsKKyAgICAgICAgTG93
LAorICAgICAgICBNZWRpdW0sCisgICAgICAgIEhpZ2gKKyAgICB9OworCiBwcml2YXRlOgogICAg
IGVudW0gY2xhc3MgRGlyZWN0aW9uIHsKICAgICAgICAgSW5oZXJpdCwKQEAgLTI4MSw2ICsyOTEs
NyBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8ZmxvYXQ+IGxpbmVEYXNoOwogICAgICAgICBm
bG9hdCBsaW5lRGFzaE9mZnNldDsKICAgICAgICAgYm9vbCBpbWFnZVNtb290aGluZ0VuYWJsZWQ7
CisgICAgICAgIFNtb290aGluZ1F1YWxpdHkgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5OwogCiAgICAg
ICAgIC8vIFRleHQgc3RhdGUuCiAgICAgICAgIFRleHRBbGlnbiB0ZXh0QWxpZ247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmlkbAppbmRleCA1ZGUzNWVkNjlmYTgwMDc3MDRiNzg0M2YzMDkxOTFkZGE0OTkxYjIzLi45NmYw
OGNjZmRiM2Q3NTQ5YTBkMWQ3ZTRmY2EwYzllODg0NjJhYmJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKQEAg
LTIzLDYgKzIzLDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorZW51bSBJbWFnZVNtb290aGlu
Z1F1YWxpdHkgeyAibG93IiwgIm1lZGl1bSIsICJoaWdoIiB9OwogZW51bSBDYW52YXNXaW5kaW5n
UnVsZSB7ICJub256ZXJvIiwgImV2ZW5vZGQiIH07CiAKIGludGVyZmFjZSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKQEAgLTE4OCw1ICsxODksNiBA
QCBpbnRlcmZhY2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIDogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCB7CiAKICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBpbWFnZVNtb290aGluZ0VuYWJsZWQ7CiAg
ICAgW0ltcGxlbWVudGVkQXM9aW1hZ2VTbW9vdGhpbmdFbmFibGVkXSBhdHRyaWJ1dGUgYm9vbGVh
biB3ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQ7CisgICAgYXR0cmlidXRlIEltYWdlU21vb3Ro
aW5nUXVhbGl0eSBpbWFnZVNtb290aGluZ1F1YWxpdHk7CiB9OwogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTI5OWIwNjQ0
ZWRjOTJlM2U2NzVmZDY5NTE3YzM5YmU4ZTVmZDFkOC4uMzhiNzc4NzI5N2UyMWI2ZTRjYzE0ZWRi
NzgyYjJlZjUxMWI3NWJkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA5LTMwICBLYXRs
eW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgorCisgICAgICAgIFRlc3RzIHN1cHBvcnQgZm9y
IGltYWdlU21vb3RoaW5nUXVhbGl0eSBhdHRyaWJ1dGUgb2YgQ2FudmFzIGVsZW1lbnQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk1NDEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBsb3csIG1l
ZGl1bSwgaGlnaCwgYW5kIGRlZmF1bHQgdmFsdWVzLCB2YWx1ZSBwZXJzaXN0ZW5jZSB3aGVuCisg
ICAgICAgIGltYWdlU21vb3RoaW5nRW5hYmxlZCBpcyBjaGFuZ2VkLCBhbmQgaW52YWxpZCBpbnB1
dC4KKworICAgICAgICAqIGZhc3QvY2FudmFzL2NhbnZhcy1pbWFnZVNtb290aGluZ1F1YWxpdHkt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtaW1hZ2VT
bW9vdGhpbmdRdWFsaXR5Lmh0bWw6IEFkZGVkLgorCiAyMDE1LTA5LTMwICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbGFuZGluZyByMTkwMjg5IGFmdGVy
IGZpeGVzIHRyYWNrZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0OTYxOQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWltYWdl
U21vb3RoaW5nUXVhbGl0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9j
YW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGY5
ZTFmNTBlZDBkMGEwYTZjYTA5ZDEwZmY5ZmRjZjQ4NTk3ODAwCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWltYWdlU21vb3RoaW5nUXVhbGl0eS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwzNSBAQAorVGVzdHMgZm9yIHRoZSBpbWFnZVNtb290aGluZ1F1
YWxpdHkgYXR0cmlidXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitQQVNT
IGxvd0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGlzICdsb3cnCitQQVNTIG1lZGl1bUNv
bnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGlzICdtZWRpdW0nCitQQVNTIGhpZ2hDb250ZXh0
LmltYWdlU21vb3RoaW5nUXVhbGl0eSBpcyAnaGlnaCcKKworUEFTUyBsb3dEYXRhIGlzIG5vdCBt
ZWRpdW1EYXRhCitQQVNTIG1lZGl1bURhdGEgaXMgbm90IGhpZ2hEYXRhCitQQVNTIGxvd0RhdGEg
aXMgbm90IGhpZ2hEYXRhCisKK1BBU1Mgc2FtcGxlQWxwaGEobG93RGF0YSkgaXMgPj0gc2FtcGxl
QWxwaGEobWVkaXVtRGF0YSkKK1BBU1Mgc2FtcGxlQWxwaGEobWVkaXVtRGF0YSkgaXMgPj0gc2Ft
cGxlQWxwaGEoaGlnaERhdGEpCisKK1BBU1MgZGVmYXVsdENvbnRleHQuaW1hZ2VTbW9vdGhpbmdR
dWFsaXR5IGlzICdsb3cnCisKK1BBU1MgaGlnaENvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVk
ID0gZmFsc2U7IGhpZ2hDb250ZXh0LmltYWdlU21vb3RoaW5nUXVhbGl0eSBpcyAnaGlnaCcKK1BB
U1MgaGlnaENvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gJ21lZGl1bSc7IGhpZ2hDb250
ZXh0LmltYWdlU21vb3RoaW5nUXVhbGl0eSBpcyAnbWVkaXVtJworCitoaWdoQ29udGV4dC5pbWFn
ZVNtb290aGluZ0VuYWJsZWQgPSB0cnVlOyBoaWdoQ29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxp
dHkgPSAnaGlnaCc7CitQQVNTIHNjYWxlSW1hZ2VEYXRhKGhpZ2hDYW52YXMsICczMjIzJykgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGhpZ2hDb250ZXh0LmltYWdlU21vb3RoaW5nUXVh
bGl0eSBpcyAnaGlnaCcKK1BBU1Mgc2NhbGVJbWFnZURhdGEoaGlnaENhbnZhcywgJ2JhZF9pbnB1
dCcpIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBoaWdoQ29udGV4dC5pbWFnZVNtb290
aGluZ1F1YWxpdHkgaXMgJ2hpZ2gnCitQQVNTIHNjYWxlSW1hZ2VEYXRhKGhpZ2hDYW52YXMsICdM
T1cnKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgaGlnaENvbnRleHQuaW1hZ2VTbW9v
dGhpbmdRdWFsaXR5IGlzICdoaWdoJworUEFTUyBzY2FsZUltYWdlRGF0YShoaWdoQ2FudmFzLCAn
TWVkaXVtJykgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGhpZ2hDb250ZXh0LmltYWdl
U21vb3RoaW5nUXVhbGl0eSBpcyAnaGlnaCcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvY2FudmFzLWltYWdlU21vb3RoaW5nUXVhbGl0eS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvY2FudmFzLWltYWdlU21vb3RoaW5nUXVhbGl0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwNzQx
NWQyODk2OWI1NGYyMWUyNmE2ZTkyNWMyNzYzMzNhMGViNjEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Lmh0bWwK
QEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKworPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxjYW52YXMg
aWQ9InNvdXJjZSI+PC9jYW52YXM+CisKKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0cyBm
b3IgdGhlIGltYWdlU21vb3RoaW5nUXVhbGl0eSBhdHRyaWJ1dGUuIik7CisKK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRDYW52
YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nIiwgMCk7CisKK3ZhciBzb3VyY2UgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgic291cmNlIik7Citzb3VyY2Uud2lkdGggPSA2MDsKK3NvdXJjZS5oZWln
aHQgPSAxMjsKK3ZhciBzb3VyY2VDb250ZXh0ID0gc291cmNlLmdldENvbnRleHQoIjJkIik7Cit2
YXIgc291cmNlSW1hZ2UgPSBzb3VyY2VDb250ZXh0LmNyZWF0ZUltYWdlRGF0YShzb3VyY2Uud2lk
dGgsIHNvdXJjZS5oZWlnaHQpOworCitmdW5jdGlvbiBkcmF3QmxhY2tEb3QoeCwgeSkgeworICAg
IHZhciBvZmZzZXQgPSB5ICogNCAqIHNvdXJjZS53aWR0aCArIHggKiA0OworICAgIHNvdXJjZUlt
YWdlLmRhdGFbb2Zmc2V0ICsgMF0gPSAwOyAvLyBSCisgICAgc291cmNlSW1hZ2UuZGF0YVtvZmZz
ZXQgKyAxXSA9IDA7IC8vIEcKKyAgICBzb3VyY2VJbWFnZS5kYXRhW29mZnNldCArIDJdID0gMDsg
Ly8gQgorICAgIHNvdXJjZUltYWdlLmRhdGFbb2Zmc2V0ICsgM10gPSAyNTU7IC8vIEFscGhhCit9
CisKK2ZvciAodmFyIHggPSAwOyB4IDwgc291cmNlLndpZHRoOyB4KyspIHsKKyAgICBkcmF3Qmxh
Y2tEb3QoeCwgMSkKKyAgICBkcmF3QmxhY2tEb3QoeCwgMik7Cit9CisKK3NvdXJjZUNvbnRleHQu
cHV0SW1hZ2VEYXRhKHNvdXJjZUltYWdlLCAwLCAwKTsKKworZnVuY3Rpb24gc2NhbGVUZXN0UmVz
dWx0cyhxdWFsaXR5KXsKKwl2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2Fu
dmFzIik7CisJY2FudmFzLmlkID0gcXVhbGl0eSArICJDYW52YXMiOworCWRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoY2FudmFzKTsKKwljYW52YXMud2lkdGggPSBzb3VyY2VJbWFnZS53aWR0aCAv
IDQ7CisgICAgY2FudmFzLmhlaWdodCA9IHNvdXJjZUltYWdlLmhlaWdodCAvIDQ7CisgICAgcmV0
dXJuIHNjYWxlSW1hZ2VEYXRhKGNhbnZhcywgcXVhbGl0eSk7Cit9CisKK2Z1bmN0aW9uIHNjYWxl
SW1hZ2VEYXRhKGRlc3RpbmF0aW9uQ2FudmFzLCBxdWFsaXR5KSB7CisgICAgdmFyIGNvbnRleHQg
PSBkZXN0aW5hdGlvbkNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworCisgICAgaWYgKHF1YWxpdHkp
CisgICAgICAgIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gcXVhbGl0eTsKKworICAg
IGNvbnRleHQuZHJhd0ltYWdlKHNvdXJjZSwgMCwgMCwgZGVzdGluYXRpb25DYW52YXMud2lkdGgs
IGRlc3RpbmF0aW9uQ2FudmFzLmhlaWdodCk7CisgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldElt
YWdlRGF0YSgwLCAwLCAxLCAxKS5kYXRhOworICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIGRl
c3RpbmF0aW9uQ2FudmFzLndpZHRoLCBkZXN0aW5hdGlvbkNhbnZhcy5oZWlnaHQpOworICAgIHJl
dHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTsKK30KKworZnVuY3Rpb24gdGVzdEludmFsaWRJbnB1
dChiYWRJbnB1dCl7CisJc2hvdWxkTm90VGhyb3coYmFkSW5wdXQpOworCXNob3VsZEJlKCJoaWdo
Q29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkiLCAiJ2hpZ2gnIik7Cit9CisKK2Z1bmN0aW9u
IHNhbXBsZUFscGhhKGRhdGEpeworCXJldHVybiBkYXRhWzNdOworfQorCitkZWJ1ZygiIik7CisK
K3ZhciBsb3dEYXRhID0gc2NhbGVUZXN0UmVzdWx0cygibG93Iik7Cit2YXIgbG93Q29udGV4dCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb3dDYW52YXMiKS5nZXRDb250ZXh0KCcyZCcpOwor
c2hvdWxkQmUoImxvd0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IiwgIidsb3cnIik7CisK
K3ZhciBtZWRpdW1EYXRhID0gc2NhbGVUZXN0UmVzdWx0cygibWVkaXVtIik7Cit2YXIgbWVkaXVt
Q29udGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZWRpdW1DYW52YXMiKS5nZXRDb250
ZXh0KCcyZCcpOworc2hvdWxkQmUoIm1lZGl1bUNvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5
IiwgIidtZWRpdW0nIik7CisKK3ZhciBoaWdoRGF0YSA9IHNjYWxlVGVzdFJlc3VsdHMoImhpZ2gi
KTsKK3ZhciBoaWdoQ29udGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoaWdoQ2FudmFz
IikuZ2V0Q29udGV4dCgnMmQnKTsKK3Nob3VsZEJlKCJoaWdoQ29udGV4dC5pbWFnZVNtb290aGlu
Z1F1YWxpdHkiLCAiJ2hpZ2gnIik7CisKK2RlYnVnKCIiKTsKK3Nob3VsZE5vdEJlKCJsb3dEYXRh
IiwgIm1lZGl1bURhdGEiKTsKK3Nob3VsZE5vdEJlKCJtZWRpdW1EYXRhIiwgImhpZ2hEYXRhIik7
CitzaG91bGROb3RCZSgibG93RGF0YSIsICJoaWdoRGF0YSIpOworCitkZWJ1ZygiIik7CitzaG91
bGRCZUdyZWF0ZXJUaGFuT3JFcXVhbCgic2FtcGxlQWxwaGEobG93RGF0YSkiLCAic2FtcGxlQWxw
aGEobWVkaXVtRGF0YSkiKTsKK3Nob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCJzYW1wbGVBbHBo
YShtZWRpdW1EYXRhKSIsICJzYW1wbGVBbHBoYShoaWdoRGF0YSkiKTsKKworZGVidWcoIiIpOwor
dmFyIGRlZmF1bHRDb250ZXh0ID0gc291cmNlQ29udGV4dDsKK3Nob3VsZEJlKCJkZWZhdWx0Q29u
dGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkiLCAiJ2xvdyciKTsKKworZGVidWcoIiIpOworc2hv
dWxkQmUoImhpZ2hDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlOyBoaWdoQ29u
dGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkiLCAiJ2hpZ2gnIik7CitzaG91bGRCZSgiaGlnaENv
bnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gJ21lZGl1bSc7IGhpZ2hDb250ZXh0LmltYWdl
U21vb3RoaW5nUXVhbGl0eSIsICInbWVkaXVtJyIpOworCitkZWJ1ZygiIik7CitldmFsQW5kTG9n
KCJoaWdoQ29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSB0cnVlOyBoaWdoQ29udGV4dC5p
bWFnZVNtb290aGluZ1F1YWxpdHkgPSAnaGlnaCc7Iik7Cit2YXIgaGlnaENhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJoaWdoQ2FudmFzIik7Cit0ZXN0SW52YWxpZElucHV0KCJzY2Fs
ZUltYWdlRGF0YShoaWdoQ2FudmFzLCAnMzIyMycpIik7Cit0ZXN0SW52YWxpZElucHV0KCJzY2Fs
ZUltYWdlRGF0YShoaWdoQ2FudmFzLCAnYmFkX2lucHV0JykiKTsKK3Rlc3RJbnZhbGlkSW5wdXQo
InNjYWxlSW1hZ2VEYXRhKGhpZ2hDYW52YXMsICdMT1cnKSIpOwordGVzdEludmFsaWRJbnB1dCgi
c2NhbGVJbWFnZURhdGEoaGlnaENhbnZhcywgJ01lZGl1bScpIik7CisKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262224</attachid>
            <date>2015-09-30 19:26:15 -0700</date>
            <delta_ts>2015-10-05 10:44:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149541-20150930192718.patch</filename>
            <type>text/plain</type>
            <size>14710</size>
            <attacher name="Kat Graff">kgraff</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGIyYjM5YWRkYjVjMDY5
MmQ2YmRkY2JlZGFiNjEwNTQzMjUwNDNiZC4uOTA3NmJjMTZiMmQwMzNmNTM4YWZlOTc3NmRiODdj
MGYxNWIxODcxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE1LTA5LTMwICBLYXRs
eW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0
aGUgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IHByb3BlcnR5IGZvciBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDk1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
cyBkb2N1bWVudGVkIGhlcmU6IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdl
L3NjcmlwdGluZy5odG1sI2ltYWdlLXNtb290aGluZworICAgICAgICBFeHBvc2VzIHRoZSBzbW9v
b3RoaW5nIHF1YWxpdHkgb2YgYWxnb3JpdGhtcyB1c2VkIGZvciBzY2FsaW5nIGltYWdlcy4gVmFs
aWQgaW5wdXQKKyAgICAgICAgdmFsdWVzIGFyZSBsb3csIG1lZGl1bSwgYW5kIGhpZ2g6IGFzc29j
aWF0ZWQgYWxnb3JpdGhtcyBhcmUgZXhwZWN0ZWQgdG8gdmFyeSBmb3IKKyAgICAgICAgZGlmZmVy
aW5nIGhhcmR3YXJlLiBzZXRJbWFnZVNtb290aGluZ1F1YWxpdHkgcHJvdmlkZXMgYSBoYW5kbGUg
aW50byBDR0ludGVycG9sYXRpb25RdWFsaXR5LgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFz
L2NhbnZhcy1pbWFnZVNtb290aGluZ1F1YWxpdHkuaHRtbAorCisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpzbW9vdGhpbmdUb0ludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aW1hZ2VTbW9vdGhpbmdRdWFsaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0SW1hZ2VTbW9vdGhpbmdR
dWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
SW1hZ2VTbW9vdGhpbmdFbmFibGVkKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaWRsOgorCiAyMDE1LTA5LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbCBvdXQgcjE4ODMzMTogIk5ldHdvcmtQcm9j
ZXNzOiBETlMgcHJlZmV0Y2ggaGFwcGVucyBpbiB0aGUgV2ViIFByb2Nlc3MiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAppbmRleCBjODMxNzgwODEzYWI2NWExY2IxMjY5ZWQ4YmFkYWZlMTdiNDNhN2U4Li41NWY1YTM3
MWFkMjY5N2E4NzMzNWI4NDY1OTE3YjQ0NzU0OTdjYjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTQy
LDcgKzQyLDYgQEAKICNpbmNsdWRlICJET01QYXRoLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAgLTE3Myw2ICsxNzIs
NyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlN0YXRlOjpTdGF0ZSgpCiAgICAgLCBoYXNJ
bnZlcnRpYmxlVHJhbnNmb3JtKHRydWUpCiAgICAgLCBsaW5lRGFzaE9mZnNldCgwKQogICAgICwg
aW1hZ2VTbW9vdGhpbmdFbmFibGVkKHRydWUpCisgICAgLCBpbWFnZVNtb290aGluZ1F1YWxpdHko
U21vb3RoaW5nUXVhbGl0eTo6TG93KQogICAgICwgdGV4dEFsaWduKFN0YXJ0VGV4dEFsaWduKQog
ICAgICwgdGV4dEJhc2VsaW5lKEFscGhhYmV0aWNUZXh0QmFzZWxpbmUpCiAgICAgLCBkaXJlY3Rp
b24oRGlyZWN0aW9uOjpJbmhlcml0KQpAQCAtMTk5LDYgKzE5OSw3IEBAIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKGNvbnN0IFN0YXRlJiBvdGhlcikKICAgICAsIGhhc0lu
dmVydGlibGVUcmFuc2Zvcm0ob3RoZXIuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKICAgICAsIGxp
bmVEYXNoT2Zmc2V0KG90aGVyLmxpbmVEYXNoT2Zmc2V0KQogICAgICwgaW1hZ2VTbW9vdGhpbmdF
bmFibGVkKG90aGVyLmltYWdlU21vb3RoaW5nRW5hYmxlZCkKKyAgICAsIGltYWdlU21vb3RoaW5n
UXVhbGl0eShvdGhlci5pbWFnZVNtb290aGluZ1F1YWxpdHkpCiAgICAgLCB0ZXh0QWxpZ24ob3Ro
ZXIudGV4dEFsaWduKQogICAgICwgdGV4dEJhc2VsaW5lKG90aGVyLnRleHRCYXNlbGluZSkKICAg
ICAsIGRpcmVjdGlvbihvdGhlci5kaXJlY3Rpb24pCkBAIC0yMjksNiArMjMwLDcgQEAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZSYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0
ZTo6b3BlcmF0b3I9KGNvbnMKICAgICB0cmFuc2Zvcm0gPSBvdGhlci50cmFuc2Zvcm07CiAgICAg
aGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSA9IG90aGVyLmhhc0ludmVydGlibGVUcmFuc2Zvcm07CiAg
ICAgaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gb3RoZXIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkOwor
ICAgIGltYWdlU21vb3RoaW5nUXVhbGl0eSA9IG90aGVyLmltYWdlU21vb3RoaW5nUXVhbGl0eTsK
ICAgICB0ZXh0QWxpZ24gPSBvdGhlci50ZXh0QWxpZ247CiAgICAgdGV4dEJhc2VsaW5lID0gb3Ro
ZXIudGV4dEJhc2VsaW5lOwogICAgIGRpcmVjdGlvbiA9IG90aGVyLmRpcmVjdGlvbjsKQEAgLTI1
MzksNiArMjU0MSw2MyBAQCBQbGF0Zm9ybUxheWVyKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogfQogI2VuZGlmCiAKK3N0YXRpYyBJbnRlcnBvbGF0aW9u
UXVhbGl0eSBzbW9vdGhpbmdUb0ludGVycG9sYXRpb25RdWFsaXR5KENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6U21vb3RoaW5nUXVhbGl0eSBxdWFsaXR5KQoreworICAgIHN3aXRjaCAocXVhbGl0
eSkgeworICAgIGNhc2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTbW9vdGhpbmdRdWFsaXR5
OjpMb3c6CisgICAgICAgIHJldHVybiBJbnRlcnBvbGF0aW9uTG93OworICAgIGNhc2UgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpTbW9vdGhpbmdRdWFsaXR5OjpNZWRpdW06CisgICAgICAgIHJl
dHVybiBJbnRlcnBvbGF0aW9uTWVkaXVtOworICAgIGNhc2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpTbW9vdGhpbmdRdWFsaXR5OjpIaWdoOgorICAgICAgICByZXR1cm4gSW50ZXJwb2xhdGlv
bkhpZ2g7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIElu
dGVycG9sYXRpb25Mb3c7Cit9OworCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpp
bWFnZVNtb290aGluZ1F1YWxpdHkoKSBjb25zdAoreworICAgIHN3aXRjaCAoc3RhdGUoKS5pbWFn
ZVNtb290aGluZ1F1YWxpdHkpIHsKKyAgICBjYXNlIFNtb290aGluZ1F1YWxpdHk6OkxvdzoKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibG93Iik7CisgICAgY2FzZSBTbW9vdGhpbmdRdWFs
aXR5OjpNZWRpdW06CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1lZGl1bSIpOworICAg
IGNhc2UgU21vb3RoaW5nUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiaGlnaCIpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoImxvdyIpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0SW1hZ2VTbW9vdGhpbmdRdWFsaXR5KGNvbnN0IFN0cmluZyYgc21vb3RoaW5nUXVhbGl0
eVN0cmluZykKK3sKKyAgICBTbW9vdGhpbmdRdWFsaXR5IHF1YWxpdHk7CisgICAgaWYgKHNtb290
aGluZ1F1YWxpdHlTdHJpbmcgPT0gImxvdyIpCisgICAgICAgIHF1YWxpdHkgPSBTbW9vdGhpbmdR
dWFsaXR5OjpMb3c7CisgICAgZWxzZSBpZiAoc21vb3RoaW5nUXVhbGl0eVN0cmluZyA9PSAibWVk
aXVtIikKKyAgICAgICAgcXVhbGl0eSA9IFNtb290aGluZ1F1YWxpdHk6Ok1lZGl1bTsKKyAgICBl
bHNlIGlmIChzbW9vdGhpbmdRdWFsaXR5U3RyaW5nID09ICJoaWdoIikKKyAgICAgICAgcXVhbGl0
eSA9IFNtb290aGluZ1F1YWxpdHk6OkhpZ2g7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHF1YWxpdHkg
PT0gc3RhdGUoKS5pbWFnZVNtb290aGluZ1F1YWxpdHkpCisgICAgICAgIHJldHVybjsKKworICAg
IHJlYWxpemVTYXZlcygpOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLmltYWdlU21vb3RoaW5nUXVh
bGl0eSA9IHF1YWxpdHk7CisKKyAgICBpZiAoIW1vZGlmaWFibGVTdGF0ZSgpLmltYWdlU21vb3Ro
aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBk
cmF3aW5nQ29udGV4dCgpKQorICAgICAgICBjb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KHNtb290aGluZ1RvSW50ZXJwb2xhdGlvblF1YWxpdHkocXVhbGl0eSkpOworfQorCiBi
b29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aW1hZ2VTbW9vdGhpbmdFbmFibGVkKCkgY29u
c3QKIHsKICAgICByZXR1cm4gc3RhdGUoKS5pbWFnZVNtb290aGluZ0VuYWJsZWQ7CkBAIC0yNTUz
LDcgKzI2MTIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0SW1hZ2VTbW9v
dGhpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5pbWFnZVNt
b290aGluZ0VuYWJsZWQgPSBlbmFibGVkOwogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdp
bmdDb250ZXh0KCk7CiAgICAgaWYgKGMpCi0gICAgICAgIGMtPnNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoZW5hYmxlZCA/IERlZmF1bHRJbnRlcnBvbGF0aW9uUXVhbGl0eSA6IEludGVycG9s
YXRpb25Ob25lKTsKKyAgICAgICAgYy0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShlbmFi
bGVkID8gc21vb3RoaW5nVG9JbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZSgpLmltYWdlU21vb3Ro
aW5nUXVhbGl0eSkgOiBJbnRlcnBvbGF0aW9uTm9uZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgKaW5kZXggMzUyNzFkMmNmNjI0MTlmMmVmNGUwNTRiZWZkYWE4NjcxODgx
YTA4Yy4uYTQ0ZTZiOTMwZGM2NWNlNDE0MDhlMDNiMjU0NTFmNzAwY2JhMmExOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC0yMjgsNiArMjI5LDE1IEBAIHB1YmxpYzoK
ICAgICBib29sIGltYWdlU21vb3RoaW5nRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SW1h
Z2VTbW9vdGhpbmdFbmFibGVkKGJvb2wpOwogCisgICAgU3RyaW5nIGltYWdlU21vb3RoaW5nUXVh
bGl0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0SW1hZ2VTbW9vdGhpbmdRdWFsaXR5KGNvbnN0IFN0
cmluZyYpOworCisgICAgZW51bSBjbGFzcyBTbW9vdGhpbmdRdWFsaXR5IHsKKyAgICAgICAgTG93
LAorICAgICAgICBNZWRpdW0sCisgICAgICAgIEhpZ2gKKyAgICB9OworCiBwcml2YXRlOgogICAg
IGVudW0gY2xhc3MgRGlyZWN0aW9uIHsKICAgICAgICAgSW5oZXJpdCwKQEAgLTI4MSw2ICsyOTEs
NyBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8ZmxvYXQ+IGxpbmVEYXNoOwogICAgICAgICBm
bG9hdCBsaW5lRGFzaE9mZnNldDsKICAgICAgICAgYm9vbCBpbWFnZVNtb290aGluZ0VuYWJsZWQ7
CisgICAgICAgIFNtb290aGluZ1F1YWxpdHkgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5OwogCiAgICAg
ICAgIC8vIFRleHQgc3RhdGUuCiAgICAgICAgIFRleHRBbGlnbiB0ZXh0QWxpZ247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmlkbAppbmRleCA1ZGUzNWVkNjlmYTgwMDc3MDRiNzg0M2YzMDkxOTFkZGE0OTkxYjIzLi45NmYw
OGNjZmRiM2Q3NTQ5YTBkMWQ3ZTRmY2EwYzllODg0NjJhYmJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKQEAg
LTIzLDYgKzIzLDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorZW51bSBJbWFnZVNtb290aGlu
Z1F1YWxpdHkgeyAibG93IiwgIm1lZGl1bSIsICJoaWdoIiB9OwogZW51bSBDYW52YXNXaW5kaW5n
UnVsZSB7ICJub256ZXJvIiwgImV2ZW5vZGQiIH07CiAKIGludGVyZmFjZSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKQEAgLTE4OCw1ICsxODksNiBA
QCBpbnRlcmZhY2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIDogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCB7CiAKICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBpbWFnZVNtb290aGluZ0VuYWJsZWQ7CiAg
ICAgW0ltcGxlbWVudGVkQXM9aW1hZ2VTbW9vdGhpbmdFbmFibGVkXSBhdHRyaWJ1dGUgYm9vbGVh
biB3ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQ7CisgICAgYXR0cmlidXRlIEltYWdlU21vb3Ro
aW5nUXVhbGl0eSBpbWFnZVNtb290aGluZ1F1YWxpdHk7CiB9OwogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTI5OWIwNjQ0
ZWRjOTJlM2U2NzVmZDY5NTE3YzM5YmU4ZTVmZDFkOC4uMzhiNzc4NzI5N2UyMWI2ZTRjYzE0ZWRi
NzgyYjJlZjUxMWI3NWJkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA5LTMwICBLYXRs
eW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgorCisgICAgICAgIFRlc3RzIHN1cHBvcnQgZm9y
IGltYWdlU21vb3RoaW5nUXVhbGl0eSBhdHRyaWJ1dGUgb2YgQ2FudmFzIGVsZW1lbnQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk1NDEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBsb3csIG1l
ZGl1bSwgaGlnaCwgYW5kIGRlZmF1bHQgdmFsdWVzLCB2YWx1ZSBwZXJzaXN0ZW5jZSB3aGVuCisg
ICAgICAgIGltYWdlU21vb3RoaW5nRW5hYmxlZCBpcyBjaGFuZ2VkLCBhbmQgaW52YWxpZCBpbnB1
dC4KKworICAgICAgICAqIGZhc3QvY2FudmFzL2NhbnZhcy1pbWFnZVNtb290aGluZ1F1YWxpdHkt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtaW1hZ2VT
bW9vdGhpbmdRdWFsaXR5Lmh0bWw6IEFkZGVkLgorCiAyMDE1LTA5LTMwICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbGFuZGluZyByMTkwMjg5IGFmdGVy
IGZpeGVzIHRyYWNrZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0OTYxOQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWltYWdl
U21vb3RoaW5nUXVhbGl0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9j
YW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTlk
Yjk0ZTNmOTk5OTg0YjE3NjBlYjFmNjk2MjUyMjc1MjE3OTk1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWltYWdlU21vb3RoaW5nUXVhbGl0eS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw0MCBAQAorVGVzdHMgZm9yIHRoZSBpbWFnZVNtb290aGluZ1F1
YWxpdHkgYXR0cmlidXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitQQVNT
IGxvd0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGlzICdsb3cnCitQQVNTIG1lZGl1bUNv
bnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGlzICdtZWRpdW0nCitQQVNTIGhpZ2hDb250ZXh0
LmltYWdlU21vb3RoaW5nUXVhbGl0eSBpcyAnaGlnaCcKKworUEFTUyBsb3dEYXRhIGlzIG5vdCBt
ZWRpdW1EYXRhCitQQVNTIG1lZGl1bURhdGEgaXMgbm90IGhpZ2hEYXRhCitQQVNTIGxvd0RhdGEg
aXMgbm90IGhpZ2hEYXRhCisKK1BBU1Mgc2FtcGxlQWxwaGEobG93RGF0YSkgaXMgPj0gc2FtcGxl
QWxwaGEobWVkaXVtRGF0YSkKK1BBU1Mgc2FtcGxlQWxwaGEobWVkaXVtRGF0YSkgaXMgPj0gc2Ft
cGxlQWxwaGEoaGlnaERhdGEpCisKK1BBU1MgZGVmYXVsdENvbnRleHQuaW1hZ2VTbW9vdGhpbmdR
dWFsaXR5IGlzICdsb3cnCisKK1BBU1MgaGlnaENvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVk
ID0gZmFsc2U7IGhpZ2hDb250ZXh0LmltYWdlU21vb3RoaW5nUXVhbGl0eSBpcyAnaGlnaCcKK1BB
U1MgaGlnaENvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gJ21lZGl1bSc7IGhpZ2hDb250
ZXh0LmltYWdlU21vb3RoaW5nUXVhbGl0eSBpcyAnbWVkaXVtJworCitoaWdoQ29udGV4dC5pbWFn
ZVNtb290aGluZ0VuYWJsZWQgPSB0cnVlOyBoaWdoQ29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxp
dHkgPSAnaGlnaCc7CitQQVNTIHNjYWxlSW1hZ2VEYXRhKGhpZ2hDYW52YXMsICczMjIzJykgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGhpZ2hDb250ZXh0LmltYWdlU21vb3RoaW5nUXVh
bGl0eSBpcyAnaGlnaCcKK1BBU1Mgc2NhbGVJbWFnZURhdGEoaGlnaENhbnZhcywgJ2JhZF9pbnB1
dCcpIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBoaWdoQ29udGV4dC5pbWFnZVNtb290
aGluZ1F1YWxpdHkgaXMgJ2hpZ2gnCitQQVNTIHNjYWxlSW1hZ2VEYXRhKGhpZ2hDYW52YXMsICdM
T1cnKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgaGlnaENvbnRleHQuaW1hZ2VTbW9v
dGhpbmdRdWFsaXR5IGlzICdoaWdoJworUEFTUyBzY2FsZUltYWdlRGF0YShoaWdoQ2FudmFzLCAn
TWVkaXVtJykgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGhpZ2hDb250ZXh0LmltYWdl
U21vb3RoaW5nUXVhbGl0eSBpcyAnaGlnaCcKKworaGlnaENvbnRleHQuc2F2ZSgpOyBoaWdoQ29u
dGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkgPSAnbWVkaXVtJzsKK1BBU1MgaGlnaENvbnRleHQu
cmVzdG9yZSgpOyBoaWdoQ29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkgaXMgJ2hpZ2gnCitQ
QVNTIHNjYWxlSW1hZ2VEYXRhKGhpZ2hDYW52YXMsIGhpZ2hDYW52YXMuaW1hZ2VTbW9vdGhpbmdR
dWFsaXR5KTsgaXMgaGlnaERhdGEKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9j
YW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy9jYW52YXMtaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JjMmE5MGI4
YzRhZjc1ZDY2ZTY1ZDRhODBiN2Q3NWI4ZjliNTY5YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1pbWFnZVNtb290aGluZ1F1YWxpdHkuaHRtbApAQCAt
MCwwICsxLDExNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorCis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPGNhbnZhcyBpZD0i
c291cmNlIj48L2NhbnZhcz4KKworPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3RzIGZvciB0
aGUgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGF0dHJpYnV0ZS4iKTsKKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgdGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdENhbnZhc1Vz
ZXNBY2NlbGVyYXRlZERyYXdpbmciLCAwKTsKKwordmFyIHNvdXJjZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJzb3VyY2UiKTsKK3NvdXJjZS53aWR0aCA9IDYwOworc291cmNlLmhlaWdodCA9
IDEyOwordmFyIHNvdXJjZUNvbnRleHQgPSBzb3VyY2UuZ2V0Q29udGV4dCgiMmQiKTsKK3ZhciBz
b3VyY2VJbWFnZSA9IHNvdXJjZUNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHNvdXJjZS53aWR0aCwg
c291cmNlLmhlaWdodCk7CisKK2Z1bmN0aW9uIGRyYXdCbGFja0RvdCh4LCB5KSB7CisgICAgdmFy
IG9mZnNldCA9IHkgKiA0ICogc291cmNlLndpZHRoICsgeCAqIDQ7CisgICAgc291cmNlSW1hZ2Uu
ZGF0YVtvZmZzZXQgKyAwXSA9IDA7IC8vIFIKKyAgICBzb3VyY2VJbWFnZS5kYXRhW29mZnNldCAr
IDFdID0gMDsgLy8gRworICAgIHNvdXJjZUltYWdlLmRhdGFbb2Zmc2V0ICsgMl0gPSAwOyAvLyBC
CisgICAgc291cmNlSW1hZ2UuZGF0YVtvZmZzZXQgKyAzXSA9IDI1NTsgLy8gQWxwaGEKK30KKwor
Zm9yICh2YXIgeCA9IDA7IHggPCBzb3VyY2Uud2lkdGg7IHgrKykgeworICAgIGRyYXdCbGFja0Rv
dCh4LCAxKQorICAgIGRyYXdCbGFja0RvdCh4LCAyKTsKK30KKworc291cmNlQ29udGV4dC5wdXRJ
bWFnZURhdGEoc291cmNlSW1hZ2UsIDAsIDApOworCitmdW5jdGlvbiBzY2FsZVRlc3RSZXN1bHRz
KHF1YWxpdHkpeworCXZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMi
KTsKKwljYW52YXMuaWQgPSBxdWFsaXR5ICsgIkNhbnZhcyI7CisJZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChjYW52YXMpOworCWNhbnZhcy53aWR0aCA9IHNvdXJjZUltYWdlLndpZHRoIC8gNDsK
KyAgICBjYW52YXMuaGVpZ2h0ID0gc291cmNlSW1hZ2UuaGVpZ2h0IC8gNDsKKyAgICByZXR1cm4g
c2NhbGVJbWFnZURhdGEoY2FudmFzLCBxdWFsaXR5KTsKK30KKworZnVuY3Rpb24gc2NhbGVJbWFn
ZURhdGEoZGVzdGluYXRpb25DYW52YXMsIHF1YWxpdHkpIHsKKyAgICB2YXIgY29udGV4dCA9IGRl
c3RpbmF0aW9uQ2FudmFzLmdldENvbnRleHQoIjJkIik7CisKKyAgICBpZiAocXVhbGl0eSkKKyAg
ICAgICAgY29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkgPSBxdWFsaXR5OworCisgICAgY29u
dGV4dC5kcmF3SW1hZ2Uoc291cmNlLCAwLCAwLCBkZXN0aW5hdGlvbkNhbnZhcy53aWR0aCwgZGVz
dGluYXRpb25DYW52YXMuaGVpZ2h0KTsKKyAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VE
YXRhKDAsIDAsIDEsIDEpLmRhdGE7CisgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgZGVzdGlu
YXRpb25DYW52YXMud2lkdGgsIGRlc3RpbmF0aW9uQ2FudmFzLmhlaWdodCk7CisgICAgcmV0dXJu
IEpTT04uc3RyaW5naWZ5KGRhdGEpOworfQorCitmdW5jdGlvbiB0ZXN0SW52YWxpZElucHV0KGJh
ZElucHV0KXsKKwlzaG91bGROb3RUaHJvdyhiYWRJbnB1dCk7CisJc2hvdWxkQmUoImhpZ2hDb250
ZXh0LmltYWdlU21vb3RoaW5nUXVhbGl0eSIsICInaGlnaCciKTsKK30KKworZnVuY3Rpb24gc2Ft
cGxlQWxwaGEoZGF0YSl7CisJcmV0dXJuIGRhdGFbM107Cit9CisKK2RlYnVnKCIiKTsKKwordmFy
IGxvd0RhdGEgPSBzY2FsZVRlc3RSZXN1bHRzKCJsb3ciKTsKK3ZhciBsb3dDb250ZXh0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvd0NhbnZhcyIpLmdldENvbnRleHQoJzJkJyk7CitzaG91
bGRCZSgibG93Q29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkiLCAiJ2xvdyciKTsKKwordmFy
IG1lZGl1bURhdGEgPSBzY2FsZVRlc3RSZXN1bHRzKCJtZWRpdW0iKTsKK3ZhciBtZWRpdW1Db250
ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lZGl1bUNhbnZhcyIpLmdldENvbnRleHQo
JzJkJyk7CitzaG91bGRCZSgibWVkaXVtQ29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxpdHkiLCAi
J21lZGl1bSciKTsKKwordmFyIGhpZ2hEYXRhID0gc2NhbGVUZXN0UmVzdWx0cygiaGlnaCIpOwor
dmFyIGhpZ2hDb250ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhpZ2hDYW52YXMiKS5n
ZXRDb250ZXh0KCcyZCcpOworc2hvdWxkQmUoImhpZ2hDb250ZXh0LmltYWdlU21vb3RoaW5nUXVh
bGl0eSIsICInaGlnaCciKTsKKworZGVidWcoIiIpOworc2hvdWxkTm90QmUoImxvd0RhdGEiLCAi
bWVkaXVtRGF0YSIpOworc2hvdWxkTm90QmUoIm1lZGl1bURhdGEiLCAiaGlnaERhdGEiKTsKK3No
b3VsZE5vdEJlKCJsb3dEYXRhIiwgImhpZ2hEYXRhIik7CisKK2RlYnVnKCIiKTsKK3Nob3VsZEJl
R3JlYXRlclRoYW5PckVxdWFsKCJzYW1wbGVBbHBoYShsb3dEYXRhKSIsICJzYW1wbGVBbHBoYSht
ZWRpdW1EYXRhKSIpOworc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwoInNhbXBsZUFscGhhKG1l
ZGl1bURhdGEpIiwgInNhbXBsZUFscGhhKGhpZ2hEYXRhKSIpOworCitkZWJ1ZygiIik7Cit2YXIg
ZGVmYXVsdENvbnRleHQgPSBzb3VyY2VDb250ZXh0Oworc2hvdWxkQmUoImRlZmF1bHRDb250ZXh0
LmltYWdlU21vb3RoaW5nUXVhbGl0eSIsICInbG93JyIpOworCitkZWJ1ZygiIik7CitzaG91bGRC
ZSgiaGlnaENvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7IGhpZ2hDb250ZXh0
LmltYWdlU21vb3RoaW5nUXVhbGl0eSIsICInaGlnaCciKTsKK3Nob3VsZEJlKCJoaWdoQ29udGV4
dC5pbWFnZVNtb290aGluZ1F1YWxpdHkgPSAnbWVkaXVtJzsgaGlnaENvbnRleHQuaW1hZ2VTbW9v
dGhpbmdRdWFsaXR5IiwgIidtZWRpdW0nIik7CisKK2RlYnVnKCIiKTsKK2V2YWxBbmRMb2coImhp
Z2hDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IHRydWU7IGhpZ2hDb250ZXh0LmltYWdl
U21vb3RoaW5nUXVhbGl0eSA9ICdoaWdoJzsiKTsKK3ZhciBoaWdoQ2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImhpZ2hDYW52YXMiKTsKK3Rlc3RJbnZhbGlkSW5wdXQoInNjYWxlSW1h
Z2VEYXRhKGhpZ2hDYW52YXMsICczMjIzJykiKTsKK3Rlc3RJbnZhbGlkSW5wdXQoInNjYWxlSW1h
Z2VEYXRhKGhpZ2hDYW52YXMsICdiYWRfaW5wdXQnKSIpOwordGVzdEludmFsaWRJbnB1dCgic2Nh
bGVJbWFnZURhdGEoaGlnaENhbnZhcywgJ0xPVycpIik7Cit0ZXN0SW52YWxpZElucHV0KCJzY2Fs
ZUltYWdlRGF0YShoaWdoQ2FudmFzLCAnTWVkaXVtJykiKTsKKworZGVidWcoIiIpOworZXZhbEFu
ZExvZygiaGlnaENvbnRleHQuc2F2ZSgpOyBoaWdoQ29udGV4dC5pbWFnZVNtb290aGluZ1F1YWxp
dHkgPSAnbWVkaXVtJzsiKTsKK3Nob3VsZEJlKCJoaWdoQ29udGV4dC5yZXN0b3JlKCk7IGhpZ2hD
b250ZXh0LmltYWdlU21vb3RoaW5nUXVhbGl0eSIsICInaGlnaCciKTsKK3Nob3VsZEJlKCJzY2Fs
ZUltYWdlRGF0YShoaWdoQ2FudmFzLCBoaWdoQ2FudmFzLmltYWdlU21vb3RoaW5nUXVhbGl0eSk7
IiwgImhpZ2hEYXRhIik7CisKK2RlYnVnKCIiKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>262292</attachid>
            <date>2015-10-01 15:45:35 -0700</date>
            <delta_ts>2015-10-01 15:45:35 -0700</delta_ts>
            <desc>Demo case for eyeballs.</desc>
            <filename>imageSmoothingQuality-demo.html</filename>
            <type>text/html</type>
            <size>2253</size>
            <attacher name="Kat Graff">kgraff</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8Ym9keT4KCjxjYW52YXMgaWQ9InNtb290aGluZy1xdWFs
aXR5IiBoZWlnaHQ9IjI1MCI+PC9jYW52YXM+CjxpbWcgaWQ9ImltYWdlIiBzcmM9Imh0dHA6Ly9s
aWZlYW5kc2NpZW5jZS5vcmcva2VlcGVycy9maWxlcy8yMDE0LzA2L21hbnRpc19zaHJpbXBfYm9k
eV9hcm1vci03LmpwZyIgd2lkdGg9IjAiIGhlaWdodD0iMCIgLz4KPHA+PGVtPlJvd3MgaGF2ZSBw
cm9ncmVzc2l2ZWx5IGltcHJvdmVkIGltYWdlIHNjYWxpbmcsIGFsbCBpbWFnZXMgb24gYSBzaW5n
bGUgcm93IHNob3VsZCBiZSBvZiB0aGUgc2FtZSBxdWFsaXR5LjwvZW0+PC9wPgo8cD4KPGVtPlJv
dyAxPC9lbT48YnIvPgombmJzcCBpbWFnZVNtb290aGluZ0VuYWJsZWQgPSAiZmFsc2UiPGJyLz4K
PGVtPlJvdyAyPC9lbT48YnIvPgombmJzcCBpbWFnZVNtb290aGluZ1F1YWxpdHkgZGVmYXVsdHMg
dG8gImxvdyI8YnIvPgombmJzcCBpbWFnZVNtb290aGluZ1F1YWxpdHkgPSAibG93Ijxici8+Cjxl
bT5Sb3cgMzwvZW0+PGJyLz4KJm5ic3AgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gIm1lZGl1bSI8
YnIvPgombmJzcCBpbWFnZVNtb290aGluZ1F1YWxpdHkgY2FuIGJlIHNldCB3aGlsZSBpbWFnZVNt
b290aGluZ0VuYWJsZWQgaXMgImZhbHNlIjxici8+CiZuYnNwIGltYWdlU21vb3RoaW5nUXVhbGl0
eSBjYW4gYmUgY29udGV4dCBzYXZlZDxici8+CjxlbT5Sb3cgNDwvZW0+PGJyLz4KJm5ic3AgaW1h
Z2VTbW9vdGhpbmdRdWFsaXR5ID0gImhpZ2giPGJyLz4KJm5ic3AgaW1hZ2VTbW9vdGhpbmdRdWFs
aXR5IGlzIG5vdCByZXNldC9jaGFuZ2VkIGJ5IHNldHRpbmcgaW1hZ2VTbW9vdGhpbmdFbmFibGVk
CjwvcD4KPHNjcmlwdD4KICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2
YXIgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzbW9vdGhpbmctcXVhbGl0eSIpOwogICAg
ICAgIHZhciBjdHggPSBjLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgdmFyIGltZyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJpbWFnZSIpOwoKCQkvLyBpbWFnZSBzbW9vdGhpbmcgbm90IGVu
YWJsZWQKICAgICAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gImZhbHNlIjsKICAgICAg
ICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCwgNjAsIDYwKTsKICAgICAgICBjdHguaW1hZ2VTbW9v
dGhpbmdFbmFibGVkID0gInRydWUiOwoKCQkvLyBkZWZhdWx0ID0gbG93CiAgICAgICAgY3R4LmRy
YXdJbWFnZShpbWcsIDAsIDYyLCA2MCwgNjApOwoKCQkvLyBsb3cKICAgICAgICBjdHguaW1hZ2VT
bW9vdGhpbmdRdWFsaXR5ID0gImxvdyI7CiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDYyLCA2
MiwgNjAsIDYwKTsKCgkJLy8gbWVkaXVtCiAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nUXVhbGl0
eSA9ICJtZWRpdW0iOwogICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAxMjQsIDYwLCA2MCk7
CgoJCS8vIGhpZ2gKICAgICAgICBjdHguaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gImhpZ2giOwog
ICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAxODYsIDYwLCA2MCk7CgoJCS8vIHN0aWxsIGhp
Z2ggYWZ0ZXIgaW1hZ2VTbW9vdGhpbmdFbmFibGVkIGlzIGZhbHNlCiAgICAgICAgY3R4LmltYWdl
U21vb3RoaW5nRW5hYmxlZCA9ICJmYWxzZSI7CiAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nRW5h
YmxlZCA9ICJ0cnVlIjsKICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgNjIsIDE4NiwgNjAsIDYw
KTsKICAgIAogICAgCS8vIG1lZGl1bSBpZiBlZGl0ZWQgd2hpbGUgaW1hZ2VTbW9vdGhpbmdFbmFi
bGVkIGlzIGZhbHNlCiAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9ICJmYWxzZSI7
CiAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICJtZWRpdW0iOwogICAgICAgIGN0
eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSAidHJ1ZSI7CiAgICAgICAgY3R4LmRyYXdJbWFnZShp
bWcsIDYyLCAxMjQsIDYwLCA2MCk7CiAgICAgICAgCiAgICAJLy8gc3RpbGwgbWVkaXVtIGlmIHNh
dmVkIHF1YWxpdHkgaXMgcmVzdG9yZWQKICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgIGN0eC5p
bWFnZVNtb290aGluZ1F1YWxpdHkgPSAiaGlnaCI7CiAgICAgICAgY3R4LnJlc3RvcmUoKTsKICAg
ICAgICBjdHguZHJhd0ltYWdlKGltZywgMTI0LCAxMjQsIDYwLCA2MCk7ICAgICAgICAgICAgCiAg
ICB9Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262447</attachid>
            <date>2015-10-05 10:43:35 -0700</date>
            <delta_ts>2015-10-05 11:32:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149541-20151005104418.patch</filename>
            <type>text/plain</type>
            <size>1380</size>
            <attacher name="Kat Graff">kgraff</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwNTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWIwYWRjOWJhYzFjYmRh
Mjk0ZjA3OGVlMDE0ZjJjYjNkM2VmNGE0Ny4uZGNmMGVjNDVlYmI4ZjBiYTkyNzYxYzY2N2UzNmZj
ZTUxMjYzNjM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE1LTEwLTA1ICBLYXRs
eW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBzZXRJbWFnZVNt
b290aGluZ1F1YWxpdHkgZm9yIGFkZGl0aW9uYWwgcmV2aWV3cy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTU0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0SW1hZ2VTbW9vdGhpbmdRdWFsaXR5KToKKwogMjAxNS0xMC0wNSAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBIaXN0b3J5
SXRlbTo6cGFyZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA1NWY1YTM3MWFkMjY5N2E4NzMzNWI4NDY1
OTE3YjQ0NzU0OTdjYjU1Li5hYzU4MGRjMzVkMWM0NmZjNzI2MGRmZDlmZWJhZTJhNThhYjFlNjIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKQEAgLTI1OTEsNyArMjU5MSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRJbWFnZVNtb290aGluZ1F1YWxpdHkoY29uc3QgU3RyaW5nJiBzbW9v
dGhpbmdRCiAgICAgcmVhbGl6ZVNhdmVzKCk7CiAgICAgbW9kaWZpYWJsZVN0YXRlKCkuaW1hZ2VT
bW9vdGhpbmdRdWFsaXR5ID0gcXVhbGl0eTsKIAotICAgIGlmICghbW9kaWZpYWJsZVN0YXRlKCku
aW1hZ2VTbW9vdGhpbmdFbmFibGVkKQorICAgIGlmICghc3RhdGUoKS5pbWFnZVNtb290aGluZ0Vu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhdXRvKiBjb250ZXh0ID0gZHJhd2lu
Z0NvbnRleHQoKSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>