<?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>75454</bug_id>
          
          <creation_ts>2012-01-02 17:21:49 -0800</creation_ts>
          <short_desc>Web Inspector: Add utility changes for Spectrum colorpicker</short_desc>
          <delta_ts>2012-02-08 06:19:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Brian Grinstead">briangrinstead</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>528609</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Grinstead">briangrinstead</who>
    <bug_when>2012-01-02 17:21:49 -0800</bug_when>
    <thetext>Patch to follow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528616</commentid>
    <comment_count>1</comment_count>
      <attachid>120902</attachid>
    <who name="Brian Grinstead">briangrinstead</who>
    <bug_when>2012-01-02 17:54:26 -0800</bug_when>
    <thetext>Created attachment 120902
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528678</commentid>
    <comment_count>2</comment_count>
      <attachid>120902</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-01-02 23:37:38 -0800</bug_when>
    <thetext>Comment on attachment 120902
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation

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

looks good but for the comments

&gt; Source/WebCore/inspector/front-end/Popover.js:61
&gt; +    

odd change

&gt; Source/WebCore/inspector/front-end/Popover.js:93
&gt; +        this._parentElement = parentElement;

Should this re-parent the popover when it is visible?

&gt; Source/WebCore/inspector/front-end/utilities.js:916
&gt; +function stopPropagation(e) {

Not sure if this is too useful. Pavel can comment on this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528762</commentid>
    <comment_count>3</comment_count>
    <who name="Brian Grinstead">briangrinstead</who>
    <bug_when>2012-01-03 07:23:28 -0800</bug_when>
    <thetext>(In reply to comment #2)

&gt; &gt; Source/WebCore/inspector/front-end/utilities.js:916
&gt; &gt; +function stopPropagation(e) {
&gt; 
&gt; Not sure if this is too useful. Pavel can comment on this

This is here because I was told to not use anonymous functions.  I had a need to stopPropagation on an event and I think it makes sense to have it as a utility function.  For example, this same function could be used inside of StylesSidebarPane.js instead of _handleSelectorClick.  I could always move this into a more local scope for the spectrum feature if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528828</commentid>
    <comment_count>4</comment_count>
      <attachid>120902</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-01-03 09:46:58 -0800</bug_when>
    <thetext>Comment on attachment 120902
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation

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

&gt;&gt; Source/WebCore/inspector/front-end/utilities.js:916
&gt;&gt; +function stopPropagation(e) {
&gt; 
&gt; Not sure if this is too useful. Pavel can comment on this

I don&apos;t even see you calling this in your patch. What does this have to do with anonymous functions? Just locally call event.stopPropagation(). This is useless, please remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528896</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Grinstead">briangrinstead</who>
    <bug_when>2012-01-03 11:24:20 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 120902 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120902&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/inspector/front-end/utilities.js:916
&gt; &gt;&gt; +function stopPropagation(e) {
&gt; &gt; 
&gt; &gt; Not sure if this is too useful. Pavel can comment on this
&gt; 
&gt; I don&apos;t even see you calling this in your patch. What does this have to do with anonymous functions? Just locally call event.stopPropagation(). This is useless, please remove.

Please see this comment by Pavel Feldman: https://bugs.webkit.org/show_bug.cgi?id=71262#c31.  I don&apos;t call any of these changes in the patch.  He wanted me to include the utility functions as one patch and the code using it as another patch.  This is to make it easier to land all the changes.

I think it is useful to be able to replace this anonymous function:

element.addEventListener(&quot;click&quot;, function(e) {
   e.stopPropagation();
}, false);

With this:

element.addEventListener(&quot;click&quot;, stopPropagation, false);

I was told to not use anonymous functions in the web inspector code, that is why I created the helper function.  As I said, I can move this to a local scope and land it with the Spectrum changes, but there is at least one other place in code where this exact thing is done, so this could help with that as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529428</commentid>
    <comment_count>6</comment_count>
      <attachid>120902</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-01-04 03:05:31 -0800</bug_when>
    <thetext>Comment on attachment 120902
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation

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

This change looks good to me. Please refactor totalOffsetTop/Left to use the new function and mark subsequent change as r?. Otherwise it does not end up on my to-review dashboard.

&gt;&gt; Source/WebCore/inspector/front-end/Popover.js:93
&gt;&gt; +        this._parentElement = parentElement;
&gt; 
&gt; Should this re-parent the popover when it is visible?

I don&apos;t think it should re-parent anything. This setter look good to me.

&gt; Source/WebCore/inspector/front-end/utilities.js:284
&gt; +Element.prototype.totalOffset = function(parent) 

You should change Element.prototype.totalOffsetTop and Element.prototype.totalOffsetLeft above to return Element.prototype.totalOffset.top and Element.prototype.totalOffset.left respectively.

&gt;&gt;&gt;&gt; Source/WebCore/inspector/front-end/utilities.js:916
&gt;&gt;&gt;&gt; +function stopPropagation(e) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Not sure if this is too useful. Pavel can comment on this
&gt;&gt; 
&gt;&gt; I don&apos;t even see you calling this in your patch. What does this have to do with anonymous functions? Just locally call event.stopPropagation(). This is useless, please remove.
&gt; 
&gt; Please see this comment by Pavel Feldman: https://bugs.webkit.org/show_bug.cgi?id=71262#c31.  I don&apos;t call any of these changes in the patch.  He wanted me to include the utility functions as one patch and the code using it as another patch.  This is to make it easier to land all the changes.
&gt; 
&gt; I think it is useful to be able to replace this anonymous function:
&gt; 
&gt; element.addEventListener(&quot;click&quot;, function(e) {
&gt;    e.stopPropagation();
&gt; }, false);
&gt; 
&gt; With this:
&gt; 
&gt; element.addEventListener(&quot;click&quot;, stopPropagation, false);
&gt; 
&gt; I was told to not use anonymous functions in the web inspector code, that is why I created the helper function.  As I said, I can move this to a local scope and land it with the Spectrum changes, but there is at least one other place in code where this exact thing is done, so this could help with that as well.

I&apos;ve seen it used in the spectrum component multiple times. I&apos;d rather have it here in utilities.js than in Spectrum only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529442</commentid>
    <comment_count>7</comment_count>
      <attachid>120902</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-01-04 03:42:15 -0800</bug_when>
    <thetext>Comment on attachment 120902
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation

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

&gt; Source/WebCore/inspector/front-end/Popover.js:35
&gt; +WebInspector.Popover = function(popoverHelper, hideOverflow)

You should also make hideOverflow as optional:

* @param {boolean=} hideOverflow

above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529658</commentid>
    <comment_count>8</comment_count>
      <attachid>121132</attachid>
    <who name="Brian Grinstead">briangrinstead</who>
    <bug_when>2012-01-04 11:59:23 -0800</bug_when>
    <thetext>Created attachment 121132
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530102</commentid>
    <comment_count>9</comment_count>
      <attachid>121132</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-01-05 01:44:28 -0800</bug_when>
    <thetext>Comment on attachment 121132
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 1)

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

&gt; Source/WebCore/inspector/front-end/Popover.js:117
&gt; +        const scrollerWidth = this._hideOverflow ? 0 : 11;

Nit: contants should not be conditional: scrollerWidth is always 11, you should use ? in the call site.

&gt; Source/WebCore/inspector/front-end/Popover.js:124
&gt; +        const totalWidth = this._parentElement ? this._parentElement.clientWidth : window.innerWidth;

this._parentElement is always be there, no need to check.

&gt; Source/WebCore/inspector/front-end/Popover.js:130
&gt; +        // If a parent element has been specified, position within that element instead

Now that I looked at the runtime, I think this is wrong. We never want popovers to be limited with the ancestor elements. When there is not enough real estate, we&apos;d like them to be rendered say &quot;to the left&quot; of the anchor, which is outside the styles sidebar. So you should not need this change. Sorry for bringing it up so late.

&gt; Source/WebCore/inspector/front-end/Popover.js:135
&gt; +            console.log(relativeOffset, anchorBox.x, anchorBox.y)

No logging should be used in the production.

&gt; Source/WebCore/inspector/front-end/utilities.js:911
&gt; +function stopPropagation(e) {

{ should be on the next line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530226</commentid>
    <comment_count>10</comment_count>
    <who name="Brian Grinstead">briangrinstead</who>
    <bug_when>2012-01-05 05:57:29 -0800</bug_when>
    <thetext>(In reply to comment #9)

&gt; Now that I looked at the runtime, I think this is wrong. We never want popovers to be limited with the ancestor elements. When there is not enough real estate, we&apos;d like them to be rendered say &quot;to the left&quot; of the anchor, which is outside the styles sidebar. So you should not need this change. Sorry for bringing it up so late.

I thought about this as well when first implementing it.  The issue that comes up though is that the popover &apos;sticks&apos; to the location it was opened, even if the sidebar pane is scrolled or resized.  This didn&apos;t feel right to me.  The original popover component wasn&apos;t designed to be used in a scrolling panel as far as I can tell.  That, combined with the small constant size of the colorpicker I think makes sense to put it in the styles sidebar - essentially inserting it in the DOM next to the swatch it &apos;belongs&apos; to.

Can you try commenting out the line:
&apos;this._popover.parentElement = container;&apos;
from https://bugs.webkit.org/show_bug.cgi?id=71262 and tell me if you still think it is preferable?  Make sure you scroll after opening a colorpicker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530235</commentid>
    <comment_count>11</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-01-05 06:04:43 -0800</bug_when>
    <thetext>&gt; I thought about this as well when first implementing it.  The issue that comes up though is that the popover &apos;sticks&apos; to the location it was opened, even if the sidebar pane is scrolled or resized.  This didn&apos;t feel right to me.  The original popover component wasn&apos;t designed to be used in a scrolling panel as far as I can tell. 

We can change that. In fact, on-hover evaluations are available on source frame, timing popup on the network panel. Both scroll, it is just that they act more like tooltips. I&apos;d expect them to listen to onscroll and override View&apos;s wasHidden to clean up. I&apos;d definitely prefer this way of operation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547546</commentid>
    <comment_count>12</comment_count>
      <attachid>125057</attachid>
    <who name="Brian Grinstead">briangrinstead</who>
    <bug_when>2012-02-01 18:10:22 -0800</bug_when>
    <thetext>Created attachment 125057
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 2_

Doesn&apos;t need the changes to Popover.js anymore so this is a smaller change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550884</commentid>
    <comment_count>13</comment_count>
      <attachid>125057</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-02-07 05:19:36 -0800</bug_when>
    <thetext>Comment on attachment 125057
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 2_

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

Looks good

&gt; Source/WebCore/ChangeLog:1
&gt; +2012-02-01  bgrins  &lt;briangrinstead@gmail.com&gt;

WebKit endorses the use of real names</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550914</commentid>
    <comment_count>14</comment_count>
      <attachid>125057</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-07 06:02:19 -0800</bug_when>
    <thetext>Comment on attachment 125057
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 2_

Please fix the ChangeLog prior to landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550928</commentid>
    <comment_count>15</comment_count>
      <attachid>125833</attachid>
    <who name="Brian Grinstead">briangrinstead</who>
    <bug_when>2012-02-07 06:21:25 -0800</bug_when>
    <thetext>Created attachment 125833
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 3)

Same as Update 2, just with full name in ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551922</commentid>
    <comment_count>16</comment_count>
      <attachid>125833</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-02-08 02:21:59 -0800</bug_when>
    <thetext>Comment on attachment 125833
Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 3)

Looks good. One thing is that you should never set &quot;r+&quot; on your own patches. Rather, a request for review is &quot;r?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552049</commentid>
    <comment_count>17</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-02-08 05:22:51 -0800</bug_when>
    <thetext>Committed r107079: &lt;http://trac.webkit.org/changeset/107079&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120902</attachid>
            <date>2012-01-02 17:54:26 -0800</date>
            <delta_ts>2012-01-04 11:59:23 -0800</delta_ts>
            <desc>Patch to provide utility functionality necessary for the Spectrum colorpicker implementation</desc>
            <filename>spectrum-utility.patch</filename>
            <type>text/plain</type>
            <size>7129</size>
            <attacher name="Brian Grinstead">briangrinstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MWE5ZDFmLi42ODhhZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTItMDEtMDIgIGJncmlucyAgPGJyaWFuZ3JpbnN0ZWFkQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgdXRpbGl0eSBjaGFuZ2VzIGZvciBTcGVjdHJ1bSBjb2xv
cnBpY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzU0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29s
b3IuZnJvbVJHQik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qb3BvdmVyLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBv
cG92ZXIucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJv
dG90eXBlLmhpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLnNl
dCBwYXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlw
ZS5fcG9zaXRpb25FbGVtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxp
dGllcy5qczoKKyAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0KToKKyAgICAg
ICAgKEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbE9mZnNldCk6CisgICAgICAgICgpOgorCiAyMDEy
LTAxLTAyICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9w
ZW5ib3NzYS5vcmc+CiAKICAgICAgICAgRml4IGNocm9taXVtIG1hYyBidWlsZCBhZnRlciByMTAz
OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbG9y
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db2xvci5qcwppbmRleCAy
YzI3NzgzLi5iNTIyNzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NvbG9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q29sb3IuanMKQEAgLTQ0LDYgKzQ0LDExIEBAIFdlYkluc3BlY3Rvci5Db2xvci5mcm9tUkdCQSA9
IGZ1bmN0aW9uKHIsIGcsIGIsIGEpCiAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ29sb3Io
InJnYmEoIiArIHIgKyAiLCIgKyBnICsgIiwiICsgYiArICIsIiArICh0eXBlb2YgYSA9PT0gInVu
ZGVmaW5lZCIgPyAxIDogYSkgKyAiKSIpOwogfQogCitXZWJJbnNwZWN0b3IuQ29sb3IuZnJvbVJH
QiA9IGZ1bmN0aW9uKHIsIGcsIGIpCit7CisgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ29s
b3IoInJnYigiICsgciArICIsIiArIGcgKyAiLCIgKyBiICsgIikiKTsKK30KKwogV2ViSW5zcGVj
dG9yLkNvbG9yLnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanMKaW5kZXgg
NGJmZDZhMy4uNjAwM2E4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Qb3BvdmVyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvUG9wb3Zlci5qcwpAQCAtMzIsNyArMzIsNyBAQAogICogQGNvbnN0cnVjdG9yCiAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVyPX0gcG9wb3ZlckhlbHBlcgogICovCi1XZWJJ
bnNwZWN0b3IuUG9wb3ZlciA9IGZ1bmN0aW9uKHBvcG92ZXJIZWxwZXIpCitXZWJJbnNwZWN0b3Iu
UG9wb3ZlciA9IGZ1bmN0aW9uKHBvcG92ZXJIZWxwZXIsIGhpZGVPdmVyZmxvdykKIHsKICAgICB0
aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlzLmVs
ZW1lbnQuY2xhc3NOYW1lID0gInBvcG92ZXIgY3VzdG9tLXBvcHVwLXZlcnRpY2FsLXNjcm9sbCBj
dXN0b20tcG9wdXAtaG9yaXpvbnRhbC1zY3JvbGwiOwpAQCAtNDUsNiArNDUsMTEgQEAgV2ViSW5z
cGVjdG9yLlBvcG92ZXIgPSBmdW5jdGlvbihwb3BvdmVySGVscGVyKQogICAgIHRoaXMuX2NvbnRl
bnREaXYuY2xhc3NOYW1lID0gImNvbnRlbnQiOwogICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTsK
ICAgICB0aGlzLl9wb3BvdmVySGVscGVyID0gcG9wb3ZlckhlbHBlcjsKKyAgICB0aGlzLl9wYXJl
bnRFbGVtZW50ID0gZG9jdW1lbnQuYm9keTsKKyAgICB0aGlzLl9oaWRlT3ZlcmZsb3cgPSBoaWRl
T3ZlcmZsb3c7CisgICAgCisgICAgaWYgKGhpZGVPdmVyZmxvdykKKyAgICAgICAgdGhpcy5fY29u
dGVudERpdi5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwogfQogCiBXZWJJbnNwZWN0b3IuUG9w
b3Zlci5wcm90b3R5cGUgPSB7CkBAIC01MywyMSArNTgsMjEgQEAgV2ViSW5zcGVjdG9yLlBvcG92
ZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fZGlzcG9zZWQpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQgPSBjb250ZW50RWxlbWVudDsK
LQorICAgIAogICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2UgaGlkZSBw
cmV2aW91cyBwb3B1cCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLgogICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yLlBvcG92ZXIuX3BvcG92ZXJFbGVtZW50KQotICAgICAgICAgICAgZG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZChXZWJJbnNwZWN0b3IuUG9wb3Zlci5fcG9wb3ZlckVsZW1lbnQpOworICAg
ICAgICAgICAgdGhpcy5fcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChXZWJJbnNwZWN0b3IuUG9w
b3Zlci5fcG9wb3ZlckVsZW1lbnQpOwogICAgICAgICBXZWJJbnNwZWN0b3IuUG9wb3Zlci5fcG9w
b3ZlckVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7CiAKICAgICAgICAgLy8gVGVtcG9yYXJpbHkgYXR0
YWNoIGluIG9yZGVyIHRvIG1lYXN1cmUgcHJlZmVycmVkIGRpbWVuc2lvbnMuCiAgICAgICAgIHRo
aXMuY29udGVudEVsZW1lbnQucG9zaXRpb25BdCgwLCAwKTsKLSAgICAgICAgZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRFbGVtZW50KTsKKyAgICAgICAgdGhpcy5fcGFyZW50
RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRFbGVtZW50KTsKICAgICAgICAgcHJlZmVy
cmVkV2lkdGggPSBwcmVmZXJyZWRXaWR0aCB8fCB0aGlzLmNvbnRlbnRFbGVtZW50Lm9mZnNldFdp
ZHRoOwogICAgICAgICBwcmVmZXJyZWRIZWlnaHQgPSBwcmVmZXJyZWRIZWlnaHQgfHwgdGhpcy5j
b250ZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7CiAKICAgICAgICAgdGhpcy5fY29udGVudERpdi5h
cHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRFbGVtZW50KTsKICAgICAgICAgdGhpcy5lbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuX2NvbnRlbnREaXYpOwotICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKHRoaXMuZWxlbWVudCk7CisgICAgICAgIHRoaXMuX3BhcmVudEVsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5lbGVtZW50KTsKICAgICAgICAgdGhpcy5fcG9zaXRpb25FbGVtZW50KGFuY2hv
ciwgcHJlZmVycmVkV2lkdGgsIHByZWZlcnJlZEhlaWdodCk7CiAgICAgICAgIHRoaXMuX3Zpc2li
bGUgPSB0cnVlOwogICAgICAgICBpZiAodGhpcy5fcG9wb3ZlckhlbHBlcikKQEAgLTc4LDEwICs4
MywxNSBAQCBXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yLlBvcG92ZXIuX3BvcG92ZXJFbGVtZW50KSB7CiAgICAgICAgICAg
ICBkZWxldGUgV2ViSW5zcGVjdG9yLlBvcG92ZXIuX3BvcG92ZXJFbGVtZW50OwotICAgICAgICAg
ICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpOworICAgICAgICAgICAg
dGhpcy5fcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpOwogICAgICAgICB9
CiAgICAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTsKICAgICB9LAorICAgIAorICAgIHNldCBw
YXJlbnRFbGVtZW50KHBhcmVudEVsZW1lbnQpCisgICAgeworICAgICAgICB0aGlzLl9wYXJlbnRF
bGVtZW50ID0gcGFyZW50RWxlbWVudDsKKyAgICB9LAogCiAgICAgZ2V0IHZpc2libGUoKQogICAg
IHsKQEAgLTEwMywxOSArMTEzLDI1IEBAIFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZSA9
IHsKICAgICBfcG9zaXRpb25FbGVtZW50OiBmdW5jdGlvbihhbmNob3JFbGVtZW50LCBwcmVmZXJy
ZWRXaWR0aCwgcHJlZmVycmVkSGVpZ2h0KQogICAgIHsKICAgICAgICAgY29uc3QgYm9yZGVyV2lk
dGggPSAyNTsKLSAgICAgICAgY29uc3Qgc2Nyb2xsZXJXaWR0aCA9IDExOworICAgICAgICBjb25z
dCBzY3JvbGxlcldpZHRoID0gdGhpcy5faGlkZU92ZXJmbG93ID8gMCA6IDExOwogICAgICAgICBj
b25zdCBhcnJvd0hlaWdodCA9IDE1OwogICAgICAgICBjb25zdCBhcnJvd09mZnNldCA9IDEwOwog
ICAgICAgICBjb25zdCBib3JkZXJSYWRpdXMgPSAxMDsKIAogICAgICAgICAvLyBTa2lubnkgdG9v
bHRpcHMgYXJlIG5vdCBwcmV0dHksIHRoZWlyIGFycm93IGxvY2F0aW9uIGlzIG5vdCBuaWNlLgog
ICAgICAgICBwcmVmZXJyZWRXaWR0aCA9IE1hdGgubWF4KHByZWZlcnJlZFdpZHRoLCA1MCk7Ci0g
ICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKLSAgICAgICAgY29u
c3QgdG90YWxIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CisgICAgICAgIGNvbnN0IHRvdGFs
V2lkdGggPSB0aGlzLl9wYXJlbnRFbGVtZW50ID8gdGhpcy5fcGFyZW50RWxlbWVudC5jbGllbnRX
aWR0aCA6IHdpbmRvdy5pbm5lcldpZHRoOworICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IHRo
aXMuX3BhcmVudEVsZW1lbnQgPyB0aGlzLl9wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodCA6IHdp
bmRvdy5pbm5lckhlaWdodDsKIAogICAgICAgICB2YXIgYW5jaG9yQm94ID0gYW5jaG9yRWxlbWVu
dC5ib3hJbldpbmRvdyh3aW5kb3cpOwogICAgICAgICB2YXIgbmV3RWxlbWVudFBvc2l0aW9uID0g
eyB4OiAwLCB5OiAwLCB3aWR0aDogcHJlZmVycmVkV2lkdGggKyBzY3JvbGxlcldpZHRoLCBoZWln
aHQ6IHByZWZlcnJlZEhlaWdodCB9OwotCisgICAgICAgIAorICAgICAgICBpZiAodGhpcy5fcGFy
ZW50RWxlbWVudCkgeworICAgICAgICAgICAgdmFyIHJlbGF0aXZlT2Zmc2V0ID0gYW5jaG9yRWxl
bWVudC50b3RhbE9mZnNldCh0aGlzLl9wYXJlbnRFbGVtZW50KTsKKyAgICAgICAgICAgIGFuY2hv
ckJveC54ID0gcmVsYXRpdmVPZmZzZXQubGVmdDsKKyAgICAgICAgICAgIGFuY2hvckJveC55ID0g
cmVsYXRpdmVPZmZzZXQudG9wOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB2YXIgdmVy
dGljYWxBbGlnbm1lbnQ7CiAgICAgICAgIHZhciByb29tQWJvdmUgPSBhbmNob3JCb3gueTsKICAg
ICAgICAgdmFyIHJvb21CZWxvdyA9IHRvdGFsSGVpZ2h0IC0gYW5jaG9yQm94LnkgLSBhbmNob3JC
b3guaGVpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC91dGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxp
dGllcy5qcwppbmRleCA2MWJjOTI0Li41MTE3OTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwpAQCAtMjgxLDYgKzI4MSwyOCBAQCBFbGVt
ZW50LnByb3RvdHlwZS50b3RhbE9mZnNldFRvcCA9IGZ1bmN0aW9uKCkKICAgICByZXR1cm4gdG90
YWw7CiB9CiAKK0VsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0ID0gZnVuY3Rpb24ocGFyZW50
KSAKK3sKKyAgICB2YXIgdG90YWxMZWZ0ID0gMDsKKyAgICB2YXIgdG90YWxUb3AgPSAwOworICAg
IGZvciAodmFyIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50ICYmIGVsZW1lbnQgIT09IHBhcmVudDsg
ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KSB7CisgICAgICAgIHRvdGFsTGVmdCArPSBl
bGVtZW50Lm9mZnNldExlZnQgKyAodGhpcyAhPT0gZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50TGVm
dCA6IDApOworICAgICAgICB0b3RhbFRvcCArPSBlbGVtZW50Lm9mZnNldFRvcCArICh0aGlzICE9
PSBlbGVtZW50ID8gZWxlbWVudC5jbGllbnRUb3AgOiAwKTsKKyAgICB9CisgICAgcmV0dXJuIHsg
bGVmdDogdG90YWxMZWZ0LCB0b3A6IHRvdGFsVG9wIH07Cit9CisKK0VsZW1lbnQucHJvdG90eXBl
LnNjcm9sbE9mZnNldCA9IGZ1bmN0aW9uKCkgCit7CisgICAgdmFyIGN1ckxlZnQgPSAwOworICAg
IHZhciBjdXJUb3AgPSAwOworICAgIGZvciAodmFyIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBl
bGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQpIHsKKyAgICAgICAgY3VyTGVmdCArPSBlbGVt
ZW50LnNjcm9sbExlZnQ7CisgICAgICAgIGN1clRvcCArPSBlbGVtZW50LnNjcm9sbFRvcDsKKyAg
ICB9CisgICAgcmV0dXJuIHsgbGVmdDogY3VyTGVmdCwgdG9wOiBjdXJUb3AgfTsKK30KKwogLyoq
CiAgKiBAY29uc3RydWN0b3IKICAqIEBwYXJhbSB7bnVtYmVyPX0geApAQCAtODkxLDYgKzkxMywx
MCBAQCBmdW5jdGlvbiBpc0VudGVyS2V5KGV2ZW50KSB7CiAgICAgcmV0dXJuIGV2ZW50LmtleUNv
ZGUgIT09IDIyOSAmJiBldmVudC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIiOwogfQogCitmdW5j
dGlvbiBzdG9wUHJvcGFnYXRpb24oZSkgeworICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Cit9CisK
IC8qKgogICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CiAgKiBAcGFyYW0ge251bWJlcn0gb2Zm
c2V0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121132</attachid>
            <date>2012-01-04 11:59:23 -0800</date>
            <delta_ts>2012-02-01 18:10:22 -0800</delta_ts>
            <desc>Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 1)</desc>
            <filename>spectrum-utility.patch</filename>
            <type>text/plain</type>
            <size>8203</size>
            <attacher name="Brian Grinstead">briangrinstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MWE5ZDFmLi45MGRjYmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDEtMDQgIGJncmlucyAgPGJyaWFuZ3JpbnN0ZWFkQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgdXRpbGl0eSBjaGFuZ2VzIGZvciBTcGVjdHJ1bSBjb2xv
cnBpY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzU0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29s
b3IuZnJvbVJHQik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qb3BvdmVyLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBv
cG92ZXIucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJv
dG90eXBlLmhpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBvcG92ZXIucHJvdG90eXBlLnNl
dCBwYXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlw
ZS5fcG9zaXRpb25FbGVtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxp
dGllcy5qczoKKyAgICAgICAgKEVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0TGVmdCk6Cisg
ICAgICAgIChFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldFRvcCk6CisgICAgICAgIChFbGVt
ZW50LnByb3RvdHlwZS50b3RhbE9mZnNldCk6CisgICAgICAgIChFbGVtZW50LnByb3RvdHlwZS5z
Y3JvbGxPZmZzZXQpOgorICAgICAgICAoKToKKwogMjAxMi0wMS0wMiAgQ2FpbyBNYXJjZWxvIGRl
IE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAg
IEZpeCBjaHJvbWl1bSBtYWMgYnVpbGQgYWZ0ZXIgcjEwMzkwNQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db2xvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanMKaW5kZXggMmMyNzc4My4uYjUyMjc1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db2xvci5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbG9yLmpzCkBAIC00NCw2ICs0NCwx
MSBAQCBXZWJJbnNwZWN0b3IuQ29sb3IuZnJvbVJHQkEgPSBmdW5jdGlvbihyLCBnLCBiLCBhKQog
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNvbG9yKCJyZ2JhKCIgKyByICsgIiwiICsgZyAr
ICIsIiArIGIgKyAiLCIgKyAodHlwZW9mIGEgPT09ICJ1bmRlZmluZWQiID8gMSA6IGEpICsgIiki
KTsKIH0KIAorV2ViSW5zcGVjdG9yLkNvbG9yLmZyb21SR0IgPSBmdW5jdGlvbihyLCBnLCBiKQor
eworICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNvbG9yKCJyZ2IoIiArIHIgKyAiLCIgKyBn
ICsgIiwiICsgYiArICIpIik7Cit9CisKIFdlYkluc3BlY3Rvci5Db2xvci5wcm90b3R5cGUgPSB7
CiAgICAgLyoqCiAgICAgICogQHJldHVybiB7c3RyaW5nfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qb3BvdmVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Qb3BvdmVyLmpzCmluZGV4IDRiZmQ2YTMuLmY5OGZlZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUG9wb3Zlci5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanMKQEAgLTMxLDgg
KzMxLDkgQEAKIC8qKgogICogQGNvbnN0cnVjdG9yCiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Q
b3BvdmVySGVscGVyPX0gcG9wb3ZlckhlbHBlcgorICogQHBhcmFtIHtib29sZWFuPX0gaGlkZU92
ZXJmbG93CiAgKi8KLVdlYkluc3BlY3Rvci5Qb3BvdmVyID0gZnVuY3Rpb24ocG9wb3ZlckhlbHBl
cikKK1dlYkluc3BlY3Rvci5Qb3BvdmVyID0gZnVuY3Rpb24ocG9wb3ZlckhlbHBlciwgaGlkZU92
ZXJmbG93KQogewogICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwogICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAicG9wb3ZlciBjdXN0b20tcG9wdXAt
dmVydGljYWwtc2Nyb2xsIGN1c3RvbS1wb3B1cC1ob3Jpem9udGFsLXNjcm9sbCI7CkBAIC00NSw2
ICs0NiwxMSBAQCBXZWJJbnNwZWN0b3IuUG9wb3ZlciA9IGZ1bmN0aW9uKHBvcG92ZXJIZWxwZXIp
CiAgICAgdGhpcy5fY29udGVudERpdi5jbGFzc05hbWUgPSAiY29udGVudCI7CiAgICAgdGhpcy5f
dmlzaWJsZSA9IGZhbHNlOwogICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIgPSBwb3BvdmVySGVscGVy
OworICAgIHRoaXMuX3BhcmVudEVsZW1lbnQgPSBkb2N1bWVudC5ib2R5OworICAgIHRoaXMuX2hp
ZGVPdmVyZmxvdyA9IGhpZGVPdmVyZmxvdzsKKyAgICAKKyAgICBpZiAoaGlkZU92ZXJmbG93KQor
ICAgICAgICB0aGlzLl9jb250ZW50RGl2LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiB9CiAK
IFdlYkluc3BlY3Rvci5Qb3BvdmVyLnByb3RvdHlwZSA9IHsKQEAgLTU2LDE4ICs2MiwxOCBAQCBX
ZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gVGhpcyBzaG91
bGQgbm90IGhhcHBlbiwgYnV0IHdlIGhpZGUgcHJldmlvdXMgcG9wdXAgdG8gYmUgb24gdGhlIHNh
ZmUgc2lkZS4KICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLl9wb3BvdmVyRWxlbWVu
dCkKLSAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoV2ViSW5zcGVjdG9yLlBv
cG92ZXIuX3BvcG92ZXJFbGVtZW50KTsKKyAgICAgICAgICAgIHRoaXMuX3BhcmVudEVsZW1lbnQu
cmVtb3ZlQ2hpbGQoV2ViSW5zcGVjdG9yLlBvcG92ZXIuX3BvcG92ZXJFbGVtZW50KTsKICAgICAg
ICAgV2ViSW5zcGVjdG9yLlBvcG92ZXIuX3BvcG92ZXJFbGVtZW50ID0gdGhpcy5lbGVtZW50Owog
CiAgICAgICAgIC8vIFRlbXBvcmFyaWx5IGF0dGFjaCBpbiBvcmRlciB0byBtZWFzdXJlIHByZWZl
cnJlZCBkaW1lbnNpb25zLgogICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnBvc2l0aW9uQXQo
MCwgMCk7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RWxl
bWVudCk7CisgICAgICAgIHRoaXMuX3BhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250
ZW50RWxlbWVudCk7CiAgICAgICAgIHByZWZlcnJlZFdpZHRoID0gcHJlZmVycmVkV2lkdGggfHwg
dGhpcy5jb250ZW50RWxlbWVudC5vZmZzZXRXaWR0aDsKICAgICAgICAgcHJlZmVycmVkSGVpZ2h0
ID0gcHJlZmVycmVkSGVpZ2h0IHx8IHRoaXMuY29udGVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0Owog
CiAgICAgICAgIHRoaXMuX2NvbnRlbnREaXYuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RWxlbWVu
dCk7CiAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50RGl2KTsK
LSAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOworICAgICAg
ICB0aGlzLl9wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CiAgICAgICAg
IHRoaXMuX3Bvc2l0aW9uRWxlbWVudChhbmNob3IsIHByZWZlcnJlZFdpZHRoLCBwcmVmZXJyZWRI
ZWlnaHQpOwogICAgICAgICB0aGlzLl92aXNpYmxlID0gdHJ1ZTsKICAgICAgICAgaWYgKHRoaXMu
X3BvcG92ZXJIZWxwZXIpCkBAIC03OCwxMCArODQsMTUgQEAgV2ViSW5zcGVjdG9yLlBvcG92ZXIu
cHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5Qb3BvdmVyLl9w
b3BvdmVyRWxlbWVudCkgewogICAgICAgICAgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5Qb3BvdmVy
Ll9wb3BvdmVyRWxlbWVudDsKLSAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQo
dGhpcy5lbGVtZW50KTsKKyAgICAgICAgICAgIHRoaXMuX3BhcmVudEVsZW1lbnQucmVtb3ZlQ2hp
bGQodGhpcy5lbGVtZW50KTsKICAgICAgICAgfQogICAgICAgICB0aGlzLl92aXNpYmxlID0gZmFs
c2U7CiAgICAgfSwKKyAgICAKKyAgICBzZXQgcGFyZW50RWxlbWVudChwYXJlbnRFbGVtZW50KQor
ICAgIHsKKyAgICAgICAgdGhpcy5fcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQ7CisgICAg
fSwKIAogICAgIGdldCB2aXNpYmxlKCkKICAgICB7CkBAIC0xMDMsMTkgKzExNCwyNyBAQCBXZWJJ
bnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUgPSB7CiAgICAgX3Bvc2l0aW9uRWxlbWVudDogZnVu
Y3Rpb24oYW5jaG9yRWxlbWVudCwgcHJlZmVycmVkV2lkdGgsIHByZWZlcnJlZEhlaWdodCkKICAg
ICB7CiAgICAgICAgIGNvbnN0IGJvcmRlcldpZHRoID0gMjU7Ci0gICAgICAgIGNvbnN0IHNjcm9s
bGVyV2lkdGggPSAxMTsKKyAgICAgICAgY29uc3Qgc2Nyb2xsZXJXaWR0aCA9IHRoaXMuX2hpZGVP
dmVyZmxvdyA/IDAgOiAxMTsKICAgICAgICAgY29uc3QgYXJyb3dIZWlnaHQgPSAxNTsKICAgICAg
ICAgY29uc3QgYXJyb3dPZmZzZXQgPSAxMDsKICAgICAgICAgY29uc3QgYm9yZGVyUmFkaXVzID0g
MTA7CiAKICAgICAgICAgLy8gU2tpbm55IHRvb2x0aXBzIGFyZSBub3QgcHJldHR5LCB0aGVpciBh
cnJvdyBsb2NhdGlvbiBpcyBub3QgbmljZS4KICAgICAgICAgcHJlZmVycmVkV2lkdGggPSBNYXRo
Lm1heChwcmVmZXJyZWRXaWR0aCwgNTApOwotICAgICAgICBjb25zdCB0b3RhbFdpZHRoID0gd2lu
ZG93LmlubmVyV2lkdGg7Ci0gICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gd2luZG93LmlubmVy
SGVpZ2h0OworICAgICAgICBjb25zdCB0b3RhbFdpZHRoID0gdGhpcy5fcGFyZW50RWxlbWVudCA/
IHRoaXMuX3BhcmVudEVsZW1lbnQuY2xpZW50V2lkdGggOiB3aW5kb3cuaW5uZXJXaWR0aDsKKyAg
ICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSB0aGlzLl9wYXJlbnRFbGVtZW50ID8gdGhpcy5fcGFy
ZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAKICAgICAgICAg
dmFyIGFuY2hvckJveCA9IGFuY2hvckVsZW1lbnQuYm94SW5XaW5kb3cod2luZG93KTsKICAgICAg
ICAgdmFyIG5ld0VsZW1lbnRQb3NpdGlvbiA9IHsgeDogMCwgeTogMCwgd2lkdGg6IHByZWZlcnJl
ZFdpZHRoICsgc2Nyb2xsZXJXaWR0aCwgaGVpZ2h0OiBwcmVmZXJyZWRIZWlnaHQgfTsKLQorICAg
ICAgICAKKyAgICAgICAgLy8gSWYgYSBwYXJlbnQgZWxlbWVudCBoYXMgYmVlbiBzcGVjaWZpZWQs
IHBvc2l0aW9uIHdpdGhpbiB0aGF0IGVsZW1lbnQgaW5zdGVhZAorICAgICAgICBpZiAodGhpcy5f
cGFyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkgeworICAgICAgICAgICAgdmFyIHJlbGF0
aXZlT2Zmc2V0ID0gYW5jaG9yRWxlbWVudC50b3RhbE9mZnNldCh0aGlzLl9wYXJlbnRFbGVtZW50
KTsKKyAgICAgICAgICAgIGFuY2hvckJveC54ID0gcmVsYXRpdmVPZmZzZXQubGVmdDsKKyAgICAg
ICAgICAgIGFuY2hvckJveC55ID0gcmVsYXRpdmVPZmZzZXQudG9wOworICAgICAgICAgICAgY29u
c29sZS5sb2cocmVsYXRpdmVPZmZzZXQsIGFuY2hvckJveC54LCBhbmNob3JCb3gueSkKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgdmFyIHZlcnRpY2FsQWxpZ25tZW50OwogICAgICAgICB2
YXIgcm9vbUFib3ZlID0gYW5jaG9yQm94Lnk7CiAgICAgICAgIHZhciByb29tQmVsb3cgPSB0b3Rh
bEhlaWdodCAtIGFuY2hvckJveC55IC0gYW5jaG9yQm94LmhlaWdodDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggNjFiYzkyNC4uOTZh
ZWFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGls
aXRpZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRp
ZXMuanMKQEAgLTI1NiwxNCArMjU2LDcgQEAgRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuY3Jl
YXRlQ2hpbGQgPSBFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVDaGlsZDsKICAqLwogRWxlbWVudC5w
cm90b3R5cGUudG90YWxPZmZzZXRMZWZ0ID0gZnVuY3Rpb24oKQogewotICAgIHZhciB0b3RhbCA9
IDA7Ci0gICAgZm9yICh2YXIgZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVt
ZW50Lm9mZnNldFBhcmVudCkgewotICAgICAgICB0b3RhbCArPSBlbGVtZW50Lm9mZnNldExlZnQg
Ci0gICAgICAgIGlmICh0aGlzICE9PSBlbGVtZW50KQotICAgICAgICAgICAgdG90YWwgKz0gZWxl
bWVudC5jbGllbnRMZWZ0IC0gZWxlbWVudC5zY3JvbGxMZWZ0OwotICAgIH0KLSAgICAgICAgCi0g
ICAgcmV0dXJuIHRvdGFsOworICAgIHJldHVybiB0aGlzLnRvdGFsT2Zmc2V0KCkubGVmdDsKIH0K
IAogLyoqCkBAIC0yNzEsMTQgKzI2NCwzOCBAQCBFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNl
dExlZnQgPSBmdW5jdGlvbigpCiAgKi8KIEVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0VG9w
ID0gZnVuY3Rpb24oKQogewotICAgIHZhciB0b3RhbCA9IDA7Ci0gICAgZm9yICh2YXIgZWxlbWVu
dCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCkgewotICAg
ICAgICB0b3RhbCArPSBlbGVtZW50Lm9mZnNldFRvcCAKKyAgICByZXR1cm4gdGhpcy50b3RhbE9m
ZnNldCgpLnRvcDsKK30KKworLyoqCisgKiBAcGFyYW0ge0VsZW1lbnQ9fSBwYXJlbnQKKyAqLwor
RWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXQgPSBmdW5jdGlvbihwYXJlbnQpIAoreworICAg
IHZhciB0b3RhbExlZnQgPSAwOworICAgIHZhciB0b3RhbFRvcCA9IDA7CisgICAgZm9yICh2YXIg
ZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQgJiYgZWxlbWVudCAhPT0gcGFyZW50OyBlbGVtZW50ID0g
ZWxlbWVudC5vZmZzZXRQYXJlbnQpIHsKKyAgICAKKyAgICAgICAgdG90YWxUb3AgKz0gZWxlbWVu
dC5vZmZzZXRUb3AgCiAgICAgICAgIGlmICh0aGlzICE9PSBlbGVtZW50KQotICAgICAgICAgICAg
dG90YWwgKz0gZWxlbWVudC5jbGllbnRUb3AgLSBlbGVtZW50LnNjcm9sbFRvcDsKKyAgICAgICAg
ICAgIHRvdGFsVG9wICs9IGVsZW1lbnQuY2xpZW50VG9wIC0gZWxlbWVudC5zY3JvbGxUb3A7Cisg
ICAgICAgICAgICAKKyAgICAgICAgdG90YWxMZWZ0ICs9IGVsZW1lbnQub2Zmc2V0TGVmdCAKKyAg
ICAgICAgaWYgKHRoaXMgIT09IGVsZW1lbnQpCisgICAgICAgICAgICB0b3RhbExlZnQgKz0gZWxl
bWVudC5jbGllbnRMZWZ0IC0gZWxlbWVudC5zY3JvbGxMZWZ0OwogICAgIH0KLSAgICAgICAgCi0g
ICAgcmV0dXJuIHRvdGFsOworICAgIHJldHVybiB7IGxlZnQ6IHRvdGFsTGVmdCwgdG9wOiB0b3Rh
bFRvcCB9OworfQorCitFbGVtZW50LnByb3RvdHlwZS5zY3JvbGxPZmZzZXQgPSBmdW5jdGlvbigp
IAoreworICAgIHZhciBjdXJMZWZ0ID0gMDsKKyAgICB2YXIgY3VyVG9wID0gMDsKKyAgICBmb3Ig
KHZhciBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFy
ZW50KSB7CisgICAgICAgIGN1ckxlZnQgKz0gZWxlbWVudC5zY3JvbGxMZWZ0OworICAgICAgICBj
dXJUb3AgKz0gZWxlbWVudC5zY3JvbGxUb3A7CisgICAgfQorICAgIHJldHVybiB7IGxlZnQ6IGN1
ckxlZnQsIHRvcDogY3VyVG9wIH07CiB9CiAKIC8qKgpAQCAtODkxLDYgKzkwOCwxMCBAQCBmdW5j
dGlvbiBpc0VudGVyS2V5KGV2ZW50KSB7CiAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgIT09IDIy
OSAmJiBldmVudC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIiOwogfQogCitmdW5jdGlvbiBzdG9w
UHJvcGFnYXRpb24oZSkgeworICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Cit9CisKIC8qKgogICog
QHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CiAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0Cg==
</data>
<flag name="review"
          id="121545"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125057</attachid>
            <date>2012-02-01 18:10:22 -0800</date>
            <delta_ts>2012-02-07 06:21:25 -0800</delta_ts>
            <desc>Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 2_</desc>
            <filename>75454.patch</filename>
            <type>text/plain</type>
            <size>3540</size>
            <attacher name="Brian Grinstead">briangrinstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MWE5ZDFmLi4xNDY1YTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTItMDItMDEgIGJncmlucyAgPGJyaWFuZ3JpbnN0ZWFkQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgY2hhbmdlcyBmb3IgU3BlY3RydW0gY29sb3JwaWNrZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKworICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvQ29sb3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29sb3IuZnJv
bVJHQik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanM6CisgICAg
ICAgIChFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldExlZnQpOgorICAgICAgICAoRWxlbWVu
dC5wcm90b3R5cGUudG90YWxPZmZzZXRUb3ApOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUu
dG90YWxPZmZzZXQpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsT2Zmc2V0KToK
KyAgICAgICAgKCk6CisKIDIwMTItMDEtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxo
byAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBGaXggY2hyb21pdW0g
bWFjIGJ1aWxkIGFmdGVyIHIxMDM5MDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ29sb3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvbG9yLmpzCmluZGV4IDJjMjc3ODMuLmI1MjI3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Db2xvci5qcwpAQCAtNDQsNiArNDQsMTEgQEAgV2ViSW5zcGVj
dG9yLkNvbG9yLmZyb21SR0JBID0gZnVuY3Rpb24ociwgZywgYiwgYSkKICAgICByZXR1cm4gbmV3
IFdlYkluc3BlY3Rvci5Db2xvcigicmdiYSgiICsgciArICIsIiArIGcgKyAiLCIgKyBiICsgIiwi
ICsgKHR5cGVvZiBhID09PSAidW5kZWZpbmVkIiA/IDEgOiBhKSArICIpIik7CiB9CiAKK1dlYklu
c3BlY3Rvci5Db2xvci5mcm9tUkdCID0gZnVuY3Rpb24ociwgZywgYikKK3sKKyAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5Db2xvcigicmdiKCIgKyByICsgIiwiICsgZyArICIsIiArIGIgKyAi
KSIpOworfQorCiBXZWJJbnNwZWN0b3IuQ29sb3IucHJvdG90eXBlID0gewogICAgIC8qKgogICAg
ICAqIEByZXR1cm4ge3N0cmluZ30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC91dGlsaXRpZXMuanMKaW5kZXggNjFiYzkyNC4uYmM1YzhiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKQEAgLTI1NiwxNCArMjU2
LDcgQEAgRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuY3JlYXRlQ2hpbGQgPSBFbGVtZW50LnBy
b3RvdHlwZS5jcmVhdGVDaGlsZDsKICAqLwogRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRM
ZWZ0ID0gZnVuY3Rpb24oKQogewotICAgIHZhciB0b3RhbCA9IDA7Ci0gICAgZm9yICh2YXIgZWxl
bWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCkgewot
ICAgICAgICB0b3RhbCArPSBlbGVtZW50Lm9mZnNldExlZnQgCi0gICAgICAgIGlmICh0aGlzICE9
PSBlbGVtZW50KQotICAgICAgICAgICAgdG90YWwgKz0gZWxlbWVudC5jbGllbnRMZWZ0IC0gZWxl
bWVudC5zY3JvbGxMZWZ0OwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIHRvdGFsOworICAg
IHJldHVybiB0aGlzLnRvdGFsT2Zmc2V0KCkubGVmdDsKIH0KIAogLyoqCkBAIC0yNzEsMTQgKzI2
NCwzNiBAQCBFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldExlZnQgPSBmdW5jdGlvbigpCiAg
Ki8KIEVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0VG9wID0gZnVuY3Rpb24oKQogewotICAg
IHZhciB0b3RhbCA9IDA7CisgICAgcmV0dXJuIHRoaXMudG90YWxPZmZzZXQoKS50b3A7CisKK30K
KworRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXQgPSBmdW5jdGlvbigpIAoreworICAgIHZh
ciB0b3RhbExlZnQgPSAwOworICAgIHZhciB0b3RhbFRvcCA9IDA7CisKICAgICBmb3IgKHZhciBl
bGVtZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KSB7
Ci0gICAgICAgIHRvdGFsICs9IGVsZW1lbnQub2Zmc2V0VG9wIAotICAgICAgICBpZiAodGhpcyAh
PT0gZWxlbWVudCkKLSAgICAgICAgICAgIHRvdGFsICs9IGVsZW1lbnQuY2xpZW50VG9wIC0gZWxl
bWVudC5zY3JvbGxUb3A7CisgICAgICAgIHRvdGFsTGVmdCArPSBlbGVtZW50Lm9mZnNldExlZnQ7
CisgICAgICAgIHRvdGFsVG9wICs9IGVsZW1lbnQub2Zmc2V0VG9wOworICAgICAgICBpZiAodGhp
cyAhPT0gZWxlbWVudCkgeworICAgICAgICAgICAgdG90YWxMZWZ0ICs9IGVsZW1lbnQuY2xpZW50
TGVmdCAtIGVsZW1lbnQuc2Nyb2xsTGVmdDsKKyAgICAgICAgICAgIHRvdGFsVG9wICs9IGVsZW1l
bnQuY2xpZW50VG9wIC0gZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIH0KICAgICB9Ci0gICAg
ICAgIAotICAgIHJldHVybiB0b3RhbDsKKworICAgIHJldHVybiB7IGxlZnQ6IHRvdGFsTGVmdCwg
dG9wOiB0b3RhbFRvcCB9OworfQorCitFbGVtZW50LnByb3RvdHlwZS5zY3JvbGxPZmZzZXQgPSBm
dW5jdGlvbigpIAoreworICAgIHZhciBjdXJMZWZ0ID0gMDsKKyAgICB2YXIgY3VyVG9wID0gMDsK
KyAgICBmb3IgKHZhciBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQu
c2Nyb2xsUGFyZW50KSB7CisgICAgICAgIGN1ckxlZnQgKz0gZWxlbWVudC5zY3JvbGxMZWZ0Owor
ICAgICAgICBjdXJUb3AgKz0gZWxlbWVudC5zY3JvbGxUb3A7CisgICAgfQorICAgIHJldHVybiB7
IGxlZnQ6IGN1ckxlZnQsIHRvcDogY3VyVG9wIH07CiB9CiAKIC8qKgpAQCAtODkxLDYgKzkwNiwx
MSBAQCBmdW5jdGlvbiBpc0VudGVyS2V5KGV2ZW50KSB7CiAgICAgcmV0dXJuIGV2ZW50LmtleUNv
ZGUgIT09IDIyOSAmJiBldmVudC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIiOwogfQogCitmdW5j
dGlvbiBzdG9wUHJvcGFnYXRpb24oZSkgCit7CisgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKK30K
KwogLyoqCiAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKICAqIEBwYXJhbSB7bnVtYmVyfSBv
ZmZzZXQK
</data>
<flag name="review"
          id="126471"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125833</attachid>
            <date>2012-02-07 06:21:25 -0800</date>
            <delta_ts>2012-02-08 06:19:17 -0800</delta_ts>
            <desc>Patch to provide utility functionality necessary for the Spectrum colorpicker implementation (Update 3)</desc>
            <filename>75454.patch</filename>
            <type>text/plain</type>
            <size>3552</size>
            <attacher name="Brian Grinstead">briangrinstead</attacher>
            
              <data encoding="base64">77u/ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA4MWE5ZDFmLi4xNDY1YTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjAgQEAKKzIwMTItMDItMDEgIEJyaWFuIEdyaW5zdGVhZCAgPGJyaWFuZ3JpbnN0ZWFkQGdtYWls
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgY2hhbmdlcyBmb3IgU3BlY3RydW0g
Y29sb3JwaWNrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc1NDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKworICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ29sb3IuZnJvbVJHQik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRp
ZXMuanM6CisgICAgICAgIChFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldExlZnQpOgorICAg
ICAgICAoRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRUb3ApOgorICAgICAgICAoRWxlbWVu
dC5wcm90b3R5cGUudG90YWxPZmZzZXQpOgorICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUuc2Ny
b2xsT2Zmc2V0KToKKyAgICAgICAgKCk6CisKIDIwMTItMDEtMDIgIENhaW8gTWFyY2VsbyBkZSBP
bGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBG
aXggY2hyb21pdW0gbWFjIGJ1aWxkIGFmdGVyIHIxMDM5MDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbG9yLmpzCmluZGV4IDJjMjc3ODMuLmI1MjI3NTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db2xvci5qcwpAQCAtNDQsNiArNDQsMTEg
QEAgV2ViSW5zcGVjdG9yLkNvbG9yLmZyb21SR0JBID0gZnVuY3Rpb24ociwgZywgYiwgYSkKICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Db2xvcigicmdiYSgiICsgciArICIsIiArIGcgKyAi
LCIgKyBiICsgIiwiICsgKHR5cGVvZiBhID09PSAidW5kZWZpbmVkIiA/IDEgOiBhKSArICIpIik7
CiB9CiAKK1dlYkluc3BlY3Rvci5Db2xvci5mcm9tUkdCID0gZnVuY3Rpb24ociwgZywgYikKK3sK
KyAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Db2xvcigicmdiKCIgKyByICsgIiwiICsgZyAr
ICIsIiArIGIgKyAiKSIpOworfQorCiBXZWJJbnNwZWN0b3IuQ29sb3IucHJvdG90eXBlID0gewog
ICAgIC8qKgogICAgICAqIEByZXR1cm4ge3N0cmluZ30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggNjFiYzkyNC4uYmM1YzhiYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKQEAg
LTI1NiwxNCArMjU2LDcgQEAgRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuY3JlYXRlQ2hpbGQg
PSBFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVDaGlsZDsKICAqLwogRWxlbWVudC5wcm90b3R5cGUu
dG90YWxPZmZzZXRMZWZ0ID0gZnVuY3Rpb24oKQogewotICAgIHZhciB0b3RhbCA9IDA7Ci0gICAg
Zm9yICh2YXIgZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNl
dFBhcmVudCkgewotICAgICAgICB0b3RhbCArPSBlbGVtZW50Lm9mZnNldExlZnQgCi0gICAgICAg
IGlmICh0aGlzICE9PSBlbGVtZW50KQotICAgICAgICAgICAgdG90YWwgKz0gZWxlbWVudC5jbGll
bnRMZWZ0IC0gZWxlbWVudC5zY3JvbGxMZWZ0OwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJu
IHRvdGFsOworICAgIHJldHVybiB0aGlzLnRvdGFsT2Zmc2V0KCkubGVmdDsKIH0KIAogLyoqCkBA
IC0yNzEsMTQgKzI2NCwzNiBAQCBFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldExlZnQgPSBm
dW5jdGlvbigpCiAgKi8KIEVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0VG9wID0gZnVuY3Rp
b24oKQogewotICAgIHZhciB0b3RhbCA9IDA7CisgICAgcmV0dXJuIHRoaXMudG90YWxPZmZzZXQo
KS50b3A7CisKK30KKworRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXQgPSBmdW5jdGlvbigp
IAoreworICAgIHZhciB0b3RhbExlZnQgPSAwOworICAgIHZhciB0b3RhbFRvcCA9IDA7CisKICAg
ICBmb3IgKHZhciBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQub2Zm
c2V0UGFyZW50KSB7Ci0gICAgICAgIHRvdGFsICs9IGVsZW1lbnQub2Zmc2V0VG9wIAotICAgICAg
ICBpZiAodGhpcyAhPT0gZWxlbWVudCkKLSAgICAgICAgICAgIHRvdGFsICs9IGVsZW1lbnQuY2xp
ZW50VG9wIC0gZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIHRvdGFsTGVmdCArPSBlbGVtZW50
Lm9mZnNldExlZnQ7CisgICAgICAgIHRvdGFsVG9wICs9IGVsZW1lbnQub2Zmc2V0VG9wOworICAg
ICAgICBpZiAodGhpcyAhPT0gZWxlbWVudCkgeworICAgICAgICAgICAgdG90YWxMZWZ0ICs9IGVs
ZW1lbnQuY2xpZW50TGVmdCAtIGVsZW1lbnQuc2Nyb2xsTGVmdDsKKyAgICAgICAgICAgIHRvdGFs
VG9wICs9IGVsZW1lbnQuY2xpZW50VG9wIC0gZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIH0K
ICAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiB0b3RhbDsKKworICAgIHJldHVybiB7IGxlZnQ6
IHRvdGFsTGVmdCwgdG9wOiB0b3RhbFRvcCB9OworfQorCitFbGVtZW50LnByb3RvdHlwZS5zY3Jv
bGxPZmZzZXQgPSBmdW5jdGlvbigpIAoreworICAgIHZhciBjdXJMZWZ0ID0gMDsKKyAgICB2YXIg
Y3VyVG9wID0gMDsKKyAgICBmb3IgKHZhciBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVu
dCA9IGVsZW1lbnQuc2Nyb2xsUGFyZW50KSB7CisgICAgICAgIGN1ckxlZnQgKz0gZWxlbWVudC5z
Y3JvbGxMZWZ0OworICAgICAgICBjdXJUb3AgKz0gZWxlbWVudC5zY3JvbGxUb3A7CisgICAgfQor
ICAgIHJldHVybiB7IGxlZnQ6IGN1ckxlZnQsIHRvcDogY3VyVG9wIH07CiB9CiAKIC8qKgpAQCAt
ODkxLDYgKzkwNiwxMSBAQCBmdW5jdGlvbiBpc0VudGVyS2V5KGV2ZW50KSB7CiAgICAgcmV0dXJu
IGV2ZW50LmtleUNvZGUgIT09IDIyOSAmJiBldmVudC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIi
OwogfQogCitmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZSkgCit7CisgICAgZS5zdG9wUHJvcGFn
YXRpb24oKTsKK30KKwogLyoqCiAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKICAqIEBwYXJh
bSB7bnVtYmVyfSBvZmZzZXQK
</data>
<flag name="review"
          id="127448"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="127781"
          type_id="3"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>