<?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>59414</bug_id>
          
          <creation_ts>2011-04-25 20:58:07 -0700</creation_ts>
          <short_desc>Implement CSS border width and related properties in CSSStyleApplyProperty.</short_desc>
          <delta_ts>2011-04-28 19:25:33 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>59314</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Luke Macpherson">macpherson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>macpherson</cc>
    
    <cc>mjs</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thakis</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>392219</commentid>
    <comment_count>0</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-25 20:58:07 -0700</bug_when>
    <thetext>Implement CSS border width and related properties in CSSStyleApplyProperty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392225</commentid>
    <comment_count>1</comment_count>
      <attachid>91049</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-25 21:05:21 -0700</bug_when>
    <thetext>Created attachment 91049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392227</commentid>
    <comment_count>2</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-25 21:07:07 -0700</bug_when>
    <thetext>May require a manual merge after https://bugs.webkit.org/show_bug.cgi?id=59314 goes in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392230</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-25 21:13:32 -0700</bug_when>
    <thetext>Luke, you might be interesting to know that Nico (thakis) brought to my attention today, that CSSStyleSelector.cpp is one of the largest files in WebCore (in terms of source fed to the compiler) due to all the macros it uses.  This re-working your doing may help that. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392234</commentid>
    <comment_count>4</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2011-04-25 21:25:29 -0700</bug_when>
    <thetext>CSSStyleSelector was actually big in terms of generated binary code size (i.e. .o file size) too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392235</commentid>
    <comment_count>5</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-25 21:29:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Luke, you might be interesting to know that Nico (thakis) brought to my attention today, that CSSStyleSelector.cpp is one of the largest files in WebCore (in terms of source fed to the compiler) due to all the macros it uses.  This re-working your doing may help that. :)

Yeah, apparently CSSStyleSelector::applyProperty is the largest WebKit symbol in the Chromium build by a fair margin - almost twice the size of the next largest which is HTMLTokenizer::nextToken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392237</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-25 21:32:28 -0700</bug_when>
    <thetext>HTMLTokenizer::nextToken is the entire tokenizer flattened to a single symbol.  (We use goto instead of normal functions calls for performance.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392523</commentid>
    <comment_count>7</comment_count>
      <attachid>91049</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-26 09:43:34 -0700</bug_when>
    <thetext>Comment on attachment 91049
Patch

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

Do we have some performance testing results for this change?

&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:87
&gt; +    ApplyPropertyDefaultBase(T (RenderStyle::*getter)() const, void (RenderStyle::*setter)(T), T (*initial)())

These pointer-to-member-function and function types are a little hard to read. Maybe we could use typedefs instead of putting the type here directly to make the code easier to read.

&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:104
&gt; +    virtual void applyValue(CSSStyleSelector*, CSSValue*) const {}

Can this be a pure virtual function instead? Is the empty version of the function ever helpful?

&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:121
&gt; +    virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const

I normally prefer to make a function like this private since it&apos;s only intended to be called through the base class. Making it private potentially catches virtual function calls that could instead be more-direct calls.

&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:124
&gt; +            (selector-&gt;style()-&gt;*ApplyPropertyDefaultBase&lt;T&gt;::m_setter)(*(static_cast&lt;CSSPrimitiveValue*&gt;(value)));

The extra set of parentheses here around the static_cast makes this slightly harder to read.

&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:328
&gt; +        if (width &gt;= 0)

I think it would be worthwhile to have a “why” comment about this, although it looks like you just moved the code.

Also, this if could go inside the CSSValueInvalid case of the switch rather than out here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392561</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-26 10:51:00 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 91049 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91049&amp;action=review
&gt; 
&gt; Do we have some performance testing results for this change?
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:87
&gt; &gt; +    ApplyPropertyDefaultBase(T (RenderStyle::*getter)() const, void (RenderStyle::*setter)(T), T (*initial)())
&gt; 
&gt; These pointer-to-member-function and function types are a little hard to read. Maybe we could use typedefs instead of putting the type here directly to make the code easier to read.
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:104
&gt; &gt; +    virtual void applyValue(CSSStyleSelector*, CSSValue*) const {}
&gt; 
&gt; Can this be a pure virtual function instead? Is the empty version of the function ever helpful?

Just for the record, I asked for these things (typedef) after CSSStyleApplyProperty has landed nearly 2 months ago :(
Luke, could you make those changes? I&apos;m happy to review the patch...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393277</commentid>
    <comment_count>9</comment_count>
      <attachid>91049</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-26 19:27:39 -0700</bug_when>
    <thetext>Comment on attachment 91049
Patch

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

&gt;&gt;&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:87
&gt;&gt;&gt; +    ApplyPropertyDefaultBase(T (RenderStyle::*getter)() const, void (RenderStyle::*setter)(T), T (*initial)())
&gt;&gt; 
&gt;&gt; These pointer-to-member-function and function types are a little hard to read. Maybe we could use typedefs instead of putting the type here directly to make the code easier to read.
&gt; 
&gt; Just for the record, I asked for these things (typedef) after CSSStyleApplyProperty has landed nearly 2 months ago :(
&gt; Luke, could you make those changes? I&apos;m happy to review the patch...

Done. Previously these types were not used repeatedly and so it didn&apos;t make sense to typedef them. Now that these types are used in many places it does.

&gt;&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:104
&gt;&gt; +    virtual void applyValue(CSSStyleSelector*, CSSValue*) const {}
&gt; 
&gt; Can this be a pure virtual function instead? Is the empty version of the function ever helpful?

Removed.

&gt;&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:121
&gt;&gt; +    virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const
&gt; 
&gt; I normally prefer to make a function like this private since it&apos;s only intended to be called through the base class. Making it private potentially catches virtual function calls that could instead be more-direct calls.

Done everywhere.

&gt;&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:124
&gt;&gt; +            (selector-&gt;style()-&gt;*ApplyPropertyDefaultBase&lt;T&gt;::m_setter)(*(static_cast&lt;CSSPrimitiveValue*&gt;(value)));
&gt; 
&gt; The extra set of parentheses here around the static_cast makes this slightly harder to read.

Done.

&gt;&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:328
&gt;&gt; +        if (width &gt;= 0)
&gt; 
&gt; I think it would be worthwhile to have a “why” comment about this, although it looks like you just moved the code.
&gt; 
&gt; Also, this if could go inside the CSSValueInvalid case of the switch rather than out here.

Yes, just moved code. Added comment to reflect that negative border widths are invalid. I&apos;ve moved the &lt; 0 check into the switch statement as suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393295</commentid>
    <comment_count>10</comment_count>
      <attachid>91221</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-26 20:16:44 -0700</bug_when>
    <thetext>Created attachment 91221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393442</commentid>
    <comment_count>11</comment_count>
      <attachid>91221</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-27 01:42:20 -0700</bug_when>
    <thetext>Comment on attachment 91221
Patch

It&apos;s confusing to have ApplyPropertyDefault and DefaultBase, why the distinction?
The same question applies to all of the existing classes in CSSStyleApplyProperty..
Why have ApplyPropertColor -&gt; ApplyPropertyColorBase -&gt; ApplyPropertyBase - I don&apos;t see the need for the extra level FooBarBase.
Can we please focus first on cleaning up CSSStyleApplyProperty, before adding new classes...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393444</commentid>
    <comment_count>12</comment_count>
      <attachid>91221</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-04-27 01:48:03 -0700</bug_when>
    <thetext>Comment on attachment 91221
Patch

I&apos;m not sure if the direction of this refactoring is making the code easier to understand and modify. The roles of the different classes and their inheritence relationships are pretty unclear. I think that when you have a whole family of Foo and FooBase classes, that in itself is an indication of an anti-pattern - &quot;Base&quot; doesn&apos;t really explain how the role of the other class is different. Looking through both the patch and the existing code, for example, it seems that nothing inherits from ApplyPropertyColorBase other than ApplyPropertyColor. Only one place actually instantiates an ApplyPropertyColor instead of ApplyPropertyColorBase, and it is mysterious in the code why.

Also, it&apos;s dynamically allocated, but it doesn&apos;t use the create() pattern or smart pointers to get the memory management right; and (b) it looks like a simple value object so it may be surprising that we do dynamic allocations for this.

Finally, when it is dynamically allocated, it is passed to a function setPropertyValue which does not in fact set a property value; rather it records a setter object in a hashtable for later use in actually setting values.

Maybe it is time to step back and see if WebCore CSS hackers actually find all of these changes to be an improvement in clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393445</commentid>
    <comment_count>13</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-04-27 01:50:23 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 91049 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91049&amp;action=review
&gt; 
&gt; Do we have some performance testing results for this change?

BTW it looks like this question from an earlier rev of the patch was never answered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393529</commentid>
    <comment_count>14</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-27 07:02:34 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 91049 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91049&amp;action=review
&gt; &gt; 
&gt; &gt; Do we have some performance testing results for this change?
&gt; 
&gt; BTW it looks like this question from an earlier rev of the patch was never answered.

Maciej, there has been extensive talking with CSS hacker and performance testing done earlier. See bug 54707 for details. In summary, anttik, smfr, and dhyatt endorsed the approach. Anttik made Luke test the crap of the new approach to ensure no performance degradation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393879</commentid>
    <comment_count>15</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-27 15:25:42 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 91221 [details])
&gt; It&apos;s confusing to have ApplyPropertyDefault and DefaultBase, why the distinction?
&gt; The same question applies to all of the existing classes in CSSStyleApplyProperty..
&gt; Why have ApplyPropertColor -&gt; ApplyPropertyColorBase -&gt; ApplyPropertyBase - I don&apos;t see the need for the extra level FooBarBase.
&gt; Can we please focus first on cleaning up CSSStyleApplyProperty, before adding new classes...

The reason is that ApplyPropertyBase casts a CSSPrimitiveValue to T in applyValue(). That is not always a valid thing to do, so the compiler complains. That is the reason for the separation in this case. I would have liked to avoid it, but it wasn&apos;t possible in this case. This was briefly explained in the changelog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393922</commentid>
    <comment_count>16</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-27 16:04:37 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 91221 [details] [details])
&gt; &gt; It&apos;s confusing to have ApplyPropertyDefault and DefaultBase, why the distinction?
&gt; &gt; The same question applies to all of the existing classes in CSSStyleApplyProperty..
&gt; &gt; Why have ApplyPropertColor -&gt; ApplyPropertyColorBase -&gt; ApplyPropertyBase - I don&apos;t see the need for the extra level FooBarBase.
&gt; &gt; Can we please focus first on cleaning up CSSStyleApplyProperty, before adding new classes...
&gt; 
&gt; The reason is that ApplyPropertyBase casts a CSSPrimitiveValue to T in applyValue(). That is not always a valid thing to do, so the compiler complains. That is the reason for the separation in this case. I would have liked to avoid it, but it wasn&apos;t possible in this case. This was briefly explained in the changelog entry.

s/ApplyPropertyBase/ApplyPropertyDefaultValue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394033</commentid>
    <comment_count>17</comment_count>
      <attachid>91391</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-27 17:44:11 -0700</bug_when>
    <thetext>Created attachment 91391
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394034</commentid>
    <comment_count>18</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-27 17:45:16 -0700</bug_when>
    <thetext>Last patch is just a merge required after https://bugs.webkit.org/show_bug.cgi?id=59623 went in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394074</commentid>
    <comment_count>19</comment_count>
      <attachid>91402</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-27 18:35:27 -0700</bug_when>
    <thetext>Created attachment 91402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394114</commentid>
    <comment_count>20</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-27 19:18:21 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 91221 [details])
&gt; I&apos;m not sure if the direction of this refactoring is making the code easier to understand and modify. The roles of the different classes and their inheritence relationships are pretty unclear. I think that when you have a whole family of Foo and FooBase classes, that in itself is an indication of an anti-pattern - &quot;Base&quot; doesn&apos;t really explain how the role of the other class is different. Looking through both the patch and the existing code, for example, it seems that nothing inherits from ApplyPropertyColorBase other than ApplyPropertyColor. Only one place actually instantiates an ApplyPropertyColor instead of ApplyPropertyColorBase, and it is mysterious in the code why.

The ApplyPropertyColor/ApplyPropertyColorBase issue has been fixed already. The ApplyPropertyDefault/ApplyPropertyDefaultBas issues is a bit more annoying - because the behavior of applyProperty is to do a static cast from primitiveValue to the template type T. This can&apos;t work for some types. You could probably use a dynamic cast, but I expect that has higher runtime cost than adding to the class hierarchy. Still, you shouldn&apos;t read this as a whole family of x/xBase classes, that&apos;s just my lack of naming imagination at work.

&gt; Also, it&apos;s dynamically allocated, but it doesn&apos;t use the create() pattern or smart pointers to get the memory management right; and (b) it looks like a simple value object so it may be surprising that we do dynamic allocations for this.

CSSStyleApplyProperty itself is a statically allocated singleton.

&gt; Finally, when it is dynamically allocated, it is passed to a function setPropertyValue which does not in fact set a property value; rather it records a setter object in a hashtable for later use in actually setting values.

Yes, it is poorly named. That isn&apos;t terribly hard to fix fortunately.

&gt; Maybe it is time to step back and see if WebCore CSS hackers actually find all of these changes to be an improvement in clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394264</commentid>
    <comment_count>21</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-27 23:40:35 -0700</bug_when>
    <thetext>Well, I spent the day trying to find a way to use template specialization to remove the ApplyPropertyDefault/ApplyPropertyDefaultBase distinction, but couldn&apos;t find anything more succinct than was already there. Open to suggestions if someone with better template foo can see an elegant solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394914</commentid>
    <comment_count>22</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-04-28 16:46:21 -0700</bug_when>
    <thetext>Who, if anyone, is actually going to r+/cq+ this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394922</commentid>
    <comment_count>23</comment_count>
      <attachid>91402</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-28 16:53:52 -0700</bug_when>
    <thetext>Comment on attachment 91402
Patch

I don&apos;t understand the default/base stuff.  But I think this is still moving us in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395034</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-28 19:23:33 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 91402:

http/tests/inspector/resource-tree/resource-tree-frame-add.html bug 59771 (author: pfeldman@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395037</commentid>
    <comment_count>25</comment_count>
      <attachid>91402</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-28 19:25:26 -0700</bug_when>
    <thetext>Comment on attachment 91402
Patch

Clearing flags on attachment: 91402

Committed r85289: &lt;http://trac.webkit.org/changeset/85289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395038</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-28 19:25:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91049</attachid>
            <date>2011-04-25 21:05:21 -0700</date>
            <delta_ts>2011-04-26 20:16:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59414-20110426140518.patch</filename>
            <type>text/plain</type>
            <size>10848</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0ODc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDQtMjUgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgQ1NTIGJvcmRlciB3aWR0aCBh
bmQgcmVsYXRlZCBwcm9wZXJ0aWVzIGluIENTU1N0eWxlQXBwbHlQcm9wZXJ0eS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NDE0CisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGFzIG5vIGZ1bmN0aW9uYWxpdHkgYWRkZWQuCisKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcDoKKyAgICAgICAgU2VwYXJhdGVkIEFwcGx5UHJvcGVy
dHlEZWZhdWx0IGludG8gcGFyZW50IGFuZCBjaGlsZCBzbyB0aGF0IG90aGVyIGNsYXNzZXMgY291
bGQgaW5oZXJpdAorICAgICAgICB0aGUgYXBwbHlJbmhlcml0VmFsdWUgYW5kIGFwcGx5SW5pdGlh
bFZhbHVlIG1ldGhvZHMgb25seS4KKyAgICAgICAgVGhpcyB3YXMgbmVjZXNzYXJ5IHRvIGF2b2lk
IGNhc3RpbmcgZnJvbSBDU1NQcmltaXRpdmVWYWx1ZSB0byBpbmFwcHJvcHJpYXRlIHR5cGVzIGlu
IEFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVlKCkuCisgICAgICAgIAorICAgICAgICBB
ZGRlZCBBcHBseVByb3BlcnR5V2lkdGggY2xhc3MgZm9yIGhhbmRsaW5nIHdpZHRoIGJhc2VkIENT
UyBwcm9wZXJ0aWVzLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgUmVtb3ZlZCBuby1sb25nZXItcmVxdWlyZWQgY29kZSBmb3IgaGFuZGxpbmcgd2lkdGggYmFz
ZWQgQ1NTIHByb3BlcnRpZXMuCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAg
ICAgICAgQWRkZWQgYSBnZXR0ZXIgZm9yIG1fcm9vdEVsZW1lbnRTdHlsZS4KKwogMjAxMS0wNC0y
NSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg0ODY0LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHJldmlzaW9uIDg0ODU1KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDkgKzgyLDkgQEAgcHVibGljOgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFz
cyBBcHBseVByb3BlcnR5RGVmYXVsdCA6IHB1YmxpYyBBcHBseVByb3BlcnR5QmFzZSB7CitjbGFz
cyBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2UgOiBwdWJsaWMgQXBwbHlQcm9wZXJ0eUJhc2Ugewog
cHVibGljOgotICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0KFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCksIFQgKCppbml0aWFsKSgp
KQorICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZShUIChSZW5kZXJTdHlsZTo6KmdldHRlciko
KSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFQpLCBUICgqaW5pdGlhbCkoKSkK
ICAgICAgICAgOiBtX2dldHRlcihnZXR0ZXIpCiAgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQog
ICAgICAgICAsIG1faW5pdGlhbChpbml0aWFsKQpAQCAtMTAxLDExICsxMDEsNyBAQCBwdWJsaWM6
CiAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVyKSgoKm1faW5pdGlhbCkoKSk7
CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgKHNlbGVjdG9yLT5zdHlsZSgpLT4q
bV9zZXR0ZXIpKCooc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpKTsKLSAg
ICB9CisgICAgdmlydHVhbCB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3RvciosIENTU1Zh
bHVlKikgY29uc3Qge30KIAogcHJvdGVjdGVkOgogICAgIFQgKFJlbmRlclN0eWxlOjoqbV9nZXR0
ZXIpKCkgY29uc3Q7CkBAIC0xMTMsNiArMTA5LDIyIEBAIHByb3RlY3RlZDoKICAgICBUICgqbV9p
bml0aWFsKSgpOwogfTsKIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIEFwcGx5UHJv
cGVydHlEZWZhdWx0IDogcHVibGljIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxUPiB7CitwdWJs
aWM6CisgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQoVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUKSwgVCAoKmluaXRpYWwpKCkpCisg
ICAgICAgIDogQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFQ+KGdldHRlciwgc2V0dGVyLCBpbml0
aWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAoc2VsZWN0b3It
PnN0eWxlKCktPipBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8VD46Om1fc2V0dGVyKSgqKHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKSk7CisgICAgfQorfTsKKwogLy8gQ1NT
UHJvcGVydHlDb2xvcgogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbG9yQmFzZSA6IHB1YmxpYyBBcHBs
eVByb3BlcnR5QmFzZSB7CiBwdWJsaWM6CkBAIC0yODMsNiArMjk1LDQxIEBAIHByb3RlY3RlZDoK
ICAgICB2b2lkIChDU1NTdHlsZVNlbGVjdG9yOjoqbV9tYXBGaWxsKShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogfTsKIAorY2xhc3MgQXBwbHlQcm9wZXJ0eVdpZHRoIDog
cHVibGljIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTx1bnNpZ25lZCBzaG9ydD4geworcHVibGlj
OgorICAgIEFwcGx5UHJvcGVydHlXaWR0aCh1bnNpZ25lZCBzaG9ydCAoUmVuZGVyU3R5bGU6Oipn
ZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKSh1bnNpZ25lZCBzaG9y
dCksIHVuc2lnbmVkIHNob3J0ICgqaW5pdGlhbCkoKSkKKyAgICAgICAgOiBBcHBseVByb3BlcnR5
RGVmYXVsdEJhc2U8dW5zaWduZWQgc2hvcnQ+KGdldHRlciwgc2V0dGVyLCBpbml0aWFsKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBzaG9ydCB3aWR0aDsKKyAgICAgICAgc3dpdGNo
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICBjYXNlIENTU1ZhbHVlVGhp
bjoKKyAgICAgICAgICAgIHdpZHRoID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICAgICAgd2lkdGggPSAzOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGljazoKKyAgICAgICAgICAgIHdpZHRoID0g
NTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKKyAg
ICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhTaG9ydChzZWxl
Y3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5bGUoKSwgc2VsZWN0b3ItPnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAod2lkdGgg
Pj0gMCkKKyAgICAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVyKSh3aWR0aCk7
CisgICAgfQorfTsKKwogY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5JiBDU1NTdHlsZUFwcGx5
UHJvcGVydHk6OnNoYXJlZENTU1N0eWxlQXBwbHlQcm9wZXJ0eSgpCiB7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDU1NTdHlsZUFwcGx5UHJvcGVydHksIGNzc1N0eWxlQXBwbHlQcm9wZXJ0eUlu
c3RhbmNlLCAoKSk7CkBAIC0zNjksNiArNDE2LDEzIEBAIENTU1N0eWxlQXBwbHlQcm9wZXJ0eTo6
Q1NTU3R5bGVBcHBseVByb3AKICAgICBzZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tU3R5bGUsIG5ldyBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGU+KCZSZW5k
ZXJTdHlsZTo6Ym9yZGVyQm90dG9tU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9t
U3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlKSk7CiAgICAgc2V0UHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSwgbmV3IEFwcGx5UHJvcGVydHlEZWZh
dWx0PEVCb3JkZXJTdHlsZT4oJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0U3R5bGUsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVyTGVmdFN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHls
ZSkpOwogCisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCBu
ZXcgQXBwbHlQcm9wZXJ0eVdpZHRoKCZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlcldp
ZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgs
IG5ldyBBcHBseVByb3BlcnR5V2lkdGgoJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodFdpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
cmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bVdpZHRoLCBuZXcgQXBwbHlQcm9wZXJ0eVdpZHRoKCZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9t
V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJv
cmRlckxlZnRXaWR0aCwgbmV3IEFwcGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6OmJvcmRl
ckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eU91dGxpbmVXaWR0aCwgbmV3IEFwcGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6Om91dGxp
bmVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtblJ1bGVXaWR0aCwgbmV3IEFwcGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6OmNv
bHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEJvcmRlcldpZHRoKSk7CisKICAgICBzZXRQcm9wZXJ0eVZhbHVlKENTU1By
b3BlcnR5T3V0bGluZUNvbG9yLCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yQmFzZSgmUmVuZGVyU3R5
bGU6Om91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRP
dXRsaW5lQ29sb3IpKTsKIAogICAgIHNldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlPdmVyZmxv
d1gsIG5ldyBBcHBseVByb3BlcnR5RGVmYXVsdDxFT3ZlcmZsb3c+KCZSZW5kZXJTdHlsZTo6b3Zl
cmZsb3dYLCAmUmVuZGVyU3R5bGU6OnNldE92ZXJmbG93WCwgJlJlbmRlclN0eWxlOjppbml0aWFs
T3ZlcmZsb3dYKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CShyZXZpc2lvbiA4NDg1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4Niw3OSArMzg4Niw2IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotLy8g
bGVuZ3RoCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21XaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
blJ1bGVXaWR0aDoKLSAgICB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAg
IEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgYm9yZGVyVG9w
V2lkdGgsIEJvcmRlclRvcFdpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChD
U1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsIGJvcmRlclJpZ2h0V2lkdGgsIEJvcmRlclJpZ2h0
V2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tV2lkdGgsIGJvcmRlckJvdHRvbVdpZHRoLCBCb3JkZXJCb3R0b21XaWR0aCkKLSAgICAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIGJv
cmRlckxlZnRXaWR0aCwgQm9yZGVyTGVmdFdpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSEVS
SVRfQ09ORChDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aCwgb3V0bGluZVdpZHRoLCBPdXRsaW5lV2lk
dGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uUnVsZVdpZHRoLCBjb2x1bW5SdWxlV2lkdGgsIENvbHVtblJ1bGVXaWR0aCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpIHsKLSAg
ICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRl
clRvcFdpZHRoLCBCb3JkZXJUb3BXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAgICAgICBIQU5E
TEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBC
b3JkZXJSaWdodFdpZHRoLCBCb3JkZXJXaWR0aCkKLSAgICAgICAgICAgIEhBTkRMRV9JTklUSUFM
X0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBCb3JkZXJCb3R0
b21XaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJ
VEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIEJvcmRlckxlZnRXaWR0aCwgQm9y
ZGVyV2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NT
UHJvcGVydHlPdXRsaW5lV2lkdGgsIE91dGxpbmVXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAg
ICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlV2lkdGgsIENvbHVtblJ1bGVXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBzaG9ydCB3aWR0aCA9IDM7Ci0gICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaW46
Ci0gICAgICAgICAgICB3aWR0aCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU1lZGl1bToKLSAgICAgICAgICAgIHdpZHRoID0gMzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVGhpY2s6Ci0gICAgICAgICAgICB3aWR0aCA9IDU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6Ci0gICAg
ICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQoc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHdpZHRoIDwgMCkgcmV0dXJuOwotICAgICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEJvcmRlclRvcFdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
cmRlclJpZ2h0V2lkdGgod2lkdGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aDoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
cmRlckJvdHRvbVdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9y
ZGVyTGVmdFdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1Byb3BlcnR5T3V0bGluZVdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGluZVdp
ZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uUnVsZVdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVs
ZVdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzogewogICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgICAgIGlmIChpc0luaGVyaXQpIApAQCAtNjA0Myw2ICs1OTcwLDEyIEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRTdHlsZToKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGg6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJMZWZ0V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlPdXRsaW5lQ29sb3I6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xv
cjoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDg0ODU1KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDYgKzExNiw3IEBAIHB1YmxpYzoKIAogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CiAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5
bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7
IH0KICAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsg
fQogCiAgICAgcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91221</attachid>
            <date>2011-04-26 20:16:44 -0700</date>
            <delta_ts>2011-04-27 17:43:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59414-20110427131641.patch</filename>
            <type>text/plain</type>
            <size>14610</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0ODc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDQtMjUgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgQ1NTIGJvcmRlciB3aWR0aCBh
bmQgcmVsYXRlZCBwcm9wZXJ0aWVzIGluIENTU1N0eWxlQXBwbHlQcm9wZXJ0eS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NDE0CisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGFzIG5vIGZ1bmN0aW9uYWxpdHkgYWRkZWQuCisKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcDoKKyAgICAgICAgU2VwYXJhdGVkIEFwcGx5UHJvcGVy
dHlEZWZhdWx0IGludG8gcGFyZW50IGFuZCBjaGlsZCBzbyB0aGF0IG90aGVyIGNsYXNzZXMgY291
bGQgaW5oZXJpdAorICAgICAgICB0aGUgYXBwbHlJbmhlcml0VmFsdWUgYW5kIGFwcGx5SW5pdGlh
bFZhbHVlIG1ldGhvZHMgb25seS4KKyAgICAgICAgVGhpcyB3YXMgbmVjZXNzYXJ5IHRvIGF2b2lk
IGNhc3RpbmcgZnJvbSBDU1NQcmltaXRpdmVWYWx1ZSB0byBpbmFwcHJvcHJpYXRlIHR5cGVzIGlu
IEFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVlKCkuCisgICAgICAgIAorICAgICAgICBB
ZGRlZCBBcHBseVByb3BlcnR5V2lkdGggY2xhc3MgZm9yIGhhbmRsaW5nIHdpZHRoIGJhc2VkIENT
UyBwcm9wZXJ0aWVzLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgUmVtb3ZlZCBuby1sb25nZXItcmVxdWlyZWQgY29kZSBmb3IgaGFuZGxpbmcgd2lkdGggYmFz
ZWQgQ1NTIHByb3BlcnRpZXMuCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAg
ICAgICAgQWRkZWQgYSBnZXR0ZXIgZm9yIG1fcm9vdEVsZW1lbnRTdHlsZS4KKwogMjAxMS0wNC0y
NSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg0ODY0LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHJldmlzaW9uIDg0ODU1KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDE1ICs4MiwyMCBAQCBwdWJsaWM6CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNs
YXNzIEFwcGx5UHJvcGVydHlEZWZhdWx0IDogcHVibGljIEFwcGx5UHJvcGVydHlCYXNlIHsKK2Ns
YXNzIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZSA6IHB1YmxpYyBBcHBseVByb3BlcnR5QmFzZSB7
CiBwdWJsaWM6Ci0gICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQoVCAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUKSwgVCAoKmluaXRpYWwp
KCkpCisgICAgdHlwZWRlZiBUIChSZW5kZXJTdHlsZTo6KkdldHRlckZ1bmN0aW9uKSgpIGNvbnN0
OworICAgIHR5cGVkZWYgdm9pZCAoUmVuZGVyU3R5bGU6OipTZXR0ZXJGdW5jdGlvbikoVCk7Cisg
ICAgdHlwZWRlZiBUICgqSW5pdGlhbEZ1bmN0aW9uKSgpOworCisgICAgQXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlKEdldHRlckZ1bmN0aW9uIGdldHRlciwgU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBJ
bml0aWFsRnVuY3Rpb24gaW5pdGlhbCkKICAgICAgICAgOiBtX2dldHRlcihnZXR0ZXIpCiAgICAg
ICAgICwgbV9zZXR0ZXIoc2V0dGVyKQogICAgICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAg
IHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKSBjb25zdAogICAgIHsKICAgICAgICAgKHNlbGVj
dG9yLT5zdHlsZSgpLT4qbV9zZXR0ZXIpKChzZWxlY3Rvci0+cGFyZW50U3R5bGUoKS0+Km1fZ2V0
dGVyKSgpKTsKQEAgLTEwMSwyNyArMTA2LDQzIEBAIHB1YmxpYzoKICAgICAgICAgKHNlbGVjdG9y
LT5zdHlsZSgpLT4qbV9zZXR0ZXIpKCgqbV9pbml0aWFsKSgpKTsKICAgICB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUq
IHZhbHVlKSBjb25zdAorcHJvdGVjdGVkOgorICAgIEdldHRlckZ1bmN0aW9uIG1fZ2V0dGVyOwor
ICAgIFNldHRlckZ1bmN0aW9uIG1fc2V0dGVyOworICAgIEluaXRpYWxGdW5jdGlvbiBtX2luaXRp
YWw7Cit9OworCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgQXBwbHlQcm9wZXJ0eURl
ZmF1bHQgOiBwdWJsaWMgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFQ+IHsKK3B1YmxpYzoKKyAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdCh0eXBlbmFtZSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
VD46OkdldHRlckZ1bmN0aW9uIGdldHRlciwgdHlwZW5hbWUgQXBwbHlQcm9wZXJ0eURlZmF1bHRC
YXNlPFQ+OjpTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIHR5cGVuYW1lIEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxUPjo6SW5pdGlhbEZ1bmN0aW9uIGluaXRpYWwpCisgICAgICAgIDogQXBwbHlQcm9w
ZXJ0eURlZmF1bHRCYXNlPFQ+KGdldHRlciwgc2V0dGVyLCBpbml0aWFsKQogICAgIHsKLSAgICAg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICAoc2VsZWN0b3It
PnN0eWxlKCktPiptX3NldHRlcikoKihzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKSkpOwogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIFQgKFJlbmRlclN0eWxlOjoqbV9nZXR0
ZXIpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCk7Ci0gICAg
VCAoKm1faW5pdGlhbCkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAoc2VsZWN0b3ItPnN0
eWxlKCktPipBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8VD46Om1fc2V0dGVyKSgqc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOworICAgIH0KIH07CiAKLS8vIENTU1Byb3Bl
cnR5Q29sb3IKIGNsYXNzIEFwcGx5UHJvcGVydHlDb2xvckJhc2UgOiBwdWJsaWMgQXBwbHlQcm9w
ZXJ0eUJhc2UgewogcHVibGljOgotICAgIEFwcGx5UHJvcGVydHlDb2xvckJhc2UoY29uc3QgQ29s
b3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgY29uc3QgQ29sb3ImIChSZW5kZXJT
dHlsZTo6KmRlZmF1bHRWYWx1ZSkoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KGNvbnN0IENvbG9yJikpCisgICAgdHlwZWRlZiBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoq
Q29sb3JHZXR0ZXJGdW5jdGlvbikoKSBjb25zdDsKKyAgICB0eXBlZGVmIGNvbnN0IENvbG9yJiAo
UmVuZGVyU3R5bGU6OipDb2xvckRlZmF1bHRWYWx1ZUZ1bmN0aW9uKSgpIGNvbnN0OworICAgIHR5
cGVkZWYgdm9pZCAoUmVuZGVyU3R5bGU6OipDb2xvclNldHRlckZ1bmN0aW9uKShjb25zdCBDb2xv
ciYpOworCisgICAgQXBwbHlQcm9wZXJ0eUNvbG9yQmFzZShDb2xvckdldHRlckZ1bmN0aW9uIGdl
dHRlciwgQ29sb3JEZWZhdWx0VmFsdWVGdW5jdGlvbiBkZWZhdWx0VmFsdWUsIENvbG9yU2V0dGVy
RnVuY3Rpb24gc2V0dGVyKQogICAgICAgICA6IG1fZ2V0dGVyKGdldHRlcikKICAgICAgICAgLCBt
X2RlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWUpCiAgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQog
ICAgIHsKICAgICB9CisKK3Byb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0CiAgICAgewogICAgICAgICBj
b25zdCBDb2xvciYgY29sb3IgPSAoc2VsZWN0b3ItPnBhcmVudFN0eWxlKCktPiptX2dldHRlciko
KTsKQEAgLTEzMCwzMCArMTUxLDM1IEBAIHB1YmxpYzoKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgKHNlbGVjdG9yLT5zdHlsZSgpLT4qbV9zZXR0ZXIpKGNvbG9yKTsKICAgICB9CisKICAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Ip
IGNvbnN0CiAgICAgewogICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgKHNlbGVjdG9yLT5z
dHlsZSgpLT4qbV9zZXR0ZXIpKGNvbG9yKTsKICAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAg
ICAgICAoc2VsZWN0b3ItPnN0eWxlKCktPiptX3NldHRlcikoc2VsZWN0b3ItPmdldENvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKSk7
CiAgICAgfQotcHJvdGVjdGVkOgotICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dl
dHRlcikoKSBjb25zdDsKLSAgICBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqbV9kZWZhdWx0
VmFsdWUpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3Qg
Q29sb3ImKTsKKworICAgIENvbG9yR2V0dGVyRnVuY3Rpb24gbV9nZXR0ZXI7CisgICAgQ29sb3JE
ZWZhdWx0VmFsdWVGdW5jdGlvbiBtX2RlZmF1bHRWYWx1ZTsKKyAgICBDb2xvclNldHRlckZ1bmN0
aW9uIG1fc2V0dGVyOwogfTsKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbG9yIDogcHVibGljIEFw
cGx5UHJvcGVydHlDb2xvckJhc2UgewogcHVibGljOgotICAgIEFwcGx5UHJvcGVydHlDb2xvcihj
b25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJT
dHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgQ29sb3IgKCppbml0aWFsVmFsdWUpKCkpCisg
ICAgdHlwZWRlZiBDb2xvciAoKkNvbG9ySW5pdGlhbFZhbHVlRnVuY3Rpb24pKCk7CisKKyAgICBB
cHBseVByb3BlcnR5Q29sb3IoQ29sb3JHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIENvbG9yU2V0dGVy
RnVuY3Rpb24gc2V0dGVyLCBDb2xvckluaXRpYWxWYWx1ZUZ1bmN0aW9uIGluaXRpYWxWYWx1ZSkK
ICAgICAgICAgOiBBcHBseVByb3BlcnR5Q29sb3JCYXNlKGdldHRlciwgMCwgc2V0dGVyKQogICAg
ICAgICAsIG1faW5pdGlhbFZhbHVlKGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgfQogCitwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvcikgY29uc3QKICAgICB7CiAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1f
c2V0dGVyKShtX2luaXRpYWxWYWx1ZSgpKTsKQEAgLTE3MCwxNyArMTk2LDE4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIEFwcGx5UHJvcGVydHlDb2xvckJhc2U6OmFwcGx5VmFsdWUoc2VsZWN0b3Is
IHZhbHVlKTsKICAgICB9CiBwcm90ZWN0ZWQ6Ci0gICAgQ29sb3IgKCptX2luaXRpYWxWYWx1ZSko
KTsKKyAgICBDb2xvckluaXRpYWxWYWx1ZUZ1bmN0aW9uIG1faW5pdGlhbFZhbHVlOwogfTsKIAog
Ly8gQ1NTUHJvcGVydHlEaXJlY3Rpb24KIGNsYXNzIEFwcGx5UHJvcGVydHlEaXJlY3Rpb24gOiBw
dWJsaWMgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVjdGlvbj4gewogcHVibGljOgotICAg
IEFwcGx5UHJvcGVydHlEaXJlY3Rpb24oVGV4dERpcmVjdGlvbiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUZXh0RGlyZWN0aW9uKSwg
VGV4dERpcmVjdGlvbiAoKmluaXRpYWwpKCkpCisgICAgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbihH
ZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIFNldHRlckZ1bmN0aW9uIHNldHRlciwgSW5pdGlhbEZ1bmN0
aW9uIGluaXRpYWwpCiAgICAgICAgIDogQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVjdGlv
bj4oZ2V0dGVyLCBzZXR0ZXIsIGluaXRpYWwpCiAgICAgewogICAgIH0KIAorcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NT
VmFsdWUqIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8
VGV4dERpcmVjdGlvbj46OmFwcGx5VmFsdWUoc2VsZWN0b3IsIHZhbHVlKTsKQEAgLTIxMCw2ICsy
MzcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0CiAg
ICAgewogICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzZWxlY3Rvci0+c3R5bGUoKS0+
Km1fYWNjZXNzTGF5ZXJzKSgpOwpAQCAtMjgzLDYgKzMxMSw0NSBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCAoQ1NTU3R5bGVTZWxlY3Rvcjo6Km1fbWFwRmlsbCkoQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiwgQ1NTVmFsdWUqKTsKIH07CiAKK2NsYXNzIEFwcGx5UHJvcGVydHlXaWR0aCA6IHB1Ymxp
YyBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8dW5zaWduZWQgc2hvcnQ+IHsKK3B1YmxpYzoKKyAg
ICBBcHBseVByb3BlcnR5V2lkdGgoR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBTZXR0ZXJGdW5jdGlv
biBzZXR0ZXIsIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsKQorICAgICAgICA6IEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTx1bnNpZ25lZCBzaG9ydD4oZ2V0dGVyLCBzZXR0ZXIsIGluaXRpYWwpCisg
ICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWYWx1ZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBzaG9ydCB3aWR0aDsKKyAg
ICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICBjYXNl
IENTU1ZhbHVlVGhpbjoKKyAgICAgICAgICAgIHdpZHRoID0gMTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICAgICAgd2lkdGggPSAzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGljazoKKyAgICAgICAg
ICAgIHdpZHRoID0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVl
SW52YWxpZDoKKyAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGhTaG9ydChzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5bGUoKSwg
c2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICAvLyBDU1My
IGJveCBtb2RlbCBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSBsZW5ndGhzIGZvciBib3JkZXJzLgor
ICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVyKSh3aWR0aCk7
CisgICAgfQorfTsKKwogY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5JiBDU1NTdHlsZUFwcGx5
UHJvcGVydHk6OnNoYXJlZENTU1N0eWxlQXBwbHlQcm9wZXJ0eSgpCiB7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDU1NTdHlsZUFwcGx5UHJvcGVydHksIGNzc1N0eWxlQXBwbHlQcm9wZXJ0eUlu
c3RhbmNlLCAoKSk7CkBAIC0zNjksNiArNDM2LDEzIEBAIENTU1N0eWxlQXBwbHlQcm9wZXJ0eTo6
Q1NTU3R5bGVBcHBseVByb3AKICAgICBzZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tU3R5bGUsIG5ldyBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGU+KCZSZW5k
ZXJTdHlsZTo6Ym9yZGVyQm90dG9tU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9t
U3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlKSk7CiAgICAgc2V0UHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSwgbmV3IEFwcGx5UHJvcGVydHlEZWZh
dWx0PEVCb3JkZXJTdHlsZT4oJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0U3R5bGUsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVyTGVmdFN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHls
ZSkpOwogCisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCBu
ZXcgQXBwbHlQcm9wZXJ0eVdpZHRoKCZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlcldp
ZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgs
IG5ldyBBcHBseVByb3BlcnR5V2lkdGgoJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodFdpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
cmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bVdpZHRoLCBuZXcgQXBwbHlQcm9wZXJ0eVdpZHRoKCZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9t
V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJv
cmRlckxlZnRXaWR0aCwgbmV3IEFwcGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6OmJvcmRl
ckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eU91dGxpbmVXaWR0aCwgbmV3IEFwcGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6Om91dGxp
bmVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtblJ1bGVXaWR0aCwgbmV3IEFwcGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6OmNv
bHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEJvcmRlcldpZHRoKSk7CisKICAgICBzZXRQcm9wZXJ0eVZhbHVlKENTU1By
b3BlcnR5T3V0bGluZUNvbG9yLCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yQmFzZSgmUmVuZGVyU3R5
bGU6Om91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRP
dXRsaW5lQ29sb3IpKTsKIAogICAgIHNldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlPdmVyZmxv
d1gsIG5ldyBBcHBseVByb3BlcnR5RGVmYXVsdDxFT3ZlcmZsb3c+KCZSZW5kZXJTdHlsZTo6b3Zl
cmZsb3dYLCAmUmVuZGVyU3R5bGU6OnNldE92ZXJmbG93WCwgJlJlbmRlclN0eWxlOjppbml0aWFs
T3ZlcmZsb3dYKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CShyZXZpc2lvbiA4NDg1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4Niw3OSArMzg4Niw2IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotLy8g
bGVuZ3RoCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21XaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
blJ1bGVXaWR0aDoKLSAgICB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAg
IEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgYm9yZGVyVG9w
V2lkdGgsIEJvcmRlclRvcFdpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChD
U1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsIGJvcmRlclJpZ2h0V2lkdGgsIEJvcmRlclJpZ2h0
V2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tV2lkdGgsIGJvcmRlckJvdHRvbVdpZHRoLCBCb3JkZXJCb3R0b21XaWR0aCkKLSAgICAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIGJv
cmRlckxlZnRXaWR0aCwgQm9yZGVyTGVmdFdpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSEVS
SVRfQ09ORChDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aCwgb3V0bGluZVdpZHRoLCBPdXRsaW5lV2lk
dGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uUnVsZVdpZHRoLCBjb2x1bW5SdWxlV2lkdGgsIENvbHVtblJ1bGVXaWR0aCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpIHsKLSAg
ICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRl
clRvcFdpZHRoLCBCb3JkZXJUb3BXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAgICAgICBIQU5E
TEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBC
b3JkZXJSaWdodFdpZHRoLCBCb3JkZXJXaWR0aCkKLSAgICAgICAgICAgIEhBTkRMRV9JTklUSUFM
X0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBCb3JkZXJCb3R0
b21XaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJ
VEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIEJvcmRlckxlZnRXaWR0aCwgQm9y
ZGVyV2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NT
UHJvcGVydHlPdXRsaW5lV2lkdGgsIE91dGxpbmVXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAg
ICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlV2lkdGgsIENvbHVtblJ1bGVXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBzaG9ydCB3aWR0aCA9IDM7Ci0gICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaW46
Ci0gICAgICAgICAgICB3aWR0aCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU1lZGl1bToKLSAgICAgICAgICAgIHdpZHRoID0gMzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVGhpY2s6Ci0gICAgICAgICAgICB3aWR0aCA9IDU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6Ci0gICAg
ICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQoc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHdpZHRoIDwgMCkgcmV0dXJuOwotICAgICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEJvcmRlclRvcFdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
cmRlclJpZ2h0V2lkdGgod2lkdGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aDoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
cmRlckJvdHRvbVdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9y
ZGVyTGVmdFdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1Byb3BlcnR5T3V0bGluZVdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGluZVdp
ZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uUnVsZVdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVs
ZVdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzogewogICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgICAgIGlmIChpc0luaGVyaXQpIApAQCAtNjA0Myw2ICs1OTcwLDEyIEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRTdHlsZToKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGg6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJMZWZ0V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlPdXRsaW5lQ29sb3I6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xv
cjoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDg0ODU1KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDYgKzExNiw3IEBAIHB1YmxpYzoKIAogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CiAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5
bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7
IH0KICAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsg
fQogCiAgICAgcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91391</attachid>
            <date>2011-04-27 17:44:11 -0700</date>
            <delta_ts>2011-04-27 18:35:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59414-20110428104408.patch</filename>
            <type>text/plain</type>
            <size>11685</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwCShy
ZXZpc2lvbiA4NTExOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVy
dHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxOSArODIsMjAgQEAgcHVibGljOgogfTsKIAog
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCA6IHB1Ymxp
YyBBcHBseVByb3BlcnR5QmFzZSB7CitjbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2UgOiBw
dWJsaWMgQXBwbHlQcm9wZXJ0eUJhc2UgewogcHVibGljOgogICAgIHR5cGVkZWYgVCAoUmVuZGVy
U3R5bGU6OipHZXR0ZXJGdW5jdGlvbikoKSBjb25zdDsKICAgICB0eXBlZGVmIHZvaWQgKFJlbmRl
clN0eWxlOjoqU2V0dGVyRnVuY3Rpb24pKFQpOwogICAgIHR5cGVkZWYgVCAoKkluaXRpYWxGdW5j
dGlvbikoKTsKIAotICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0KEdldHRlckZ1bmN0aW9uIGdldHRl
ciwgU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbCkKKyAgICBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2UoR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBTZXR0ZXJGdW5j
dGlvbiBzZXR0ZXIsIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsKQogICAgICAgICA6IG1fZ2V0dGVy
KGdldHRlcikKICAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCiAgICAgICAgICwgbV9pbml0aWFs
KGluaXRpYWwpCiAgICAgewogICAgIH0KIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0CiAgICAgewog
ICAgICAgICAoc2VsZWN0b3ItPnN0eWxlKCktPiptX3NldHRlcikoKHNlbGVjdG9yLT5wYXJlbnRT
dHlsZSgpLT4qbV9nZXR0ZXIpKCkpOwpAQCAtMTA1LDE5ICsxMDYsMjkgQEAgcHVibGljOgogICAg
ICAgICAoc2VsZWN0b3ItPnN0eWxlKCktPiptX3NldHRlcikoKCptX2luaXRpYWwpKCkpOwogICAg
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAodmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0
dGVyKSgqKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKSk7Ci0gICAgfQot
CiBwcm90ZWN0ZWQ6CiAgICAgR2V0dGVyRnVuY3Rpb24gbV9nZXR0ZXI7CiAgICAgU2V0dGVyRnVu
Y3Rpb24gbV9zZXR0ZXI7CiAgICAgSW5pdGlhbEZ1bmN0aW9uIG1faW5pdGlhbDsKIH07CiAKLS8v
IENTU1Byb3BlcnR5Q29sb3IKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBBcHBseVBy
b3BlcnR5RGVmYXVsdCA6IHB1YmxpYyBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8VD4geworcHVi
bGljOgorICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0KHR5cGVuYW1lIEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxUPjo6R2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCB0eXBlbmFtZSBBcHBseVByb3BlcnR5
RGVmYXVsdEJhc2U8VD46OlNldHRlckZ1bmN0aW9uIHNldHRlciwgdHlwZW5hbWUgQXBwbHlQcm9w
ZXJ0eURlZmF1bHRCYXNlPFQ+OjpJbml0aWFsRnVuY3Rpb24gaW5pdGlhbCkKKyAgICAgICAgOiBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2U8VD4oZ2V0dGVyLCBzZXR0ZXIsIGluaXRpYWwpCisgICAg
eworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBhcHBseVZhbHVlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIChzZWxlY3Rv
ci0+c3R5bGUoKS0+KkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxUPjo6bV9zZXR0ZXIpKCpzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSk7CisgICAgfQorfTsKKwogY2xhc3Mg
QXBwbHlQcm9wZXJ0eUNvbG9yIDogcHVibGljIEFwcGx5UHJvcGVydHlCYXNlIHsKIHB1YmxpYzoK
ICAgICB0eXBlZGVmIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipHZXR0ZXJGdW5jdGlvbiko
KSBjb25zdDsKQEAgLTEzMyw2ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IpIGNvbnN0CiAgICAgewogICAgICAgICBjb25zdCBDb2xvciYgY29sb3IgPSAo
c2VsZWN0b3ItPnBhcmVudFN0eWxlKCktPiptX2dldHRlcikoKTsKQEAgLTE1MSw2ICsxNjMsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CiAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAg
ICAgIGlmIChtX2luaXRpYWwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVDdXJyZW50Y29sb3IpCiAgICAgICAgICAgICBhcHBseUluaGVyaXRWYWx1ZShzZWxlY3Rvcik7
CkBAIC0xNTgsNyArMTcxLDYgQEAgcHVibGljOgogICAgICAgICAgICAgKHNlbGVjdG9yLT5zdHls
ZSgpLT4qbV9zZXR0ZXIpKHNlbGVjdG9yLT5nZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmlt
aXRpdmVWYWx1ZSkpOwogICAgIH0KIAotcHJpdmF0ZToKICAgICBHZXR0ZXJGdW5jdGlvbiBtX2dl
dHRlcjsKICAgICBTZXR0ZXJGdW5jdGlvbiBtX3NldHRlcjsKICAgICBEZWZhdWx0RnVuY3Rpb24g
bV9kZWZhdWx0OwpAQCAtMTY4LDExICsxODAsMTIgQEAgcHJpdmF0ZToKIC8vIENTU1Byb3BlcnR5
RGlyZWN0aW9uCiBjbGFzcyBBcHBseVByb3BlcnR5RGlyZWN0aW9uIDogcHVibGljIEFwcGx5UHJv
cGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24+IHsKIHB1YmxpYzoKLSAgICBBcHBseVByb3BlcnR5
RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVGV4dERpcmVjdGlvbiksIFRleHREaXJlY3Rpb24g
KCppbml0aWFsKSgpKQorICAgIEFwcGx5UHJvcGVydHlEaXJlY3Rpb24oR2V0dGVyRnVuY3Rpb24g
Z2V0dGVyLCBTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsKQog
ICAgICAgICA6IEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24+KGdldHRlciwgc2V0
dGVyLCBpbml0aWFsKQogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24+
OjphcHBseVZhbHVlKHNlbGVjdG9yLCB2YWx1ZSk7CkBAIC0yMDIsNiArMjE1LDcgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKSBjb25zdAogICAgIHsKICAgICAgICAg
RmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc2VsZWN0b3ItPnN0eWxlKCktPiptX2FjY2Vzc0xheWVy
cykoKTsKQEAgLTI3NSw2ICsyODksNDUgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgKENTU1N0eWxl
U2VsZWN0b3I6OiptX21hcEZpbGwpKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVl
Kik7CiB9OwogCitjbGFzcyBBcHBseVByb3BlcnR5V2lkdGggOiBwdWJsaWMgQXBwbHlQcm9wZXJ0
eURlZmF1bHRCYXNlPHVuc2lnbmVkIHNob3J0PiB7CitwdWJsaWM6CisgICAgQXBwbHlQcm9wZXJ0
eVdpZHRoKEdldHRlckZ1bmN0aW9uIGdldHRlciwgU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBJbml0
aWFsRnVuY3Rpb24gaW5pdGlhbCkKKyAgICAgICAgOiBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
dW5zaWduZWQgc2hvcnQ+KGdldHRlciwgc2V0dGVyLCBpbml0aWFsKQorICAgIHsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgc2hvcnQgd2lkdGg7CisgICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaW46
CisgICAgICAgICAgICB3aWR0aCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU1lZGl1bToKKyAgICAgICAgICAgIHdpZHRoID0gMzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlVGhpY2s6CisgICAgICAgICAgICB3aWR0aCA9IDU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6CisgICAg
ICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQoc2VsZWN0
b3ItPnN0eWxlKCksIHNlbGVjdG9yLT5yb290RWxlbWVudFN0eWxlKCksIHNlbGVjdG9yLT5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgLy8gQ1NTMiBib3ggbW9kZWwgZG9l
cyBub3QgYWxsb3cgbmVnYXRpdmUgbGVuZ3RocyBmb3IgYm9yZGVycy4KKyAgICAgICAgICAgIGlm
ICh3aWR0aCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAoc2VsZWN0b3ItPnN0eWxlKCktPiptX3NldHRlcikod2lkdGgpOworICAgIH0KK307CisK
IGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgQ1NTU3R5bGVBcHBseVByb3BlcnR5OjpzaGFy
ZWRDU1NTdHlsZUFwcGx5UHJvcGVydHkoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ1NT
U3R5bGVBcHBseVByb3BlcnR5LCBjc3NTdHlsZUFwcGx5UHJvcGVydHlJbnN0YW5jZSwgKCkpOwpA
QCAtMzU4LDYgKzQxMSwxMyBAQCBDU1NTdHlsZUFwcGx5UHJvcGVydHk6OkNTU1N0eWxlQXBwbHlQ
cm9wCiAgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlLCBu
ZXcgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlPigmUmVuZGVyU3R5bGU6OmJvcmRl
ckJvdHRvbVN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVN0eWxlLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZSkpOwogICAgIHNldFByb3BlcnR5VmFsdWUoQ1NTUHJv
cGVydHlCb3JkZXJMZWZ0U3R5bGUsIG5ldyBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5
bGU+KCZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRl
ckxlZnRTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGUpKTsKIAorICAgIHNl
dFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgbmV3IEFwcGx5UHJvcGVy
dHlXaWR0aCgmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJv
cmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCkpOworICAgIHNl
dFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBuZXcgQXBwbHlQcm9w
ZXJ0eVdpZHRoKCZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpz
ZXRCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCkpOwor
ICAgIHNldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgbmV3IEFw
cGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJX
aWR0aCkpOworICAgIHNldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgs
IG5ldyBBcHBseVByb3BlcnR5V2lkdGgoJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3Jk
ZXJXaWR0aCkpOworICAgIHNldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgs
IG5ldyBBcHBseVByb3BlcnR5V2lkdGgoJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0
aCkpOworICAgIHNldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lk
dGgsIG5ldyBBcHBseVByb3BlcnR5V2lkdGgoJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlV2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxC
b3JkZXJXaWR0aCkpOworCiAgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eU91dGxpbmVD
b2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcigmUmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3IpKTsKIAog
ICAgIHNldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlPdmVyZmxvd1gsIG5ldyBBcHBseVByb3Bl
cnR5RGVmYXVsdDxFT3ZlcmZsb3c+KCZSZW5kZXJTdHlsZTo6b3ZlcmZsb3dYLCAmUmVuZGVyU3R5
bGU6OnNldE92ZXJmbG93WCwgJlJlbmRlclN0eWxlOjppbml0aWFsT3ZlcmZsb3dYKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA4NTExOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzg3Miw3OSArMzg3Miw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotLy8gbGVuZ3RoCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5l
V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0aDoKLSAgICB7
Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NP
TkQoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgYm9yZGVyVG9wV2lkdGgsIEJvcmRlclRvcFdp
ZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eUJvcmRlclJp
Z2h0V2lkdGgsIGJvcmRlclJpZ2h0V2lkdGgsIEJvcmRlclJpZ2h0V2lkdGgpCi0gICAgICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsIGJvcmRl
ckJvdHRvbVdpZHRoLCBCb3JkZXJCb3R0b21XaWR0aCkKLSAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0NPTkQoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIGJvcmRlckxlZnRXaWR0aCwgQm9y
ZGVyTGVmdFdpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0
eU91dGxpbmVXaWR0aCwgb3V0bGluZVdpZHRoLCBPdXRsaW5lV2lkdGgpCi0gICAgICAgICAgICBI
QU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoLCBjb2x1
bW5SdWxlV2lkdGgsIENvbHVtblJ1bGVXaWR0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIEhBTkRMRV9J
TklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCBCb3JkZXJU
b3BXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJ
VEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBCb3JkZXJSaWdodFdpZHRoLCBC
b3JkZXJXaWR0aCkKLSAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBCb3JkZXJCb3R0b21XaWR0aCwgQm9yZGVyV2lk
dGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0V2lkdGgsIEJvcmRlckxlZnRXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAg
ICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlPdXRsaW5lV2lk
dGgsIE91dGxpbmVXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElB
TF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGgsIENvbHVt
blJ1bGVXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBzaG9ydCB3aWR0aCA9IDM7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaW46Ci0gICAgICAgICAgICB3aWR0
aCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU1lZGl1bToK
LSAgICAgICAgICAgIHdpZHRoID0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlVGhpY2s6Ci0gICAgICAgICAgICB3aWR0aCA9IDU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6Ci0gICAgICAgICAgICB3aWR0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoIDwgMCkg
cmV0dXJuOwotICAgICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJUb3BXaWR0aDoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcFdpZHRoKHdp
ZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRXaWR0aDoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclJpZ2h0V2lkdGgod2lk
dGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21XaWR0aDoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckJvdHRvbVdpZHRoKHdp
ZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
TGVmdFdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyTGVmdFdpZHRoKHdpZHRo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVdp
ZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGluZVdpZHRoKHdpZHRoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdp
ZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVdpZHRoKHdpZHRoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Rm9udFNtb290aGluZzogewogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGlmIChpc0luaGVy
aXQpIApAQCAtNjAyOSw2ICs1OTU2LDEyIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eShpbnQKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZToKICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlckxlZnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Q29sdW1uUnVsZVdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDg1MTE5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxl
LmdldCgpOyB9CiAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KICAgICAgICAgRWxlbWVu
dCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogCiAgICAgcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91402</attachid>
            <date>2011-04-27 18:35:27 -0700</date>
            <delta_ts>2011-04-28 19:25:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59414-20110428113525.patch</filename>
            <type>text/plain</type>
            <size>12899</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MTE5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDQtMjcgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgQ1NTIGJvcmRlciB3aWR0aCBh
bmQgcmVsYXRlZCBwcm9wZXJ0aWVzIGluIENTU1N0eWxlQXBwbHlQcm9wZXJ0eS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NDE0CisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGFzIG5vIGZ1bmN0aW9uYWxpdHkgYWRkZWQuCisKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcDoKKyAgICAgICAgU2VwYXJhdGVkIEFwcGx5UHJvcGVy
dHlEZWZhdWx0IGludG8gcGFyZW50IGFuZCBjaGlsZCBzbyB0aGF0IG90aGVyIGNsYXNzZXMgY291
bGQgaW5oZXJpdAorICAgICAgICB0aGUgYXBwbHlJbmhlcml0VmFsdWUgYW5kIGFwcGx5SW5pdGlh
bFZhbHVlIG1ldGhvZHMgb25seS4KKyAgICAgICAgVGhpcyB3YXMgbmVjZXNzYXJ5IHRvIGF2b2lk
IGNhc3RpbmcgZnJvbSBDU1NQcmltaXRpdmVWYWx1ZSB0byBpbmFwcHJvcHJpYXRlIHR5cGVzIGlu
IEFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVlKCkuCisgICAgICAgIAorICAgICAgICBB
ZGRlZCBBcHBseVByb3BlcnR5V2lkdGggY2xhc3MgZm9yIGhhbmRsaW5nIHdpZHRoIGJhc2VkIENT
UyBwcm9wZXJ0aWVzLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgUmVtb3ZlZCBuby1sb25nZXItcmVxdWlyZWQgY29kZSBmb3IgaGFuZGxpbmcgd2lkdGggYmFz
ZWQgQ1NTIHByb3BlcnRpZXMuCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAg
ICAgICAgQWRkZWQgYSBnZXR0ZXIgZm9yIG1fcm9vdEVsZW1lbnRTdHlsZS4KKwogMjAxMS0wNC0x
OSAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBUb255IENoYW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQ
cm9wZXJ0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBw
bHlQcm9wZXJ0eS5jcHAJKHJldmlzaW9uIDg1MTE5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDE5ICs4MiwyMCBA
QCBwdWJsaWM6CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIEFwcGx5UHJvcGVy
dHlEZWZhdWx0IDogcHVibGljIEFwcGx5UHJvcGVydHlCYXNlIHsKK2NsYXNzIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZSA6IHB1YmxpYyBBcHBseVByb3BlcnR5QmFzZSB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBUIChSZW5kZXJTdHlsZTo6KkdldHRlckZ1bmN0aW9uKSgpIGNvbnN0OwogICAgIHR5
cGVkZWYgdm9pZCAoUmVuZGVyU3R5bGU6OipTZXR0ZXJGdW5jdGlvbikoVCk7CiAgICAgdHlwZWRl
ZiBUICgqSW5pdGlhbEZ1bmN0aW9uKSgpOwogCi0gICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQoR2V0
dGVyRnVuY3Rpb24gZ2V0dGVyLCBTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIEluaXRpYWxGdW5jdGlv
biBpbml0aWFsKQorICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZShHZXR0ZXJGdW5jdGlvbiBn
ZXR0ZXIsIFNldHRlckZ1bmN0aW9uIHNldHRlciwgSW5pdGlhbEZ1bmN0aW9uIGluaXRpYWwpCiAg
ICAgICAgIDogbV9nZXR0ZXIoZ2V0dGVyKQogICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKICAg
ICAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICB7CiAgICAgfQogCitwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
cikgY29uc3QKICAgICB7CiAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVyKSgo
c2VsZWN0b3ItPnBhcmVudFN0eWxlKCktPiptX2dldHRlcikoKSk7CkBAIC0xMDUsMTkgKzEwNiwy
OSBAQCBwdWJsaWM6CiAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVyKSgoKm1f
aW5pdGlhbCkoKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgKHNlbGVjdG9y
LT5zdHlsZSgpLT4qbV9zZXR0ZXIpKCooc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSkpKTsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICBHZXR0ZXJGdW5jdGlvbiBtX2dldHRl
cjsKICAgICBTZXR0ZXJGdW5jdGlvbiBtX3NldHRlcjsKICAgICBJbml0aWFsRnVuY3Rpb24gbV9p
bml0aWFsOwogfTsKIAotLy8gQ1NTUHJvcGVydHlDb2xvcgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK2NsYXNzIEFwcGx5UHJvcGVydHlEZWZhdWx0IDogcHVibGljIEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxUPiB7CitwdWJsaWM6CisgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQodHlwZW5hbWUg
QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFQ+OjpHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIHR5cGVu
YW1lIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxUPjo6U2V0dGVyRnVuY3Rpb24gc2V0dGVyLCB0
eXBlbmFtZSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8VD46OkluaXRpYWxGdW5jdGlvbiBpbml0
aWFsKQorICAgICAgICA6IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxUPihnZXR0ZXIsIHNldHRl
ciwgaW5pdGlhbCkKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAg
ICAgICAgICAgKHNlbGVjdG9yLT5zdHlsZSgpLT4qQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFQ+
OjptX3NldHRlcikoKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKTsKKyAg
ICB9Cit9OworCiBjbGFzcyBBcHBseVByb3BlcnR5Q29sb3IgOiBwdWJsaWMgQXBwbHlQcm9wZXJ0
eUJhc2UgewogcHVibGljOgogICAgIHR5cGVkZWYgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6
KkdldHRlckZ1bmN0aW9uKSgpIGNvbnN0OwpAQCAtMTMzLDYgKzE0NCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogCitwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvcikgY29uc3QKICAgICB7CiAgICAgICAgIGNvbnN0
IENvbG9yJiBjb2xvciA9IChzZWxlY3Rvci0+cGFyZW50U3R5bGUoKS0+Km1fZ2V0dGVyKSgpOwpA
QCAtMTUxLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKG1faW5pdGlhbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKICAgICAgICAgICAgIGFwcGx5SW5oZXJp
dFZhbHVlKHNlbGVjdG9yKTsKQEAgLTE1OCw3ICsxNzEsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAoc2VsZWN0b3ItPnN0eWxlKCktPiptX3NldHRlcikoc2VsZWN0b3ItPmdldENvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKSk7CiAgICAgfQogCi1wcml2YXRlOgogICAgIEdl
dHRlckZ1bmN0aW9uIG1fZ2V0dGVyOwogICAgIFNldHRlckZ1bmN0aW9uIG1fc2V0dGVyOwogICAg
IERlZmF1bHRGdW5jdGlvbiBtX2RlZmF1bHQ7CkBAIC0xNjgsMTEgKzE4MCwxMiBAQCBwcml2YXRl
OgogLy8gQ1NTUHJvcGVydHlEaXJlY3Rpb24KIGNsYXNzIEFwcGx5UHJvcGVydHlEaXJlY3Rpb24g
OiBwdWJsaWMgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVjdGlvbj4gewogcHVibGljOgot
ICAgIEFwcGx5UHJvcGVydHlEaXJlY3Rpb24oVGV4dERpcmVjdGlvbiAoUmVuZGVyU3R5bGU6Oipn
ZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUZXh0RGlyZWN0aW9u
KSwgVGV4dERpcmVjdGlvbiAoKmluaXRpYWwpKCkpCisgICAgQXBwbHlQcm9wZXJ0eURpcmVjdGlv
bihHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIFNldHRlckZ1bmN0aW9uIHNldHRlciwgSW5pdGlhbEZ1
bmN0aW9uIGluaXRpYWwpCiAgICAgICAgIDogQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVj
dGlvbj4oZ2V0dGVyLCBzZXR0ZXIsIGluaXRpYWwpCiAgICAgewogICAgIH0KIAorcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rvciwg
Q1NTVmFsdWUqIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1
bHQ8VGV4dERpcmVjdGlvbj46OmFwcGx5VmFsdWUoc2VsZWN0b3IsIHZhbHVlKTsKQEAgLTIwMiw2
ICsyMTUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0
CiAgICAgewogICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzZWxlY3Rvci0+c3R5bGUo
KS0+Km1fYWNjZXNzTGF5ZXJzKSgpOwpAQCAtMjc1LDYgKzI4OSw0NSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCAoQ1NTU3R5bGVTZWxlY3Rvcjo6Km1fbWFwRmlsbCkoQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKIH07CiAKK2NsYXNzIEFwcGx5UHJvcGVydHlXaWR0aCA6IHB1
YmxpYyBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8dW5zaWduZWQgc2hvcnQ+IHsKK3B1YmxpYzoK
KyAgICBBcHBseVByb3BlcnR5V2lkdGgoR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBTZXR0ZXJGdW5j
dGlvbiBzZXR0ZXIsIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsKQorICAgICAgICA6IEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTx1bnNpZ25lZCBzaG9ydD4oZ2V0dGVyLCBzZXR0ZXIsIGluaXRpYWwp
CisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWYWx1ZShD
U1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBzaG9ydCB3aWR0aDsK
KyAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICBj
YXNlIENTU1ZhbHVlVGhpbjoKKyAgICAgICAgICAgIHdpZHRoID0gMTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICAgICAgd2lkdGggPSAz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGljazoKKyAgICAg
ICAgICAgIHdpZHRoID0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Zh
bHVlSW52YWxpZDoKKyAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGhTaG9ydChzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5bGUo
KSwgc2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICAvLyBD
U1MyIGJveCBtb2RlbCBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSBsZW5ndGhzIGZvciBib3JkZXJz
LgorICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVyKSh3aWR0
aCk7CisgICAgfQorfTsKKwogY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5JiBDU1NTdHlsZUFw
cGx5UHJvcGVydHk6OnNoYXJlZENTU1N0eWxlQXBwbHlQcm9wZXJ0eSgpCiB7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDU1NTdHlsZUFwcGx5UHJvcGVydHksIGNzc1N0eWxlQXBwbHlQcm9wZXJ0
eUluc3RhbmNlLCAoKSk7CkBAIC0zNTgsNiArNDExLDEzIEBAIENTU1N0eWxlQXBwbHlQcm9wZXJ0
eTo6Q1NTU3R5bGVBcHBseVByb3AKICAgICBzZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tU3R5bGUsIG5ldyBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGU+KCZS
ZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90
dG9tU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlKSk7CiAgICAgc2V0UHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSwgbmV3IEFwcGx5UHJvcGVydHlE
ZWZhdWx0PEVCb3JkZXJTdHlsZT4oJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0U3R5bGUsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJT
dHlsZSkpOwogCisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRo
LCBuZXcgQXBwbHlQcm9wZXJ0eVdpZHRoKCZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRl
cldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lk
dGgsIG5ldyBBcHBseVByb3BlcnR5V2lkdGgoJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodFdpZHRo
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVdpZHRoLCBuZXcgQXBwbHlQcm9wZXJ0eVdpZHRoKCZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90
dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eUJvcmRlckxlZnRXaWR0aCwgbmV3IEFwcGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6OmJv
cmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9w
ZXJ0eU91dGxpbmVXaWR0aCwgbmV3IEFwcGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6Om91
dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEJvcmRlcldpZHRoKSk7CisgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtblJ1bGVXaWR0aCwgbmV3IEFwcGx5UHJvcGVydHlXaWR0aCgmUmVuZGVyU3R5bGU6
OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbEJvcmRlcldpZHRoKSk7CisKICAgICBzZXRQcm9wZXJ0eVZhbHVlKENT
U1Byb3BlcnR5T3V0bGluZUNvbG9yLCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yKCZSZW5kZXJTdHls
ZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVDb2xvciwgJlJlbmRlclN0
eWxlOjpjb2xvcikpOwogCiAgICAgc2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eU92ZXJmbG93
WCwgbmV3IEFwcGx5UHJvcGVydHlEZWZhdWx0PEVPdmVyZmxvdz4oJlJlbmRlclN0eWxlOjpvdmVy
Zmxvd1gsICZSZW5kZXJTdHlsZTo6c2V0T3ZlcmZsb3dYLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxP
dmVyZmxvd1gpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHJldmlzaW9uIDg1MTE5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcyLDc5ICszODcyLDYgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0vLyBs
ZW5ndGgKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
UnVsZVdpZHRoOgotICAgIHsKLSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAg
SEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCBib3JkZXJUb3BX
aWR0aCwgQm9yZGVyVG9wV2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENT
U1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgYm9yZGVyUmlnaHRXaWR0aCwgQm9yZGVyUmlnaHRX
aWR0aCkKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21XaWR0aCwgYm9yZGVyQm90dG9tV2lkdGgsIEJvcmRlckJvdHRvbVdpZHRoKQotICAgICAg
ICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgYm9y
ZGVyTGVmdFdpZHRoLCBCb3JkZXJMZWZ0V2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9DT05EKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgsIE91dGxpbmVXaWR0
aCkKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlV2lkdGgsIGNvbHVtblJ1bGVXaWR0aCwgQ29sdW1uUnVsZVdpZHRoKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkgewotICAg
ICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5Qm9yZGVy
VG9wV2lkdGgsIEJvcmRlclRvcFdpZHRoLCBCb3JkZXJXaWR0aCkKLSAgICAgICAgICAgIEhBTkRM
RV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsIEJv
cmRlclJpZ2h0V2lkdGgsIEJvcmRlcldpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSVRJQUxf
Q09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsIEJvcmRlckJvdHRv
bVdpZHRoLCBCb3JkZXJXaWR0aCkKLSAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lU
SF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgQm9yZGVyTGVmdFdpZHRoLCBCb3Jk
ZXJXaWR0aCkKLSAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQ
cm9wZXJ0eU91dGxpbmVXaWR0aCwgT3V0bGluZVdpZHRoLCBCb3JkZXJXaWR0aCkKLSAgICAgICAg
ICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
blJ1bGVXaWR0aCwgQ29sdW1uUnVsZVdpZHRoLCBCb3JkZXJXaWR0aCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHNob3J0IHdpZHRoID0gMzsKLSAgICAgICAgc3dpdGNoIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICBjYXNlIENTU1ZhbHVlVGhpbjoK
LSAgICAgICAgICAgIHdpZHRoID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlTWVkaXVtOgotICAgICAgICAgICAgd2lkdGggPSAzOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVUaGljazoKLSAgICAgICAgICAgIHdpZHRoID0gNTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKLSAgICAg
ICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhTaG9ydChzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAod2lkdGggPCAwKSByZXR1cm47Ci0gICAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
Qm9yZGVyVG9wV2lkdGgod2lkdGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9y
ZGVyUmlnaHRXaWR0aCh3aWR0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoOgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9y
ZGVyQm90dG9tV2lkdGgod2lkdGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3Jk
ZXJMZWZ0V2lkdGgod2lkdGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlPdXRsaW5lV2lkdGg6Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRPdXRsaW5lV2lk
dGgod2lkdGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5SdWxlV2lkdGg6Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxl
V2lkdGgod2lkdGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5nOiB7CiAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAg
ICAgICAgaWYgKGlzSW5oZXJpdCkgCkBAIC02MDI5LDYgKzU5NTYsMTIgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJS
aWdodFN0eWxlOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZToKICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJUb3BXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlckxlZnRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eU91dGxpbmVDb2xvcjoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9y
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gODUxMTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NiArMTA5LDcgQEAgcHVibGljOgogCiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgICAgICBSZW5kZXJTdHls
ZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsg
fQogICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9
CiAKICAgICBwcml2YXRlOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>