<?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>89035</bug_id>
          
          <creation_ts>2012-06-13 13:59:31 -0700</creation_ts>
          <short_desc>Add flushes to CCTextureUpdater::update</short_desc>
          <delta_ts>2012-07-13 18:49:31 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>90507</dependson>
          <blocked>90325</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Brian Anderson">brianderson</reporter>
          <assigned_to name="Brian Anderson">brianderson</assigned_to>
          <cc>brianderson</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>648437</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-13 13:59:31 -0700</bug_when>
    <thetext>Add flushes to CCTextureUpdater::update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648450</commentid>
    <comment_count>1</comment_count>
      <attachid>147407</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-13 14:08:15 -0700</bug_when>
    <thetext>Created attachment 147407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648455</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-13 14:12:21 -0700</bug_when>
    <thetext>Attachment 147407 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648459</commentid>
    <comment_count>3</comment_count>
      <attachid>147407</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 14:15:37 -0700</bug_when>
    <thetext>Comment on attachment 147407
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        No new tests. (OOPS!)
&gt; 
&gt; You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]

I think we could have unit tests to verify that we flush at the rate we want to - I can help you figure out how to wrangle these if you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648482</commentid>
    <comment_count>4</comment_count>
      <attachid>147415</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-13 14:46:59 -0700</bug_when>
    <thetext>Created attachment 147415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648483</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-13 14:48:54 -0700</bug_when>
    <thetext>Attachment 147415 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648578</commentid>
    <comment_count>6</comment_count>
      <attachid>147443</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-13 16:38:07 -0700</bug_when>
    <thetext>Created attachment 147443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648579</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-13 16:41:00 -0700</bug_when>
    <thetext>Attachment 147443 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648686</commentid>
    <comment_count>8</comment_count>
      <attachid>147443</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-13 19:07:20 -0700</bug_when>
    <thetext>Comment on attachment 147443
Patch

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

Now that you have chrome android branch access, take a peek at this file there on clank/m18 branch. Its slightly different, you might be able to leverage some of the thinking there.

Not sure you&apos;re getting a lot of value out of having the periodic flush. I think you could just put the flush code inline, its really not that complex.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:97
&gt; +    if ((uploadCount % kUploadFlushPeriod) &amp;&amp; context3d)

Ouch that is hard to read. Can you decompose this so that you firs tcheck context3d and early return, then later do the flush?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:-132
&gt; -        GraphicsContext3D* context3d = context-&gt;context3D();

why deleted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651859</commentid>
    <comment_count>9</comment_count>
      <attachid>148201</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-18 16:20:05 -0700</bug_when>
    <thetext>Created attachment 148201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651867</commentid>
    <comment_count>10</comment_count>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-18 16:32:03 -0700</bug_when>
    <thetext>The latest patch adds tests to verify upload/flushing patterns.

&gt;&gt; I think you could just put the flush code inline, its really not that complex.

Forgot to address this, so this patch set doesn&apos;t put the flush code inline.  Will address this in the next patch set.  I originally ripped it out into separate functions because the logic was slightly different in the two cases, and I thought naming the cases would make it clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651871</commentid>
    <comment_count>11</comment_count>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-18 16:42:42 -0700</bug_when>
    <thetext>Some other notes:
The test doesn&apos;t address partial uploads.  If we are going to treat partial uploads differently (ie: not flushing as often, like Clank), then I&apos;ll need to update the test and flushing logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652808</commentid>
    <comment_count>12</comment_count>
      <attachid>148421</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-19 14:23:01 -0700</bug_when>
    <thetext>Created attachment 148421
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652818</commentid>
    <comment_count>13</comment_count>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-19 14:30:18 -0700</bug_when>
    <thetext>Both the test and flushing logic are ready for review now.  The both allow the regular texture uploads and the partial texture uploads to have different flush periods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652855</commentid>
    <comment_count>14</comment_count>
      <attachid>148435</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-19 14:59:04 -0700</bug_when>
    <thetext>Created attachment 148435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652866</commentid>
    <comment_count>15</comment_count>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-19 15:06:21 -0700</bug_when>
    <thetext>The last patch just updates the test combinations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656787</commentid>
    <comment_count>16</comment_count>
      <attachid>148435</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-25 12:34:17 -0700</bug_when>
    <thetext>Comment on attachment 148435
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:92
&gt; +    GraphicsContext3D* context3d = context ? context-&gt;context3D() : 0;

why would this be null?

also, why not add flush onto ccgraphicscontext?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:105
&gt; +            if (!(uploadCount % kUploadFlushPeriod))

seems like this context3d check is redundant

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:113
&gt; +        uploadCount = 0;

uploadCount-&gt;partialUploadCount

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:133
&gt; +            if (!(uploadCount % kUploadFlushPeriodPartial))

why not just use index here?

also, any reason to not just use the same constant as before?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:138
&gt; +        if (uploadCount % kUploadFlushPeriodPartial)

Whats this flush do?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656790</commentid>
    <comment_count>17</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-25 12:36:11 -0700</bug_when>
    <thetext>Also, @epenner found a bug in the scheduler that causes us to do
  scheduledActionUploadMore
  draw
  scheduledAcitonUploadMore

I&apos;m going to cc you on that. Can you please pick up that bug and fix it as a followup to this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656848</commentid>
    <comment_count>18</comment_count>
      <attachid>148435</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-25 14:15:42 -0700</bug_when>
    <thetext>Comment on attachment 148435
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:92
&gt;&gt; +    GraphicsContext3D* context3d = context ? context-&gt;context3D() : 0;
&gt; 
&gt; why would this be null?
&gt; 
&gt; also, why not add flush onto ccgraphicscontext?

It&apos;d be null in the hypothetical-but-not-yet-implemented software mode.  What would flush mean for a software renderer? Would you flush at the same rate?

Given that a software renderer might want to do texture upload throttling differently and the fact that it doesn&apos;t exist yet, I&apos;d prefer something like this (which we do in other places, e.g. ManagedTexture.cpp):

if (!context3D) {
    // FIXME: Implement this path for software compositing.
    return;
}

...and then just assuming it&apos;s not null everywhere else in this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657692</commentid>
    <comment_count>19</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-26 10:17:47 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 148435 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148435&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:92
&gt; &gt;&gt; +    GraphicsContext3D* context3d = context ? context-&gt;context3D() : 0;
&gt; &gt; 
&gt; &gt; why would this be null?
&gt; &gt; 
&gt; &gt; also, why not add flush onto ccgraphicscontext?
&gt; 
&gt; It&apos;d be null in the hypothetical-but-not-yet-implemented software mode.  What would flush mean for a software renderer? Would you flush at the same rate?

In the software-mode, we&apos;lls till want to flush. The flushing algorithm will be based on fences then so we wont have this constant-based system at all. Net/net, I think flush is still correct.



&gt; Given that a software renderer might want to do texture upload throttling differently and the fact that it doesn&apos;t exist yet, I&apos;d prefer something like this (which we do in other places, e.g. ManagedTexture.cpp):
&gt; 
&gt; if (!context3D) {
&gt;     // FIXME: Implement this path for software compositing.
&gt;     return;
&gt; }
&gt; 
&gt; ...and then just assuming it&apos;s not null everywhere else in this function.

Sorry, disagree, as noted above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657743</commentid>
    <comment_count>20</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-26 11:04:51 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 148435 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148435&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:92
&gt; &gt; &gt;&gt; +    GraphicsContext3D* context3d = context ? context-&gt;context3D() : 0;
&gt; &gt; &gt; 
&gt; &gt; &gt; why would this be null?
&gt; &gt; &gt; 
&gt; &gt; &gt; also, why not add flush onto ccgraphicscontext?
&gt; &gt; 
&gt; &gt; It&apos;d be null in the hypothetical-but-not-yet-implemented software mode.  What would flush mean for a software renderer? Would you flush at the same rate?
&gt; 
&gt; In the software-mode, we&apos;lls till want to flush. The flushing algorithm will be based on fences then so we wont have this constant-based system at all. Net/net, I think flush is still correct.

...which sounds like an entirely different texture uploader implementation?

I don&apos;t really feel strongly about this.  It just seemed more reasonable to punt until software mode was more realized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657747</commentid>
    <comment_count>21</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-26 11:08:04 -0700</bug_when>
    <thetext>&gt; ...which sounds like an entirely different texture uploader implementation?
&gt; 
&gt; I don&apos;t really feel strongly about this.  It just seemed more reasonable to punt until software mode was more realized.

Agreed. Also, I think the basic rule is &quot;keep it simple and make it work with what we ship today, not what we want to ship in the future.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657866</commentid>
    <comment_count>22</comment_count>
      <attachid>148435</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-26 12:47:46 -0700</bug_when>
    <thetext>Comment on attachment 148435
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:92
&gt;&gt;&gt;&gt;&gt; +    GraphicsContext3D* context3d = context ? context-&gt;context3D() : 0;
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; why would this be null?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; also, why not add flush onto ccgraphicscontext?
&gt;&gt;&gt; 
&gt;&gt;&gt; It&apos;d be null in the hypothetical-but-not-yet-implemented software mode.  What would flush mean for a software renderer? Would you flush at the same rate?
&gt;&gt;&gt; 
&gt;&gt;&gt; Given that a software renderer might want to do texture upload throttling differently and the fact that it doesn&apos;t exist yet, I&apos;d prefer something like this (which we do in other places, e.g. ManagedTexture.cpp):
&gt;&gt;&gt; 
&gt;&gt;&gt; if (!context3D) {
&gt;&gt;&gt;     // FIXME: Implement this path for software compositing.
&gt;&gt;&gt;     return;
&gt;&gt;&gt; }
&gt;&gt;&gt; 
&gt;&gt;&gt; ...and then just assuming it&apos;s not null everywhere else in this function.
&gt;&gt; 
&gt;&gt; In the software-mode, we&apos;lls till want to flush. The flushing algorithm will be based on fences then so we wont have this constant-based system at all. Net/net, I think flush is still correct.
&gt; 
&gt; ...which sounds like an entirely different texture uploader implementation?
&gt; 
&gt; I don&apos;t really feel strongly about this.  It just seemed more reasonable to punt until software mode was more realized.

Another reason for the null check: Removing the null check causes one or more of the webkit_unit_tests to crash. Should I fix the tests that were passing in a null context instead?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:105
&gt;&gt; +            if (!(uploadCount % kUploadFlushPeriod))
&gt; 
&gt; seems like this context3d check is redundant

Could be?  I&apos;m not sure though.  I copied the logic from line 133.  Is it possible for &quot;context-&gt;contex3D()&quot; to be null when &quot;context&quot; is not null?  If the answer is no, I&apos;ll remove the check on line 133 as well.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:113
&gt;&gt; +        uploadCount = 0;
&gt; 
&gt; uploadCount-&gt;partialUploadCount

Noted.  Will change.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:133
&gt;&gt; +            if (!(uploadCount % kUploadFlushPeriodPartial))
&gt; 
&gt; why not just use index here?
&gt; 
&gt; also, any reason to not just use the same constant as before?

Good point about using index; it&apos;s scope is outside the for loop already so I wouldn&apos;t even have to pull it out to check its final value below.

I did not use the same constant because I noticed the Clank version of the patch didn&apos;t do any flushes during the partial uploads at all until the end.  I thought using different constants for the period would give us the greatest flexibility for tweaking.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:138
&gt;&gt; +        if (uploadCount % kUploadFlushPeriodPartial)
&gt; 
&gt; Whats this flush do?

If we flush every 4th upload and upload 7 textures, this makes sure that the last three uploads are followed by a flush and aren&apos;t &quot;dangling&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657890</commentid>
    <comment_count>23</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-26 13:02:59 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 148435 [details])
&gt; Another reason for the null check: Removing the null check causes one or more of the webkit_unit_tests to crash. Should I fix the tests that were passing in a null context instead?

I understand. Lets try fixin the test or do a git blame to figure out how that original null check got added. Its strange to me to have to null check but if you can convince yourself that its null in production code, then I&apos;m okay. If its test only, then MockWebGraphicsContext is your friend here.

&gt; I did not use the same constant because I noticed the Clank version of the patch didn&apos;t do any flushes during the partial uploads at all until the end.  I thought using different constants for the period would give us the greatest flexibility for tweaking.

Ah, I get it. Lets do one value until we need more. We&apos;ll need to do a patch later anyway if we want to tweak, and then we&apos;d have hard data to justify the two values.

&gt; If we flush every 4th upload and upload 7 textures, this makes sure that the last three uploads are followed by a flush and aren&apos;t &quot;dangling&quot;.

Makes sense. Might put a comment explaining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660724</commentid>
    <comment_count>24</comment_count>
      <attachid>150239</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-06-29 13:01:09 -0700</bug_when>
    <thetext>Created attachment 150239
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662614</commentid>
    <comment_count>25</comment_count>
      <attachid>150699</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-07-03 17:49:29 -0700</bug_when>
    <thetext>Created attachment 150699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662615</commentid>
    <comment_count>26</comment_count>
      <attachid>150699</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-07-03 17:55:52 -0700</bug_when>
    <thetext>Comment on attachment 150699
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:135
&gt; +        int partialUploadCount = 0;

I didn&apos;t use index here, because there were a lot of ugly off-by-one adjustments needed without a separate partialUploadCount variable.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:51
&gt; +// Tracks method call patterns across different classes.

There are no more dependencies on gmock, but I stuck with a GlobalTracker and very simple FakeWebGraphicsContext3D and FakeTextureUploader classes that forward their calls to the global tracker.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:108
&gt; +    void verify()

I know we wanted to put these checks in the tests themselves, but the code became repetitive and long so I put the checks in a verify() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666418</commentid>
    <comment_count>27</comment_count>
      <attachid>150699</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-10 23:52:58 -0700</bug_when>
    <thetext>Comment on attachment 150699
Patch

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

Sorry, the test isn&apos;t looking quite right, yet. You&apos;ve got to do something about this global tracker, which is a non-normative design pattern. I think you can just make each of the MyXXX classess have pointers to the CCTextureUpdaterTest object and move all the GlobalTracker fields to the Test body.

You also still need to make the tests &quot;say what they&apos;re testing.&quot; Right now, they set up different situations, which is good. But they are just saying &quot;verify&quot; but its not clear what they&apos;re verifying. Maybe see what the verification code looks like when you hand-type-it-out each time? Many of the test cases dont need every single item in your verify() method to be done, too. You only need to verify things that are interestnig.

I do see that you have a lot of *very* similar cases for these remainder tests [which I dont quite grok]. For those, you could make a subclass of CCTextureUpdaterTest, eg. CCTextureUpdaterRemainderTest that has the verify function it. That would be maybe be okay.

As I note below, I&apos;m a bit worried that all the tests pass kMax to the updater. The common use case is &quot;lots of updates, and kMax=40 [or 12]&quot;. Do we have good coverage of that case?

Any idea why its not cleanly applying to ToT? Those purple indicators on the patch usually imply patch failure.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:107
&gt; +        int uploadCount = 0;

fullUploadCount?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:135
&gt;&gt; +        int partialUploadCount = 0;
&gt; 
&gt; I didn&apos;t use index here, because there were a lot of ugly off-by-one adjustments needed without a separate partialUploadCount variable.

Erm, just for my education, when does (index + 1) % kUploaderFlushPeriod go wrong?

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:142
&gt; +class MyFakeWebGraphicsContext3D : public FakeWebGraphicsContext3D {

Why not construct this with a backpointer to CCTextureUpdaterTest? Then this &quot;GlobalTracker&quot; can be the CCTextureUpdaterTest? I don&apos;t see value add in this GlobalTracker object.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:236
&gt; +    m_globalTracker.verify();

Just verify inline. This one doesn&apos;t need to verify all the pieces... here, you just need to make sure no flushes were done.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:241
&gt; +TEST_F(CCTextureUpdaterTest, OneTextureUploadA)

OneFullTextureUpload

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:246
&gt; +    m_globalTracker.verify();

Here, you want really to verify that what, one flush was done? I dont think you need any other verifications here.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:249
&gt; +TEST_F(CCTextureUpdaterTest, OneTextureUploadB)

OnePartialTexturUPload

xxxA and xxxB is not informative to a person not familiar with this code desperately trying to understand why a test is failing.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:257
&gt; +TEST_F(CCTextureUpdaterTest, OneTextureUploadC)

OnePartialOneFull

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:262
&gt; +    m_globalTracker.verify();

Again, I think the number of things you really care about here is that we did one flush, right? Or two? Or none?

By way of example, in this case, I know your code pretty well but I can&apos;t even quite remember how many flushes we do here. And, to figure out what the correct expectation is, I&apos;ve actually got to study the code in detail. Versus just reading a number.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:266
&gt; +// NO REMAINDER TESTS

You should explain what this family of tests is doing. I&apos;m a bit puzzled what you&apos;re trying to test here, I suspect it has to do with some quirk with % logic, but its not obvious to me from inspection.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:274
&gt; +    m_updater.update(m_context.get(), &amp;m_allocator, &amp;m_copier, &amp;m_uploader, kMaxUploads);

Why are you passing kMaxUploads to all of these test methods? It seems to me that somewhere, you want to pass like something smaller [like the value we pass into the updater from CCThreadProxy?]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667330</commentid>
    <comment_count>28</comment_count>
      <attachid>150699</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-07-11 19:23:38 -0700</bug_when>
    <thetext>Comment on attachment 150699
Patch

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

patch set incoming that should address the comments.  will likely need some more feedback however

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:107
&gt;&gt; +        int uploadCount = 0;
&gt; 
&gt; fullUploadCount?

fixed

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp:135
&gt;&gt;&gt; +        int partialUploadCount = 0;
&gt;&gt; 
&gt;&gt; I didn&apos;t use index here, because there were a lot of ugly off-by-one adjustments needed without a separate partialUploadCount variable.
&gt; 
&gt; Erm, just for my education, when does (index + 1) % kUploaderFlushPeriod go wrong?

&quot;(index + 1) % kUploaderFlushPeriod&quot; is correct, but then line 145 needs to be &quot;if(index % kUploadFlushPeriod)&quot;, which looks inconsistent and confusing.

Another option would be to move &quot;++index&quot; to where &quot;partialUploadCount++&quot; is, but that breaks the normal for loop flow.

In the end, I kept partialUploadCount to be consistent with fullUploadCount, but I would be fine with either of the two other options.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667333</commentid>
    <comment_count>29</comment_count>
      <attachid>151847</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-07-11 19:26:03 -0700</bug_when>
    <thetext>Created attachment 151847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668546</commentid>
    <comment_count>30</comment_count>
      <attachid>151847</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-12 20:08:25 -0700</bug_when>
    <thetext>Comment on attachment 151847
Patch

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

This looks good Brian. Thank you for putting up with all the iterations. @enne, over to you for review.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:52
&gt; +public:

You can just predeclare CCTextureUpdaterTest. Then instead of separating the decl of the notifier, put the implementation of MyFakeWGC3D::flush and anything else that dereferneces the class at the bottom of the file.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:60
&gt; +class MyFakeWebGraphicsContext3D : public FakeWebGraphicsContext3D {

WebGraphicsContext3DForUploadTest.

I think this is a stub. I know I told you fake, but I can never remember. I had to go read this again. :) And, note, we use Fake wrong in our code, because I&apos;m constantly confused. :/

http://martinfowler.com/articles/mocksArentStubs.html

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:63
&gt; +    virtual void flush(void) { m_test-&gt;onFlush(); }

implement this method at the bottom of the file

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:71
&gt; +class MyFakeTextureUploader : public FakeTextureUploader {

Shouldn&apos;t be called MyFakeTextureUploader. I gave you that, I realize, in pseudocode, but I was brain fragged. :/ You want something like TextureUploaderForUploadTest, maybe

Also a stub.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:76
&gt; +    virtual void endUploads() { m_test-&gt;onEndUploads(); }

and implement these methods at the bottom of the file

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:396
&gt; +// multiple calls to update()

End sentence with period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669065</commentid>
    <comment_count>31</comment_count>
      <attachid>151847</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-13 08:29:55 -0700</bug_when>
    <thetext>Comment on attachment 151847
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Add flushes to CCTextureUpdater::update

This is a Chromium-only bug, so please prefix the bug title with [chromium] so that other ports don&apos;t have to pay any attention to this patch.

&gt; Source/WebCore/ChangeLog:10
&gt; +        Additional information of the change such as approach, rationale. Please add per-function descriptions below (OOPS!).
&gt; +
&gt; +        No new tests (OOPS!).

You need to fill this out and remove the OOPS lines.

&gt; Source/WebKit/chromium/ChangeLog:8
&gt; +        Additional information of the change such as approach, rationale. Please add per-function descriptions below (OOPS!).

You need to fill this out too.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCGraphicsContext.h:52
&gt; +    void flush() { m_context3D-&gt;flush(); }
&gt; +

m_context3D could be null.  I think you need to if-check it here.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:167
&gt; +            else if (m_numTotalUploads &gt; m_fullUploadCountExpected
&gt; +                     &amp;&amp; m_numTotalUploads &lt; m_totalUploadCountExpected)
&gt; +                EXPECT_GE(m_numDanglingUploads, kFlushPeriodPartial) &lt;&lt; &quot;Premature flush detected in partial uploads.&quot;;

style nit: WebKit line lengths are not that restrictive.  Put the whole condition on one line for clarity.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:203
&gt; +            EXPECT_EQ(m_maxUploadCountPerUpdate, m_numPreviousUploads)
&gt; +                    &lt;&lt; &quot;endUpload() was called when there are textures to upload, but the upload quota hasn&apos;t been filled.&quot;;

style nit: Just indent with four spaces when a line is too long.

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:497
&gt; +    // Note, this is testing an implementation detail that, if the partial
&gt; +    // uploads would make us go over the max-uploads-per-update, then just
&gt; +    // defer all the partial updates. It would, however, also be valid to see
&gt; +    // 10 partial uploads in addition to the 30 full uploads.
&gt; +    expectedPreviousUploads = kFullUploads-kMaxUploadsPerUpdate;
&gt; +    EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads);
&gt; +    EXPECT_NE(expectedPreviousUploads, kMaxUploadsPerUpdate) &lt;&lt; &quot;You may actualy be okay here; consider changing the fragile test.&quot;;

Maybe just don&apos;t test this implementation detail, then? General upload behavior is tested elsewhere.

s/actualy/actually/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669566</commentid>
    <comment_count>32</comment_count>
      <attachid>152368</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-07-13 16:30:37 -0700</bug_when>
    <thetext>Created attachment 152368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669573</commentid>
    <comment_count>33</comment_count>
      <attachid>152368</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-07-13 16:33:35 -0700</bug_when>
    <thetext>Comment on attachment 152368
Patch

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

&gt; Source/WebKit/chromium/tests/CCTextureUpdaterTest.cpp:458
&gt; +    EXPECT_EQ(3,  m_numBeginUploads);

Need to remove a space after the comma.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669577</commentid>
    <comment_count>34</comment_count>
      <attachid>152370</attachid>
    <who name="Brian Anderson">brianderson</who>
    <bug_when>2012-07-13 16:35:33 -0700</bug_when>
    <thetext>Created attachment 152370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669586</commentid>
    <comment_count>35</comment_count>
      <attachid>152370</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-13 16:40:26 -0700</bug_when>
    <thetext>Comment on attachment 152370
Patch

R=me.  Looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669664</commentid>
    <comment_count>36</comment_count>
      <attachid>152370</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-13 18:49:24 -0700</bug_when>
    <thetext>Comment on attachment 152370
Patch

Clearing flags on attachment: 152370

Committed r122654: &lt;http://trac.webkit.org/changeset/122654&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669665</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-13 18:49:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147407</attachid>
            <date>2012-06-13 14:08:15 -0700</date>
            <delta_ts>2012-06-13 14:46:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120613140814.patch</filename>
            <type>text/plain</type>
            <size>3170</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTNmMTY5MjllNGZiNWZj
ZThkOWU4YzA0MjJkNGYxMmI4Y2M4M2ZmYS4uOTU1ZmUzMGQzMThjMDE4YTRjYjZhZDQ4ZjNiN2Iz
NGMyMGFiOTJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTEzICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgZmx1
c2hlcyB0byBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisKIDIwMTItMDYtMTEg
IE1pY2hhZWwgQnLDvG5pbmcgIDxtaWNoYWVsLmJydW5pbmdAbm9raWEuY29tPgogCiAgICAgICAg
IFtRdF1bV0syXSBDb21wdXRlIGFuZCBzZXQgY2FjaGUgY2FwYWNpdGllcyB1c2luZyB0aGUgY3Vy
cmVudCBDYWNoZU1vZGVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDFm
ZDBjNzM2ZWUzNDlmNzg4YWJjODk4NGVmYmU2YmZiYThiNDYyNzMuLjEyN2QxOWFjNzdmMDJjYzE3
NGEyMDBlNGViNmJmMWFhODg1NjExMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIu
Y3BwCkBAIC04Niw2ICs4NiwxMCBAQCB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShDQ0dy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsbwogewogICAgIHNp
emVfdCBpbmRleDsKIAorICAgIGludCB1cGxvYWRDb3VudCA9IDA7CisgICAgY29uc3QgaW50IGtV
cGxvYWRGbHVzaFBlcmlvZCA9IDQ7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9
IGNvbnRleHQtPmNvbnRleHQzRCgpOworCiAgICAgaWYgKG1fZW50cmllcy5zaXplKCkgfHwgbV9w
YXJ0aWFsRW50cmllcy5zaXplKCkpIHsKICAgICAgICAgaWYgKHVwbG9hZGVyLT5pc0J1c3koKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTk2LDYgKzEwMCwxMCBAQCB2b2lkIENDVGV4dHVyZVVw
ZGF0ZXI6OnVwZGF0ZShDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRv
ciogYWxsbwogICAgICAgICBmb3IgKGluZGV4ID0gbV9lbnRyeUluZGV4OyBpbmRleCA8IG1heElu
ZGV4OyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkgPSBtX2VudHJp
ZXNbaW5kZXhdOwogICAgICAgICAgICAgdXBsb2FkZXItPnVwbG9hZFRleHR1cmUoY29udGV4dCwg
ZW50cnkudGV4dHVyZSwgYWxsb2NhdG9yLCBlbnRyeS5zb3VyY2VSZWN0LCBlbnRyeS5kZXN0UmVj
dCk7CisKKyAgICAgICAgICAgIHVwbG9hZENvdW50Kys7CisgICAgICAgICAgICBpZiAoY29udGV4
dDNkICYmICEodXBsb2FkQ291bnQgJSBrVXBsb2FkRmx1c2hQZXJpb2QpKQorICAgICAgICAgICAg
ICAgIGNvbnRleHQzZC0+Zmx1c2goKTsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgbW9yZVVw
bG9hZHMgPSBtYXhJbmRleCA8IG1fZW50cmllcy5zaXplKCk7CkBAIC0xMTUsOSArMTIzLDE2IEBA
IHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvCiAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8
IG1fcGFydGlhbEVudHJpZXMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVF
bnRyeSYgZW50cnkgPSBtX3BhcnRpYWxFbnRyaWVzW2luZGV4XTsKICAgICAgICAgICAgIHVwbG9h
ZGVyLT51cGxvYWRUZXh0dXJlKGNvbnRleHQsIGVudHJ5LnRleHR1cmUsIGFsbG9jYXRvciwgZW50
cnkuc291cmNlUmVjdCwgZW50cnkuZGVzdFJlY3QpOworCisgICAgICAgICAgICB1cGxvYWRDb3Vu
dCsrOworICAgICAgICAgICAgaWYgKGNvbnRleHQzZCAmJiAhKHVwbG9hZENvdW50ICUga1VwbG9h
ZEZsdXNoUGVyaW9kKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0M2QtPmZsdXNoKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICB1cGxvYWRlci0+ZW5kVXBsb2FkcygpOworCisgICAgICAgIGlmIChj
b250ZXh0M2QgJiYgISh1cGxvYWRDb3VudCAlIGtVcGxvYWRGbHVzaFBlcmlvZCkpCisgICAgICAg
ICAgICBjb250ZXh0M2QtPmZsdXNoKCk7CiAgICAgfQogCiAgICAgZm9yIChpbmRleCA9IDA7IGlu
ZGV4IDwgbV9jb3B5RW50cmllcy5zaXplKCk7ICsraW5kZXgpIHsKQEAgLTEyOSw3ICsxNDQsNiBA
QCB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsbwogICAgIC8vIGJlZm9yZSBsZXR0aW5nIHRoZSBtYWlu
IHRocmVhZCBwcm9jZWVkIGFzIGl0IG1heSBtYWtlIGRyYXcgY2FsbHMgdG8gdGhlIHNvdXJjZSB0
ZXh0dXJlIG9mIG9uZSBvZgogICAgIC8vIG91ciBjb3B5IG9wZXJhdGlvbnMuCiAgICAgaWYgKG1f
Y29weUVudHJpZXMuc2l6ZSgpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
M2QgPSBjb250ZXh0LT5jb250ZXh0M0QoKTsKICAgICAgICAgaWYgKGNvbnRleHQzZCkKICAgICAg
ICAgICAgIGNvbnRleHQzZC0+Zmx1c2goKTsKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147415</attachid>
            <date>2012-06-13 14:46:59 -0700</date>
            <delta_ts>2012-06-13 16:38:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120613144658.patch</filename>
            <type>text/plain</type>
            <size>3169</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTNmMTY5MjllNGZiNWZj
ZThkOWU4YzA0MjJkNGYxMmI4Y2M4M2ZmYS4uOTU1ZmUzMGQzMThjMDE4YTRjYjZhZDQ4ZjNiN2Iz
NGMyMGFiOTJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTEzICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgZmx1
c2hlcyB0byBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisKIDIwMTItMDYtMTEg
IE1pY2hhZWwgQnLDvG5pbmcgIDxtaWNoYWVsLmJydW5pbmdAbm9raWEuY29tPgogCiAgICAgICAg
IFtRdF1bV0syXSBDb21wdXRlIGFuZCBzZXQgY2FjaGUgY2FwYWNpdGllcyB1c2luZyB0aGUgY3Vy
cmVudCBDYWNoZU1vZGVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDFm
ZDBjNzM2ZWUzNDlmNzg4YWJjODk4NGVmYmU2YmZiYThiNDYyNzMuLjNjNjAzNDFmOTg3MGMwYzY4
ZTc3ZmNlM2M2MzgxYmI5MmY3NjdlODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIu
Y3BwCkBAIC04Niw2ICs4NiwxMCBAQCB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShDQ0dy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsbwogewogICAgIHNp
emVfdCBpbmRleDsKIAorICAgIGludCB1cGxvYWRDb3VudCA9IDA7CisgICAgY29uc3QgaW50IGtV
cGxvYWRGbHVzaFBlcmlvZCA9IDQ7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9
IGNvbnRleHQtPmNvbnRleHQzRCgpOworCiAgICAgaWYgKG1fZW50cmllcy5zaXplKCkgfHwgbV9w
YXJ0aWFsRW50cmllcy5zaXplKCkpIHsKICAgICAgICAgaWYgKHVwbG9hZGVyLT5pc0J1c3koKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTk2LDYgKzEwMCwxMCBAQCB2b2lkIENDVGV4dHVyZVVw
ZGF0ZXI6OnVwZGF0ZShDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRv
ciogYWxsbwogICAgICAgICBmb3IgKGluZGV4ID0gbV9lbnRyeUluZGV4OyBpbmRleCA8IG1heElu
ZGV4OyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkgPSBtX2VudHJp
ZXNbaW5kZXhdOwogICAgICAgICAgICAgdXBsb2FkZXItPnVwbG9hZFRleHR1cmUoY29udGV4dCwg
ZW50cnkudGV4dHVyZSwgYWxsb2NhdG9yLCBlbnRyeS5zb3VyY2VSZWN0LCBlbnRyeS5kZXN0UmVj
dCk7CisKKyAgICAgICAgICAgIHVwbG9hZENvdW50Kys7CisgICAgICAgICAgICBpZiAoY29udGV4
dDNkICYmICEodXBsb2FkQ291bnQgJSBrVXBsb2FkRmx1c2hQZXJpb2QpKQorICAgICAgICAgICAg
ICAgIGNvbnRleHQzZC0+Zmx1c2goKTsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgbW9yZVVw
bG9hZHMgPSBtYXhJbmRleCA8IG1fZW50cmllcy5zaXplKCk7CkBAIC0xMTUsOSArMTIzLDE2IEBA
IHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvCiAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8
IG1fcGFydGlhbEVudHJpZXMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVF
bnRyeSYgZW50cnkgPSBtX3BhcnRpYWxFbnRyaWVzW2luZGV4XTsKICAgICAgICAgICAgIHVwbG9h
ZGVyLT51cGxvYWRUZXh0dXJlKGNvbnRleHQsIGVudHJ5LnRleHR1cmUsIGFsbG9jYXRvciwgZW50
cnkuc291cmNlUmVjdCwgZW50cnkuZGVzdFJlY3QpOworCisgICAgICAgICAgICB1cGxvYWRDb3Vu
dCsrOworICAgICAgICAgICAgaWYgKGNvbnRleHQzZCAmJiAhKHVwbG9hZENvdW50ICUga1VwbG9h
ZEZsdXNoUGVyaW9kKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0M2QtPmZsdXNoKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICB1cGxvYWRlci0+ZW5kVXBsb2FkcygpOworCisgICAgICAgIGlmIChj
b250ZXh0M2QgJiYgKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kKSkKKyAgICAgICAg
ICAgIGNvbnRleHQzZC0+Zmx1c2goKTsKICAgICB9CiAKICAgICBmb3IgKGluZGV4ID0gMDsgaW5k
ZXggPCBtX2NvcHlFbnRyaWVzLnNpemUoKTsgKytpbmRleCkgewpAQCAtMTI5LDcgKzE0NCw2IEBA
IHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvCiAgICAgLy8gYmVmb3JlIGxldHRpbmcgdGhlIG1haW4g
dGhyZWFkIHByb2NlZWQgYXMgaXQgbWF5IG1ha2UgZHJhdyBjYWxscyB0byB0aGUgc291cmNlIHRl
eHR1cmUgb2Ygb25lIG9mCiAgICAgLy8gb3VyIGNvcHkgb3BlcmF0aW9ucy4KICAgICBpZiAobV9j
b3B5RW50cmllcy5zaXplKCkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
ZCA9IGNvbnRleHQtPmNvbnRleHQzRCgpOwogICAgICAgICBpZiAoY29udGV4dDNkKQogICAgICAg
ICAgICAgY29udGV4dDNkLT5mbHVzaCgpOwogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147443</attachid>
            <date>2012-06-13 16:38:07 -0700</date>
            <delta_ts>2012-06-18 16:19:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120613163806.patch</filename>
            <type>text/plain</type>
            <size>4758</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTNmMTY5MjllNGZiNWZj
ZThkOWU4YzA0MjJkNGYxMmI4Y2M4M2ZmYS4uOTU1ZmUzMGQzMThjMDE4YTRjYjZhZDQ4ZjNiN2Iz
NGMyMGFiOTJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTEzICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgZmx1
c2hlcyB0byBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisKIDIwMTItMDYtMTEg
IE1pY2hhZWwgQnLDvG5pbmcgIDxtaWNoYWVsLmJydW5pbmdAbm9raWEuY29tPgogCiAgICAgICAg
IFtRdF1bV0syXSBDb21wdXRlIGFuZCBzZXQgY2FjaGUgY2FwYWNpdGllcyB1c2luZyB0aGUgY3Vy
cmVudCBDYWNoZU1vZGVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDFm
ZDBjNzM2ZWUzNDlmNzg4YWJjODk4NGVmYmU2YmZiYThiNDYyNzMuLjBhZmQ3NmY3N2VmMDlhMThk
ZGJmMWY0M2M2MDY3NTIwNGRmOTg1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIu
Y3BwCkBAIC0zOCw2ICszOCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGludCBrVXBsb2FkRmx1c2hQZXJpb2QgPSA0OworCiBD
Q1RleHR1cmVVcGRhdGVyOjpDQ1RleHR1cmVVcGRhdGVyKCkKICAgICA6IG1fZW50cnlJbmRleCgw
KQogewpAQCAtODIsOSArODQsMjUgQEAgYm9vbCBDQ1RleHR1cmVVcGRhdGVyOjpoYXNNb3JlVXBk
YXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZW50cmllcy5zaXplKCkgfHwgbV9wYXJ0aWFsRW50
cmllcy5zaXplKCkgfHwgbV9jb3B5RW50cmllcy5zaXplKCk7CiB9CiAKK3ZvaWQgQ0NUZXh0dXJl
VXBkYXRlcjo6cGVyaW9kaWNGbHVzaChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBpbnQg
KnVwbG9hZENvdW50KQoreworICAgICgqdXBsb2FkQ291bnQpKys7CisgICAgaWYgKCEoKnVwbG9h
ZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kKSAmJiBjb250ZXh0M2QpCisgICAgICAgIGNvbnRl
eHQzZC0+Zmx1c2goKTsKK30KKwordm9pZCBDQ1RleHR1cmVVcGRhdGVyOjpwZXJpb2RpY0ZsdXNo
RW5kKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIGludCB1cGxvYWRDb3VudCkKK3sKKyAg
ICAvLyBPbmx5IGZsdXNoZXMgaWYgdGhlcmUgd2FzIGFuIHVwbG9hZCBzaW5jZSB0aGUgbGFzdCBm
bHVzaC4KKyAgICBpZiAoKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kKSAmJiBjb250
ZXh0M2QpCisgICAgICAgIGNvbnRleHQzZC0+Zmx1c2goKTsKK30KKwogdm9pZCBDQ1RleHR1cmVV
cGRhdGVyOjp1cGRhdGUoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0
b3IqIGFsbG9jYXRvciwgVGV4dHVyZUNvcGllciogY29waWVyLCBUZXh0dXJlVXBsb2FkZXIqIHVw
bG9hZGVyLCBzaXplX3QgY291bnQpCiB7CiAgICAgc2l6ZV90IGluZGV4OworICAgIGludCB1cGxv
YWRDb3VudCA9IDA7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IGNvbnRleHQt
PmNvbnRleHQzRCgpOwogCiAgICAgaWYgKG1fZW50cmllcy5zaXplKCkgfHwgbV9wYXJ0aWFsRW50
cmllcy5zaXplKCkpIHsKICAgICAgICAgaWYgKHVwbG9hZGVyLT5pc0J1c3koKSkKQEAgLTk2LDYg
KzExNCw3IEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvCiAgICAgICAgIGZvciAoaW5kZXggPSBt
X2VudHJ5SW5kZXg7IGluZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFVw
ZGF0ZUVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1tpbmRleF07CiAgICAgICAgICAgICB1cGxvYWRl
ci0+dXBsb2FkVGV4dHVyZShjb250ZXh0LCBlbnRyeS50ZXh0dXJlLCBhbGxvY2F0b3IsIGVudHJ5
LnNvdXJjZVJlY3QsIGVudHJ5LmRlc3RSZWN0KTsKKyAgICAgICAgICAgIHBlcmlvZGljRmx1c2go
Y29udGV4dDNkLCAmdXBsb2FkQ291bnQpOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBtb3Jl
VXBsb2FkcyA9IG1heEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKTsKQEAgLTEwOSwxNSArMTI4LDE4
IEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvCiAgICAgICAgIGlmIChtb3JlVXBsb2Fkcykgewog
ICAgICAgICAgICAgbV9lbnRyeUluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICB1cGxvYWRlci0+
ZW5kVXBsb2FkcygpOworICAgICAgICAgICAgcGVyaW9kaWNGbHVzaEVuZChjb250ZXh0M2QsIHVw
bG9hZENvdW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGZv
ciAoaW5kZXggPSAwOyBpbmRleCA8IG1fcGFydGlhbEVudHJpZXMuc2l6ZSgpOyArK2luZGV4KSB7
CiAgICAgICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkgPSBtX3BhcnRpYWxFbnRyaWVzW2luZGV4
XTsKICAgICAgICAgICAgIHVwbG9hZGVyLT51cGxvYWRUZXh0dXJlKGNvbnRleHQsIGVudHJ5LnRl
eHR1cmUsIGFsbG9jYXRvciwgZW50cnkuc291cmNlUmVjdCwgZW50cnkuZGVzdFJlY3QpOworICAg
ICAgICAgICAgcGVyaW9kaWNGbHVzaChjb250ZXh0M2QsICZ1cGxvYWRDb3VudCk7CiAgICAgICAg
IH0KIAogICAgICAgICB1cGxvYWRlci0+ZW5kVXBsb2FkcygpOworICAgICAgICBwZXJpb2RpY0Zs
dXNoRW5kKGNvbnRleHQzZCwgdXBsb2FkQ291bnQpOwogICAgIH0KIAogICAgIGZvciAoaW5kZXgg
PSAwOyBpbmRleCA8IG1fY29weUVudHJpZXMuc2l6ZSgpOyArK2luZGV4KSB7CkBAIC0xMjksNyAr
MTUxLDYgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoQ0NHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG8KICAgICAvLyBiZWZvcmUgbGV0dGluZyB0
aGUgbWFpbiB0aHJlYWQgcHJvY2VlZCBhcyBpdCBtYXkgbWFrZSBkcmF3IGNhbGxzIHRvIHRoZSBz
b3VyY2UgdGV4dHVyZSBvZiBvbmUgb2YKICAgICAvLyBvdXIgY29weSBvcGVyYXRpb25zLgogICAg
IGlmIChtX2NvcHlFbnRyaWVzLnNpemUoKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNkID0gY29udGV4dC0+Y29udGV4dDNEKCk7CiAgICAgICAgIGlmIChjb250ZXh0M2Qp
CiAgICAgICAgICAgICBjb250ZXh0M2QtPmZsdXNoKCk7CiAgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZXIuaAppbmRleCAwZjEzOWYzODVjM2ExZDkwYzY1ZjViMmJhMDJmMjhmYzcyNmUy
NTk0Li41MDVlZGY1ZTg3NTkyMzNjNmU5NTZlNGQyYmNiZjM0MzA1MDgzNDgxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVV
cGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlci5oCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgR3JhcGhpY3NDb250ZXh0M2Q7CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9y
OwogY2xhc3MgVGV4dHVyZUNvcGllcjsKIGNsYXNzIFRleHR1cmVVcGxvYWRlcjsKQEAgLTUzLDYg
KzU0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAKIHByaXZhdGU6CisgICAgdm9p
ZCBwZXJpb2RpY0ZsdXNoKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIGludCAqdXBsb2Fk
Q291bnQpOworICAgIHZvaWQgcGVyaW9kaWNGbHVzaEVuZChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dDNkLCBpbnQgdXBsb2FkQ291bnQpOworCitwcml2YXRlOgogICAgIHN0cnVjdCBVcGRhdGVF
bnRyeSB7CiAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmU7CiAg
ICAgICAgIEludFJlY3Qgc291cmNlUmVjdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148201</attachid>
            <date>2012-06-18 16:20:05 -0700</date>
            <delta_ts>2012-06-19 14:22:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120618162004.patch</filename>
            <type>text/plain</type>
            <size>13251</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTNmMTY5MjllNGZiNWZj
ZThkOWU4YzA0MjJkNGYxMmI4Y2M4M2ZmYS4uOTQ2OTUzMWI3OGQ1YWVjZGRiYTZmOGRkODI4Y2M0
ZDM0ZDczYWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTEzICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgZmx1
c2hlcyB0byBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlclRlc3QgYWRkZWQgdG8gdmVy
aWZ5IHRleHR1cmUgdXBsb2FkL2ZsdXNoaW5nIHBhdHRlcm5zLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorCiAyMDEyLTA2LTExICBNaWNoYWVs
IEJyw7xuaW5nICA8bWljaGFlbC5icnVuaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dL
Ml0gQ29tcHV0ZSBhbmQgc2V0IGNhY2hlIGNhcGFjaXRpZXMgdXNpbmcgdGhlIGN1cnJlbnQgQ2Fj
aGVNb2RlbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCAxZmQwYzczNmVl
MzQ5Zjc4OGFiYzg5ODRlZmJlNmJmYmE4YjQ2MjczLi5hZmIyNDU1ZDE1N2E1YmQ1M2U2YTcyYWFj
YzUzODBkZWI2NDg0MjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAt
MzgsNiArMzgsOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0YXRpYyBjb25zdCBpbnQga1VwbG9hZEZsdXNoUGVyaW9kID0gNDsKKwogQ0NUZXh0dXJl
VXBkYXRlcjo6Q0NUZXh0dXJlVXBkYXRlcigpCiAgICAgOiBtX2VudHJ5SW5kZXgoMCkKIHsKQEAg
LTgyLDkgKzg0LDI3IEBAIGJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6aGFzTW9yZVVwZGF0ZXMoKSBj
b25zdAogICAgIHJldHVybiBtX2VudHJpZXMuc2l6ZSgpIHx8IG1fcGFydGlhbEVudHJpZXMuc2l6
ZSgpIHx8IG1fY29weUVudHJpZXMuc2l6ZSgpOwogfQogCit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6
OnBlcmlvZGljRmx1c2goR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgaW50ICp1cGxvYWRD
b3VudCkKK3sKKyAgICAoKnVwbG9hZENvdW50KSsrOworICAgIGlmICghKCp1cGxvYWRDb3VudCAl
IGtVcGxvYWRGbHVzaFBlcmlvZCkpCisgICAgICAgIGlmIChjb250ZXh0M2QpCisgICAgICAgICAg
ICBjb250ZXh0M2QtPmZsdXNoKCk7Cit9CisKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6cGVyaW9k
aWNGbHVzaEVuZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBpbnQgdXBsb2FkQ291bnQp
Cit7CisgICAgLy8gT25seSBmbHVzaGVzIGlmIHRoZXJlIHdhcyBhbiB1cGxvYWQgc2luY2UgdGhl
IGxhc3QgZmx1c2guCisgICAgaWYgKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kKQor
ICAgICAgICBpZiAoY29udGV4dDNkKQorICAgICAgICAgICAgY29udGV4dDNkLT5mbHVzaCgpOwor
fQorCiB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShDQ0dyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlQ29waWVyKiBjb3BpZXIs
IFRleHR1cmVVcGxvYWRlciogdXBsb2FkZXIsIHNpemVfdCBjb3VudCkKIHsKICAgICBzaXplX3Qg
aW5kZXg7CisgICAgaW50IHVwbG9hZENvdW50ID0gMDsKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNkID0gY29udGV4dCA/IGNvbnRleHQtPmNvbnRleHQzRCgpIDogMDsKIAogICAgIGlm
IChtX2VudHJpZXMuc2l6ZSgpIHx8IG1fcGFydGlhbEVudHJpZXMuc2l6ZSgpKSB7CiAgICAgICAg
IGlmICh1cGxvYWRlci0+aXNCdXN5KCkpCkBAIC05Niw2ICsxMTYsNyBAQCB2b2lkIENDVGV4dHVy
ZVVwZGF0ZXI6OnVwZGF0ZShDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCwgVGV4dHVyZUFsbG9j
YXRvciogYWxsbwogICAgICAgICBmb3IgKGluZGV4ID0gbV9lbnRyeUluZGV4OyBpbmRleCA8IG1h
eEluZGV4OyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkgPSBtX2Vu
dHJpZXNbaW5kZXhdOwogICAgICAgICAgICAgdXBsb2FkZXItPnVwbG9hZFRleHR1cmUoY29udGV4
dCwgZW50cnkudGV4dHVyZSwgYWxsb2NhdG9yLCBlbnRyeS5zb3VyY2VSZWN0LCBlbnRyeS5kZXN0
UmVjdCk7CisgICAgICAgICAgICBwZXJpb2RpY0ZsdXNoKGNvbnRleHQzZCwgJnVwbG9hZENvdW50
KTsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgbW9yZVVwbG9hZHMgPSBtYXhJbmRleCA8IG1f
ZW50cmllcy5zaXplKCk7CkBAIC0xMDksMTUgKzEzMCwxOCBAQCB2b2lkIENDVGV4dHVyZVVwZGF0
ZXI6OnVwZGF0ZShDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciog
YWxsbwogICAgICAgICBpZiAobW9yZVVwbG9hZHMpIHsKICAgICAgICAgICAgIG1fZW50cnlJbmRl
eCA9IGluZGV4OwogICAgICAgICAgICAgdXBsb2FkZXItPmVuZFVwbG9hZHMoKTsKKyAgICAgICAg
ICAgIHBlcmlvZGljRmx1c2hFbmQoY29udGV4dDNkLCB1cGxvYWRDb3VudCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBt
X3BhcnRpYWxFbnRyaWVzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICAgICAgVXBkYXRlRW50
cnkmIGVudHJ5ID0gbV9wYXJ0aWFsRW50cmllc1tpbmRleF07CiAgICAgICAgICAgICB1cGxvYWRl
ci0+dXBsb2FkVGV4dHVyZShjb250ZXh0LCBlbnRyeS50ZXh0dXJlLCBhbGxvY2F0b3IsIGVudHJ5
LnNvdXJjZVJlY3QsIGVudHJ5LmRlc3RSZWN0KTsKKyAgICAgICAgICAgIHBlcmlvZGljRmx1c2go
Y29udGV4dDNkLCAmdXBsb2FkQ291bnQpOwogICAgICAgICB9CiAKICAgICAgICAgdXBsb2FkZXIt
PmVuZFVwbG9hZHMoKTsKKyAgICAgICAgcGVyaW9kaWNGbHVzaEVuZChjb250ZXh0M2QsIHVwbG9h
ZENvdW50KTsKICAgICB9CiAKICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtX2NvcHlFbnRy
aWVzLnNpemUoKTsgKytpbmRleCkgewpAQCAtMTI5LDcgKzE1Myw2IEBAIHZvaWQgQ0NUZXh0dXJl
VXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2Nh
dG9yKiBhbGxvCiAgICAgLy8gYmVmb3JlIGxldHRpbmcgdGhlIG1haW4gdGhyZWFkIHByb2NlZWQg
YXMgaXQgbWF5IG1ha2UgZHJhdyBjYWxscyB0byB0aGUgc291cmNlIHRleHR1cmUgb2Ygb25lIG9m
CiAgICAgLy8gb3VyIGNvcHkgb3BlcmF0aW9ucy4KICAgICBpZiAobV9jb3B5RW50cmllcy5zaXpl
KCkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IGNvbnRleHQtPmNv
bnRleHQzRCgpOwogICAgICAgICBpZiAoY29udGV4dDNkKQogICAgICAgICAgICAgY29udGV4dDNk
LT5mbHVzaCgpOwogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29m
dHdhcmUgY29tcG9zaXRpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKaW5kZXggMGYx
MzlmMzg1YzNhMWQ5MGM2NWY1YjJiYTAyZjI4ZmM3MjZlMjU5NC4uNTA1ZWRmNWU4NzU5MjMzYzZl
OTU2ZTRkMmJjYmYzNDMwNTA4MzQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaApA
QCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDNkOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVDb3BpZXI7
CiBjbGFzcyBUZXh0dXJlVXBsb2FkZXI7CkBAIC01Myw2ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgorICAgIHZvaWQgcGVyaW9kaWNGbHVzaChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkLCBpbnQgKnVwbG9hZENvdW50KTsKKyAgICB2b2lkIHBlcmlv
ZGljRmx1c2hFbmQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgaW50IHVwbG9hZENvdW50
KTsKKworcHJpdmF0ZToKICAgICBzdHJ1Y3QgVXBkYXRlRW50cnkgewogICAgICAgICBMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlOwogICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBjMTg3MjhiMDA5MzBhYWIwYTIz
NGUxMjM4NWZiMTY1N2U0ZDBlMTRiLi45ZjU2NjYzN2RjYTEwMjYxOTRhMzAxN2E0MGNmMjhmMDNk
NmE2MzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTg4LDYgKzg4LDcgQEAK
ICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
U29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1RleHR1
cmVVcGRhdGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGlsZWRMYXllckltcGxU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlclRlc3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjUzMGE2YWVlMGM2ZGNjNzc5OTk1NWI3MmY2Zjg1OGNkYmMwMGE2MzAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVw
ZGF0ZXJUZXN0LmNwcApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVk
ZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYkNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIKKwor
I2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKK3VzaW5nIHRlc3Rp
bmc6Ol87Cit1c2luZyB0ZXN0aW5nOjpCZXR3ZWVuOwordXNpbmcgdGVzdGluZzo6RXhhY3RseTsK
K3VzaW5nIHRlc3Rpbmc6OkluU2VxdWVuY2U7Cit1c2luZyB0ZXN0aW5nOjpJbnZva2VXaXRob3V0
QXJnczsKK3VzaW5nIHRlc3Rpbmc6OlJldHVybjsKK3VzaW5nIHRlc3Rpbmc6OlRlc3Q7CisKKwor
bmFtZXNwYWNlIHsKKworY29uc3QgaW50IGtGbHVzaFBlcmlvZCA9IDQ7CisKK2NsYXNzIE1vY2tD
YW52YXNDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6
CisgICAgTU9DS19NRVRIT0QwKGZsdXNoLCB2b2lkKHZvaWQpKTsKKyAgICBNT0NLX01FVEhPRDAo
Y3JlYXRlVGV4dHVyZSwgdW5zaWduZWQodm9pZCkpOworICAgIE1PQ0tfTUVUSE9EMShkZWxldGVU
ZXh0dXJlLCB2b2lkKHVuc2lnbmVkKSk7CisKKyAgICB2aXJ0dWFsIEdyR0xJbnRlcmZhY2UqIG9u
Q3JlYXRlR3JHTEludGVyZmFjZSgpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KK307CisKK2NsYXNz
IE1vY2tUZXh0dXJlQ29waWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIgeworcHVibGljOgorICAg
IE1PQ0tfTUVUSE9ENChjb3B5VGV4dHVyZSwgdm9pZChDQ0dyYXBoaWNzQ29udGV4dCosIHVuc2ln
bmVkLCB1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYpKTsKK307CisKK2NsYXNzIE1vY2tUZXh0dXJl
VXBsb2FkZXIgOiBwdWJsaWMgRmFrZVRleHR1cmVVcGxvYWRlciB7CitwdWJsaWM6CisgICAgTU9D
S19NRVRIT0Q1KHVwbG9hZFRleHR1cmUsIHZvaWQoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRleHQq
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkxheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmUqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYkNvcmU6OlRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0IHNvdXJjZVJlY3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCBkZXN0UmVjdCkpOworfTsKKworLy8gVHJhY2tzIG1ldGhvZCBjYWxsIHBhdHRlcm5zIGFj
cm9zcyBkaWZmZXJlbnQgY2xhc3Nlcy4KK2NsYXNzIE1vY2tHbG9iYWxUcmFja2VyIHsKK3B1Ymxp
YzoKKyAgICBNb2NrR2xvYmFsVHJhY2tlcigpCisgICAgOiBtX2ZsdXNoQ291bnQoMCkKKyAgICAs
IG1fdXBsb2FkQ291bnQoMCkKKyAgICB7IH0KKworICAgIHZvaWQgZmx1c2goKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3VwbG9hZENvdW50KQorICAgICAgICAgICAgYWxlcnRCYWNrMkJhY2tGbHVz
aCgpOworICAgICAgICBtX3VwbG9hZENvdW50ID0gMDsKKyAgICAgICAgbV9mbHVzaENvdW50Kys7
CisgICAgfQorCisgICAgdm9pZCB1cGxvYWQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fdXBsb2Fk
Q291bnQgPj0ga0ZsdXNoUGVyaW9kKQorICAgICAgICAgICAgYWxlcnRUb29NYW55Q29uc2VjdXRp
dmVVcGxvYWRzKCk7CisgICAgICAgIG1fZmx1c2hDb3VudCA9IDA7CisgICAgICAgIG1fdXBsb2Fk
Q291bnQrKzsKKyAgICB9CisKKyAgICBNT0NLX01FVEhPRDAoYWxlcnRCYWNrMkJhY2tGbHVzaCwg
dm9pZCh2b2lkKSk7CisgICAgTU9DS19NRVRIT0QwKGFsZXJ0VG9vTWFueUNvbnNlY3V0aXZlVXBs
b2Fkcywgdm9pZCh2b2lkKSk7CisKK3B1YmxpYzoKKyAgICBpbnQgbV9mbHVzaENvdW50OworICAg
IGludCBtX3VwbG9hZENvdW50OworfTsKKworY2xhc3MgQ0NUZXh0dXJlVXBkYXRlclRlc3QgOiBw
dWJsaWMgVGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVUZXN0KGludCB1cGxvYWRD
b3VudCkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJz
OworCisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbWFpbkNvbnRleHQgPQorICAg
ICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICBhZG9wdFB0cihuZXcg
TW9ja0NhbnZhc0NvbnRleHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworCisgICAgICAgIFJlZlB0cjxD
Q0dyYXBoaWNzQ29udGV4dD4gY2NNYWluQ29udGV4dCA9CisgICAgICAgICAgICAgICAgQ0NHcmFw
aGljc0NvbnRleHQ6OmNyZWF0ZTNEKG1haW5Db250ZXh0KTsKKworICAgICAgICBNb2NrQ2FudmFz
Q29udGV4dCYgbWFpbk1vY2sgPSAqc3RhdGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPigKKyAg
ICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGlj
c0NvbnRleHQzRCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW5Db250ZXh0LmdldCgpKSk7
CisKKyAgICAgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IGZha2VMYXllclRleHR1cmVV
cGRhdGVyID0KKyAgICAgICAgICAgICAgICBhZG9wdFJlZihuZXcgRmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXIpOworCisgICAgICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PQorICAgICAgICAgICAgICAgIFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIq
MTAyNCoxMDI0LCAxMDI0KTsKKworICAgICAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7Cisg
ICAgICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKyAgICAgICAgTW9ja1RleHR1
cmVDb3BpZXIgY29waWVyTW9jazsKKyAgICAgICAgTW9ja1RleHR1cmVVcGxvYWRlciB1cGxvYWRl
ck1vY2s7CisKKyAgICAgICAgY29uc3QgSW50U2l6ZSBzaXplKDMwMCwgMTUwKTsKKworICAgICAg
ICBPd25QdHI8V2ViVGhyZWFkPiB0aHJlYWQ7CisgICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRp
YWxpemUodGhyZWFkLmdldCgpKTsKKworICAgICAgICAvLyBDcmVhdGUgcmVxdWVzdGVkIG51bWJl
ciBvZiB0ZXh0dXJlcyBhbmQgcHJlcGFyZSB0aGVtIGZvciB1cGxvYWQuCisgICAgICAgIE93blB0
cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBsdHV0W3VwbG9hZENvdW50XTsKKyAgICAg
ICAgSW50UmVjdCByZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB1cGxvYWRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBsdHV0W2ldID0gZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXItPmNyZWF0ZVRleHR1cmUodGV4dHVyZU1hbmFnZXIuZ2V0KCkpOworICAg
ICAgICAgICAgbHR1dFtpXS0+dGV4dHVyZSgpLT5yZXNlcnZlKHNpemUsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKTsKKyAgICAgICAgICAgIHVwZGF0ZXIuYXBwZW5kVXBkYXRlKGx0dXRbaV0uZ2V0
KCksIHJlY3QsIHJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQmFzaWMgZXhwZWN0YXRp
b25zIGZvciB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGNlcnRhaW4gbWV0aG9kcy4KKyAgICAgICAg
RVhQRUNUX0NBTEwobWFpbk1vY2ssIGZsdXNoKCkpCisgICAgICAgICAgICAgICAgLlRpbWVzKEV4
YWN0bHkoKHVwbG9hZENvdW50ICsga0ZsdXNoUGVyaW9kIC0gMSkgLyBrRmx1c2hQZXJpb2QpKTsK
KyAgICAgICAgRVhQRUNUX0NBTEwodXBsb2FkZXJNb2NrLCB1cGxvYWRUZXh0dXJlKF8sIF8sIF8s
IF8sIF8pKQorICAgICAgICAgICAgICAgIC5UaW1lcyhFeGFjdGx5KHVwbG9hZENvdW50KSk7Cisg
ICAgICAgIEVYUEVDVF9DQUxMKGNvcGllck1vY2ssIGNvcHlUZXh0dXJlKF8sIF8sIF8sIF8pKQor
ICAgICAgICAgICAgICAgIC5UaW1lcyhFeGFjdGx5KDApKTsKKworICAgICAgICAvLyBNb3JlIGlu
dGVyZXN0aW5nIGNoZWNrczoKKyAgICAgICAgLy8gTm8gYmFjayB0byBiYWNrIGZsdXNoZXMuIFRv
byBtYW55IGNvbnNlY3V0aXZlIHVwbG9hZHMuCisgICAgICAgIE1vY2tHbG9iYWxUcmFja2VyIGds
b2JhbFRyYWNrZXI7CisgICAgICAgIE9OX0NBTEwobWFpbk1vY2ssIGZsdXNoKCkpCisgICAgICAg
ICAgICAgICAgLldpbGxCeURlZmF1bHQoSW52b2tlV2l0aG91dEFyZ3MoJmdsb2JhbFRyYWNrZXIs
ICZNb2NrR2xvYmFsVHJhY2tlcjo6Zmx1c2gpKTsKKyAgICAgICAgT05fQ0FMTCh1cGxvYWRlck1v
Y2ssIHVwbG9hZFRleHR1cmUoXywgXywgXywgXywgXykpCisgICAgICAgICAgICAgICAgLldpbGxC
eURlZmF1bHQoSW52b2tlV2l0aG91dEFyZ3MoJmdsb2JhbFRyYWNrZXIsICZNb2NrR2xvYmFsVHJh
Y2tlcjo6dXBsb2FkKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKGdsb2JhbFRyYWNrZXIsIGFsZXJ0
QmFjazJCYWNrRmx1c2goKSkKKyAgICAgICAgICAgICAgICAuVGltZXMoRXhhY3RseSgwKSk7Cisg
ICAgICAgIEVYUEVDVF9DQUxMKGdsb2JhbFRyYWNrZXIsIGFsZXJ0VG9vTWFueUNvbnNlY3V0aXZl
VXBsb2FkcygpKQorICAgICAgICAgICAgICAgIC5UaW1lcyhFeGFjdGx5KDApKTsKKworICAgICAg
ICAvLyBEbyB0aGUgdXBsb2Fkcy4KKyAgICAgICAgdXBkYXRlci51cGRhdGUoY2NNYWluQ29udGV4
dC5nZXQoKSwgJmFsbG9jYXRvciwgJmNvcGllck1vY2ssICZ1cGxvYWRlck1vY2ssIDEwMCk7CisK
KyAgICAgICAgLy8gV2UgZXhwZWN0IHRoZSBmaW5hbCB1cGxvYWQgdG8gYmUgZm9sbG93ZWQgYnkg
YSBmbHVzaC4KKyAgICAgICAgRVhQRUNUX0VRKDAsIGdsb2JhbFRyYWNrZXIubV91cGxvYWRDb3Vu
dCk7CisgICAgICAgIEVYUEVDVF9FUSh1cGxvYWRDb3VudCA/IDEgOiAwLCBnbG9iYWxUcmFja2Vy
Lm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgOjp0ZXN0aW5nOjpNb2NrOjpWZXJpZnlBbmRDbGVh
ckV4cGVjdGF0aW9ucygmbWFpbk1vY2spOworICAgICAgICA6OnRlc3Rpbmc6Ok1vY2s6OlZlcmlm
eUFuZENsZWFyRXhwZWN0YXRpb25zKCZjb3BpZXJNb2NrKTsKKyAgICAgICAgOjp0ZXN0aW5nOjpN
b2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmdXBsb2FkZXJNb2NrKTsKKyAgICAgICAg
Ojp0ZXN0aW5nOjpNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmZ2xvYmFsVHJhY2tl
cik7CisKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICB9Cit9OworCitU
RVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIFplcm9UZXh0dXJlVXBsb2FkcykKK3sKKyAgICB1
cGRhdGVUZXN0KDApOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE9uZVRleHR1
cmVVcGxvYWQpCit7CisgICAgdXBkYXRlVGVzdCgxKTsKK30KKworVEVTVF9GKENDVGV4dHVyZVVw
ZGF0ZXJUZXN0LCBNYW55VGV4dHVyZVVwbG9hZHNOb1JlbWFpbmRlcikKK3sKKyAgICB1cGRhdGVU
ZXN0KGtGbHVzaFBlcmlvZCoxMCk7Cit9CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwg
TWFueVRleHR1cmVVcGxvYWRzTWluUmVtYWluZGVyKQoreworICAgIHVwZGF0ZVRlc3Qoa0ZsdXNo
UGVyaW9kKjEwKzEpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlUZXh0
dXJlVXBsb2Fkc01heFJlbWFpbmRlcikKK3sKKyAgICB1cGRhdGVUZXN0KGtGbHVzaFBlcmlvZCox
MC0xKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148421</attachid>
            <date>2012-06-19 14:23:01 -0700</date>
            <delta_ts>2012-06-19 14:59:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120619142300.patch</filename>
            <type>text/plain</type>
            <size>14081</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTNmMTY5MjllNGZiNWZj
ZThkOWU4YzA0MjJkNGYxMmI4Y2M4M2ZmYS4uOTQ2OTUzMWI3OGQ1YWVjZGRiYTZmOGRkODI4Y2M0
ZDM0ZDczYWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTEzICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgZmx1
c2hlcyB0byBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlclRlc3QgYWRkZWQgdG8gdmVy
aWZ5IHRleHR1cmUgdXBsb2FkL2ZsdXNoaW5nIHBhdHRlcm5zLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorCiAyMDEyLTA2LTExICBNaWNoYWVs
IEJyw7xuaW5nICA8bWljaGFlbC5icnVuaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dL
Ml0gQ29tcHV0ZSBhbmQgc2V0IGNhY2hlIGNhcGFjaXRpZXMgdXNpbmcgdGhlIGN1cnJlbnQgQ2Fj
aGVNb2RlbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCAxZmQwYzczNmVl
MzQ5Zjc4OGFiYzg5ODRlZmJlNmJmYmE4YjQ2MjczLi40ZmM2MGRmNzIxNjFiYjJkMjFjNjA1OThm
Zjc2ZmJmNjQwYWU1OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAt
MzgsNiArMzgsOSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0YXRpYyBjb25zdCBpbnQga1VwbG9hZEZsdXNoUGVyaW9kID0gNDsKK3N0YXRpYyBjb25z
dCBpbnQga1VwbG9hZEZsdXNoUGVyaW9kUGFydGlhbCA9IDQ7CisKIENDVGV4dHVyZVVwZGF0ZXI6
OkNDVGV4dHVyZVVwZGF0ZXIoKQogICAgIDogbV9lbnRyeUluZGV4KDApCiB7CkBAIC04NSw2ICs4
OCw4IEBAIGJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6aGFzTW9yZVVwZGF0ZXMoKSBjb25zdAogdm9p
ZCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRl
eHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVyZUNvcGllciogY29waWVyLCBUZXh0dXJl
VXBsb2FkZXIqIHVwbG9hZGVyLCBzaXplX3QgY291bnQpCiB7CiAgICAgc2l6ZV90IGluZGV4Owor
ICAgIGludCB1cGxvYWRDb3VudCA9IDA7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
ZCA9IGNvbnRleHQgPyBjb250ZXh0LT5jb250ZXh0M0QoKSA6IDA7CiAKICAgICBpZiAobV9lbnRy
aWVzLnNpemUoKSB8fCBtX3BhcnRpYWxFbnRyaWVzLnNpemUoKSkgewogICAgICAgICBpZiAodXBs
b2FkZXItPmlzQnVzeSgpKQpAQCAtOTYsOCArMTAxLDE3IEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRl
cjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvCiAgICAgICAgIGZvciAoaW5kZXggPSBtX2VudHJ5SW5kZXg7IGluZGV4IDwgbWF4SW5kZXg7
ICsraW5kZXgpIHsKICAgICAgICAgICAgIFVwZGF0ZUVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1tp
bmRleF07CiAgICAgICAgICAgICB1cGxvYWRlci0+dXBsb2FkVGV4dHVyZShjb250ZXh0LCBlbnRy
eS50ZXh0dXJlLCBhbGxvY2F0b3IsIGVudHJ5LnNvdXJjZVJlY3QsIGVudHJ5LmRlc3RSZWN0KTsK
KyAgICAgICAgICAgIHVwbG9hZENvdW50Kys7CisgICAgICAgICAgICBpZiAoISh1cGxvYWRDb3Vu
dCAlIGtVcGxvYWRGbHVzaFBlcmlvZCkpCisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQzZCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dDNkLT5mbHVzaCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kKQorICAgICAgICAgICAg
aWYgKGNvbnRleHQzZCkKKyAgICAgICAgICAgICAgICBjb250ZXh0M2QtPmZsdXNoKCk7CisgICAg
ICAgIHVwbG9hZENvdW50ID0gMDsKKwogICAgICAgICBib29sIG1vcmVVcGxvYWRzID0gbWF4SW5k
ZXggPCBtX2VudHJpZXMuc2l6ZSgpOwogCiAgICAgICAgIEFTU0VSVChtX3BhcnRpYWxFbnRyaWVz
LnNpemUoKSA8PSBjb3VudCk7CkBAIC0xMTUsOCArMTI5LDE2IEBAIHZvaWQgQ0NUZXh0dXJlVXBk
YXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9y
KiBhbGxvCiAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1fcGFydGlhbEVudHJpZXMu
c2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkgPSBtX3Bh
cnRpYWxFbnRyaWVzW2luZGV4XTsKICAgICAgICAgICAgIHVwbG9hZGVyLT51cGxvYWRUZXh0dXJl
KGNvbnRleHQsIGVudHJ5LnRleHR1cmUsIGFsbG9jYXRvciwgZW50cnkuc291cmNlUmVjdCwgZW50
cnkuZGVzdFJlY3QpOworICAgICAgICAgICAgdXBsb2FkQ291bnQrKzsKKyAgICAgICAgICAgIGlm
ICghKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kUGFydGlhbCkpCisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQzZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dDNkLT5mbHVz
aCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNo
UGVyaW9kUGFydGlhbCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0M2QpCisgICAgICAgICAgICAg
ICAgY29udGV4dDNkLT5mbHVzaCgpOworCiAgICAgICAgIHVwbG9hZGVyLT5lbmRVcGxvYWRzKCk7
CiAgICAgfQogCkBAIC0xMjksNyArMTUxLDYgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRh
dGUoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG8KICAg
ICAvLyBiZWZvcmUgbGV0dGluZyB0aGUgbWFpbiB0aHJlYWQgcHJvY2VlZCBhcyBpdCBtYXkgbWFr
ZSBkcmF3IGNhbGxzIHRvIHRoZSBzb3VyY2UgdGV4dHVyZSBvZiBvbmUgb2YKICAgICAvLyBvdXIg
Y29weSBvcGVyYXRpb25zLgogICAgIGlmIChtX2NvcHlFbnRyaWVzLnNpemUoKSkgewotICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gY29udGV4dC0+Y29udGV4dDNEKCk7CiAg
ICAgICAgIGlmIChjb250ZXh0M2QpCiAgICAgICAgICAgICBjb250ZXh0M2QtPmZsdXNoKCk7CiAg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3Np
dGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGMxODcyOGIwMDkzMGFhYjBh
MjM0ZTEyMzg1ZmIxNjU3ZTRkMGUxNGIuLjlmNTY2NjM3ZGNhMTAyNjE5NGEzMDE3YTQwY2YyOGYw
M2Q2YTYzNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtODgsNiArODgsNyBA
QAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDU2luZ2xlVGhyZWFkUHJveHlUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDVGV4
dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVySW1w
bFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlclRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RleHR1cmVVcGRhdGVyVGVzdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTBkNTNmOTQyYTAyOGNhN2Y3YzQ2NzUzN2I0OTBkYWFkMTAxMjQ4ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJl
VXBkYXRlclRlc3QuY3BwCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCisKKyNpbmNs
dWRlICJDQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlRocmVhZC5oIgor
CisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwordXNpbmcgdGVz
dGluZzo6XzsKK3VzaW5nIHRlc3Rpbmc6OkJldHdlZW47Cit1c2luZyB0ZXN0aW5nOjpFeGFjdGx5
OwordXNpbmcgdGVzdGluZzo6SW5TZXF1ZW5jZTsKK3VzaW5nIHRlc3Rpbmc6Okludm9rZVdpdGhv
dXRBcmdzOwordXNpbmcgdGVzdGluZzo6UmV0dXJuOwordXNpbmcgdGVzdGluZzo6VGVzdDsKKwor
CituYW1lc3BhY2UgeworCitjb25zdCBpbnQga0ZsdXNoUGVyaW9kID0gNDsKK2NvbnN0IGludCBr
Rmx1c2hQZXJpb2RQYXJ0aWFsID0gNDsKKworY2xhc3MgTW9ja0NhbnZhc0NvbnRleHQgOiBwdWJs
aWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDAo
Zmx1c2gsIHZvaWQodm9pZCkpOworICAgIE1PQ0tfTUVUSE9EMChjcmVhdGVUZXh0dXJlLCB1bnNp
Z25lZCh2b2lkKSk7CisgICAgTU9DS19NRVRIT0QxKGRlbGV0ZVRleHR1cmUsIHZvaWQodW5zaWdu
ZWQpKTsKKworICAgIHZpcnR1YWwgR3JHTEludGVyZmFjZSogb25DcmVhdGVHckdMSW50ZXJmYWNl
KCkgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorfTsKKworY2xhc3MgTW9ja1RleHR1cmVDb3BpZXIg
OiBwdWJsaWMgVGV4dHVyZUNvcGllciB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0Q0KGNvcHlU
ZXh0dXJlLCB2b2lkKENDR3JhcGhpY3NDb250ZXh0KiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBJbnRTaXplJikpOworfTsKKworY2xhc3MgTW9ja1RleHR1cmVVcGxvYWRlciA6IHB1YmxpYyBG
YWtlVGV4dHVyZVVwbG9hZGVyIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDUodXBsb2FkVGV4
dHVyZSwgdm9pZChXZWJDb3JlOjpDQ0dyYXBoaWNzQ29udGV4dCosCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6VGV4dHVy
ZUFsbG9jYXRvciogYWxsb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qgc291cmNlUmVjdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0IGRlc3RSZWN0KSk7Cit9
OworCisvLyBUcmFja3MgbWV0aG9kIGNhbGwgcGF0dGVybnMgYWNyb3NzIGRpZmZlcmVudCBjbGFz
c2VzLgorY2xhc3MgR2xvYmFsVHJhY2tlciB7CitwdWJsaWM6CisgICAgR2xvYmFsVHJhY2tlcihp
bnQgdXBsb2FkQ291bnQsIGludCBwYXJ0aWFsQ291bnQpCisgICAgOiBtX3VwbG9hZENvdW50KHVw
bG9hZENvdW50KQorICAgICwgbV9wYXJ0aWFsQ291bnQocGFydGlhbENvdW50KQorICAgICwgbV90
b3RhbENvdW50KHVwbG9hZENvdW50K3BhcnRpYWxDb3VudCkKKyAgICAsIG1fbnVtQ29uc2VjdXRp
dmVGbHVzaGVzKDApCisgICAgLCBtX251bUNvbnNlY3V0aXZlVXBsb2FkcygwKQorICAgICwgbV9u
dW1Ub3RhbFVwbG9hZHMoMCkKKyAgICB7IH0KKworICAgIHZvaWQgb25GbHVzaCgpCisgICAgewor
ICAgICAgICAvLyBDaGVjayBmb3IgZXh0cmFuZW91cyAvIGJhY2stdG8tYmFjayBmbHVzaGVzLgor
ICAgICAgICBFWFBFQ1RfRVEoMCwgbV9udW1Db25zZWN1dGl2ZUZsdXNoZXMpOworICAgICAgICBF
WFBFQ1RfTFQoMCwgbV9udW1Db25zZWN1dGl2ZVVwbG9hZHMpOworCisgICAgICAgIC8vIENoZWNr
IGZvciBwcmVtYXR1cmUgZmx1c2hlcworICAgICAgICBpZiAobV9udW1Ub3RhbFVwbG9hZHMgPCBt
X3VwbG9hZENvdW50KQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fbnVtQ29uc2VjdXRpdmVVcGxv
YWRzLCBrRmx1c2hQZXJpb2QpOworICAgICAgICBlbHNlIGlmIChtX251bVRvdGFsVXBsb2FkcyA+
IG1fdXBsb2FkQ291bnQgJiYgbV9udW1Ub3RhbFVwbG9hZHMgPCBtX3RvdGFsQ291bnQpCisgICAg
ICAgICAgICBFWFBFQ1RfRVEobV9udW1Db25zZWN1dGl2ZVVwbG9hZHMsIGtGbHVzaFBlcmlvZFBh
cnRpYWwpOworCisgICAgICAgIG1fbnVtQ29uc2VjdXRpdmVVcGxvYWRzID0gMDsKKyAgICAgICAg
bV9udW1Db25zZWN1dGl2ZUZsdXNoZXMrKzsKKyAgICB9CisKKyAgICB2b2lkIG9uVXBsb2FkKCkK
KyAgICB7CisgICAgICAgIC8vIENoZWNrIGZvciB0b28gbWFueSBjb25zZWN1dGl2ZSB1cGxvYWRz
CisgICAgICAgIGlmIChtX251bVRvdGFsVXBsb2FkcyA8IG1fdXBsb2FkQ291bnQpCisgICAgICAg
ICAgICBFWFBFQ1RfTEUobV9udW1Db25zZWN1dGl2ZVVwbG9hZHMsIGtGbHVzaFBlcmlvZCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9MRShtX251bUNvbnNlY3V0aXZlVXBsb2Fk
cywga0ZsdXNoUGVyaW9kUGFydGlhbCk7CisKKyAgICAgICAgbV9udW1Db25zZWN1dGl2ZUZsdXNo
ZXMgPSAwOworICAgICAgICBtX251bUNvbnNlY3V0aXZlVXBsb2FkcysrOworICAgICAgICBtX251
bVRvdGFsVXBsb2FkcysrOworICAgIH0KKworICAgIHZvaWQgZmluYWxWZXJpZmljYXRpb24oKQor
ICAgIHsKKyAgICAgICAgLy8gV2UgZXhwZWN0IHRoZSBmaW5hbCB1cGxvYWQgdG8gYmUgZm9sbG93
ZWQgYnkgYSBmbHVzaC4KKyAgICAgICAgRVhQRUNUX0VRKDAsIG1fbnVtQ29uc2VjdXRpdmVVcGxv
YWRzKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fdG90YWxDb3VudCA/IDEgOiAwLCBtX251bUNvbnNl
Y3V0aXZlRmx1c2hlcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX3VwbG9hZENvdW50
OworICAgIGludCBtX3BhcnRpYWxDb3VudDsKKyAgICBpbnQgbV90b3RhbENvdW50OworCisgICAg
aW50IG1fbnVtQ29uc2VjdXRpdmVGbHVzaGVzOworICAgIGludCBtX251bUNvbnNlY3V0aXZlVXBs
b2FkczsKKyAgICBpbnQgbV9udW1Ub3RhbFVwbG9hZHM7Cit9OworCitjbGFzcyBDQ1RleHR1cmVV
cGRhdGVyVGVzdCA6IHB1YmxpYyBUZXN0IHsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVwZGF0ZVRl
c3QoaW50IHVwbG9hZENvdW50LCBpbnQgcGFydGlhbENvdW50KQorICAgIHsKKyAgICAgICAgaW50
IHRvdGFsQ291bnQgPSB1cGxvYWRDb3VudCArIHBhcnRpYWxDb3VudDsKKworICAgICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1haW5Db250ZXh0ID0KKyAgICAgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KAorICAgICAgICAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250ZXh0
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KTsKKworICAgICAgICBSZWZQdHI8Q0NHcmFwaGljc0NvbnRleHQ+
IGNjTWFpbkNvbnRleHQgPQorICAgICAgICAgICAgICAgIENDR3JhcGhpY3NDb250ZXh0OjpjcmVh
dGUzRChtYWluQ29udGV4dCk7CisKKyAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQmIG1haW5Nb2Nr
ID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oCisgICAgICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoCisgICAg
ICAgICAgICAgICAgICAgICAgICBtYWluQ29udGV4dC5nZXQoKSkpOworCisgICAgICAgIFJlZlB0
cjxMYXllclRleHR1cmVVcGRhdGVyPiBmYWtlTGF5ZXJUZXh0dXJlVXBkYXRlciA9CisgICAgICAg
ICAgICAgICAgYWRvcHRSZWYobmV3IEZha2VMYXllclRleHR1cmVVcGRhdGVyKTsKKworICAgICAg
ICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0KKyAgICAgICAgICAgICAg
ICBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7
CisKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOworICAgICAgICBGYWtlVGV4dHVy
ZUFsbG9jYXRvciBhbGxvY2F0b3I7CisgICAgICAgIE1vY2tUZXh0dXJlQ29waWVyIGNvcGllck1v
Y2s7CisgICAgICAgIE1vY2tUZXh0dXJlVXBsb2FkZXIgdXBsb2FkZXJNb2NrOworCisgICAgICAg
IGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7CisgICAgICAgIGNvbnN0IEludFJlY3QgcmVj
dCgwLCAwLCAxMDAsIDEwMCk7CisKKyAgICAgICAgT3duUHRyPFdlYlRocmVhZD4gdGhyZWFkOwor
ICAgICAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSk7CisKKyAgICAg
ICAgLy8gQ3JlYXRlIHJlcXVlc3RlZCBudW1iZXIgb2YgdGV4dHVyZXMgYW5kIHByZXBhcmUgdGhl
bSBmb3IgdXBsb2FkLgorICAgICAgICBPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZT4gbHR1dFt1cGxvYWRDb3VudF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXBsb2Fk
Q291bnQ7IGkrKykgeworICAgICAgICAgICAgbHR1dFtpXSA9IGZha2VMYXllclRleHR1cmVVcGRh
dGVyLT5jcmVhdGVUZXh0dXJlKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKKyAgICAgICAgICAgIGx0
dXRbaV0tPnRleHR1cmUoKS0+cmVzZXJ2ZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7
CisgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZFVwZGF0ZShsdHV0W2ldLmdldCgpLCByZWN0LCBy
ZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENyZWF0ZSByZXF1ZXN0ZWQgbnVtYmVyIG9m
IHBhcnRpYWwgdGV4dHVyZXMgYW5kIHByZXBhcmUgdGhlbSBmb3IgdXBsb2FkLgorICAgICAgICBP
d25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gbHR1dHBbcGFydGlhbENvdW50XTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aWFsQ291bnQ7IGkrKykgeworICAgICAg
ICAgICAgbHR1dHBbaV0gPSBmYWtlTGF5ZXJUZXh0dXJlVXBkYXRlci0+Y3JlYXRlVGV4dHVyZSh0
ZXh0dXJlTWFuYWdlci5nZXQoKSk7CisgICAgICAgICAgICBsdHV0cFtpXS0+dGV4dHVyZSgpLT5y
ZXNlcnZlKHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgICAgIHVwZGF0
ZXIuYXBwZW5kUGFydGlhbFVwZGF0ZShsdHV0cFtpXS5nZXQoKSwgcmVjdCwgcmVjdCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBCYXNpYyBleHBlY3RhdGlvbnMgZm9yIHRoZSBudW1iZXIgb2Yg
Y2FsbHMgdG8gY2VydGFpbiBtZXRob2RzLgorICAgICAgICBpbnQgZXhwZWN0ZWRGbHVzaENvdW50
ID0KKyAgICAgICAgICAgICAgICAoKHVwbG9hZENvdW50ICsga0ZsdXNoUGVyaW9kIC0gMSkgLyBr
Rmx1c2hQZXJpb2QpICsKKyAgICAgICAgICAgICAgICAoKHBhcnRpYWxDb3VudCArIGtGbHVzaFBl
cmlvZFBhcnRpYWwgLSAxKSAvIGtGbHVzaFBlcmlvZFBhcnRpYWwpOworCisgICAgICAgIEVYUEVD
VF9DQUxMKG1haW5Nb2NrLCBmbHVzaCgpKQorICAgICAgICAgICAgICAgIC5UaW1lcyhFeGFjdGx5
KGV4cGVjdGVkRmx1c2hDb3VudCkpOworICAgICAgICBFWFBFQ1RfQ0FMTCh1cGxvYWRlck1vY2ss
IHVwbG9hZFRleHR1cmUoXywgXywgXywgXywgXykpCisgICAgICAgICAgICAgICAgLlRpbWVzKEV4
YWN0bHkodG90YWxDb3VudCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChjb3BpZXJNb2NrLCBjb3B5
VGV4dHVyZShfLCBfLCBfLCBfKSkKKyAgICAgICAgICAgICAgICAuVGltZXMoRXhhY3RseSgwKSk7
CisKKyAgICAgICAgLy8gTW9yZSBpbnRlcmVzdGluZyBjaGVja3M6CisgICAgICAgIC8vIE5vIGJh
Y2sgdG8gYmFjayBmbHVzaGVzLCB0b28gbWFueSBjb25zZWN1dGl2ZSB1cGxvYWRzLCBldGMuCisg
ICAgICAgIEdsb2JhbFRyYWNrZXIgZ2xvYmFsVHJhY2tlcih1cGxvYWRDb3VudCwgcGFydGlhbENv
dW50KTsKKyAgICAgICAgT05fQ0FMTChtYWluTW9jaywgZmx1c2goKSkKKyAgICAgICAgICAgICAg
ICAuV2lsbEJ5RGVmYXVsdChJbnZva2VXaXRob3V0QXJncygmZ2xvYmFsVHJhY2tlciwgJkdsb2Jh
bFRyYWNrZXI6Om9uRmx1c2gpKTsKKyAgICAgICAgT05fQ0FMTCh1cGxvYWRlck1vY2ssIHVwbG9h
ZFRleHR1cmUoXywgXywgXywgXywgXykpCisgICAgICAgICAgICAgICAgLldpbGxCeURlZmF1bHQo
SW52b2tlV2l0aG91dEFyZ3MoJmdsb2JhbFRyYWNrZXIsICZHbG9iYWxUcmFja2VyOjpvblVwbG9h
ZCkpOworCisgICAgICAgIC8vIERvIHRoZSB1cGxvYWRzLgorICAgICAgICB1cGRhdGVyLnVwZGF0
ZShjY01haW5Db250ZXh0LmdldCgpLCAmYWxsb2NhdG9yLCAmY29waWVyTW9jaywgJnVwbG9hZGVy
TW9jaywgMTAwKTsKKworICAgICAgICBnbG9iYWxUcmFja2VyLmZpbmFsVmVyaWZpY2F0aW9uKCk7
CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1h
aW5Nb2NrKTsKKyAgICAgICAgOjp0ZXN0aW5nOjpNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0
aW9ucygmY29waWVyTW9jayk7CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xl
YXJFeHBlY3RhdGlvbnMoJnVwbG9hZGVyTW9jayk7CisKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6
c2h1dGRvd24oKTsKKyAgICB9Cit9OworCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIFpl
cm9UZXh0dXJlVXBsb2FkcykKK3sKKyAgICB1cGRhdGVUZXN0KDAsIDApOworfQorCitURVNUX0Yo
Q0NUZXh0dXJlVXBkYXRlclRlc3QsIE9uZVRleHR1cmVVcGxvYWQpCit7CisgICAgdXBkYXRlVGVz
dCgxLCAwKTsKKyAgICB1cGRhdGVUZXN0KDAsIDEpOworICAgIHVwZGF0ZVRlc3QoMSwgMSk7Cit9
CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgTWFueVRleHR1cmVVcGxvYWRzTm9SZW1h
aW5kZXIpCit7CisgICAgaW50IGNvdW50ID0ga0ZsdXNoUGVyaW9kKjEwOworICAgIHVwZGF0ZVRl
c3QoY291bnQsIDApOworICAgIHVwZGF0ZVRlc3QoMCwgY291bnQpOworICAgIHVwZGF0ZVRlc3Qo
Y291bnQsIGNvdW50KTsKKworICAgIGludCBzcGxpdCA9IGtGbHVzaFBlcmlvZDsKKyAgICB1cGRh
dGVUZXN0KHNwbGl0LCBjb3VudC1zcGxpdCk7CisgICAgdXBkYXRlVGVzdChjb3VudC1zcGxpdCwg
c3BsaXQpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlUZXh0dXJlVXBs
b2Fkc01pblJlbWFpbmRlcikKK3sKKyAgICBpbnQgY291bnQgPSBrRmx1c2hQZXJpb2QqMTAgKyAx
OworICAgIHVwZGF0ZVRlc3QoY291bnQsIDApOworICAgIHVwZGF0ZVRlc3QoMCwgY291bnQpOwor
ICAgIHVwZGF0ZVRlc3QoY291bnQsIGNvdW50KTsKKworICAgIGludCBzcGxpdCA9IGtGbHVzaFBl
cmlvZDsKKyAgICB1cGRhdGVUZXN0KHNwbGl0LCBjb3VudC1zcGxpdCk7CisgICAgdXBkYXRlVGVz
dChjb3VudC1zcGxpdCwgc3BsaXQpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3Qs
IE1hbnlUZXh0dXJlVXBsb2Fkc01heFJlbWFpbmRlcikKK3sKKyAgICBpbnQgY291bnQgPSBrRmx1
c2hQZXJpb2QqMTAgLSAxOworICAgIHVwZGF0ZVRlc3QoY291bnQsIDApOworICAgIHVwZGF0ZVRl
c3QoMCwgY291bnQpOworICAgIHVwZGF0ZVRlc3QoY291bnQsIGNvdW50KTsKKworICAgIGludCBz
cGxpdCA9IGtGbHVzaFBlcmlvZDsKKyAgICB1cGRhdGVUZXN0KHNwbGl0LCBjb3VudC1zcGxpdCk7
CisgICAgdXBkYXRlVGVzdChjb3VudC1zcGxpdCwgc3BsaXQpOworfQorCit9IC8vIG5hbWVzcGFj
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148435</attachid>
            <date>2012-06-19 14:59:04 -0700</date>
            <delta_ts>2012-06-29 13:01:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120619145904.patch</filename>
            <type>text/plain</type>
            <size>14506</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTNmMTY5MjllNGZiNWZj
ZThkOWU4YzA0MjJkNGYxMmI4Y2M4M2ZmYS4uOTQ2OTUzMWI3OGQ1YWVjZGRiYTZmOGRkODI4Y2M0
ZDM0ZDczYWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTEzICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgZmx1
c2hlcyB0byBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlclRlc3QgYWRkZWQgdG8gdmVy
aWZ5IHRleHR1cmUgdXBsb2FkL2ZsdXNoaW5nIHBhdHRlcm5zLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorCiAyMDEyLTA2LTExICBNaWNoYWVs
IEJyw7xuaW5nICA8bWljaGFlbC5icnVuaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dL
Ml0gQ29tcHV0ZSBhbmQgc2V0IGNhY2hlIGNhcGFjaXRpZXMgdXNpbmcgdGhlIGN1cnJlbnQgQ2Fj
aGVNb2RlbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCAxZmQwYzczNmVl
MzQ5Zjc4OGFiYzg5ODRlZmJlNmJmYmE4YjQ2MjczLi40ZmM2MGRmNzIxNjFiYjJkMjFjNjA1OThm
Zjc2ZmJmNjQwYWU1OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAt
MzgsNiArMzgsOSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0YXRpYyBjb25zdCBpbnQga1VwbG9hZEZsdXNoUGVyaW9kID0gNDsKK3N0YXRpYyBjb25z
dCBpbnQga1VwbG9hZEZsdXNoUGVyaW9kUGFydGlhbCA9IDQ7CisKIENDVGV4dHVyZVVwZGF0ZXI6
OkNDVGV4dHVyZVVwZGF0ZXIoKQogICAgIDogbV9lbnRyeUluZGV4KDApCiB7CkBAIC04NSw2ICs4
OCw4IEBAIGJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6aGFzTW9yZVVwZGF0ZXMoKSBjb25zdAogdm9p
ZCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRl
eHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVyZUNvcGllciogY29waWVyLCBUZXh0dXJl
VXBsb2FkZXIqIHVwbG9hZGVyLCBzaXplX3QgY291bnQpCiB7CiAgICAgc2l6ZV90IGluZGV4Owor
ICAgIGludCB1cGxvYWRDb3VudCA9IDA7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
ZCA9IGNvbnRleHQgPyBjb250ZXh0LT5jb250ZXh0M0QoKSA6IDA7CiAKICAgICBpZiAobV9lbnRy
aWVzLnNpemUoKSB8fCBtX3BhcnRpYWxFbnRyaWVzLnNpemUoKSkgewogICAgICAgICBpZiAodXBs
b2FkZXItPmlzQnVzeSgpKQpAQCAtOTYsOCArMTAxLDE3IEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRl
cjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvCiAgICAgICAgIGZvciAoaW5kZXggPSBtX2VudHJ5SW5kZXg7IGluZGV4IDwgbWF4SW5kZXg7
ICsraW5kZXgpIHsKICAgICAgICAgICAgIFVwZGF0ZUVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1tp
bmRleF07CiAgICAgICAgICAgICB1cGxvYWRlci0+dXBsb2FkVGV4dHVyZShjb250ZXh0LCBlbnRy
eS50ZXh0dXJlLCBhbGxvY2F0b3IsIGVudHJ5LnNvdXJjZVJlY3QsIGVudHJ5LmRlc3RSZWN0KTsK
KyAgICAgICAgICAgIHVwbG9hZENvdW50Kys7CisgICAgICAgICAgICBpZiAoISh1cGxvYWRDb3Vu
dCAlIGtVcGxvYWRGbHVzaFBlcmlvZCkpCisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQzZCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dDNkLT5mbHVzaCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kKQorICAgICAgICAgICAg
aWYgKGNvbnRleHQzZCkKKyAgICAgICAgICAgICAgICBjb250ZXh0M2QtPmZsdXNoKCk7CisgICAg
ICAgIHVwbG9hZENvdW50ID0gMDsKKwogICAgICAgICBib29sIG1vcmVVcGxvYWRzID0gbWF4SW5k
ZXggPCBtX2VudHJpZXMuc2l6ZSgpOwogCiAgICAgICAgIEFTU0VSVChtX3BhcnRpYWxFbnRyaWVz
LnNpemUoKSA8PSBjb3VudCk7CkBAIC0xMTUsOCArMTI5LDE2IEBAIHZvaWQgQ0NUZXh0dXJlVXBk
YXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9y
KiBhbGxvCiAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1fcGFydGlhbEVudHJpZXMu
c2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkgPSBtX3Bh
cnRpYWxFbnRyaWVzW2luZGV4XTsKICAgICAgICAgICAgIHVwbG9hZGVyLT51cGxvYWRUZXh0dXJl
KGNvbnRleHQsIGVudHJ5LnRleHR1cmUsIGFsbG9jYXRvciwgZW50cnkuc291cmNlUmVjdCwgZW50
cnkuZGVzdFJlY3QpOworICAgICAgICAgICAgdXBsb2FkQ291bnQrKzsKKyAgICAgICAgICAgIGlm
ICghKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kUGFydGlhbCkpCisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQzZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dDNkLT5mbHVz
aCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNo
UGVyaW9kUGFydGlhbCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0M2QpCisgICAgICAgICAgICAg
ICAgY29udGV4dDNkLT5mbHVzaCgpOworCiAgICAgICAgIHVwbG9hZGVyLT5lbmRVcGxvYWRzKCk7
CiAgICAgfQogCkBAIC0xMjksNyArMTUxLDYgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRh
dGUoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG8KICAg
ICAvLyBiZWZvcmUgbGV0dGluZyB0aGUgbWFpbiB0aHJlYWQgcHJvY2VlZCBhcyBpdCBtYXkgbWFr
ZSBkcmF3IGNhbGxzIHRvIHRoZSBzb3VyY2UgdGV4dHVyZSBvZiBvbmUgb2YKICAgICAvLyBvdXIg
Y29weSBvcGVyYXRpb25zLgogICAgIGlmIChtX2NvcHlFbnRyaWVzLnNpemUoKSkgewotICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gY29udGV4dC0+Y29udGV4dDNEKCk7CiAg
ICAgICAgIGlmIChjb250ZXh0M2QpCiAgICAgICAgICAgICBjb250ZXh0M2QtPmZsdXNoKCk7CiAg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3Np
dGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGMxODcyOGIwMDkzMGFhYjBh
MjM0ZTEyMzg1ZmIxNjU3ZTRkMGUxNGIuLjlmNTY2NjM3ZGNhMTAyNjE5NGEzMDE3YTQwY2YyOGYw
M2Q2YTYzNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtODgsNiArODgsNyBA
QAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDU2luZ2xlVGhyZWFkUHJveHlUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDVGV4
dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVySW1w
bFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlclRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RleHR1cmVVcGRhdGVyVGVzdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzI5YTFmYjBmYmE4YzE1NDRkZmJkNzRkZDBiNGNlNGY1NTM2NmRjOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJl
VXBkYXRlclRlc3QuY3BwCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCisKKyNpbmNs
dWRlICJDQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlRocmVhZC5oIgor
CisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwordXNpbmcgdGVz
dGluZzo6XzsKK3VzaW5nIHRlc3Rpbmc6OkJldHdlZW47Cit1c2luZyB0ZXN0aW5nOjpFeGFjdGx5
OwordXNpbmcgdGVzdGluZzo6SW5TZXF1ZW5jZTsKK3VzaW5nIHRlc3Rpbmc6Okludm9rZVdpdGhv
dXRBcmdzOwordXNpbmcgdGVzdGluZzo6UmV0dXJuOwordXNpbmcgdGVzdGluZzo6VGVzdDsKKwor
CituYW1lc3BhY2UgeworCitjb25zdCBpbnQga0ZsdXNoUGVyaW9kID0gNDsKK2NvbnN0IGludCBr
Rmx1c2hQZXJpb2RQYXJ0aWFsID0gNDsKKworY2xhc3MgTW9ja0NhbnZhc0NvbnRleHQgOiBwdWJs
aWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDAo
Zmx1c2gsIHZvaWQodm9pZCkpOworICAgIE1PQ0tfTUVUSE9EMChjcmVhdGVUZXh0dXJlLCB1bnNp
Z25lZCh2b2lkKSk7CisgICAgTU9DS19NRVRIT0QxKGRlbGV0ZVRleHR1cmUsIHZvaWQodW5zaWdu
ZWQpKTsKKworICAgIHZpcnR1YWwgR3JHTEludGVyZmFjZSogb25DcmVhdGVHckdMSW50ZXJmYWNl
KCkgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorfTsKKworY2xhc3MgTW9ja1RleHR1cmVDb3BpZXIg
OiBwdWJsaWMgVGV4dHVyZUNvcGllciB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0Q0KGNvcHlU
ZXh0dXJlLCB2b2lkKENDR3JhcGhpY3NDb250ZXh0KiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBJbnRTaXplJikpOworfTsKKworY2xhc3MgTW9ja1RleHR1cmVVcGxvYWRlciA6IHB1YmxpYyBG
YWtlVGV4dHVyZVVwbG9hZGVyIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDUodXBsb2FkVGV4
dHVyZSwgdm9pZChXZWJDb3JlOjpDQ0dyYXBoaWNzQ29udGV4dCosCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6VGV4dHVy
ZUFsbG9jYXRvciogYWxsb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qgc291cmNlUmVjdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0IGRlc3RSZWN0KSk7Cit9
OworCisvLyBUcmFja3MgbWV0aG9kIGNhbGwgcGF0dGVybnMgYWNyb3NzIGRpZmZlcmVudCBjbGFz
c2VzLgorY2xhc3MgR2xvYmFsVHJhY2tlciB7CitwdWJsaWM6CisgICAgR2xvYmFsVHJhY2tlcihp
bnQgdXBsb2FkQ291bnQsIGludCBwYXJ0aWFsQ291bnQpCisgICAgOiBtX3VwbG9hZENvdW50KHVw
bG9hZENvdW50KQorICAgICwgbV9wYXJ0aWFsQ291bnQocGFydGlhbENvdW50KQorICAgICwgbV90
b3RhbENvdW50KHVwbG9hZENvdW50K3BhcnRpYWxDb3VudCkKKyAgICAsIG1fbnVtQ29uc2VjdXRp
dmVGbHVzaGVzKDApCisgICAgLCBtX251bUNvbnNlY3V0aXZlVXBsb2FkcygwKQorICAgICwgbV9u
dW1Ub3RhbFVwbG9hZHMoMCkKKyAgICB7IH0KKworICAgIHZvaWQgb25GbHVzaCgpCisgICAgewor
ICAgICAgICAvLyBDaGVjayBmb3IgZXh0cmFuZW91cyAvIGJhY2stdG8tYmFjayBmbHVzaGVzLgor
ICAgICAgICBFWFBFQ1RfRVEoMCwgbV9udW1Db25zZWN1dGl2ZUZsdXNoZXMpOworICAgICAgICBF
WFBFQ1RfTFQoMCwgbV9udW1Db25zZWN1dGl2ZVVwbG9hZHMpOworCisgICAgICAgIC8vIENoZWNr
IGZvciBwcmVtYXR1cmUgZmx1c2hlcworICAgICAgICBpZiAobV9udW1Ub3RhbFVwbG9hZHMgPCBt
X3VwbG9hZENvdW50KQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fbnVtQ29uc2VjdXRpdmVVcGxv
YWRzLCBrRmx1c2hQZXJpb2QpOworICAgICAgICBlbHNlIGlmIChtX251bVRvdGFsVXBsb2FkcyA+
IG1fdXBsb2FkQ291bnQgJiYgbV9udW1Ub3RhbFVwbG9hZHMgPCBtX3RvdGFsQ291bnQpCisgICAg
ICAgICAgICBFWFBFQ1RfRVEobV9udW1Db25zZWN1dGl2ZVVwbG9hZHMsIGtGbHVzaFBlcmlvZFBh
cnRpYWwpOworCisgICAgICAgIG1fbnVtQ29uc2VjdXRpdmVVcGxvYWRzID0gMDsKKyAgICAgICAg
bV9udW1Db25zZWN1dGl2ZUZsdXNoZXMrKzsKKyAgICB9CisKKyAgICB2b2lkIG9uVXBsb2FkKCkK
KyAgICB7CisgICAgICAgIC8vIENoZWNrIGZvciB0b28gbWFueSBjb25zZWN1dGl2ZSB1cGxvYWRz
CisgICAgICAgIGlmIChtX251bVRvdGFsVXBsb2FkcyA8IG1fdXBsb2FkQ291bnQpCisgICAgICAg
ICAgICBFWFBFQ1RfTEUobV9udW1Db25zZWN1dGl2ZVVwbG9hZHMsIGtGbHVzaFBlcmlvZCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9MRShtX251bUNvbnNlY3V0aXZlVXBsb2Fk
cywga0ZsdXNoUGVyaW9kUGFydGlhbCk7CisKKyAgICAgICAgbV9udW1Db25zZWN1dGl2ZUZsdXNo
ZXMgPSAwOworICAgICAgICBtX251bUNvbnNlY3V0aXZlVXBsb2FkcysrOworICAgICAgICBtX251
bVRvdGFsVXBsb2FkcysrOworICAgIH0KKworICAgIHZvaWQgZmluYWxWZXJpZmljYXRpb24oKQor
ICAgIHsKKyAgICAgICAgLy8gV2UgZXhwZWN0IHRoZSBmaW5hbCB1cGxvYWQgdG8gYmUgZm9sbG93
ZWQgYnkgYSBmbHVzaC4KKyAgICAgICAgRVhQRUNUX0VRKDAsIG1fbnVtQ29uc2VjdXRpdmVVcGxv
YWRzKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fdG90YWxDb3VudCA/IDEgOiAwLCBtX251bUNvbnNl
Y3V0aXZlRmx1c2hlcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX3VwbG9hZENvdW50
OworICAgIGludCBtX3BhcnRpYWxDb3VudDsKKyAgICBpbnQgbV90b3RhbENvdW50OworCisgICAg
aW50IG1fbnVtQ29uc2VjdXRpdmVGbHVzaGVzOworICAgIGludCBtX251bUNvbnNlY3V0aXZlVXBs
b2FkczsKKyAgICBpbnQgbV9udW1Ub3RhbFVwbG9hZHM7Cit9OworCitjbGFzcyBDQ1RleHR1cmVV
cGRhdGVyVGVzdCA6IHB1YmxpYyBUZXN0IHsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVwZGF0ZVRl
c3QoaW50IHVwbG9hZENvdW50LCBpbnQgcGFydGlhbENvdW50KQorICAgIHsKKyAgICAgICAgaW50
IHRvdGFsQ291bnQgPSB1cGxvYWRDb3VudCArIHBhcnRpYWxDb3VudDsKKworICAgICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1haW5Db250ZXh0ID0KKyAgICAgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KAorICAgICAgICAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250ZXh0
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KTsKKworICAgICAgICBSZWZQdHI8Q0NHcmFwaGljc0NvbnRleHQ+
IGNjTWFpbkNvbnRleHQgPQorICAgICAgICAgICAgICAgIENDR3JhcGhpY3NDb250ZXh0OjpjcmVh
dGUzRChtYWluQ29udGV4dCk7CisKKyAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQmIG1haW5Nb2Nr
ID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oCisgICAgICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoCisgICAg
ICAgICAgICAgICAgICAgICAgICBtYWluQ29udGV4dC5nZXQoKSkpOworCisgICAgICAgIFJlZlB0
cjxMYXllclRleHR1cmVVcGRhdGVyPiBmYWtlTGF5ZXJUZXh0dXJlVXBkYXRlciA9CisgICAgICAg
ICAgICAgICAgYWRvcHRSZWYobmV3IEZha2VMYXllclRleHR1cmVVcGRhdGVyKTsKKworICAgICAg
ICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0KKyAgICAgICAgICAgICAg
ICBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7
CisKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOworICAgICAgICBGYWtlVGV4dHVy
ZUFsbG9jYXRvciBhbGxvY2F0b3I7CisgICAgICAgIE1vY2tUZXh0dXJlQ29waWVyIGNvcGllck1v
Y2s7CisgICAgICAgIE1vY2tUZXh0dXJlVXBsb2FkZXIgdXBsb2FkZXJNb2NrOworCisgICAgICAg
IGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7CisgICAgICAgIGNvbnN0IEludFJlY3QgcmVj
dCgwLCAwLCAxMDAsIDEwMCk7CisKKyAgICAgICAgT3duUHRyPFdlYlRocmVhZD4gdGhyZWFkOwor
ICAgICAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSk7CisKKyAgICAg
ICAgLy8gQ3JlYXRlIHJlcXVlc3RlZCBudW1iZXIgb2YgdGV4dHVyZXMgYW5kIHByZXBhcmUgdGhl
bSBmb3IgdXBsb2FkLgorICAgICAgICBPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZT4gbHR1dFt1cGxvYWRDb3VudF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXBsb2Fk
Q291bnQ7IGkrKykgeworICAgICAgICAgICAgbHR1dFtpXSA9IGZha2VMYXllclRleHR1cmVVcGRh
dGVyLT5jcmVhdGVUZXh0dXJlKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKKyAgICAgICAgICAgIGx0
dXRbaV0tPnRleHR1cmUoKS0+cmVzZXJ2ZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7
CisgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZFVwZGF0ZShsdHV0W2ldLmdldCgpLCByZWN0LCBy
ZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENyZWF0ZSByZXF1ZXN0ZWQgbnVtYmVyIG9m
IHBhcnRpYWwgdGV4dHVyZXMgYW5kIHByZXBhcmUgdGhlbSBmb3IgdXBsb2FkLgorICAgICAgICBP
d25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gbHR1dHBbcGFydGlhbENvdW50XTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aWFsQ291bnQ7IGkrKykgeworICAgICAg
ICAgICAgbHR1dHBbaV0gPSBmYWtlTGF5ZXJUZXh0dXJlVXBkYXRlci0+Y3JlYXRlVGV4dHVyZSh0
ZXh0dXJlTWFuYWdlci5nZXQoKSk7CisgICAgICAgICAgICBsdHV0cFtpXS0+dGV4dHVyZSgpLT5y
ZXNlcnZlKHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgICAgIHVwZGF0
ZXIuYXBwZW5kUGFydGlhbFVwZGF0ZShsdHV0cFtpXS5nZXQoKSwgcmVjdCwgcmVjdCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBCYXNpYyBleHBlY3RhdGlvbnMgZm9yIHRoZSBudW1iZXIgb2Yg
Y2FsbHMgdG8gY2VydGFpbiBtZXRob2RzLgorICAgICAgICBpbnQgZXhwZWN0ZWRGbHVzaENvdW50
ID0KKyAgICAgICAgICAgICAgICAoKHVwbG9hZENvdW50ICsga0ZsdXNoUGVyaW9kIC0gMSkgLyBr
Rmx1c2hQZXJpb2QpICsKKyAgICAgICAgICAgICAgICAoKHBhcnRpYWxDb3VudCArIGtGbHVzaFBl
cmlvZFBhcnRpYWwgLSAxKSAvIGtGbHVzaFBlcmlvZFBhcnRpYWwpOworCisgICAgICAgIEVYUEVD
VF9DQUxMKG1haW5Nb2NrLCBmbHVzaCgpKQorICAgICAgICAgICAgICAgIC5UaW1lcyhFeGFjdGx5
KGV4cGVjdGVkRmx1c2hDb3VudCkpOworICAgICAgICBFWFBFQ1RfQ0FMTCh1cGxvYWRlck1vY2ss
IHVwbG9hZFRleHR1cmUoXywgXywgXywgXywgXykpCisgICAgICAgICAgICAgICAgLlRpbWVzKEV4
YWN0bHkodG90YWxDb3VudCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChjb3BpZXJNb2NrLCBjb3B5
VGV4dHVyZShfLCBfLCBfLCBfKSkKKyAgICAgICAgICAgICAgICAuVGltZXMoRXhhY3RseSgwKSk7
CisKKyAgICAgICAgLy8gTW9yZSBpbnRlcmVzdGluZyBjaGVja3M6CisgICAgICAgIC8vIE5vIGJh
Y2sgdG8gYmFjayBmbHVzaGVzLCB0b28gbWFueSBjb25zZWN1dGl2ZSB1cGxvYWRzLCBldGMuCisg
ICAgICAgIEdsb2JhbFRyYWNrZXIgZ2xvYmFsVHJhY2tlcih1cGxvYWRDb3VudCwgcGFydGlhbENv
dW50KTsKKyAgICAgICAgT05fQ0FMTChtYWluTW9jaywgZmx1c2goKSkKKyAgICAgICAgICAgICAg
ICAuV2lsbEJ5RGVmYXVsdChJbnZva2VXaXRob3V0QXJncygmZ2xvYmFsVHJhY2tlciwgJkdsb2Jh
bFRyYWNrZXI6Om9uRmx1c2gpKTsKKyAgICAgICAgT05fQ0FMTCh1cGxvYWRlck1vY2ssIHVwbG9h
ZFRleHR1cmUoXywgXywgXywgXywgXykpCisgICAgICAgICAgICAgICAgLldpbGxCeURlZmF1bHQo
SW52b2tlV2l0aG91dEFyZ3MoJmdsb2JhbFRyYWNrZXIsICZHbG9iYWxUcmFja2VyOjpvblVwbG9h
ZCkpOworCisgICAgICAgIC8vIERvIHRoZSB1cGxvYWRzLgorICAgICAgICB1cGRhdGVyLnVwZGF0
ZShjY01haW5Db250ZXh0LmdldCgpLCAmYWxsb2NhdG9yLCAmY29waWVyTW9jaywgJnVwbG9hZGVy
TW9jaywgMTAwKTsKKworICAgICAgICBnbG9iYWxUcmFja2VyLmZpbmFsVmVyaWZpY2F0aW9uKCk7
CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1h
aW5Nb2NrKTsKKyAgICAgICAgOjp0ZXN0aW5nOjpNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0
aW9ucygmY29waWVyTW9jayk7CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6VmVyaWZ5QW5kQ2xl
YXJFeHBlY3RhdGlvbnMoJnVwbG9hZGVyTW9jayk7CisKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6
c2h1dGRvd24oKTsKKyAgICB9Cit9OworCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIFpl
cm9UZXh0dXJlVXBsb2FkcykKK3sKKyAgICB1cGRhdGVUZXN0KDAsIDApOworfQorCitURVNUX0Yo
Q0NUZXh0dXJlVXBkYXRlclRlc3QsIE9uZVRleHR1cmVVcGxvYWQpCit7CisgICAgdXBkYXRlVGVz
dCgxLCAwKTsKKyAgICB1cGRhdGVUZXN0KDAsIDEpOworICAgIHVwZGF0ZVRlc3QoMSwgMSk7Cit9
CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgTWFueVRleHR1cmVVcGxvYWRzTm9SZW1h
aW5kZXIpCit7CisgICAgaW50IGNvdW50MSA9IDEwICoga0ZsdXNoUGVyaW9kOworICAgIGludCBj
b3VudDIgPSAxMCAqIGtGbHVzaFBlcmlvZFBhcnRpYWw7CisKKyAgICB1cGRhdGVUZXN0KGNvdW50
MSwgMCk7CisgICAgdXBkYXRlVGVzdChjb3VudDEsIDEpOworCisgICAgdXBkYXRlVGVzdCgwLCBj
b3VudDIpOworICAgIHVwZGF0ZVRlc3QoMSwgY291bnQyKTsKKworICAgIHVwZGF0ZVRlc3QoY291
bnQxLCBjb3VudDIpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlUZXh0
dXJlVXBsb2Fkc01pblJlbWFpbmRlcikKK3sKKyAgICBpbnQgY291bnQxID0gKDEwICoga0ZsdXNo
UGVyaW9kKSArIDE7CisgICAgaW50IGNvdW50MiA9ICgxMCAqIGtGbHVzaFBlcmlvZFBhcnRpYWwp
ICsgMTsKKworICAgIHVwZGF0ZVRlc3QoY291bnQxLCAwKTsKKyAgICB1cGRhdGVUZXN0KGNvdW50
MSwgMSk7CisgICAgdXBkYXRlVGVzdChjb3VudDEsIGtGbHVzaFBlcmlvZFBhcnRpYWwpOworCisg
ICAgdXBkYXRlVGVzdCgwLCBjb3VudDIpOworICAgIHVwZGF0ZVRlc3QoMSwgY291bnQyKTsKKyAg
ICB1cGRhdGVUZXN0KGtGbHVzaFBlcmlvZCwgY291bnQyKTsKKworICAgIHVwZGF0ZVRlc3QoY291
bnQxLCBjb3VudDIpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlUZXh0
dXJlVXBsb2Fkc01heFJlbWFpbmRlcikKK3sKKyAgICBpbnQgY291bnQxID0gKDEwICoga0ZsdXNo
UGVyaW9kKSAtIDE7CisgICAgaW50IGNvdW50MiA9ICgxMCAqIGtGbHVzaFBlcmlvZFBhcnRpYWwp
IC0gMTsKKworICAgIHVwZGF0ZVRlc3QoY291bnQxLCAwKTsKKyAgICB1cGRhdGVUZXN0KGNvdW50
MSwgMSk7CisgICAgdXBkYXRlVGVzdChjb3VudDEsIGtGbHVzaFBlcmlvZFBhcnRpYWwpOworCisg
ICAgdXBkYXRlVGVzdCgwLCBjb3VudDIpOworICAgIHVwZGF0ZVRlc3QoMSwgY291bnQyKTsKKyAg
ICB1cGRhdGVUZXN0KGtGbHVzaFBlcmlvZCwgY291bnQyKTsKKworICAgIHVwZGF0ZVRlc3QoY291
bnQxLCBjb3VudDIpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlUZXh0
dXJlVXBsb2Fkc01pbk1heFJlbWFpbmRlcikKK3sKKyAgICB1cGRhdGVUZXN0KCgxMCAqIGtGbHVz
aFBlcmlvZCkgKyAxLCAoMTAgKiBrRmx1c2hQZXJpb2RQYXJ0aWFsKSAtIDEpOworICAgIHVwZGF0
ZVRlc3QoKDEwICoga0ZsdXNoUGVyaW9kKSAtIDEsICgxMCAqIGtGbHVzaFBlcmlvZFBhcnRpYWwp
ICsgMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150239</attachid>
            <date>2012-06-29 13:01:09 -0700</date>
            <delta_ts>2012-07-03 17:49:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120629130109.patch</filename>
            <type>text/plain</type>
            <size>22599</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjcwYThiNmUyYTQwZmFm
OGEzYjU0YWI5Zjg4YWNkNTU2ZDM0Y2Y1OC4uYTkwNTY5NTM1NmRmYjc4N2Y5NjlhYzVjYzA4NmY5
M2I2YzczZWU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA2LTI5ICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgZmx1
c2hlcyB0byBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlclRlc3QgYWRkZWQgdG8gdmVy
aWZ5IHRleHR1cmUgdXBsb2FkL2ZsdXNoaW5nIHBhdHRlcm5zLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDR3JhcGhpY3NDb250ZXh0OjpmbHVzaCk6CisgICAgICAgIChDQ0dyYXBoaWNzQ29u
dGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJl
VXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4
dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisKIDIwMTItMDYtMTkgIEhheWF0byBJdG8gIDxoYXlhdG9A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFzc2VydGlvbiBmb3IgZXZlbnQncyB0YXJnZXQgaXMg
d3JvbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGI2YzM3ZTFjOWE2Njk3MzM3NmUz
ZmE3OWNjNmI5ZWE1OTE0MzQ2MTIuLjk5MzJkNzM3ODE3NGFkMThiMmVjNmYyYjQ0M2YzY2Y0YzY1
MGExMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTIt
MDYtMjkgIEJyaWFuIEFuZGVyc29uICA8YnJpYW5kZXJzb25AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIEFkZCBmbHVzaGVzIHRvIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAg
ICAqIHRlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisKIDIwMTItMDYtMTkgIEtlbm5ldGggUnVz
c2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMjA3NzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHcmFwaGljc0NvbnRleHQuaAppbmRleCAzOTVmMThjMzQ5
MWI0YzRkZDYxMTQzOTE0MTU4Nzk5OGUyODg3NDZmLi4xMTk2NDNkZDhlZTIzMDNjZDIzZTg5MGM4
MmY3ODFiZDZjMzQ3MTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR3JhcGhpY3NDb250ZXh0LmgKQEAgLTQ2
LDYgKzQ2LDExIEBAIHB1YmxpYzoKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0Qo
KSB7IHJldHVybiBtX2NvbnRleHQzRC5nZXQoKTsgfQogCisgICAgdm9pZCBmbHVzaCgpCisgICAg
eworICAgICAgICBtX2NvbnRleHQzRC0+Zmx1c2goKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
Q0NHcmFwaGljc0NvbnRleHQoKSB7IH0KICAgICBleHBsaWNpdCBDQ0dyYXBoaWNzQ29udGV4dChQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0M0QpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDFmZDBjNzM2ZWUzNDlmNzg4YWJjODk4NGVmYmU2YmZiYThi
NDYyNzMuLjNjYTRkZDc4YzZhNzM3N2EwMDI5MDZjMWU2MmEyNzBiZDliMjY5YWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0zOCw2ICszOCw4IEBAIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGludCBrVXBs
b2FkRmx1c2hQZXJpb2QgPSA0OworCiBDQ1RleHR1cmVVcGRhdGVyOjpDQ1RleHR1cmVVcGRhdGVy
KCkKICAgICA6IG1fZW50cnlJbmRleCgwKQogewpAQCAtOTIsMTIgKzk0LDIwIEBAIHZvaWQgQ0NU
ZXh0dXJlVXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJl
QWxsb2NhdG9yKiBhbGxvCiAKICAgICAgICAgdXBsb2FkZXItPmJlZ2luVXBsb2FkcygpOwogCisg
ICAgICAgIGludCB1cGxvYWRDb3VudCA9IDA7CiAgICAgICAgIHNpemVfdCBtYXhJbmRleCA9IG1p
bihtX2VudHJ5SW5kZXggKyBjb3VudCwgbV9lbnRyaWVzLnNpemUoKSk7CiAgICAgICAgIGZvciAo
aW5kZXggPSBtX2VudHJ5SW5kZXg7IGluZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsKICAgICAg
ICAgICAgIFVwZGF0ZUVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1tpbmRleF07CiAgICAgICAgICAg
ICB1cGxvYWRlci0+dXBsb2FkVGV4dHVyZShjb250ZXh0LCBlbnRyeS50ZXh0dXJlLCBhbGxvY2F0
b3IsIGVudHJ5LnNvdXJjZVJlY3QsIGVudHJ5LmRlc3RSZWN0KTsKKyAgICAgICAgICAgIHVwbG9h
ZENvdW50Kys7CisgICAgICAgICAgICBpZiAoISh1cGxvYWRDb3VudCAlIGtVcGxvYWRGbHVzaFBl
cmlvZCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+Zmx1c2goKTsKICAgICAgICAgfQogCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZGFuZ2xpbmcgdXBsb2FkcyB3aXRob3V0
IGEgZmx1c2guCisgICAgICAgIGlmICh1cGxvYWRDb3VudCAlIGtVcGxvYWRGbHVzaFBlcmlvZCkK
KyAgICAgICAgICAgIGNvbnRleHQtPmZsdXNoKCk7CisKICAgICAgICAgYm9vbCBtb3JlVXBsb2Fk
cyA9IG1heEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKTsKIAogICAgICAgICBBU1NFUlQobV9wYXJ0
aWFsRW50cmllcy5zaXplKCkgPD0gY291bnQpOwpAQCAtMTEyLDExICsxMjIsMTkgQEAgdm9pZCBD
Q1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAg
ICAgIGludCBwYXJ0aWFsVXBsb2FkQ291bnQgPSAwOwogICAgICAgICBmb3IgKGluZGV4ID0gMDsg
aW5kZXggPCBtX3BhcnRpYWxFbnRyaWVzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICAgICAg
VXBkYXRlRW50cnkmIGVudHJ5ID0gbV9wYXJ0aWFsRW50cmllc1tpbmRleF07CiAgICAgICAgICAg
ICB1cGxvYWRlci0+dXBsb2FkVGV4dHVyZShjb250ZXh0LCBlbnRyeS50ZXh0dXJlLCBhbGxvY2F0
b3IsIGVudHJ5LnNvdXJjZVJlY3QsIGVudHJ5LmRlc3RSZWN0KTsKKyAgICAgICAgICAgIHBhcnRp
YWxVcGxvYWRDb3VudCsrOworICAgICAgICAgICAgaWYgKCEocGFydGlhbFVwbG9hZENvdW50ICUg
a1VwbG9hZEZsdXNoUGVyaW9kKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5mbHVzaCgpOwog
ICAgICAgICB9CiAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkYW5nbGluZyBw
YXJ0aWFsIHVwbG9hZHMgd2l0aG91dCBhIGZsdXNoLgorICAgICAgICBpZiAocGFydGlhbFVwbG9h
ZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kKQorICAgICAgICAgICAgY29udGV4dC0+Zmx1c2go
KTsKKwogICAgICAgICB1cGxvYWRlci0+ZW5kVXBsb2FkcygpOwogICAgIH0KIApAQCAtMTI5LDkg
KzE0Nyw3IEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvCiAgICAgLy8gYmVmb3JlIGxldHRpbmcg
dGhlIG1haW4gdGhyZWFkIHByb2NlZWQgYXMgaXQgbWF5IG1ha2UgZHJhdyBjYWxscyB0byB0aGUg
c291cmNlIHRleHR1cmUgb2Ygb25lIG9mCiAgICAgLy8gb3VyIGNvcHkgb3BlcmF0aW9ucy4KICAg
ICBpZiAobV9jb3B5RW50cmllcy5zaXplKCkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzZCA9IGNvbnRleHQtPmNvbnRleHQzRCgpOwotICAgICAgICBpZiAoY29udGV4dDNk
KQotICAgICAgICAgICAgY29udGV4dDNkLT5mbHVzaCgpOworICAgICAgICBjb250ZXh0LT5mbHVz
aCgpOwogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUg
Y29tcG9zaXRpbmcuCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA1
NDlmZGZhNDRiODRhZTFjYTc1MWFkZTQ0MjdjM2Q3YzhjYzk4YTU1Li41MzZkZTdlZWQ5OWIyZTQw
ZTFjOWIwNzY4MjZkNzIzNjViNGQ3NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
QEAgLTg5LDYgKzg5LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Rlc3RDb21tb24uaCcsCisgICAgICAgICAgICAn
dGVzdHMvQ0NUZXh0dXJlVXBkYXRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Rp
bGVkTGF5ZXJJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGlsZWRMYXllclRl
c3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RleHR1cmVV
cGRhdGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVw
ZGF0ZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTg3MjhkZDFhODMyYWFkNmM4OTM5ODI2OTJmYTIz
YjQ2NjM2NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RleHR1cmVVcGRhdGVyVGVzdC5jcHAKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIu
aCIKKworI2luY2x1ZGUgIkNDVGlsZWRMYXllclRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJGYWtl
V2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
VGhyZWFkLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7
Cit1c2luZyB0ZXN0aW5nOjpfOwordXNpbmcgdGVzdGluZzo6QmV0d2VlbjsKK3VzaW5nIHRlc3Rp
bmc6OkV4YWN0bHk7Cit1c2luZyB0ZXN0aW5nOjpJblNlcXVlbmNlOwordXNpbmcgdGVzdGluZzo6
SW52b2tlV2l0aG91dEFyZ3M7Cit1c2luZyB0ZXN0aW5nOjpSZXR1cm47Cit1c2luZyB0ZXN0aW5n
OjpUZXN0OworCisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGludCBrRmx1c2hQZXJpb2QgPSA0Owor
Y29uc3QgaW50IGtGbHVzaFBlcmlvZFBhcnRpYWwgPSBrRmx1c2hQZXJpb2Q7CisKK2NsYXNzIE1v
Y2tDYW52YXNDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJs
aWM6CisgICAgTU9DS19NRVRIT0QwKGZsdXNoLCB2b2lkKHZvaWQpKTsKKyAgICBNT0NLX01FVEhP
RDAoY3JlYXRlVGV4dHVyZSwgdW5zaWduZWQodm9pZCkpOworICAgIE1PQ0tfTUVUSE9EMShkZWxl
dGVUZXh0dXJlLCB2b2lkKHVuc2lnbmVkKSk7CisKKyAgICB2aXJ0dWFsIEdyR0xJbnRlcmZhY2Uq
IG9uQ3JlYXRlR3JHTEludGVyZmFjZSgpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KK307CisKK2Ns
YXNzIE1vY2tUZXh0dXJlQ29waWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIgeworcHVibGljOgor
ICAgIE1PQ0tfTUVUSE9ENChjb3B5VGV4dHVyZSwgdm9pZChDQ0dyYXBoaWNzQ29udGV4dCosIHVu
c2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYpKTsKK307CisKK2NsYXNzIE1vY2tUZXh0
dXJlVXBsb2FkZXIgOiBwdWJsaWMgRmFrZVRleHR1cmVVcGxvYWRlciB7CitwdWJsaWM6CisgICAg
TU9DS19NRVRIT0Q1KHVwbG9hZFRleHR1cmUsIHZvaWQoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRl
eHQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkxheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkNvcmU6OlRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0IHNvdXJjZVJl
Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCBkZXN0UmVjdCkpOworfTsKKworLy8gVHJhY2tzIG1ldGhvZCBjYWxsIHBhdHRlcm5z
IGFjcm9zcyBkaWZmZXJlbnQgY2xhc3Nlcy4KK2NsYXNzIEdsb2JhbFRyYWNrZXIgeworcHVibGlj
OgorICAgIEdsb2JhbFRyYWNrZXIoaW50IHVwbG9hZENvdW50LCBpbnQgcGFydGlhbENvdW50KQor
ICAgIDogbV91cGxvYWRDb3VudCh1cGxvYWRDb3VudCkKKyAgICAsIG1fcGFydGlhbENvdW50KHBh
cnRpYWxDb3VudCkKKyAgICAsIG1fdG90YWxDb3VudCh1cGxvYWRDb3VudCtwYXJ0aWFsQ291bnQp
CisgICAgLCBtX251bUNvbnNlY3V0aXZlRmx1c2hlcygwKQorICAgICwgbV9udW1Db25zZWN1dGl2
ZVVwbG9hZHMoMCkKKyAgICAsIG1fbnVtVG90YWxVcGxvYWRzKDApCisgICAgeyB9CisKKyAgICB2
b2lkIG9uRmx1c2goKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGV4dHJhbmVvdXMgLyBi
YWNrLXRvLWJhY2sgZmx1c2hlcy4KKyAgICAgICAgRVhQRUNUX0VRKDAsIG1fbnVtQ29uc2VjdXRp
dmVGbHVzaGVzKTsKKyAgICAgICAgRVhQRUNUX0xUKDAsIG1fbnVtQ29uc2VjdXRpdmVVcGxvYWRz
KTsKKworICAgICAgICAvLyBDaGVjayBmb3IgcHJlbWF0dXJlIGZsdXNoZXMKKyAgICAgICAgaWYg
KG1fbnVtVG90YWxVcGxvYWRzIDwgbV91cGxvYWRDb3VudCkKKyAgICAgICAgICAgIEVYUEVDVF9F
UShtX251bUNvbnNlY3V0aXZlVXBsb2Fkcywga0ZsdXNoUGVyaW9kKTsKKyAgICAgICAgZWxzZSBp
ZiAobV9udW1Ub3RhbFVwbG9hZHMgPiBtX3VwbG9hZENvdW50ICYmIG1fbnVtVG90YWxVcGxvYWRz
IDwgbV90b3RhbENvdW50KQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fbnVtQ29uc2VjdXRpdmVV
cGxvYWRzLCBrRmx1c2hQZXJpb2RQYXJ0aWFsKTsKKworICAgICAgICBtX251bUNvbnNlY3V0aXZl
VXBsb2FkcyA9IDA7CisgICAgICAgIG1fbnVtQ29uc2VjdXRpdmVGbHVzaGVzKys7CisgICAgfQor
CisgICAgdm9pZCBvblVwbG9hZCgpCisgICAgeworICAgICAgICAvLyBDaGVjayBmb3IgdG9vIG1h
bnkgY29uc2VjdXRpdmUgdXBsb2FkcworICAgICAgICBpZiAobV9udW1Ub3RhbFVwbG9hZHMgPCBt
X3VwbG9hZENvdW50KQorICAgICAgICAgICAgRVhQRUNUX0xFKG1fbnVtQ29uc2VjdXRpdmVVcGxv
YWRzLCBrRmx1c2hQZXJpb2QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfTEUo
bV9udW1Db25zZWN1dGl2ZVVwbG9hZHMsIGtGbHVzaFBlcmlvZFBhcnRpYWwpOworCisgICAgICAg
IG1fbnVtQ29uc2VjdXRpdmVGbHVzaGVzID0gMDsKKyAgICAgICAgbV9udW1Db25zZWN1dGl2ZVVw
bG9hZHMrKzsKKyAgICAgICAgbV9udW1Ub3RhbFVwbG9hZHMrKzsKKyAgICB9CisKKyAgICB2b2lk
IGZpbmFsVmVyaWZpY2F0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIFdlIGV4cGVjdCB0aGUgZmlu
YWwgdXBsb2FkIHRvIGJlIGZvbGxvd2VkIGJ5IGEgZmx1c2guCisgICAgICAgIEVYUEVDVF9FUSgw
LCBtX251bUNvbnNlY3V0aXZlVXBsb2Fkcyk7CisgICAgICAgIEVYUEVDVF9FUShtX3RvdGFsQ291
bnQgPyAxIDogMCwgbV9udW1Db25zZWN1dGl2ZUZsdXNoZXMpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBpbnQgbV91cGxvYWRDb3VudDsKKyAgICBpbnQgbV9wYXJ0aWFsQ291bnQ7CisgICAgaW50
IG1fdG90YWxDb3VudDsKKworICAgIGludCBtX251bUNvbnNlY3V0aXZlRmx1c2hlczsKKyAgICBp
bnQgbV9udW1Db25zZWN1dGl2ZVVwbG9hZHM7CisgICAgaW50IG1fbnVtVG90YWxVcGxvYWRzOwor
fTsKKworY2xhc3MgQ0NUZXh0dXJlVXBkYXRlclRlc3QgOiBwdWJsaWMgVGVzdCB7Citwcm90ZWN0
ZWQ6CisgICAgdm9pZCB1cGRhdGVUZXN0KGludCB1cGxvYWRDb3VudCwgaW50IHBhcnRpYWxDb3Vu
dCkKKyAgICB7CisgICAgICAgIGludCB0b3RhbENvdW50ID0gdXBsb2FkQ291bnQgKyBwYXJ0aWFs
Q291bnQ7CisKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtYWluQ29udGV4dCA9
CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGlj
c0NvbnRleHRGcm9tV2ViQ29udGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkb3B0UHRy
KG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisKKyAgICAgICAgUmVm
UHRyPENDR3JhcGhpY3NDb250ZXh0PiBjY01haW5Db250ZXh0ID0KKyAgICAgICAgICAgICAgICBD
Q0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QobWFpbkNvbnRleHQpOworCisgICAgICAgIE1vY2tD
YW52YXNDb250ZXh0JiBtYWluTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+
KAorICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdy
YXBoaWNzQ29udGV4dDNEKAorICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkNvbnRleHQuZ2V0
KCkpKTsKKworICAgICAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIgPQorICAgICAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBGYWtlTGF5ZXJUZXh0
dXJlVXBkYXRlcik7CisKKyAgICAgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9CisgICAgICAgICAgICAgICAgVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAy
NCwgMioxMDI0KjEwMjQsIDEwMjQpOworCisgICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRl
cjsKKyAgICAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yOworICAgICAgICBNb2Nr
VGV4dHVyZUNvcGllciBjb3BpZXJNb2NrOworICAgICAgICBNb2NrVGV4dHVyZVVwbG9hZGVyIHVw
bG9hZGVyTW9jazsKKworICAgICAgICBjb25zdCBJbnRTaXplIHNpemUoMzAwLCAxNTApOworICAg
ICAgICBjb25zdCBJbnRSZWN0IHJlY3QoMCwgMCwgMTAwLCAxMDApOworCisgICAgICAgIE93blB0
cjxXZWJUaHJlYWQ+IHRocmVhZDsKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSh0
aHJlYWQuZ2V0KCkpOworCisgICAgICAgIC8vIENyZWF0ZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHRl
eHR1cmVzIGFuZCBwcmVwYXJlIHRoZW0gZm9yIHVwbG9hZC4KKyAgICAgICAgT3duUHRyPExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGx0dXRbdXBsb2FkQ291bnRdOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHVwbG9hZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGx0dXRbaV0g
PSBmYWtlTGF5ZXJUZXh0dXJlVXBkYXRlci0+Y3JlYXRlVGV4dHVyZSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSk7CisgICAgICAgICAgICBsdHV0W2ldLT50ZXh0dXJlKCktPnJlc2VydmUoc2l6ZSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEpOworICAgICAgICAgICAgdXBkYXRlci5hcHBlbmRVcGRhdGUo
bHR1dFtpXS5nZXQoKSwgcmVjdCwgcmVjdCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDcmVh
dGUgcmVxdWVzdGVkIG51bWJlciBvZiBwYXJ0aWFsIHRleHR1cmVzIGFuZCBwcmVwYXJlIHRoZW0g
Zm9yIHVwbG9hZC4KKyAgICAgICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+
IGx0dXRwW3BhcnRpYWxDb3VudF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydGlh
bENvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGx0dXRwW2ldID0gZmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXItPmNyZWF0ZVRleHR1cmUodGV4dHVyZU1hbmFnZXIuZ2V0KCkpOworICAgICAgICAgICAg
bHR1dHBbaV0tPnRleHR1cmUoKS0+cmVzZXJ2ZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSk7CisgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZFBhcnRpYWxVcGRhdGUobHR1dHBbaV0uZ2V0
KCksIHJlY3QsIHJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQmFzaWMgZXhwZWN0YXRp
b25zIGZvciB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGNlcnRhaW4gbWV0aG9kcy4KKyAgICAgICAg
aW50IGV4cGVjdGVkRmx1c2hDb3VudCA9CisgICAgICAgICAgICAgICAgKCh1cGxvYWRDb3VudCAr
IGtGbHVzaFBlcmlvZCAtIDEpIC8ga0ZsdXNoUGVyaW9kKSArCisgICAgICAgICAgICAgICAgKChw
YXJ0aWFsQ291bnQgKyBrRmx1c2hQZXJpb2RQYXJ0aWFsIC0gMSkgLyBrRmx1c2hQZXJpb2RQYXJ0
aWFsKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9jaywgZmx1c2goKSkKKyAgICAgICAg
ICAgICAgICAuVGltZXMoRXhhY3RseShleHBlY3RlZEZsdXNoQ291bnQpKTsKKyAgICAgICAgRVhQ
RUNUX0NBTEwodXBsb2FkZXJNb2NrLCB1cGxvYWRUZXh0dXJlKF8sIF8sIF8sIF8sIF8pKQorICAg
ICAgICAgICAgICAgIC5UaW1lcyhFeGFjdGx5KHRvdGFsQ291bnQpKTsKKyAgICAgICAgRVhQRUNU
X0NBTEwoY29waWVyTW9jaywgY29weVRleHR1cmUoXywgXywgXywgXykpCisgICAgICAgICAgICAg
ICAgLlRpbWVzKEV4YWN0bHkoMCkpOworCisgICAgICAgIC8vIE1vcmUgaW50ZXJlc3RpbmcgY2hl
Y2tzOgorICAgICAgICAvLyBObyBiYWNrIHRvIGJhY2sgZmx1c2hlcywgdG9vIG1hbnkgY29uc2Vj
dXRpdmUgdXBsb2FkcywgZXRjLgorICAgICAgICBHbG9iYWxUcmFja2VyIGdsb2JhbFRyYWNrZXIo
dXBsb2FkQ291bnQsIHBhcnRpYWxDb3VudCk7CisgICAgICAgIE9OX0NBTEwobWFpbk1vY2ssIGZs
dXNoKCkpCisgICAgICAgICAgICAgICAgLldpbGxCeURlZmF1bHQoSW52b2tlV2l0aG91dEFyZ3Mo
Jmdsb2JhbFRyYWNrZXIsICZHbG9iYWxUcmFja2VyOjpvbkZsdXNoKSk7CisgICAgICAgIE9OX0NB
TEwodXBsb2FkZXJNb2NrLCB1cGxvYWRUZXh0dXJlKF8sIF8sIF8sIF8sIF8pKQorICAgICAgICAg
ICAgICAgIC5XaWxsQnlEZWZhdWx0KEludm9rZVdpdGhvdXRBcmdzKCZnbG9iYWxUcmFja2VyLCAm
R2xvYmFsVHJhY2tlcjo6b25VcGxvYWQpKTsKKworICAgICAgICAvLyBEbyB0aGUgdXBsb2Fkcy4K
KyAgICAgICAgdXBkYXRlci51cGRhdGUoY2NNYWluQ29udGV4dC5nZXQoKSwgJmFsbG9jYXRvciwg
JmNvcGllck1vY2ssICZ1cGxvYWRlck1vY2ssIDEwMCk7CisKKyAgICAgICAgZ2xvYmFsVHJhY2tl
ci5maW5hbFZlcmlmaWNhdGlvbigpOworICAgICAgICA6OnRlc3Rpbmc6Ok1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKCZtYWluTW9jayk7CisgICAgICAgIDo6dGVzdGluZzo6TW9jazo6
VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJmNvcGllck1vY2spOworICAgICAgICA6OnRlc3Rp
bmc6Ok1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZ1cGxvYWRlck1vY2spOworCisg
ICAgICAgIFdlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CisgICAgfQorfTsKKworVEVTVF9GKEND
VGV4dHVyZVVwZGF0ZXJUZXN0LCBaZXJvVGV4dHVyZVVwbG9hZHMpCit7CisgICAgdXBkYXRlVGVz
dCgwLCAwKTsKK30KKworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBPbmVUZXh0dXJlVXBs
b2FkKQoreworICAgIHVwZGF0ZVRlc3QoMSwgMCk7CisgICAgdXBkYXRlVGVzdCgwLCAxKTsKKyAg
ICB1cGRhdGVUZXN0KDEsIDEpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1h
bnlUZXh0dXJlVXBsb2Fkc05vUmVtYWluZGVyKQoreworICAgIGludCBjb3VudDEgPSAxMCAqIGtG
bHVzaFBlcmlvZDsKKyAgICBpbnQgY291bnQyID0gMTAgKiBrRmx1c2hQZXJpb2RQYXJ0aWFsOwor
CisgICAgdXBkYXRlVGVzdChjb3VudDEsIDApOworICAgIHVwZGF0ZVRlc3QoY291bnQxLCAxKTsK
KworICAgIHVwZGF0ZVRlc3QoMCwgY291bnQyKTsKKyAgICB1cGRhdGVUZXN0KDEsIGNvdW50Mik7
CisKKyAgICB1cGRhdGVUZXN0KGNvdW50MSwgY291bnQyKTsKK30KKworVEVTVF9GKENDVGV4dHVy
ZVVwZGF0ZXJUZXN0LCBNYW55VGV4dHVyZVVwbG9hZHNNaW5SZW1haW5kZXIpCit7CisgICAgaW50
IGNvdW50MSA9ICgxMCAqIGtGbHVzaFBlcmlvZCkgKyAxOworICAgIGludCBjb3VudDIgPSAoMTAg
KiBrRmx1c2hQZXJpb2RQYXJ0aWFsKSArIDE7CisKKyAgICB1cGRhdGVUZXN0KGNvdW50MSwgMCk7
CisgICAgdXBkYXRlVGVzdChjb3VudDEsIDEpOworICAgIHVwZGF0ZVRlc3QoY291bnQxLCBrRmx1
c2hQZXJpb2RQYXJ0aWFsKTsKKworICAgIHVwZGF0ZVRlc3QoMCwgY291bnQyKTsKKyAgICB1cGRh
dGVUZXN0KDEsIGNvdW50Mik7CisgICAgdXBkYXRlVGVzdChrRmx1c2hQZXJpb2QsIGNvdW50Mik7
CisKKyAgICB1cGRhdGVUZXN0KGNvdW50MSwgY291bnQyKTsKK30KKworVEVTVF9GKENDVGV4dHVy
ZVVwZGF0ZXJUZXN0LCBNYW55VGV4dHVyZVVwbG9hZHNNYXhSZW1haW5kZXIpCit7CisgICAgaW50
IGNvdW50MSA9ICgxMCAqIGtGbHVzaFBlcmlvZCkgLSAxOworICAgIGludCBjb3VudDIgPSAoMTAg
KiBrRmx1c2hQZXJpb2RQYXJ0aWFsKSAtIDE7CisKKyAgICB1cGRhdGVUZXN0KGNvdW50MSwgMCk7
CisgICAgdXBkYXRlVGVzdChjb3VudDEsIDEpOworICAgIHVwZGF0ZVRlc3QoY291bnQxLCBrRmx1
c2hQZXJpb2RQYXJ0aWFsKTsKKworICAgIHVwZGF0ZVRlc3QoMCwgY291bnQyKTsKKyAgICB1cGRh
dGVUZXN0KDEsIGNvdW50Mik7CisgICAgdXBkYXRlVGVzdChrRmx1c2hQZXJpb2QsIGNvdW50Mik7
CisKKyAgICB1cGRhdGVUZXN0KGNvdW50MSwgY291bnQyKTsKK30KKworVEVTVF9GKENDVGV4dHVy
ZVVwZGF0ZXJUZXN0LCBNYW55VGV4dHVyZVVwbG9hZHNNaW5NYXhSZW1haW5kZXIpCit7CisgICAg
dXBkYXRlVGVzdCgoMTAgKiBrRmx1c2hQZXJpb2QpICsgMSwgKDEwICoga0ZsdXNoUGVyaW9kUGFy
dGlhbCkgLSAxKTsKKyAgICB1cGRhdGVUZXN0KCgxMCAqIGtGbHVzaFBlcmlvZCkgLSAxLCAoMTAg
KiBrRmx1c2hQZXJpb2RQYXJ0aWFsKSArIDEpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVz
dC5jcHAKaW5kZXggNWUzMDFkOGViNDE5NDA3OTczZDA0MmUzZDkzN2JmZWZmNTgwMjU5Zi4uZTJj
NWUwNzEzMmU5MDU2OGQ1Nzc1MjM5OGFhOTE1MjQ1OTY0YjRiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBA
IC0yNDUsNiArMjQ1LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNB
ZnRlcklkbGVQYWludEZhaWxlZCkKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVySW1wbDEoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtlVGls
ZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgT3duUHRyPEZha2VD
Q1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwyKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSkpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGNyZWF0
ZUNvbXBvc2l0b3JNb2NrR3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMoKSk7CisgICAgUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjY0NvbnRleHQgPSBDQ0dy
YXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QoY29udGV4dCk7CiAKICAgICBDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXI7CiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yOwpAQCAtMjc1LDcg
KzI3Nyw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzQWZ0ZXJJZGxl
UGFpbnRGYWlsZWQpCiAgICAgRVhQRUNUX1RSVUUobGF5ZXIyLT5uZWVkc0lkbGVQYWludChsYXll
cjJSZWN0KSk7CiAKICAgICAvLyBDb21taXQgdGhlIGZyYW1lIG92ZXIgdG8gaW1wbC4KLSAgICB1
cGRhdGVyLnVwZGF0ZSgwLCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2FkZXIsIDUwMDApOwor
ICAgIHVwZGF0ZXIudXBkYXRlKGNjQ29udGV4dC5nZXQoKSwgJmFsbG9jYXRvciwgJmNvcGllciwg
JnVwbG9hZGVyLCA1MDAwKTsKICAgICBsYXllcjEtPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBs
MS5nZXQoKSk7CiAgICAgbGF5ZXIyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbDIuZ2V0KCkp
OwogCkBAIC0yODQsNyArMjg2LDcgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNo
VGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKICAgICBsYXllcjItPmlkbGVVcGRhdGVMYXllclJl
Y3QodXBkYXRlciwgbGF5ZXIyUmVjdCwgMCk7CiAKICAgICAvLyBPaCB3ZWxsLCBjb21taXQgdGhl
IGZyYW1lIGFuZCBwdXNoLgotICAgIHVwZGF0ZXIudXBkYXRlKDAsICZhbGxvY2F0b3IsICZjb3Bp
ZXIsICZ1cGxvYWRlciwgNTAwMCk7CisgICAgdXBkYXRlci51cGRhdGUoY2NDb250ZXh0LmdldCgp
LCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2FkZXIsIDUwMDApOwogICAgIGxheWVyMS0+cHVz
aFByb3BlcnRpZXNUbyhsYXllckltcGwxLmdldCgpKTsKICAgICBsYXllcjItPnB1c2hQcm9wZXJ0
aWVzVG8obGF5ZXJJbXBsMi5nZXQoKSk7CiAKQEAgLTMwMyw3ICszMDUsNyBAQCBURVNUKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQogICAgIGxh
eWVyMi0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGxheWVyMlJlY3QsIDApOwogICAgIGxheWVy
MS0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoKSwgMCk7CiAKLSAgICB1cGRhdGVy
LnVwZGF0ZSgwLCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2FkZXIsIDUwMDApOworICAgIHVw
ZGF0ZXIudXBkYXRlKGNjQ29udGV4dC5nZXQoKSwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9h
ZGVyLCA1MDAwKTsKICAgICBsYXllcjEtPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsMS5nZXQo
KSk7CiAgICAgbGF5ZXIyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbDIuZ2V0KCkpOwogCkBA
IC04ODIsNiArODg0LDkgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBk
YXRlcykKICAgICBGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50IGZha2VDQ0xheWVyVHJlZUhvc3RD
bGllbnQ7CiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdD4gY2NMYXllclRyZWVIb3N0ID0gQ0NM
YXllclRyZWVIb3N0OjpjcmVhdGUoJmZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHNldHRpbmdz
KTsKIAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGNyZWF0ZUNvbXBv
c2l0b3JNb2NrR3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMo
KSk7CisgICAgUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjY0NvbnRleHQgPSBDQ0dyYXBoaWNz
Q29udGV4dDo6Y3JlYXRlM0QoY29udGV4dCk7CisKICAgICAvLyBDcmVhdGUgb25lIDUwMCB4IDMw
MCB0aWxlZCBsYXllci4KICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAyMDApOwogICAg
IEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CkBA
IC05MDUsMTEgKzkxMCwxMSBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxV
cGRhdGVzKQogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwotICAgICAgICB1cGRhdGVyLnVwZGF0
ZSgwLCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2FkZXIsIDQpOworICAgICAgICB1cGRhdGVy
LnVwZGF0ZShjY0NvbnRleHQuZ2V0KCksICZhbGxvY2F0b3IsICZjb3BpZXIsICZ1cGxvYWRlciwg
NCk7CiAgICAgICAgIEVYUEVDVF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHVwZGF0ZXIuaGFzTW9yZVVw
ZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVh
clVwZGF0ZUNvdW50KCk7Ci0gICAgICAgIHVwZGF0ZXIudXBkYXRlKDAsICZhbGxvY2F0b3IsICZj
b3BpZXIsICZ1cGxvYWRlciwgNCk7CisgICAgICAgIHVwZGF0ZXIudXBkYXRlKGNjQ29udGV4dC5n
ZXQoKSwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9hZGVyLCA0KTsKICAgICAgICAgRVhQRUNU
X0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsK
ICAgICAgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAg
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CkBA
IC05MjMsMTEgKzkyOCwxMSBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxV
cGRhdGVzKQogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwotICAgICAgICB1cGRhdGVyLnVwZGF0
ZSgwLCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2FkZXIsIDQpOworICAgICAgICB1cGRhdGVy
LnVwZGF0ZShjY0NvbnRleHQuZ2V0KCksICZhbGxvY2F0b3IsICZjb3BpZXIsICZ1cGxvYWRlciwg
NCk7CiAgICAgICAgIEVYUEVDVF9FUSgzLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHVwZGF0ZXIuaGFzTW9yZVVw
ZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVh
clVwZGF0ZUNvdW50KCk7Ci0gICAgICAgIHVwZGF0ZXIudXBkYXRlKDAsICZhbGxvY2F0b3IsICZj
b3BpZXIsICZ1cGxvYWRlciwgNCk7CisgICAgICAgIHVwZGF0ZXIudXBkYXRlKGNjQ29udGV4dC5n
ZXQoKSwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9hZGVyLCA0KTsKICAgICAgICAgRVhQRUNU
X0VRKDMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsK
ICAgICAgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAg
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CkBA
IC05NDEsMTEgKzk0NiwxMSBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxV
cGRhdGVzKQogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAg
ICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAgICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBk
YXRlTGF5ZXJzKHVwZGF0ZXIpOwotICAgICAgICB1cGRhdGVyLnVwZGF0ZSgwLCAmYWxsb2NhdG9y
LCAmY29waWVyLCAmdXBsb2FkZXIsIDQpOworICAgICAgICB1cGRhdGVyLnVwZGF0ZShjY0NvbnRl
eHQuZ2V0KCksICZhbGxvY2F0b3IsICZjb3BpZXIsICZ1cGxvYWRlciwgNCk7CiAgICAgICAgIEVY
UEVDVF9FUSgyLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQo
KSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAg
ICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7
Ci0gICAgICAgIHVwZGF0ZXIudXBkYXRlKDAsICZhbGxvY2F0b3IsICZjb3BpZXIsICZ1cGxvYWRl
ciwgNCk7CisgICAgICAgIHVwZGF0ZXIudXBkYXRlKGNjQ29udGV4dC5nZXQoKSwgJmFsbG9jYXRv
ciwgJmNvcGllciwgJnVwbG9hZGVyLCA0KTsKICAgICAgICAgRVhQRUNUX0VRKDQsIGxheWVyLT5m
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNU
X0ZBTFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtlTGF5
ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CkBAIC05NjgsMTEgKzk3Mywx
MSBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQogICAgICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICAgICAgT3duUHRyPEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDApKSk7CiAgICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0
ZXIpOwotICAgICAgICB1cGRhdGVyLnVwZGF0ZSgwLCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBs
b2FkZXIsIDQpOworICAgICAgICB1cGRhdGVyLnVwZGF0ZShjY0NvbnRleHQuZ2V0KCksICZhbGxv
Y2F0b3IsICZjb3BpZXIsICZ1cGxvYWRlciwgNCk7CiAgICAgICAgIEVYUEVDVF9FUSg0LCBsYXll
ci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVY
UEVDVF9UUlVFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7Ci0gICAgICAgIHVwZGF0
ZXIudXBkYXRlKDAsICZhbGxvY2F0b3IsICZjb3BpZXIsICZ1cGxvYWRlciwgNCk7CisgICAgICAg
IHVwZGF0ZXIudXBkYXRlKGNjQ29udGV4dC5nZXQoKSwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVw
bG9hZGVyLCA0KTsKICAgICAgICAgRVhQRUNUX0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZXIu
aGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
cigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CkBAIC05ODYsNyArOTkxLDcgQEAgVEVTVChUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogICAg
ICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyKTsKLSAgICAgICAgdXBk
YXRlci51cGRhdGUoMCwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9hZGVyLCA0KTsKKyAgICAg
ICAgdXBkYXRlci51cGRhdGUoY2NDb250ZXh0LmdldCgpLCAmYWxsb2NhdG9yLCAmY29waWVyLCAm
dXBsb2FkZXIsIDQpOwogICAgICAgICBFWFBFQ1RfRVEoNCwgbGF5ZXItPmZha2VMYXllclRleHR1
cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1RfRkFMU0UodXBkYXRl
ci5oYXNNb3JlVXBkYXRlcygpKTsKICAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150699</attachid>
            <date>2012-07-03 17:49:29 -0700</date>
            <delta_ts>2012-07-11 19:26:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120703174928.patch</filename>
            <type>text/plain</type>
            <size>23806</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzExZTU3MWU4NmZlYjIw
ZTExOGE4NmJmOGIxYzZjZGYwMDYzNDZjMS4uODJiZDI3YjgzNjA3NjdjZDhlZDUxYjU5ODdlNjIz
NDkwYjA1OWRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE4IEBACiAyMDEyLTA3LTAzICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KIAorICAgICAgICBBZGQgZmx1
c2hlcyB0byBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlclRlc3QgYWRkZWQgdG8gdmVy
aWZ5IHRleHR1cmUgdXBsb2FkL2ZsdXNoaW5nIHBhdHRlcm5zLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisK
KzIwMTItMDctMDMgIEJyaWFuIEFuZGVyc29uICA8YnJpYW5kZXJzb25AY2hyb21pdW0ub3JnPgor
CiAgICAgICAgIE1ha2UgZnVsbCB0ZXh0dXJlIHVwZGF0ZXMgZXhwbGljaXQKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNTA3CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggOGYwZDhiNjNhMTFjZWRhY2IzYjVmMmQ3YWRmYzM5YmQ2ZTAwNWE4
Yi4uNzczYmViZDZkOGZiYTQ1Y2Q0MmVmZGQ1NzMzODE0ZDNlZjFlYWY0MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNy0wMyAgQnJpYW4gQW5kZXJz
b24gIDxicmlhbmRlcnNvbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIGZsdXNoZXMgdG8g
Q0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04OTAzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NUZXh0dXJl
VXBkYXRlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21p
dW1UZXN0LmNwcDoKKyAgICAgICAgKFdURjo6VEVTVCk6CisKIDIwMTItMDUtMzEgIEFsZXhhbmRl
ciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbQ2hyb21pdW1dIENhbm5vdCBicmluZyBJbnNwZWN0b3IgdG8gZnJvbnQgd2hlbiBwYXVzZWQg
b24gYnJlYWtwb2ludApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCA3NTk5
YmEzMGM5MzA0ZjNlYzVhODJkN2I0YzAwOTkwZGYzODFlODNmLi5mNzVmZmU2NTQ1Y2NjMjBmYzYz
ZGVmZGFjYjU1YWQ3NGZiZmI2ODYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNw
cApAQCAtMzksNiArMzksOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQga1VwbG9hZEZsdXNoUGVyaW9kID0gNDsKKwogQ0NU
ZXh0dXJlVXBkYXRlcjo6Q0NUZXh0dXJlVXBkYXRlcigpCiAgICAgOiBtX2VudHJ5SW5kZXgoMCkK
IHsKQEAgLTEwMiwxMiArMTA0LDIwIEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvCiAKICAgICAg
ICAgdXBsb2FkZXItPmJlZ2luVXBsb2FkcygpOwogCisgICAgICAgIGludCB1cGxvYWRDb3VudCA9
IDA7CiAgICAgICAgIHNpemVfdCBtYXhJbmRleCA9IG1pbihtX2VudHJ5SW5kZXggKyBjb3VudCwg
bV9mdWxsRW50cmllcy5zaXplKCkpOwogICAgICAgICBmb3IgKGluZGV4ID0gbV9lbnRyeUluZGV4
OyBpbmRleCA8IG1heEluZGV4OyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVFbnRyeSYg
ZW50cnkgPSBtX2Z1bGxFbnRyaWVzW2luZGV4XTsKICAgICAgICAgICAgIHVwbG9hZGVyLT51cGxv
YWRUZXh0dXJlKGNvbnRleHQsIGVudHJ5LnRleHR1cmUsIGFsbG9jYXRvciwgZW50cnkuc291cmNl
UmVjdCwgZW50cnkuZGVzdFJlY3QpOworICAgICAgICAgICAgdXBsb2FkQ291bnQrKzsKKyAgICAg
ICAgICAgIGlmICghKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kKSkKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5mbHVzaCgpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gTWFrZSBz
dXJlIHRoZXJlIGFyZSBubyBkYW5nbGluZyB1cGxvYWRzIHdpdGhvdXQgYSBmbHVzaC4KKyAgICAg
ICAgaWYgKHVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNoUGVyaW9kKQorICAgICAgICAgICAgY29u
dGV4dC0+Zmx1c2goKTsKKwogICAgICAgICBib29sIG1vcmVVcGxvYWRzID0gbWF4SW5kZXggPCBt
X2Z1bGxFbnRyaWVzLnNpemUoKTsKIAogICAgICAgICBBU1NFUlQobV9wYXJ0aWFsRW50cmllcy5z
aXplKCkgPD0gY291bnQpOwpAQCAtMTIyLDExICsxMzIsMTkgQEAgdm9pZCBDQ1RleHR1cmVVcGRh
dGVyOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3Iq
IGFsbG8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGludCBwYXJ0
aWFsVXBsb2FkQ291bnQgPSAwOwogICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtX3Bh
cnRpYWxFbnRyaWVzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICAgICAgVXBkYXRlRW50cnkm
IGVudHJ5ID0gbV9wYXJ0aWFsRW50cmllc1tpbmRleF07CiAgICAgICAgICAgICB1cGxvYWRlci0+
dXBsb2FkVGV4dHVyZShjb250ZXh0LCBlbnRyeS50ZXh0dXJlLCBhbGxvY2F0b3IsIGVudHJ5LnNv
dXJjZVJlY3QsIGVudHJ5LmRlc3RSZWN0KTsKKyAgICAgICAgICAgIHBhcnRpYWxVcGxvYWRDb3Vu
dCsrOworICAgICAgICAgICAgaWYgKCEocGFydGlhbFVwbG9hZENvdW50ICUga1VwbG9hZEZsdXNo
UGVyaW9kKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5mbHVzaCgpOwogICAgICAgICB9CiAK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkYW5nbGluZyBwYXJ0aWFsIHVwbG9h
ZHMgd2l0aG91dCBhIGZsdXNoLgorICAgICAgICBpZiAocGFydGlhbFVwbG9hZENvdW50ICUga1Vw
bG9hZEZsdXNoUGVyaW9kKQorICAgICAgICAgICAgY29udGV4dC0+Zmx1c2goKTsKKwogICAgICAg
ICB1cGxvYWRlci0+ZW5kVXBsb2FkcygpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggMzBjNTMxM2MyMzEzMTViMzQ1Yjc4NWIxNmY1YjAzZjNkMDE1MWI3My4uYTVh
OWQ0MGQ0MzU3MmE1MTFhZjE4MDlkY2JmZWU4OWU0YzRhMjliYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC04Nyw2ICs4Nyw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hl
ZHVsZXJUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwJywK
KyAgICAgICAgICAgICd0ZXN0cy9DQ1RleHR1cmVVcGRhdGVyVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDVGlsZWRMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NUaWxlZExheWVyVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUZXh0dXJlVXBkYXRlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4NDU3NWI3NDU4NDEzNzMy
ODk1N2QwOTM4YzI2MmM0NTZhZGYwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcApAQCAtMCwwICsxLDM3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NU
ZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgor
I2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKKyNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyB0ZXN0
aW5nOjpUZXN0OworCisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGludCBrRmx1c2hQZXJpb2QgPSA0
OworY29uc3QgaW50IGtGbHVzaFBlcmlvZFBhcnRpYWwgPSBrRmx1c2hQZXJpb2Q7Citjb25zdCBp
bnQga01heFVwbG9hZHMgPSAxMDAwOyAvLyBTaG91bGQgYmUgYmlnZ2VyIHRoYW4gd2UnbGwgbmVl
ZCBpbiBhbnkgb2YgdGhlc2UgdGVzdHMuCisKKworLy8gVHJhY2tzIG1ldGhvZCBjYWxsIHBhdHRl
cm5zIGFjcm9zcyBkaWZmZXJlbnQgY2xhc3Nlcy4KK2NsYXNzIEdsb2JhbFRyYWNrZXIgeworcHVi
bGljOgorICAgIEdsb2JhbFRyYWNrZXIoKQorICAgIDogbV9iYWNrVG9CYWNrRmx1c2hEZXRlY3Rl
ZChmYWxzZSkKKyAgICAsIG1fcHJlbWF0dXJlRmx1c2hEZXRlY3RlZChmYWxzZSkKKyAgICAsIG1f
dG9vTWFueUNvbnNlY3V0aXZlVXBsb2Fkc0RldGVjdGVkKGZhbHNlKQorICAgICwgbV91cGxvYWRD
b3VudCgwKQorICAgICwgbV9wYXJ0aWFsQ291bnQoMCkKKyAgICAsIG1fdG90YWxDb3VudCgwKQor
ICAgICwgbV9udW1Db25zZWN1dGl2ZUZsdXNoZXMoMCkKKyAgICAsIG1fbnVtQ29uc2VjdXRpdmVV
cGxvYWRzKDApCisgICAgLCBtX251bVRvdGFsVXBsb2FkcygwKQorICAgICwgbV9udW1Ub3RhbEZs
dXNoZXMoMCkKKyAgICB7IH0KKworICAgIHZvaWQgb25BcHBlbmRGdWxsVXBsb2FkcyhpbnQgY291
bnQpCisgICAgeworICAgICAgICAgbV91cGxvYWRDb3VudCArPSBjb3VudDsKKyAgICAgICAgIG1f
dG90YWxDb3VudCArPSBjb3VudDsKKyAgICB9CisKKyAgICB2b2lkIG9uQXBwZW5kUGFydGlhbFVw
bG9hZHMoaW50IGNvdW50KQorICAgIHsKKyAgICAgICAgIG1fcGFydGlhbENvdW50ICs9IGNvdW50
OworICAgICAgICAgbV90b3RhbENvdW50ICs9IGNvdW50OworICAgIH0KKworICAgIHZvaWQgb25G
bHVzaCgpCisgICAgeworICAgICAgICAvLyBDaGVjayBmb3IgYmFjay10by1iYWNrIGZsdXNoZXMu
CisgICAgICAgIG1fYmFja1RvQmFja0ZsdXNoRGV0ZWN0ZWQgfD0gbV9udW1Db25zZWN1dGl2ZUZs
dXNoZXM7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIHByZW1hdHVyZSBmbHVzaGVzCisgICAgICAg
IGlmIChtX251bVRvdGFsVXBsb2FkcyA8IG1fdXBsb2FkQ291bnQpCisgICAgICAgICAgICBtX3By
ZW1hdHVyZUZsdXNoRGV0ZWN0ZWQgfD0gbV9udW1Db25zZWN1dGl2ZVVwbG9hZHMgPCBrRmx1c2hQ
ZXJpb2Q7CisgICAgICAgIGVsc2UgaWYgKG1fbnVtVG90YWxVcGxvYWRzID4gbV91cGxvYWRDb3Vu
dCAmJiBtX251bVRvdGFsVXBsb2FkcyA8IG1fdG90YWxDb3VudCkKKyAgICAgICAgICAgIG1fcHJl
bWF0dXJlRmx1c2hEZXRlY3RlZCB8PSBtX251bUNvbnNlY3V0aXZlVXBsb2FkcyA8IGtGbHVzaFBl
cmlvZFBhcnRpYWw7CisKKyAgICAgICAgbV9udW1Db25zZWN1dGl2ZVVwbG9hZHMgPSAwOworICAg
ICAgICBtX251bUNvbnNlY3V0aXZlRmx1c2hlcysrOworICAgICAgICBtX251bVRvdGFsRmx1c2hl
cysrOworICAgIH0KKworICAgIHZvaWQgb25VcGxvYWQoKQorICAgIHsKKyAgICAgICAgLy8gQ2hl
Y2sgZm9yIHRvbyBtYW55IGNvbnNlY3V0aXZlIHVwbG9hZHMKKyAgICAgICAgaWYgKG1fbnVtVG90
YWxVcGxvYWRzIDwgbV91cGxvYWRDb3VudCkKKyAgICAgICAgICAgIG1fdG9vTWFueUNvbnNlY3V0
aXZlVXBsb2Fkc0RldGVjdGVkIHw9IG1fbnVtQ29uc2VjdXRpdmVVcGxvYWRzID49IGtGbHVzaFBl
cmlvZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV90b29NYW55Q29uc2VjdXRpdmVVcGxv
YWRzRGV0ZWN0ZWQgfD0gbV9udW1Db25zZWN1dGl2ZVVwbG9hZHMgPj0ga0ZsdXNoUGVyaW9kUGFy
dGlhbDsKKworICAgICAgICBtX251bUNvbnNlY3V0aXZlRmx1c2hlcyA9IDA7CisgICAgICAgIG1f
bnVtQ29uc2VjdXRpdmVVcGxvYWRzKys7CisgICAgICAgIG1fbnVtVG90YWxVcGxvYWRzKys7Cisg
ICAgfQorCisgICAgdm9pZCB2ZXJpZnkoKQorICAgIHsKKyAgICAgICAgLy8gV2UgZXhwZWN0IHRo
ZSBmaW5hbCB1cGxvYWQgdG8gYmUgZm9sbG93ZWQgYnkgYSBmbHVzaC4KKyAgICAgICAgRVhQRUNU
X0VRKDAsIG1fbnVtQ29uc2VjdXRpdmVVcGxvYWRzKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fdG90
YWxDb3VudCA/IDEgOiAwLCBtX251bUNvbnNlY3V0aXZlRmx1c2hlcyk7CisKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKG1fYmFja1RvQmFja0ZsdXNoRGV0ZWN0ZWQpOworICAgICAgICBFWFBFQ1RfRkFM
U0UobV9wcmVtYXR1cmVGbHVzaERldGVjdGVkKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG1fdG9v
TWFueUNvbnNlY3V0aXZlVXBsb2Fkc0RldGVjdGVkKTsKKworICAgICAgICBpbnQgZXhwZWN0ZWRG
bHVzaENvdW50ID0KKyAgICAgICAgICAgICAgICAoKG1fdXBsb2FkQ291bnQgKyBrRmx1c2hQZXJp
b2QgLSAxKSAvIGtGbHVzaFBlcmlvZCkgKworICAgICAgICAgICAgICAgICgobV9wYXJ0aWFsQ291
bnQgKyBrRmx1c2hQZXJpb2RQYXJ0aWFsIC0gMSkgLyBrRmx1c2hQZXJpb2RQYXJ0aWFsKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkRmx1c2hDb3VudCwgbV9udW1Ub3RhbEZsdXNoZXMpOwor
CisgICAgICAgIEVYUEVDVF9FUShtX3RvdGFsQ291bnQsIG1fbnVtVG90YWxVcGxvYWRzKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2JhY2tUb0JhY2tGbHVzaERldGVjdGVkOworICAg
IGJvb2wgbV9wcmVtYXR1cmVGbHVzaERldGVjdGVkOworICAgIGJvb2wgbV90b29NYW55Q29uc2Vj
dXRpdmVVcGxvYWRzRGV0ZWN0ZWQ7CisKKyAgICBpbnQgbV91cGxvYWRDb3VudDsKKyAgICBpbnQg
bV9wYXJ0aWFsQ291bnQ7CisgICAgaW50IG1fdG90YWxDb3VudDsKKworICAgIGludCBtX251bUNv
bnNlY3V0aXZlRmx1c2hlczsKKyAgICBpbnQgbV9udW1Db25zZWN1dGl2ZVVwbG9hZHM7CisgICAg
aW50IG1fbnVtVG90YWxVcGxvYWRzOworICAgIGludCBtX251bVRvdGFsRmx1c2hlczsKK307CisK
KworY2xhc3MgTXlGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNeUZha2VXZWJHcmFwaGljc0NvbnRleHQzRChH
bG9iYWxUcmFja2VyICpndCkgOiBtX2dsb2JhbFRyYWNrZXIoZ3QpIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIGZsdXNoKHZvaWQpIE9WRVJSSURFIHsgbV9nbG9iYWxUcmFja2VyLT5vbkZsdXNoKCk7
IH0KKworICAgIHZpcnR1YWwgR3JHTEludGVyZmFjZSogb25DcmVhdGVHckdMSW50ZXJmYWNlKCkg
T1ZFUlJJREUgeyByZXR1cm4gMDsgfQorCitwcml2YXRlOgorICAgIEdsb2JhbFRyYWNrZXIqIG1f
Z2xvYmFsVHJhY2tlcjsKK307CisKKworY2xhc3MgTXlGYWtlVGV4dHVyZVVwbG9hZGVyIDogcHVi
bGljIEZha2VUZXh0dXJlVXBsb2FkZXIgeworcHVibGljOgorICAgIE15RmFrZVRleHR1cmVVcGxv
YWRlcihHbG9iYWxUcmFja2VyICpndCkgOiBtX2dsb2JhbFRyYWNrZXIoZ3QpIHsgfQorCisgICAg
dm9pZCB1cGxvYWRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0
dXJlLAorICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qg
c291cmNlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCBkZXN0UmVjdCkKKyAgICB7CisgICAgICAgIG1fZ2xvYmFsVHJhY2tlci0+b25VcGxvYWQoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgR2xvYmFsVHJhY2tlciogbV9nbG9iYWxUcmFja2VyOwor
fTsKKworCitjbGFzcyBDQ1RleHR1cmVVcGRhdGVyVGVzdCA6IHB1YmxpYyBUZXN0IHsKK3B1Ymxp
YzoKKyAgICBDQ1RleHR1cmVVcGRhdGVyVGVzdCgpIDogbV91cGxvYWRlcigmbV9nbG9iYWxUcmFj
a2VyKSB7IH0KKworcHJvdGVjdGVkOgorICAgIEdsb2JhbFRyYWNrZXIgbV9nbG9iYWxUcmFja2Vy
OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIENDVGV4dHVy
ZVVwZGF0ZXIgbV91cGRhdGVyOworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV90ZXh0dXJl
TWFuYWdlcjsKKyAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV9sYXllclRleHR1cmVV
cGRhdGVyOworICAgIE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBtX3RleHR1
cmU7CisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CisgICAgRmFrZVRleHR1
cmVDb3BpZXIgbV9jb3BpZXI7CisgICAgTXlGYWtlVGV4dHVyZVVwbG9hZGVyIG1fdXBsb2FkZXI7
CisKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgT3duUHRyPFdlYlRo
cmVhZD4gdGhyZWFkOworICAgICAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKHRocmVhZC5n
ZXQoKSk7CisKKyAgICAgICAgbV9jb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkb3B0UHRyKG5ldyBNeUZha2VXZWJHcmFwaGljc0NvbnRleHQzRCgmbV9nbG9iYWxUcmFj
a2VyKSksCisgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpOworCisgICAgICAgIG1fdGV4dHVyZU1hbmFnZXIgPSBUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisKKyAg
ICAgICAgbV9sYXllclRleHR1cmVVcGRhdGVyID0gYWRvcHRSZWYobmV3IEZha2VMYXllclRleHR1
cmVVcGRhdGVyKTsKKworICAgICAgICBjb25zdCBJbnRTaXplIHNpemUoMzAwLCAxNTApOworICAg
ICAgICBtX3RleHR1cmUgPSAgbV9sYXllclRleHR1cmVVcGRhdGVyLT5jcmVhdGVUZXh0dXJlKG1f
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpOworICAgICAgICBtX3RleHR1cmUtPnRleHR1cmUoKS0+cmVz
ZXJ2ZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIFdlYkNvbXBvc2l0b3I6OnNodXRkb3du
KCk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcihpbnQgY291
bnQpCisgICAgeworICAgICAgICBtX2dsb2JhbFRyYWNrZXIub25BcHBlbmRGdWxsVXBsb2Fkcyhj
b3VudCk7CisgICAgICAgIGNvbnN0IEludFJlY3QgcmVjdCgwLCAwLCAzMDAsIDE1MCk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIG1fdXBkYXRl
ci5hcHBlbmRGdWxsVXBkYXRlKG1fdGV4dHVyZS5nZXQoKSwgcmVjdCwgcmVjdCk7CisgICAgfQor
CisgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihpbnQgY291bnQpCisgICAg
eworICAgICAgICBtX2dsb2JhbFRyYWNrZXIub25BcHBlbmRQYXJ0aWFsVXBsb2Fkcyhjb3VudCk7
CisgICAgICAgIGNvbnN0IEludFJlY3QgcmVjdCgwLCAwLCAxMDAsIDEwMCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIG1fdXBkYXRlci5hcHBl
bmRQYXJ0aWFsVXBkYXRlKG1fdGV4dHVyZS5nZXQoKSwgcmVjdCwgcmVjdCk7CisgICAgfQorfTsK
KworCisKKy8vIFpFUk8gVVBMT0FEUyBURVNUUworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0
LCBaZXJvVGV4dHVyZVVwbG9hZHMpCit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIo
MCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZXIoMCk7CisgICAgbV91cGRhdGVy
LnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRvciwgJm1fY29waWVyLCAmbV91cGxv
YWRlciwga01heFVwbG9hZHMpOworICAgIG1fZ2xvYmFsVHJhY2tlci52ZXJpZnkoKTsKK30KKwor
CisvLyBPTkUgVVBMT0FEIFRFU1RTCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE9uZVRl
eHR1cmVVcGxvYWRBKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKDEpOworICAg
IGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKDApOworICAgIG1fdXBkYXRlci51cGRhdGUo
bV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIGtN
YXhVcGxvYWRzKTsKKyAgICBtX2dsb2JhbFRyYWNrZXIudmVyaWZ5KCk7Cit9CisKK1RFU1RfRihD
Q1RleHR1cmVVcGRhdGVyVGVzdCwgT25lVGV4dHVyZVVwbG9hZEIpCit7CisgICAgYXBwZW5kRnVs
bFVwbG9hZHNUb1VwZGF0ZXIoMCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZXIo
MSk7CisgICAgbV91cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRvciwg
Jm1fY29waWVyLCAmbV91cGxvYWRlciwga01heFVwbG9hZHMpOworICAgIG1fZ2xvYmFsVHJhY2tl
ci52ZXJpZnkoKTsKK30KKworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBPbmVUZXh0dXJl
VXBsb2FkQykKK3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcigxKTsKKyAgICBhcHBl
bmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcigxKTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29u
dGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBs
b2Fkcyk7CisgICAgbV9nbG9iYWxUcmFja2VyLnZlcmlmeSgpOworfQorCisKKy8vIE5PIFJFTUFJ
TkRFUiBURVNUUworY29uc3QgaW50IGZ1bGxOb1JlbWFpbmRlckNvdW50ID0gMTAgKiBrRmx1c2hQ
ZXJpb2Q7Citjb25zdCBpbnQgcGFydGlhbE5vUmVtYWluZGVyQ291bnQgPSAxMCAqIGtGbHVzaFBl
cmlvZFBhcnRpYWw7CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgTWFueVRleHR1cmVV
cGxvYWRzTm9SZW1haW5kZXJBKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKGZ1
bGxOb1JlbWFpbmRlckNvdW50KTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcigw
KTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAm
bV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBsb2Fkcyk7CisgICAgbV9nbG9iYWxUcmFja2Vy
LnZlcmlmeSgpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlUZXh0dXJl
VXBsb2Fkc05vUmVtYWluZGVyQikKK3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcigw
KTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihwYXJ0aWFsTm9SZW1haW5kZXJD
b3VudCk7CisgICAgbV91cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRv
ciwgJm1fY29waWVyLCAmbV91cGxvYWRlciwga01heFVwbG9hZHMpOworICAgIG1fZ2xvYmFsVHJh
Y2tlci52ZXJpZnkoKTsKK30KKworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBNYW55VGV4
dHVyZVVwbG9hZHNOb1JlbWFpbmRlckMpCit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0
ZXIoZnVsbE5vUmVtYWluZGVyQ291bnQpOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRh
dGVyKHBhcnRpYWxOb1JlbWFpbmRlckNvdW50KTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29u
dGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBs
b2Fkcyk7CisgICAgbV9nbG9iYWxUcmFja2VyLnZlcmlmeSgpOworfQorCisKKy8vIE1JTiBSRU1B
SU5ERVIgVEVTVFMKK2NvbnN0IGludCBmdWxsTWluUmVtYWluZGVyQ291bnQgPSBmdWxsTm9SZW1h
aW5kZXJDb3VudCArIDE7Citjb25zdCBpbnQgcGFydGlhbE1pblJlbWFpbmRlckNvdW50ID0gcGFy
dGlhbE5vUmVtYWluZGVyQ291bnQgKyAxOworCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3Qs
IE1hbnlUZXh0dXJlVXBsb2Fkc01pblJlbWFpbmRlckEpCit7CisgICAgYXBwZW5kRnVsbFVwbG9h
ZHNUb1VwZGF0ZXIoZnVsbE1pblJlbWFpbmRlckNvdW50KTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBs
b2Fkc1RvVXBkYXRlcigwKTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwg
Jm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBsb2Fkcyk7CisgICAg
bV9nbG9iYWxUcmFja2VyLnZlcmlmeSgpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRl
c3QsIE1hbnlUZXh0dXJlVXBsb2Fkc01pblJlbWFpbmRlckIpCit7CisgICAgYXBwZW5kRnVsbFVw
bG9hZHNUb1VwZGF0ZXIoMCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZXIocGFy
dGlhbE1pblJlbWFpbmRlckNvdW50KTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5n
ZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBsb2Fkcyk7
CisgICAgbV9nbG9iYWxUcmFja2VyLnZlcmlmeSgpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBk
YXRlclRlc3QsIE1hbnlUZXh0dXJlVXBsb2Fkc01pblJlbWFpbmRlckMpCit7CisgICAgYXBwZW5k
RnVsbFVwbG9hZHNUb1VwZGF0ZXIoZnVsbE1pblJlbWFpbmRlckNvdW50KTsKKyAgICBhcHBlbmRQ
YXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihwYXJ0aWFsTWluUmVtYWluZGVyQ291bnQpOworICAgIG1f
dXBkYXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwg
Jm1fdXBsb2FkZXIsIGtNYXhVcGxvYWRzKTsKKyAgICBtX2dsb2JhbFRyYWNrZXIudmVyaWZ5KCk7
Cit9CisKKworLy8gTUFYIFJFTUFJTkRFUiBURVNUUworY29uc3QgaW50IGZ1bGxNYXhSZW1haW5k
ZXJDb3VudCA9IGZ1bGxOb1JlbWFpbmRlckNvdW50IC0gMTsKK2NvbnN0IGludCBwYXJ0aWFsTWF4
UmVtYWluZGVyQ291bnQgPSBwYXJ0aWFsTm9SZW1haW5kZXJDb3VudCAtIDE7CisKK1RFU1RfRihD
Q1RleHR1cmVVcGRhdGVyVGVzdCwgTWFueVRleHR1cmVVcGxvYWRzTWF4UmVtYWluZGVyQSkKK3sK
KyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcihmdWxsTWF4UmVtYWluZGVyQ291bnQpOwor
ICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKDApOworICAgIG1fdXBkYXRlci51cGRh
dGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIs
IGtNYXhVcGxvYWRzKTsKKyAgICBtX2dsb2JhbFRyYWNrZXIudmVyaWZ5KCk7Cit9CisKK1RFU1Rf
RihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgTWFueVRleHR1cmVVcGxvYWRzTWF4UmVtYWluZGVyQikK
K3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcigwKTsKKyAgICBhcHBlbmRQYXJ0aWFs
VXBsb2Fkc1RvVXBkYXRlcihwYXJ0aWFsTWF4UmVtYWluZGVyQ291bnQpOworICAgIG1fdXBkYXRl
ci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBs
b2FkZXIsIGtNYXhVcGxvYWRzKTsKKyAgICBtX2dsb2JhbFRyYWNrZXIudmVyaWZ5KCk7Cit9CisK
K1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgTWFueVRleHR1cmVVcGxvYWRzTWF4UmVtYWlu
ZGVyQykKK3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcihmdWxsTWF4UmVtYWluZGVy
Q291bnQpOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKHBhcnRpYWxNYXhSZW1h
aW5kZXJDb3VudCk7CisgICAgbV91cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2Fs
bG9jYXRvciwgJm1fY29waWVyLCAmbV91cGxvYWRlciwga01heFVwbG9hZHMpOworICAgIG1fZ2xv
YmFsVHJhY2tlci52ZXJpZnkoKTsKK30KKworCisvLyBNSU4vTUFYIFJFTUFJTkRFUiBURVNUUwor
VEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBNYW55VGV4dHVyZVVwbG9hZHNNaW5NYXhSZW1h
aW5kZXJBKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKGZ1bGxNaW5SZW1haW5k
ZXJDb3VudCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZXIocGFydGlhbE1heFJl
bWFpbmRlckNvdW50KTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1f
YWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBsb2Fkcyk7CisgICAgbV9n
bG9iYWxUcmFja2VyLnZlcmlmeSgpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3Qs
IE1hbnlUZXh0dXJlVXBsb2Fkc01pbk1heFJlbWFpbmRlckIpCit7CisgICAgYXBwZW5kRnVsbFVw
bG9hZHNUb1VwZGF0ZXIoZnVsbE1heFJlbWFpbmRlckNvdW50KTsKKyAgICBhcHBlbmRQYXJ0aWFs
VXBsb2Fkc1RvVXBkYXRlcihwYXJ0aWFsTWluUmVtYWluZGVyQ291bnQpOworICAgIG1fdXBkYXRl
ci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBs
b2FkZXIsIGtNYXhVcGxvYWRzKTsKKyAgICBtX2dsb2JhbFRyYWNrZXIudmVyaWZ5KCk7Cit9CisK
KworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGM5MTI1YTg1MjliMTExOGQ4ZmFm
MzI1MmQyMWQ3MzAzYjI5OTM2MjIuLjhlNTkyMzg2MTJiY2ZjN2Q4Y2UyYTUyMWM0Y2RmYTk2ZjM5
ZDcxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxl
ZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjQzLDYgKzI0Myw3IEBAIFRFU1QoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiAgICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwxKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxl
ZExheWVySW1wbCgwKSkpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXll
cjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsMihhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBjcmVhdGVDb21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCkpOwogCiAgICAgQ0NUZXh0dXJlVXBkYXRl
ciB1cGRhdGVyOwogICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKQEAgLTI3Myw3
ICsyNzQsNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRs
ZVBhaW50RmFpbGVkKQogICAgIEVYUEVDVF9UUlVFKGxheWVyMi0+bmVlZHNJZGxlUGFpbnQobGF5
ZXIyUmVjdCkpOwogCiAgICAgLy8gQ29tbWl0IHRoZSBmcmFtZSBvdmVyIHRvIGltcGwuCi0gICAg
dXBkYXRlci51cGRhdGUoMCwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9hZGVyLCA1MDAwKTsK
KyAgICB1cGRhdGVyLnVwZGF0ZShjb250ZXh0LmdldCgpLCAmYWxsb2NhdG9yLCAmY29waWVyLCAm
dXBsb2FkZXIsIDUwMDApOwogICAgIGxheWVyMS0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwx
LmdldCgpKTsKICAgICBsYXllcjItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsMi5nZXQoKSk7
CiAKQEAgLTI4Miw3ICsyODMsNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hU
aWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQogICAgIGxheWVyMi0+aWRsZVVwZGF0ZUxheWVyUmVj
dCh1cGRhdGVyLCBsYXllcjJSZWN0LCAwKTsKIAogICAgIC8vIE9oIHdlbGwsIGNvbW1pdCB0aGUg
ZnJhbWUgYW5kIHB1c2guCi0gICAgdXBkYXRlci51cGRhdGUoMCwgJmFsbG9jYXRvciwgJmNvcGll
ciwgJnVwbG9hZGVyLCA1MDAwKTsKKyAgICB1cGRhdGVyLnVwZGF0ZShjb250ZXh0LmdldCgpLCAm
YWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2FkZXIsIDUwMDApOwogICAgIGxheWVyMS0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwxLmdldCgpKTsKICAgICBsYXllcjItPnB1c2hQcm9wZXJ0aWVz
VG8obGF5ZXJJbXBsMi5nZXQoKSk7CiAKQEAgLTMwMSw3ICszMDIsNyBAQCBURVNUKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQogICAgIGxheWVy
Mi0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIGxheWVyMlJlY3QsIDApOwogICAgIGxheWVyMS0+
dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3QoKSwgMCk7CiAKLSAgICB1cGRhdGVyLnVw
ZGF0ZSgwLCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2FkZXIsIDUwMDApOworICAgIHVwZGF0
ZXIudXBkYXRlKGNvbnRleHQuZ2V0KCksICZhbGxvY2F0b3IsICZjb3BpZXIsICZ1cGxvYWRlciwg
NTAwMCk7CiAgICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbDEuZ2V0KCkpOwog
ICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwyLmdldCgpKTsKIApAQCAtODc3
LDYgKzg3OCw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMp
CiAgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50
OwogICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5ZXJUcmVlSG9zdCA9IENDTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LCBzZXR0aW5ncyk7CiAK
KyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBjcmVhdGVDb21wb3NpdG9y
TW9ja0dyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCkpOwor
CiAgICAgLy8gQ3JlYXRlIG9uZSA1MDAgeCAzMDAgdGlsZWQgbGF5ZXIuCiAgICAgSW50U2l6ZSBj
b250ZW50Qm91bmRzKDMwMCwgMjAwKTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOwpAQCAtOTAwLDExICs5MDMsMTEgQEAgVEVTVChUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICB7CiAgICAgICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgICAgICBPd25QdHI8RmFrZUNDVGls
ZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MCkpKTsKLSAgICAgICAgdXBkYXRlci51cGRhdGUoMCwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVw
bG9hZGVyLCA0KTsKKyAgICAgICAgdXBkYXRlci51cGRhdGUoY29udGV4dC5nZXQoKSwgJmFsbG9j
YXRvciwgJmNvcGllciwgJnVwbG9hZGVyLCA0KTsKICAgICAgICAgRVhQRUNUX0VRKDQsIGxheWVy
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUodXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsKICAgICAgICAgbGF5ZXItPmZha2VM
YXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKLSAgICAgICAgdXBkYXRl
ci51cGRhdGUoMCwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9hZGVyLCA0KTsKKyAgICAgICAg
dXBkYXRlci51cGRhdGUoY29udGV4dC5nZXQoKSwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9h
ZGVyLCA0KTsKICAgICAgICAgRVhQRUNUX0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZXIuaGFz
TW9yZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT5jbGVhclVwZGF0ZUNvdW50KCk7CkBAIC05MTgsMTEgKzkyMSwxMSBAQCBURVNUKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQogICAgIHsKICAgICAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExh
eWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkp
OwotICAgICAgICB1cGRhdGVyLnVwZGF0ZSgwLCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2Fk
ZXIsIDQpOworICAgICAgICB1cGRhdGVyLnVwZGF0ZShjb250ZXh0LmdldCgpLCAmYWxsb2NhdG9y
LCAmY29waWVyLCAmdXBsb2FkZXIsIDQpOwogICAgICAgICBFWFBFQ1RfRVEoMywgbGF5ZXItPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1Rf
VFJVRSh1cGRhdGVyLmhhc01vcmVVcGRhdGVzKCkpOwogICAgICAgICBsYXllci0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwotICAgICAgICB1cGRhdGVyLnVw
ZGF0ZSgwLCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2FkZXIsIDQpOworICAgICAgICB1cGRh
dGVyLnVwZGF0ZShjb250ZXh0LmdldCgpLCAmYWxsb2NhdG9yLCAmY29waWVyLCAmdXBsb2FkZXIs
IDQpOwogICAgICAgICBFWFBFQ1RfRVEoMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1RfRkFMU0UodXBkYXRlci5oYXNNb3Jl
VXBkYXRlcygpKTsKICAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNs
ZWFyVXBkYXRlQ291bnQoKTsKQEAgLTkzNiwxMSArOTM5LDExIEBAIFRFU1QoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsVGhyZWFkOwogICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKICAgICAgICAg
Y2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlcik7Ci0gICAgICAgIHVwZGF0ZXIu
dXBkYXRlKDAsICZhbGxvY2F0b3IsICZjb3BpZXIsICZ1cGxvYWRlciwgNCk7CisgICAgICAgIHVw
ZGF0ZXIudXBkYXRlKGNvbnRleHQuZ2V0KCksICZhbGxvY2F0b3IsICZjb3BpZXIsICZ1cGxvYWRl
ciwgNCk7CiAgICAgICAgIEVYUEVDVF9FUSgyLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHVwZGF0ZXIuaGFzTW9y
ZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5j
bGVhclVwZGF0ZUNvdW50KCk7Ci0gICAgICAgIHVwZGF0ZXIudXBkYXRlKDAsICZhbGxvY2F0b3Is
ICZjb3BpZXIsICZ1cGxvYWRlciwgNCk7CisgICAgICAgIHVwZGF0ZXIudXBkYXRlKGNvbnRleHQu
Z2V0KCksICZhbGxvY2F0b3IsICZjb3BpZXIsICZ1cGxvYWRlciwgNCk7CiAgICAgICAgIEVYUEVD
VF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7
CiAgICAgICAgIEVYUEVDVF9GQUxTRSh1cGRhdGVyLmhhc01vcmVVcGRhdGVzKCkpOwogICAgICAg
ICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwpA
QCAtOTYzLDExICs5NjYsMTEgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFs
VXBkYXRlcykKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAg
ICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogICAgICAgICBjY0xheWVyVHJlZUhvc3QtPnVw
ZGF0ZUxheWVycyh1cGRhdGVyKTsKLSAgICAgICAgdXBkYXRlci51cGRhdGUoMCwgJmFsbG9jYXRv
ciwgJmNvcGllciwgJnVwbG9hZGVyLCA0KTsKKyAgICAgICAgdXBkYXRlci51cGRhdGUoY29udGV4
dC5nZXQoKSwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9hZGVyLCA0KTsKICAgICAgICAgRVhQ
RUNUX0VRKDQsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgp
KTsKICAgICAgICAgRVhQRUNUX1RSVUUodXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsKICAgICAg
ICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsK
LSAgICAgICAgdXBkYXRlci51cGRhdGUoMCwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9hZGVy
LCA0KTsKKyAgICAgICAgdXBkYXRlci51cGRhdGUoY29udGV4dC5nZXQoKSwgJmFsbG9jYXRvciwg
JmNvcGllciwgJnVwbG9hZGVyLCA0KTsKICAgICAgICAgRVhQRUNUX0VRKDIsIGxheWVyLT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNUX0ZB
TFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CkBAIC05ODEsNyArOTg0LDcgQEAg
VEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICAgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bCgwKSkpOwogICAgICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyKTsK
LSAgICAgICAgdXBkYXRlci51cGRhdGUoMCwgJmFsbG9jYXRvciwgJmNvcGllciwgJnVwbG9hZGVy
LCA0KTsKKyAgICAgICAgdXBkYXRlci51cGRhdGUoY29udGV4dC5nZXQoKSwgJmFsbG9jYXRvciwg
JmNvcGllciwgJnVwbG9hZGVyLCA0KTsKICAgICAgICAgRVhQRUNUX0VRKDQsIGxheWVyLT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNUX0ZB
TFNFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151847</attachid>
            <date>2012-07-11 19:26:03 -0700</date>
            <delta_ts>2012-07-13 16:30:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120711192603.patch</filename>
            <type>text/plain</type>
            <size>24762</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTlhYTkyYjQ4YmIwZTQx
N2FhZTAwM2JkMjRiYjM0ZGE0MzlhMTY5My4uYjRmYjJmZjQzYTZiYjQyNDA3NmQ1ZTZjNTIyZmIy
NTNiZWNjZTYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA3LTExICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgZmx1
c2hlcyB0byBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hh
bmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24g
ZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dyYXBoaWNz
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRleHQ6OmZsdXNoKToK
KyAgICAgICAgKENDR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKToKKwogMjAxMi0wNy0x
MCAgQnJpYW4gQW5kZXJzb24gIDxicmlhbmRlcnNvbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W2Nocm9taXVtXSBNYWtlIGZ1bGwgdGV4dHVyZSB1cGRhdGVzIGV4cGxpY2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDc2YWExZWFlZmU1MTZhNjRlOTI4MWVlNDIxNGQxNGFiYTM5ZTEz
ZmMuLjQ0MjM3YzRhOTQ1MThjOWZkOWQwNmQ5MDA3MGYyOTZjYTA0OTU1NTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDctMTEgIEJyaWFuIEFuZGVy
c29uICA8YnJpYW5kZXJzb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBmbHVzaGVzIHRv
IENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3Vj
aCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlw
dGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcDogQWRkZWQuCisKIDIwMTItMDctMTAgIExl
YW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9ncmFjaWFAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQgQ2hyb21pdW0gYnVpbGQgZml4IGZvciBtYWMtcmVsZWFzZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR3JhcGhp
Y3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDQwNTg4NWZmYjVjMzMyMzMwMTY2ZDMzMzZiMGQ4
OTczODgyMGYxMjUuLjcxZmRjZGMzMjExNGRmYWQ2NjBmOTU2NmMxMGYyODliYTNlM2U1NmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
R3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NHcmFwaGljc0NvbnRleHQuaApAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6
CiAKICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QoKSB7IHJldHVy
biBtX2NvbnRleHQzRC5nZXQoKTsgfQogCisgICAgdm9pZCBmbHVzaCgpIHsgbV9jb250ZXh0M0Qt
PmZsdXNoKCk7IH0KKwogcHJpdmF0ZToKICAgICBDQ0dyYXBoaWNzQ29udGV4dCgpIHsgfQogICAg
IGV4cGxpY2l0IENDR3JhcGhpY3NDb250ZXh0KFBhc3NPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dDNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApp
bmRleCAzMTkwZDgyZmZjN2JhZTc5ZTU1ZWZmYmM1MDJiODQ0OTA3NGI2NjI2Li42YTA3NzM1MTEz
ODkyNGQyZmU2MTVmOGQ3OTM4MjkwOGU5ZTRiN2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVV
cGRhdGVyLmNwcApAQCAtMzksNiArMzksOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQga1VwbG9hZEZsdXNoUGVyaW9kID0g
NDsKKwogQ0NUZXh0dXJlVXBkYXRlcjo6Q0NUZXh0dXJlVXBkYXRlcigpCiAgICAgOiBtX2VudHJ5
SW5kZXgoMCkKIHsKQEAgLTkzLDEyICs5NSwyMCBAQCB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVw
ZGF0ZShDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsbwog
CiAgICAgICAgIHVwbG9hZGVyLT5iZWdpblVwbG9hZHMoKTsKIAorICAgICAgICBpbnQgZnVsbFVw
bG9hZENvdW50ID0gMDsKICAgICAgICAgc2l6ZV90IG1heEluZGV4ID0gbWluKG1fZW50cnlJbmRl
eCArIGNvdW50LCBtX2Z1bGxFbnRyaWVzLnNpemUoKSk7CiAgICAgICAgIGZvciAoaW5kZXggPSBt
X2VudHJ5SW5kZXg7IGluZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFVw
ZGF0ZUVudHJ5JiBlbnRyeSA9IG1fZnVsbEVudHJpZXNbaW5kZXhdOwogICAgICAgICAgICAgdXBs
b2FkZXItPnVwbG9hZFRleHR1cmUoY29udGV4dCwgZW50cnkudGV4dHVyZSwgYWxsb2NhdG9yLCBl
bnRyeS5zb3VyY2VSZWN0LCBlbnRyeS5kZXN0UmVjdCk7CisgICAgICAgICAgICBmdWxsVXBsb2Fk
Q291bnQrKzsKKyAgICAgICAgICAgIGlmICghKGZ1bGxVcGxvYWRDb3VudCAlIGtVcGxvYWRGbHVz
aFBlcmlvZCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+Zmx1c2goKTsKICAgICAgICAgfQog
CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZGFuZ2xpbmcgdXBsb2FkcyB3aXRo
b3V0IGEgZmx1c2guCisgICAgICAgIGlmIChmdWxsVXBsb2FkQ291bnQgJSBrVXBsb2FkRmx1c2hQ
ZXJpb2QpCisgICAgICAgICAgICBjb250ZXh0LT5mbHVzaCgpOworCiAgICAgICAgIGJvb2wgbW9y
ZVVwbG9hZHMgPSBtYXhJbmRleCA8IG1fZnVsbEVudHJpZXMuc2l6ZSgpOwogCiAgICAgICAgIEFT
U0VSVChtX3BhcnRpYWxFbnRyaWVzLnNpemUoKSA8PSBjb3VudCk7CkBAIC0xMTMsMTEgKzEyMywx
OSBAQCB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShDQ0dyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsbwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9wYXJ0aWFsRW50cmllcy5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9wYXJ0
aWFsRW50cmllcy5zaXplKCk7IGluZGV4KyspIHsKICAgICAgICAgICAgIFVwZGF0ZUVudHJ5JiBl
bnRyeSA9IG1fcGFydGlhbEVudHJpZXNbaW5kZXhdOwogICAgICAgICAgICAgdXBsb2FkZXItPnVw
bG9hZFRleHR1cmUoY29udGV4dCwgZW50cnkudGV4dHVyZSwgYWxsb2NhdG9yLCBlbnRyeS5zb3Vy
Y2VSZWN0LCBlbnRyeS5kZXN0UmVjdCk7CisgICAgICAgICAgICBpZiAoISgoaW5kZXgrMSkgJSBr
VXBsb2FkRmx1c2hQZXJpb2QpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmZsdXNoKCk7CiAg
ICAgICAgIH0KIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGRhbmdsaW5nIHBh
cnRpYWwgdXBsb2FkcyB3aXRob3V0IGEgZmx1c2guCisgICAgICAgIC8vIE5vdGU6IFdlIGRvbid0
IG5lZWQgdG8gdXNlIChpbmRleCsxKSBpbiB0aGlzIGNhc2UgYmVjYXVzZSBpbmRleCB3YXMKKyAg
ICAgICAgLy8gaW5jcmVtZW50ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZm9yIGxvb3AuCisgICAgICAg
IGlmIChpbmRleCAlIGtVcGxvYWRGbHVzaFBlcmlvZCkKKyAgICAgICAgICAgIGNvbnRleHQtPmZs
dXNoKCk7CisKICAgICAgICAgdXBsb2FkZXItPmVuZFVwbG9hZHMoKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDFhNWJhYmZkMDYwNjRlNzYxYmJjZjk2ZWUyZWU2
ZTlhZDIyZGE3MTEuLmRkODdiZGRmNWU3OTBiZTY4MzA2NjQ2MjZkZDBjM2Q3ZDliMDYwZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtODksNiArODksNyBAQAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
Q1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUZXN0
Q29tbW9uLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ1RleHR1cmVVcGRhdGVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFhNjkw
Y2Y1OGQ1MzRlMzhiMDE5OGRhZjgzODZmMWE4NGYzNzBiMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlclRlc3QuY3BwCkBAIC0w
LDAgKzEsNTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCisKKyNpbmNsdWRlICJDQ1RpbGVkTGF5ZXJUZXN0
Q29tbW9uLmgiCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5o
IgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlRocmVhZC5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsK
K3VzaW5nIHRlc3Rpbmc6OlRlc3Q7CisKKworbmFtZXNwYWNlIHsKKworY29uc3QgaW50IGtGbHVz
aFBlcmlvZEZ1bGwgPSA0OworY29uc3QgaW50IGtGbHVzaFBlcmlvZFBhcnRpYWwgPSBrRmx1c2hQ
ZXJpb2RGdWxsOworCisvLyBBbiBpbnRlcmZhY2UgdGhhdCBhbGxvd3Mgb3VyIGZha2UgY2xhc3Nl
cyB0byBub3RpZnkgQ0NUZXh0dXJlVXBkYXRlclRlc3QKKy8vIHdpdGhvdXQgaGF2aW5nIHRvIHNl
cGFyYXRlIHRoZSBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBvZiBDQ1RleHR1cmVVcGRhdGVy
VGVzdC4KK2NsYXNzIENDVGV4dHVyZVVwZGF0ZXJUZXN0Tm90aWZpZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBvbkZsdXNoKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvbkJlZ2luVXBs
b2FkcygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25FbmRVcGxvYWRzKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBvblVwbG9hZCgpID0gMDsKK307CisKKworY2xhc3MgTXlGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0QgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoK
KyAgICBNeUZha2VXZWJHcmFwaGljc0NvbnRleHQzRChDQ1RleHR1cmVVcGRhdGVyVGVzdE5vdGlm
aWVyICp0ZXN0KSA6IG1fdGVzdCh0ZXN0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2godm9p
ZCkgeyBtX3Rlc3QtPm9uRmx1c2goKTsgfQorICAgIHZpcnR1YWwgR3JHTEludGVyZmFjZSogb25D
cmVhdGVHckdMSW50ZXJmYWNlKCkgeyByZXR1cm4gMDsgfQorCitwcml2YXRlOgorICAgIENDVGV4
dHVyZVVwZGF0ZXJUZXN0Tm90aWZpZXIqIG1fdGVzdDsKK307CisKKworY2xhc3MgTXlGYWtlVGV4
dHVyZVVwbG9hZGVyIDogcHVibGljIEZha2VUZXh0dXJlVXBsb2FkZXIgeworcHVibGljOgorICAg
IE15RmFrZVRleHR1cmVVcGxvYWRlcihDQ1RleHR1cmVVcGRhdGVyVGVzdE5vdGlmaWVyICp0ZXN0
KSA6IG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblVwbG9hZHMoKSB7
IG1fdGVzdC0+b25CZWdpblVwbG9hZHMoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBlbmRVcGxvYWRz
KCkgeyBtX3Rlc3QtPm9uRW5kVXBsb2FkcygpOyB9CisgICAgdmlydHVhbCB2b2lkIHVwbG9hZFRl
eHR1cmUoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSog
dGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpUZXh0dXJl
QWxsb2NhdG9yKiBhbGxvY2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCBzb3VyY2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QgZGVzdFJlY3QpCisgICAgeworICAgICAgICBt
X3Rlc3QtPm9uVXBsb2FkKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDVGV4dHVyZVVwZGF0
ZXJUZXN0Tm90aWZpZXIqIG1fdGVzdDsKK307CisKKworY2xhc3MgRmFrZVRleHR1cmUgOiBwdWJs
aWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CitwdWJsaWM6CisgICAgRmFrZVRleHR1
cmUoKSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUoYWRvcHRQdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmU+KDApKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChDQ0dyYXBoaWNz
Q29udGV4dCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgeyB9Cit9OworCisKK2NsYXNzIENDVGV4dHVyZVVwZGF0
ZXJUZXN0IDogcHVibGljIFRlc3QsIENDVGV4dHVyZVVwZGF0ZXJUZXN0Tm90aWZpZXIgeworcHVi
bGljOgorICAgIENDVGV4dHVyZVVwZGF0ZXJUZXN0KCkKKyAgICA6IG1fdXBsb2FkZXIodGhpcykK
KyAgICAsIG1fZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQoMCkKKyAgICAsIG1fcGFydGlhbENvdW50
RXhwZWN0ZWQoMCkKKyAgICAsIG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkKDApCisgICAgLCBt
X21heFVwbG9hZENvdW50UGVyVXBkYXRlKDApCisgICAgLCBtX251bUJlZ2luVXBsb2FkcygwKQor
ICAgICwgbV9udW1FbmRVcGxvYWRzKDApCisgICAgLCBtX251bUNvbnNlY3V0aXZlRmx1c2hlcygw
KQorICAgICwgbV9udW1EYW5nbGluZ1VwbG9hZHMoMCkKKyAgICAsIG1fbnVtVG90YWxVcGxvYWRz
KDApCisgICAgLCBtX251bVRvdGFsRmx1c2hlcygwKQorICAgICwgbV9udW1QcmV2aW91c1VwbG9h
ZHMoMCkKKyAgICAsIG1fbnVtUHJldmlvdXNGbHVzaGVzKDApCisgICAgeyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgT3duUHRyPFdlYlRo
cmVhZD4gdGhyZWFkOworICAgICAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKHRocmVhZC5n
ZXQoKSk7CisKKyAgICAgICAgbV9jb250ZXh0ID0gQ0NHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZTNE
KAorICAgICAgICAgICAgICAgICAgICBhZG9wdFB0cihuZXcgTXlGYWtlV2ViR3JhcGhpY3NDb250
ZXh0M0QodGhpcykpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAg
IHsKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICB9CisKKyAgICB2b2lk
IGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKGludCBjb3VudCkKKyAgICB7CisgICAgICAgIG1f
ZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CisgICAgICAgIG1fdG90YWxVcGxvYWRD
b3VudEV4cGVjdGVkICs9IGNvdW50OworCisgICAgICAgIGNvbnN0IEludFJlY3QgcmVjdCgwLCAw
LCAzMDAsIDE1MCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgICAgIG1fdXBkYXRlci5hcHBlbmRGdWxsVXBkYXRlKCZtX3RleHR1cmUsIHJlY3QsIHJl
Y3QpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZXIoaW50
IGNvdW50KQorICAgIHsKKyAgICAgICAgbV9wYXJ0aWFsQ291bnRFeHBlY3RlZCArPSBjb3VudDsK
KyAgICAgICAgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CisKKyAgICAgICAg
Y29uc3QgSW50UmVjdCByZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgbV91cGRhdGVyLmFwcGVuZFBhcnRpYWxV
cGRhdGUoJm1fdGV4dHVyZSwgcmVjdCwgcmVjdCk7CisgICAgfQorCisgICAgdm9pZCBzZXRNYXhV
cGxvYWRDb3VudFBlclVwZGF0ZShpbnQgY291bnQpCisgICAgeworICAgICAgICBtX21heFVwbG9h
ZENvdW50UGVyVXBkYXRlID0gY291bnQ7CisgICAgfQorCisgICAgdm9pZCBvbkZsdXNoKCkKKyAg
ICB7CisgICAgICAgIC8vIENoZWNrIGZvciBiYWNrLXRvLWJhY2sgZmx1c2hlcy4KKyAgICAgICAg
RVhQRUNUX0VRKDAsIG1fbnVtQ29uc2VjdXRpdmVGbHVzaGVzKSA8PCAiQmFjay10by1iYWNrIGZs
dXNoZXMgZGV0ZWN0ZWQuIjsKKworICAgICAgICAvLyBDaGVjayBmb3IgcHJlbWF0dXJlIGZsdXNo
ZXMKKyAgICAgICAgaWYgKG1fbnVtUHJldmlvdXNVcGxvYWRzICE9IG1fbWF4VXBsb2FkQ291bnRQ
ZXJVcGRhdGUpIHsKKyAgICAgICAgICAgIGlmIChtX251bVRvdGFsVXBsb2FkcyA8IG1fZnVsbFVw
bG9hZENvdW50RXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgRVhQRUNUX0dFKG1fbnVtRGFuZ2xp
bmdVcGxvYWRzLCBrRmx1c2hQZXJpb2RGdWxsKSA8PCAiUHJlbWF0dXJlIGZsdXNoIGRldGVjdGVk
IGluIGZ1bGwgdXBsb2Fkcy4iOworICAgICAgICAgICAgZWxzZSBpZiAobV9udW1Ub3RhbFVwbG9h
ZHMgPiBtX2Z1bGxVcGxvYWRDb3VudEV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAmJiBt
X251bVRvdGFsVXBsb2FkcyA8IG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkKQorICAgICAgICAg
ICAgICAgIEVYUEVDVF9HRShtX251bURhbmdsaW5nVXBsb2Fkcywga0ZsdXNoUGVyaW9kUGFydGlh
bCkgPDwgIlByZW1hdHVyZSBmbHVzaCBkZXRlY3RlZCBpbiBwYXJ0aWFsIHVwbG9hZHMuIjsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fbnVtRGFuZ2xpbmdVcGxvYWRzID0gMDsKKyAgICAgICAgbV9u
dW1Db25zZWN1dGl2ZUZsdXNoZXMrKzsKKyAgICAgICAgbV9udW1Ub3RhbEZsdXNoZXMrKzsKKyAg
ICAgICAgbV9udW1QcmV2aW91c0ZsdXNoZXMrKzsKKyAgICB9CisKKyAgICB2b2lkIG9uQmVnaW5V
cGxvYWRzKCkKKyAgICB7CisgICAgICAgIG1fbnVtUHJldmlvdXNGbHVzaGVzID0gMDsKKyAgICAg
ICAgbV9udW1QcmV2aW91c1VwbG9hZHMgPSAwOworICAgICAgICBtX251bUJlZ2luVXBsb2Fkcysr
OworICAgIH0KKworICAgIHZvaWQgb25VcGxvYWQoKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sg
Zm9yIHRvbyBtYW55IGNvbnNlY3V0aXZlIHVwbG9hZHMKKyAgICAgICAgaWYgKG1fbnVtVG90YWxV
cGxvYWRzIDwgbV9mdWxsVXBsb2FkQ291bnRFeHBlY3RlZCkKKyAgICAgICAgICAgIEVYUEVDVF9M
VChtX251bURhbmdsaW5nVXBsb2Fkcywga0ZsdXNoUGVyaW9kRnVsbCkgPDwgIlRvbyBtYW55IGNv
bnNlY3V0aXZlIGZ1bGwgdXBsb2FkcyBkZXRlY3RlZC4iOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBFWFBFQ1RfTFQobV9udW1EYW5nbGluZ1VwbG9hZHMsIGtGbHVzaFBlcmlvZFBhcnRpYWwp
IDw8ICJUb28gbWFueSBjb25zZWN1dGl2ZSBwYXJ0aWFsIHVwbG9hZHMgZGV0ZWN0ZWQuIjsKKwor
ICAgICAgICBtX251bUNvbnNlY3V0aXZlRmx1c2hlcyA9IDA7CisgICAgICAgIG1fbnVtRGFuZ2xp
bmdVcGxvYWRzKys7CisgICAgICAgIG1fbnVtVG90YWxVcGxvYWRzKys7CisgICAgICAgIG1fbnVt
UHJldmlvdXNVcGxvYWRzKys7CisgICAgfQorCisgICAgdm9pZCBvbkVuZFVwbG9hZHMoKQorICAg
IHsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1fbnVtRGFuZ2xpbmdVcGxvYWRzKSA8PCAiTGFzdCB1
cGxvYWQgd2Fzbid0IGZvbGxvd2VkIGJ5IGEgZmx1c2guIjsKKworICAgICAgICBpZiAobV9udW1U
b3RhbFVwbG9hZHMgIT0gbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQgJiYgbV9udW1Ub3RhbFVw
bG9hZHMgIT0gbV9mdWxsVXBsb2FkQ291bnRFeHBlY3RlZCkgeworICAgICAgICAgICAgRVhQRUNU
X0VRKG1fbWF4VXBsb2FkQ291bnRQZXJVcGRhdGUsIG1fbnVtUHJldmlvdXNVcGxvYWRzKQorICAg
ICAgICAgICAgICAgICAgICA8PCAiZW5kVXBsb2FkKCkgd2FzIGNhbGxlZCB3aGVuIHRoZXJlIGFy
ZSB0ZXh0dXJlcyB0byB1cGxvYWQsIGJ1dCB0aGUgdXBsb2FkIHF1b3RhIGhhc24ndCBiZWVuIGZp
bGxlZC4iOworICAgICAgICB9CisKKyAgICAgICAgbV9udW1FbmRVcGxvYWRzKys7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgLy8gQ2xhc3NlcyByZXF1aXJlZCB0byBpbnRlcmFjdCBhbmQgdGVz
dCB0aGUgQ0NUZXh0dXJlVXBkYXRlcgorICAgIE93blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gbV9j
b250ZXh0OworICAgIENDVGV4dHVyZVVwZGF0ZXIgbV91cGRhdGVyOworICAgIEZha2VUZXh0dXJl
IG1fdGV4dHVyZTsKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciBtX2FsbG9jYXRvcjsKKyAgICBG
YWtlVGV4dHVyZUNvcGllciBtX2NvcGllcjsKKyAgICBNeUZha2VUZXh0dXJlVXBsb2FkZXIgbV91
cGxvYWRlcjsKKworICAgIC8vIFByb3BlcnRpZXMgLyBleHBlY3RhdGlvbnMgb2YgdGhpcyB0ZXN0
CisgICAgaW50IG1fZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQ7CisgICAgaW50IG1fcGFydGlhbENv
dW50RXhwZWN0ZWQ7CisgICAgaW50IG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkOworICAgIGlu
dCBtX21heFVwbG9hZENvdW50UGVyVXBkYXRlOworCisgICAgLy8gRHluYW1pYyBwcm9wZXJ0aWVz
IG9mIHRoaXMgdGVzdAorICAgIGludCBtX251bUJlZ2luVXBsb2FkczsKKyAgICBpbnQgbV9udW1F
bmRVcGxvYWRzOworICAgIGludCBtX251bUNvbnNlY3V0aXZlRmx1c2hlczsKKyAgICBpbnQgbV9u
dW1EYW5nbGluZ1VwbG9hZHM7CisgICAgaW50IG1fbnVtVG90YWxVcGxvYWRzOworICAgIGludCBt
X251bVRvdGFsRmx1c2hlczsKKyAgICBpbnQgbV9udW1QcmV2aW91c1VwbG9hZHM7CisgICAgaW50
IG1fbnVtUHJldmlvdXNGbHVzaGVzOworfTsKKworCisKKy8vIFpFUk8gVVBMT0FEUyBURVNUUwor
VEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBaZXJvVXBsb2FkcykKK3sKKyAgICBhcHBlbmRG
dWxsVXBsb2Fkc1RvVXBkYXRlcigwKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRl
cigwKTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9y
LCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCk7CisK
KyAgICBFWFBFQ1RfRVEoMCwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgwLCBt
X251bUVuZFVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgwLCBtX251bVByZXZpb3VzRmx1c2hlcyk7
CisgICAgRVhQRUNUX0VRKDAsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKK30KKworCisvLyBPTkUg
VVBMT0FEIFRFU1RTCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE9uZUZ1bGxVcGxvYWQp
Cit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIoMSk7CisgICAgYXBwZW5kUGFydGlh
bFVwbG9hZHNUb1VwZGF0ZXIoMCk7CisgICAgbV91cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0
KCksICZtX2FsbG9jYXRvciwgJm1fY29waWVyLCAmbV91cGxvYWRlciwgbV90b3RhbFVwbG9hZENv
dW50RXhwZWN0ZWQpOworCisgICAgRVhQRUNUX0VRKDEsIG1fbnVtQmVnaW5VcGxvYWRzKTsKKyAg
ICBFWFBFQ1RfRVEoMSwgbV9udW1FbmRVcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1Q
cmV2aW91c0ZsdXNoZXMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bVByZXZpb3VzVXBsb2Fkcyk7
Cit9CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgT25lUGFydGlhbFVwbG9hZCkKK3sK
KyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcigwKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBs
b2Fkc1RvVXBkYXRlcigxKTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwg
Jm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291bnRF
eHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVY
UEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bVByZXZp
b3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKK30K
KworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBPbmVGdWxsT25lUGFydGlhbFVwbG9hZCkK
K3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcigxKTsKKyAgICBhcHBlbmRQYXJ0aWFs
VXBsb2Fkc1RvVXBkYXRlcigxKTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQo
KSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291
bnRFeHBlY3RlZCk7CisKKyAgICAvLyBXZSBleHBlY3QgdGhlIGZ1bGwgdXBsb2FkcyB0byBiZSBm
b2xsb3dlZCBieSBhIGZsdXNoCisgICAgLy8gYmVmb3JlIHRoZSBwYXJ0aWFsIHVwbG9hZHMgYmVn
aW4uCisgICAgRVhQRUNUX0VRKDEsIG1fbnVtQmVnaW5VcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEo
MSwgbV9udW1FbmRVcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9udW1QcmV2aW91c0ZsdXNo
ZXMpOworICAgIEVYUEVDVF9FUSgyLCBtX251bVByZXZpb3VzVXBsb2Fkcyk7Cit9CisKKworLy8g
Tk8gUkVNQUlOREVSIFRFU1RTCisvLyBUaGlzIGNsYXNzIG9mIHRlc3RzIHVwbG9hZCBhIG51bWJl
ciBvZiB0ZXh0dXJlcyB0aGF0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIGZsdXNoIHBlcmlvZC4KK2Nv
bnN0IGludCBmdWxsVXBsb2FkRmx1c2hNdWx0aXBsZXIgPSA3OworY29uc3QgaW50IGZ1bGxOb1Jl
bWFpbmRlckNvdW50ID0gZnVsbFVwbG9hZEZsdXNoTXVsdGlwbGVyICoga0ZsdXNoUGVyaW9kRnVs
bDsKKworY29uc3QgaW50IHBhcnRpYWxVcGxvYWRGbHVzaE11bHRpcGxlciA9IDExOworY29uc3Qg
aW50IHBhcnRpYWxOb1JlbWFpbmRlckNvdW50ID0gcGFydGlhbFVwbG9hZEZsdXNoTXVsdGlwbGVy
ICoga0ZsdXNoUGVyaW9kUGFydGlhbDsKKworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBN
YW55RnVsbFVwbG9hZHNOb1JlbWFpbmRlcikKK3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBk
YXRlcihmdWxsTm9SZW1haW5kZXJDb3VudCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1Vw
ZGF0ZXIoMCk7CisgICAgbV91cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9j
YXRvciwgJm1fY29waWVyLCAmbV91cGxvYWRlciwgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQp
OworCisgICAgRVhQRUNUX0VRKDEsIG1fbnVtQmVnaW5VcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEo
MSwgbV9udW1FbmRVcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFVwbG9hZEZsdXNoTXVsdGlw
bGVyLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKGZ1bGxOb1JlbWFpbmRl
ckNvdW50LCBtX251bVByZXZpb3VzVXBsb2Fkcyk7Cit9CisKK1RFU1RfRihDQ1RleHR1cmVVcGRh
dGVyVGVzdCwgTWFueVBhcnRpYWxVcGxvYWRzTm9SZW1haW5kZXIpCit7CisgICAgYXBwZW5kRnVs
bFVwbG9hZHNUb1VwZGF0ZXIoMCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZXIo
cGFydGlhbE5vUmVtYWluZGVyQ291bnQpOworICAgIG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0
LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIG1fdG90YWxVcGxv
YWRDb3VudEV4cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgxLCBtX251bUJlZ2luVXBsb2Fkcyk7
CisgICAgRVhQRUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKHBhcnRp
YWxVcGxvYWRGbHVzaE11bHRpcGxlciwgbV9udW1QcmV2aW91c0ZsdXNoZXMpOworICAgIEVYUEVD
VF9FUShwYXJ0aWFsTm9SZW1haW5kZXJDb3VudCwgbV9udW1QcmV2aW91c1VwbG9hZHMpOworfQor
CitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlGdWxsTWFueVBhcnRpYWxVcGxvYWRz
Tm9SZW1haW5kZXIpCit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIoZnVsbE5vUmVt
YWluZGVyQ291bnQpOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKHBhcnRpYWxO
b1JlbWFpbmRlckNvdW50KTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwg
Jm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291bnRF
eHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVY
UEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVDVF9FUShmdWxsVXBsb2FkRmx1
c2hNdWx0aXBsZXIgKyBwYXJ0aWFsVXBsb2FkRmx1c2hNdWx0aXBsZXIsIG1fbnVtUHJldmlvdXNG
bHVzaGVzKTsKKyAgICBFWFBFQ1RfRVEoZnVsbE5vUmVtYWluZGVyQ291bnQgKyBwYXJ0aWFsTm9S
ZW1haW5kZXJDb3VudCwgbV9udW1QcmV2aW91c1VwbG9hZHMpOworfQorCisKKy8vIE1JTi9NQVgg
UkVNQUlOREVSIFRFU1RTCisvLyBUaGlzIGNsYXNzIG9mIHRlc3RzIG1peCBhbmQgbWF0Y2ggdXBs
b2FkaW5nIDEgbW9yZSBhbmQgMSBsZXNzIHRleHR1cmUKKy8vIHRoYW4gYSBtdWx0aXBsZSBvZiB0
aGUgZmx1c2ggcGVyaW9kLgorCitjb25zdCBpbnQgZnVsbE1pblJlbWFpbmRlckNvdW50ID0gZnVs
bE5vUmVtYWluZGVyQ291bnQgKyAxOworY29uc3QgaW50IGZ1bGxNYXhSZW1haW5kZXJDb3VudCA9
IGZ1bGxOb1JlbWFpbmRlckNvdW50IC0gMTsKK2NvbnN0IGludCBwYXJ0aWFsTWluUmVtYWluZGVy
Q291bnQgPSBwYXJ0aWFsTm9SZW1haW5kZXJDb3VudCArIDE7Citjb25zdCBpbnQgcGFydGlhbE1h
eFJlbWFpbmRlckNvdW50ID0gcGFydGlhbE5vUmVtYWluZGVyQ291bnQgLSAxOworCitURVNUX0Yo
Q0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlGdWxsQW5kUGFydGlhbE1pblJlbWFpbmRlcikKK3sK
KyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcihmdWxsTWluUmVtYWluZGVyQ291bnQpOwor
ICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKHBhcnRpYWxNaW5SZW1haW5kZXJDb3Vu
dCk7CisgICAgbV91cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRvciwg
Jm1fY29waWVyLCAmbV91cGxvYWRlciwgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQpOworCisg
ICAgRVhQRUNUX0VRKDEsIG1fbnVtQmVnaW5VcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9u
dW1FbmRVcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFVwbG9hZEZsdXNoTXVsdGlwbGVyICsg
cGFydGlhbFVwbG9hZEZsdXNoTXVsdGlwbGVyICsgMiwgbV9udW1QcmV2aW91c0ZsdXNoZXMpOwor
ICAgIEVYUEVDVF9FUShmdWxsTWluUmVtYWluZGVyQ291bnQgKyBwYXJ0aWFsTWluUmVtYWluZGVy
Q291bnQsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKK30KKworVEVTVF9GKENDVGV4dHVyZVVwZGF0
ZXJUZXN0LCBNYW55RnVsbEFuZFBhcnRpYWxVcGxvYWRzTWF4UmVtYWluZGVyKQoreworICAgIGFw
cGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKGZ1bGxNYXhSZW1haW5kZXJDb3VudCk7CisgICAgYXBw
ZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZXIocGFydGlhbE1heFJlbWFpbmRlckNvdW50KTsKKyAg
ICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3Bp
ZXIsICZtX3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCk7CisKKyAgICBFWFBF
Q1RfRVEoMSwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVw
bG9hZHMpOworICAgIEVYUEVDVF9FUShmdWxsVXBsb2FkRmx1c2hNdWx0aXBsZXIgKyBwYXJ0aWFs
VXBsb2FkRmx1c2hNdWx0aXBsZXIsIG1fbnVtUHJldmlvdXNGbHVzaGVzKTsKKyAgICBFWFBFQ1Rf
RVEoZnVsbE1heFJlbWFpbmRlckNvdW50ICsgcGFydGlhbE1heFJlbWFpbmRlckNvdW50LCBtX251
bVByZXZpb3VzVXBsb2Fkcyk7Cit9CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgTWFu
eUZ1bGxNaW5SZW1haW5kZXJNYW55UGFydGlhbE1heFJlbWFpbmRlcikKK3sKKyAgICBhcHBlbmRG
dWxsVXBsb2Fkc1RvVXBkYXRlcihmdWxsTWluUmVtYWluZGVyQ291bnQpOworICAgIGFwcGVuZFBh
cnRpYWxVcGxvYWRzVG9VcGRhdGVyKHBhcnRpYWxNYXhSZW1haW5kZXJDb3VudCk7CisgICAgbV91
cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRvciwgJm1fY29waWVyLCAm
bV91cGxvYWRlciwgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQpOworCisgICAgRVhQRUNUX0VR
KDEsIG1fbnVtQmVnaW5VcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1FbmRVcGxvYWRz
KTsKKyAgICBFWFBFQ1RfRVEoKGZ1bGxVcGxvYWRGbHVzaE11bHRpcGxlcisxKSArIHBhcnRpYWxV
cGxvYWRGbHVzaE11bHRpcGxlciwgbV9udW1QcmV2aW91c0ZsdXNoZXMpOworICAgIEVYUEVDVF9F
UShmdWxsTWluUmVtYWluZGVyQ291bnQgKyBwYXJ0aWFsTWF4UmVtYWluZGVyQ291bnQsIG1fbnVt
UHJldmlvdXNVcGxvYWRzKTsKK30KKworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBNYW55
RnVsbE1heFJlbWFpbmRlck1hbnlQYXJ0aWFsTWluUmVtYWluZGVyKQoreworICAgIGFwcGVuZEZ1
bGxVcGxvYWRzVG9VcGRhdGVyKGZ1bGxNYXhSZW1haW5kZXJDb3VudCk7CisgICAgYXBwZW5kUGFy
dGlhbFVwbG9hZHNUb1VwZGF0ZXIocGFydGlhbE1pblJlbWFpbmRlckNvdW50KTsKKyAgICBtX3Vw
ZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZt
X3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEo
MSwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMp
OworICAgIEVYUEVDVF9FUShmdWxsVXBsb2FkRmx1c2hNdWx0aXBsZXIgKyAocGFydGlhbFVwbG9h
ZEZsdXNoTXVsdGlwbGVyKzEpLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VR
KGZ1bGxNYXhSZW1haW5kZXJDb3VudCArIHBhcnRpYWxNaW5SZW1haW5kZXJDb3VudCwgbV9udW1Q
cmV2aW91c1VwbG9hZHMpOworfQorCisKKy8vIE1VTFRJUExFIFVQREFURSBURVNUUworLy8gVGhl
c2UgdGVzdHMgYXR0ZW1wdCB0byB1cGxvYWQgbW9yZSB0b28gbWFueSB0ZXh0dXJlcyBhdCBvbmNl
LCByZXF1aXJpbmcKKy8vIG11bHRpcGxlIGNhbGxzIHRvIHVwZGF0ZSgpCisKK2ludCBleHBlY3Rl
ZEZsdXNoZXMoaW50IHVwbG9hZHMsIGludCBmbHVzaFBlcmlvZCkKK3sKKyAgICByZXR1cm4gKHVw
bG9hZHMgKyBmbHVzaFBlcmlvZCAtIDEpIC8gZmx1c2hQZXJpb2Q7Cit9CisKK1RFU1RfRihDQ1Rl
eHR1cmVVcGRhdGVyVGVzdCwgVHJpcGxlVXBkYXRlRmluYWxVcGRhdGVGdWxsQW5kUGFydGlhbCkK
K3sKKyAgICBjb25zdCBpbnQga01heFVwbG9hZHNQZXJVcGRhdGUgPSA0MDsKKyAgICBjb25zdCBp
bnQga0Z1bGxVcGxvYWRzID0gMTAwOworICAgIGNvbnN0IGludCBrUGFydGlhbFVwbG9hZHMgPSAx
MDsKKworICAgIGludCBleHBlY3RlZFByZXZpb3VzRmx1c2hlcyA9IDA7CisgICAgaW50IGV4cGVj
dGVkUHJldmlvdXNVcGxvYWRzID0gMDsKKworICAgIHNldE1heFVwbG9hZENvdW50UGVyVXBkYXRl
KGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcihr
RnVsbFVwbG9hZHMpOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKGtQYXJ0aWFs
VXBsb2Fkcyk7CisKKyAgICAvLyBGaXJzdCB1cGRhdGUgKDQwIGZ1bGwpCisgICAgbV91cGRhdGVy
LnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRvciwgJm1fY29waWVyLCAmbV91cGxv
YWRlciwga01heFVwbG9hZHNQZXJVcGRhdGUpOworCisgICAgRVhQRUNUX0VRKDEsIG1fbnVtQmVn
aW5VcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1FbmRVcGxvYWRzKTsKKworICAgIGV4
cGVjdGVkUHJldmlvdXNGbHVzaGVzID0gZXhwZWN0ZWRGbHVzaGVzKGtNYXhVcGxvYWRzUGVyVXBk
YXRlLCBrRmx1c2hQZXJpb2RGdWxsKTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQcmV2aW91c0Zs
dXNoZXMsIG1fbnVtUHJldmlvdXNGbHVzaGVzKTsKKworICAgIGV4cGVjdGVkUHJldmlvdXNVcGxv
YWRzID0ga01heFVwbG9hZHNQZXJVcGRhdGU7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkUHJldmlv
dXNVcGxvYWRzLCBtX251bVByZXZpb3VzVXBsb2Fkcyk7CisKKyAgICAvLyBTZWNvbmQgdXBkYXRl
ICg0MCBmdWxsKQorICAgIG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxv
Y2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsKKwor
ICAgIEVYUEVDVF9FUSgyLCBtX251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDIsIG1f
bnVtRW5kVXBsb2Fkcyk7CisKKyAgICBleHBlY3RlZFByZXZpb3VzRmx1c2hlcyA9IGV4cGVjdGVk
Rmx1c2hlcyhrTWF4VXBsb2Fkc1BlclVwZGF0ZSwga0ZsdXNoUGVyaW9kRnVsbCk7CisgICAgRVhQ
RUNUX0VRKGV4cGVjdGVkUHJldmlvdXNGbHVzaGVzLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisK
KyAgICBleHBlY3RlZFByZXZpb3VzVXBsb2FkcyA9IGtNYXhVcGxvYWRzUGVyVXBkYXRlOworICAg
IEVYUEVDVF9FUShleHBlY3RlZFByZXZpb3VzVXBsb2FkcywgbV9udW1QcmV2aW91c1VwbG9hZHMp
OworCisgICAgLy8gVGhpcmQgdXBkYXRlICgyMCBmdWxsLCAyMCBwYXJ0aWFsKQorICAgIG1fdXBk
YXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1f
dXBsb2FkZXIsIGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsKKworICAgIEVYUEVDVF9FUSgzLCAgbV9u
dW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgzLCBtX251bUVuZFVwbG9hZHMpOworCisg
ICAgZXhwZWN0ZWRQcmV2aW91c0ZsdXNoZXMgPSBleHBlY3RlZEZsdXNoZXMoa0Z1bGxVcGxvYWRz
LWtNYXhVcGxvYWRzUGVyVXBkYXRlKjIsIGtGbHVzaFBlcmlvZEZ1bGwpICsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRmx1c2hlcyhrUGFydGlhbFVwbG9hZHMsIGtGbHVz
aFBlcmlvZFBhcnRpYWwpOworICAgIEVYUEVDVF9FUShleHBlY3RlZFByZXZpb3VzRmx1c2hlcywg
bV9udW1QcmV2aW91c0ZsdXNoZXMpOworCisgICAgZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMgPSAo
a0Z1bGxVcGxvYWRzLWtNYXhVcGxvYWRzUGVyVXBkYXRlKjIpK2tQYXJ0aWFsVXBsb2FkczsKKyAg
ICBFWFBFQ1RfRVEoZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMsIG1fbnVtUHJldmlvdXNVcGxvYWRz
KTsKKworICAgIC8vIEZpbmFsIHNhbml0eSBjaGVja3MKKyAgICBFWFBFQ1RfRVEoa0Z1bGxVcGxv
YWRzICsga1BhcnRpYWxVcGxvYWRzLCBtX251bVRvdGFsVXBsb2Fkcyk7Cit9CisKK1RFU1RfRihD
Q1RleHR1cmVVcGRhdGVyVGVzdCwgVHJpcGxlVXBkYXRlRmluYWxVcGRhdGVBbGxQYXJ0aWFsKQor
eworICAgIGNvbnN0IGludCBrTWF4VXBsb2Fkc1BlclVwZGF0ZSA9IDQwOworICAgIGNvbnN0IGlu
dCBrRnVsbFVwbG9hZHMgPSA3MDsKKyAgICBjb25zdCBpbnQga1BhcnRpYWxVcGxvYWRzID0gMzA7
CisKKyAgICBpbnQgZXhwZWN0ZWRQcmV2aW91c0ZsdXNoZXMgPSAwOworICAgIGludCBleHBlY3Rl
ZFByZXZpb3VzVXBsb2FkcyA9IDA7CisKKyAgICBzZXRNYXhVcGxvYWRDb3VudFBlclVwZGF0ZShr
TWF4VXBsb2Fkc1BlclVwZGF0ZSk7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIoa0Z1
bGxVcGxvYWRzKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihrUGFydGlhbFVw
bG9hZHMpOworCisgICAgLy8gRmlyc3QgdXBkYXRlICg0MCBmdWxsKQorICAgIG1fdXBkYXRlci51
cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2Fk
ZXIsIGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsKKworICAgIEVYUEVDVF9FUSgxLCBtX251bUJlZ2lu
VXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7CisKKyAgICBleHBl
Y3RlZFByZXZpb3VzRmx1c2hlcyA9IGV4cGVjdGVkRmx1c2hlcyhrTWF4VXBsb2Fkc1BlclVwZGF0
ZSwga0ZsdXNoUGVyaW9kRnVsbCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkUHJldmlvdXNGbHVz
aGVzLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisKKyAgICBleHBlY3RlZFByZXZpb3VzVXBsb2Fk
cyA9IGtNYXhVcGxvYWRzUGVyVXBkYXRlOworICAgIEVYUEVDVF9FUShleHBlY3RlZFByZXZpb3Vz
VXBsb2FkcywgbV9udW1QcmV2aW91c1VwbG9hZHMpOworCisgICAgLy8gU2Vjb25kIHVwZGF0ZSAo
MzAgZnVsbCkKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2Nh
dG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBsb2Fkc1BlclVwZGF0ZSk7CisKKyAg
ICBFWFBFQ1RfRVEoMiwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgyLCBtX251
bUVuZFVwbG9hZHMpOworCisgICAgZXhwZWN0ZWRQcmV2aW91c0ZsdXNoZXMgPSBleHBlY3RlZEZs
dXNoZXMoa0Z1bGxVcGxvYWRzLWtNYXhVcGxvYWRzUGVyVXBkYXRlLCBrRmx1c2hQZXJpb2RGdWxs
KTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQcmV2aW91c0ZsdXNoZXMsIG1fbnVtUHJldmlvdXNG
bHVzaGVzKTsKKworICAgIC8vIE5vdGUsIHRoaXMgaXMgdGVzdGluZyBhbiBpbXBsZW1lbnRhdGlv
biBkZXRhaWwgdGhhdCwgaWYgdGhlIHBhcnRpYWwKKyAgICAvLyB1cGxvYWRzIHdvdWxkIG1ha2Ug
dXMgZ28gb3ZlciB0aGUgbWF4LXVwbG9hZHMtcGVyLXVwZGF0ZSwgdGhlbiBqdXN0CisgICAgLy8g
ZGVmZXIgYWxsIHRoZSBwYXJ0aWFsIHVwZGF0ZXMuIEl0IHdvdWxkLCBob3dldmVyLCBhbHNvIGJl
IHZhbGlkIHRvIHNlZQorICAgIC8vIDEwIHBhcnRpYWwgdXBsb2FkcyBpbiBhZGRpdGlvbiB0byB0
aGUgMzAgZnVsbCB1cGxvYWRzLgorICAgIGV4cGVjdGVkUHJldmlvdXNVcGxvYWRzID0ga0Z1bGxV
cGxvYWRzLWtNYXhVcGxvYWRzUGVyVXBkYXRlOworICAgIEVYUEVDVF9FUShleHBlY3RlZFByZXZp
b3VzVXBsb2FkcywgbV9udW1QcmV2aW91c1VwbG9hZHMpOworICAgIEVYUEVDVF9ORShleHBlY3Rl
ZFByZXZpb3VzVXBsb2Fkcywga01heFVwbG9hZHNQZXJVcGRhdGUpIDw8ICJZb3UgbWF5IGFjdHVh
bHkgYmUgb2theSBoZXJlOyBjb25zaWRlciBjaGFuZ2luZyB0aGUgZnJhZ2lsZSB0ZXN0LiI7CisK
KyAgICAvLyBUaGlyZCB1cGRhdGUgKDMwIHBhcnRpYWwpCisgICAgbV91cGRhdGVyLnVwZGF0ZSht
X2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRvciwgJm1fY29waWVyLCAmbV91cGxvYWRlciwga01h
eFVwbG9hZHNQZXJVcGRhdGUpOworCisgICAgRVhQRUNUX0VRKDMsIG1fbnVtQmVnaW5VcGxvYWRz
KTsKKyAgICBFWFBFQ1RfRVEoMywgbV9udW1FbmRVcGxvYWRzKTsKKworICAgIGV4cGVjdGVkUHJl
dmlvdXNGbHVzaGVzID0gZXhwZWN0ZWRGbHVzaGVzKGtQYXJ0aWFsVXBsb2Fkcywga0ZsdXNoUGVy
aW9kUGFydGlhbCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkUHJldmlvdXNGbHVzaGVzLCBtX251
bVByZXZpb3VzRmx1c2hlcyk7CisKKyAgICBleHBlY3RlZFByZXZpb3VzVXBsb2FkcyA9IGtQYXJ0
aWFsVXBsb2FkczsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMsIG1fbnVt
UHJldmlvdXNVcGxvYWRzKTsKKworICAgIC8vIEZpbmFsIHNhbml0eSBjaGVja3MKKyAgICBFWFBF
Q1RfRVEoa0Z1bGxVcGxvYWRzICsga1BhcnRpYWxVcGxvYWRzLCBtX251bVRvdGFsVXBsb2Fkcyk7
Cit9CisKKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152368</attachid>
            <date>2012-07-13 16:30:37 -0700</date>
            <delta_ts>2012-07-13 16:35:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120713163037.patch</filename>
            <type>text/plain</type>
            <size>24752</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZhOTc4NzQxYzdhOTU2
MDU0MTI2NDUwYjE2ZTVhMmMzMDcyZTc4My4uNzU5MzU1NzYzYzgxMzc3M2FmNTlhZjM2MTdiOWUz
NzY0NWJlMTA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA3LTExICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCBmbHVzaGVzIHRvIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdXRvbWF0aWMgZmx1c2hlcyBhcmUg
YmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb21tYW5kIGJ1ZmZlciwgc28KKyAgICAgICAgdGhpcyBt
b3ZlcyB0aGUgZmx1c2hlcyBpbnRvIHRoZSBDQ1RleHR1cmVVcGRhdGVyIGl0c2VsZi4KKworICAg
ICAgICBDQ1RleHR1cmVVcGRhdGVyVGVzdCBhZGRlZCB0byB2ZXJpZnkgdGV4dHVyZSB1cGxvYWQv
Zmx1c2hpbmcgcGF0dGVybnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NHcmFwaGljc0Nv
bnRleHQ6OmZsdXNoKToKKyAgICAgICAgKENDR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRl
KTogTWFudWFsIGZsdXNoZXMgYWRkZWQgaGVyZS4KKwogMjAxMi0wNy0xMiAgRGFuYSBKYW5zZW5z
ICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFRoZSByb290IGxh
eWVyIHNob3VsZCBub3QgdHJ5IGNyZWF0ZSBhIHNlY29uZCBSZW5kZXJTdXJmYWNlIGZvciBpdHNl
bGYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZmFmMjZhNzdhYTY1NTY4YTJkMDY3ZTY3
OGUzNTI2MDFjOTJhM2FlZC4uY2RmZDVlYTFlMTM0YzVhYWNjNTc4N2MyZDE1NDE1MzFiZjFlZDIw
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNy0x
MSAgQnJpYW4gQW5kZXJzb24gIDxicmlhbmRlcnNvbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
QWRkIGZsdXNoZXMgdG8gQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzNQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENDVGV4dHVyZVVwZGF0ZXJUZXN0IGFkZGVk
IHRvIHZlcmlmeSB0ZXh0dXJlIHVwbG9hZC9mbHVzaGluZyBwYXR0ZXJucy4KKworICAgICAgICAq
IFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcDog
QWRkZWQuCisKIDIwMTItMDctMTIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IHRyeSBjcmVh
dGUgYSBzZWNvbmQgUmVuZGVyU3VyZmFjZSBmb3IgaXRzZWxmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dyYXBoaWNzQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHcmFwaGlj
c0NvbnRleHQuaAppbmRleCA0MDU4ODVmZmI1YzMzMjMzMDE2NmQzMzM2YjBkODk3Mzg4MjBmMTI1
Li5iZThjOGE1NTdhOTM0MDM4ZWFmYWZmZTM1ODAwZDVhNGZiNWNiNmJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dyYXBoaWNzQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDR3JhcGhpY3NDb250ZXh0LmgKQEAgLTQ4LDYgKzQ4LDEyIEBAIHB1YmxpYzoKIAogICAgIFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCgpIHsgcmV0dXJuIG1fY29udGV4
dDNELmdldCgpOyB9CiAKKyAgICB2b2lkIGZsdXNoKCkKKyAgICB7CisgICAgICAgIGlmIChtX2Nv
bnRleHQzRCkKKyAgICAgICAgICAgIG1fY29udGV4dDNELT5mbHVzaCgpOworICAgIH0KKwogcHJp
dmF0ZToKICAgICBDQ0dyYXBoaWNzQ29udGV4dCgpIHsgfQogICAgIGV4cGxpY2l0IENDR3JhcGhp
Y3NDb250ZXh0KFBhc3NPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dDNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCAzMTkwZDgyZmZjN2Jh
ZTc5ZTU1ZWZmYmM1MDJiODQ0OTA3NGI2NjI2Li5iYzFlZDc1YWY5YWY1MGQ5NjRiNzQ3MzE0MzM3
ZmU5YzRlYzFmZTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAtMzks
NiArMzksOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3N0YXRpYyBjb25zdCBpbnQga1VwbG9hZEZsdXNoUGVyaW9kID0gNDsKKwogQ0NUZXh0dXJlVXBk
YXRlcjo6Q0NUZXh0dXJlVXBkYXRlcigpCiAgICAgOiBtX2VudHJ5SW5kZXgoMCkKIHsKQEAgLTkz
LDEyICs5NSwyMCBAQCB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShDQ0dyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsbwogCiAgICAgICAgIHVwbG9hZGVy
LT5iZWdpblVwbG9hZHMoKTsKIAorICAgICAgICBpbnQgZnVsbFVwbG9hZENvdW50ID0gMDsKICAg
ICAgICAgc2l6ZV90IG1heEluZGV4ID0gbWluKG1fZW50cnlJbmRleCArIGNvdW50LCBtX2Z1bGxF
bnRyaWVzLnNpemUoKSk7CiAgICAgICAgIGZvciAoaW5kZXggPSBtX2VudHJ5SW5kZXg7IGluZGV4
IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFVwZGF0ZUVudHJ5JiBlbnRyeSA9
IG1fZnVsbEVudHJpZXNbaW5kZXhdOwogICAgICAgICAgICAgdXBsb2FkZXItPnVwbG9hZFRleHR1
cmUoY29udGV4dCwgZW50cnkudGV4dHVyZSwgYWxsb2NhdG9yLCBlbnRyeS5zb3VyY2VSZWN0LCBl
bnRyeS5kZXN0UmVjdCk7CisgICAgICAgICAgICBmdWxsVXBsb2FkQ291bnQrKzsKKyAgICAgICAg
ICAgIGlmICghKGZ1bGxVcGxvYWRDb3VudCAlIGtVcGxvYWRGbHVzaFBlcmlvZCkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+Zmx1c2goKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGVyZSBhcmUgbm8gZGFuZ2xpbmcgdXBsb2FkcyB3aXRob3V0IGEgZmx1c2guCisgICAg
ICAgIGlmIChmdWxsVXBsb2FkQ291bnQgJSBrVXBsb2FkRmx1c2hQZXJpb2QpCisgICAgICAgICAg
ICBjb250ZXh0LT5mbHVzaCgpOworCiAgICAgICAgIGJvb2wgbW9yZVVwbG9hZHMgPSBtYXhJbmRl
eCA8IG1fZnVsbEVudHJpZXMuc2l6ZSgpOwogCiAgICAgICAgIEFTU0VSVChtX3BhcnRpYWxFbnRy
aWVzLnNpemUoKSA8PSBjb3VudCk7CkBAIC0xMTYsOCArMTI2LDE2IEBAIHZvaWQgQ0NUZXh0dXJl
VXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2Nh
dG9yKiBhbGxvCiAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1fcGFydGlhbEVudHJp
ZXMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkgPSBt
X3BhcnRpYWxFbnRyaWVzW2luZGV4XTsKICAgICAgICAgICAgIHVwbG9hZGVyLT51cGxvYWRUZXh0
dXJlKGNvbnRleHQsIGVudHJ5LnRleHR1cmUsIGFsbG9jYXRvciwgZW50cnkuc291cmNlUmVjdCwg
ZW50cnkuZGVzdFJlY3QpOworICAgICAgICAgICAgaWYgKCEoKGluZGV4KzEpICUga1VwbG9hZEZs
dXNoUGVyaW9kKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5mbHVzaCgpOwogICAgICAgICB9
CiAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkYW5nbGluZyBwYXJ0aWFsIHVw
bG9hZHMgd2l0aG91dCBhIGZsdXNoLgorICAgICAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRv
IHVzZSAoaW5kZXgrMSkgaW4gdGhpcyBjYXNlIGJlY2F1c2UgaW5kZXggd2FzCisgICAgICAgIC8v
IGluY3JlbWVudGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZvciBsb29wLgorICAgICAgICBpZiAoaW5k
ZXggJSBrVXBsb2FkRmx1c2hQZXJpb2QpCisgICAgICAgICAgICBjb250ZXh0LT5mbHVzaCgpOwor
CiAgICAgICAgIHVwbG9hZGVyLT5lbmRVcGxvYWRzKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCAzZjkwNWE3YWI0MjNlOTExYWE3YzBjNzk2MDAxZjg2NWEwNTkw
MWEzLi41OWMwMDc5NWUzN2VjMGFhZDA0OTI2Y2E5ZTNjMjhmMDY2YzA4MzhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTg0LDYgKzg0LDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTb2xpZENv
bG9yTGF5ZXJJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGVzdENvbW1vbi5o
JywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1RleHR1cmVVcGRhdGVyVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDVGlsZWRMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbGVk
TGF5ZXJUZXN0Q29tbW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUZXh0dXJlVXBkYXRlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlOTBkNGRhMzdjYTRm
MzY1MGZiODkyZmJlNjVjYTJlYjI5MTVkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcApAQCAtMCwwICsxLDUy
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5o
IgorI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyB0
ZXN0aW5nOjpUZXN0OworCisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGludCBrRmx1c2hQZXJpb2RG
dWxsID0gNDsKK2NvbnN0IGludCBrRmx1c2hQZXJpb2RQYXJ0aWFsID0ga0ZsdXNoUGVyaW9kRnVs
bDsKKworY2xhc3MgQ0NUZXh0dXJlVXBkYXRlclRlc3Q7CisKK2NsYXNzIFdlYkdyYXBoaWNzQ29u
dGV4dDNERm9yVXBsb2FkVGVzdCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Qgewor
cHVibGljOgorICAgIFdlYkdyYXBoaWNzQ29udGV4dDNERm9yVXBsb2FkVGVzdChDQ1RleHR1cmVV
cGRhdGVyVGVzdCAqdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGZs
dXNoKHZvaWQpOworICAgIHZpcnR1YWwgR3JHTEludGVyZmFjZSogb25DcmVhdGVHckdMSW50ZXJm
YWNlKCkgeyByZXR1cm4gMDsgfQorCitwcml2YXRlOgorICAgIENDVGV4dHVyZVVwZGF0ZXJUZXN0
KiBtX3Rlc3Q7Cit9OworCisKK2NsYXNzIFRleHR1cmVVcGxvYWRlckZvclVwbG9hZFRlc3QgOiBw
dWJsaWMgRmFrZVRleHR1cmVVcGxvYWRlciB7CitwdWJsaWM6CisgICAgVGV4dHVyZVVwbG9hZGVy
Rm9yVXBsb2FkVGVzdChDQ1RleHR1cmVVcGRhdGVyVGVzdCAqdGVzdCkgOiBtX3Rlc3QodGVzdCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5VcGxvYWRzKCk7CisgICAgdmlydHVhbCB2b2lk
IGVuZFVwbG9hZHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZShXZWJDb3JlOjpD
Q0dyYXBoaWNzQ29udGV4dCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViQ29yZTo6VGV4dHVyZUFsbG9jYXRvciosCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCBzb3VyY2VSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QgZGVzdFJlY3QpOwor
Citwcml2YXRlOgorICAgIENDVGV4dHVyZVVwZGF0ZXJUZXN0KiBtX3Rlc3Q7Cit9OworCisKK2Ns
YXNzIFRleHR1cmVGb3JVcGxvYWRUZXN0IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUgeworcHVibGljOgorICAgIFRleHR1cmVGb3JVcGxvYWRUZXN0KCkgOiBMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlKGFkb3B0UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPigwKSkgeyB9
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqLCBUZXh0dXJl
QWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVz
dFJlY3QpIHsgfQorfTsKKworCitjbGFzcyBDQ1RleHR1cmVVcGRhdGVyVGVzdCA6IHB1YmxpYyBU
ZXN0IHsKK3B1YmxpYzoKKyAgICBDQ1RleHR1cmVVcGRhdGVyVGVzdCgpCisgICAgOiBtX3VwbG9h
ZGVyKHRoaXMpCisgICAgLCBtX2Z1bGxVcGxvYWRDb3VudEV4cGVjdGVkKDApCisgICAgLCBtX3Bh
cnRpYWxDb3VudEV4cGVjdGVkKDApCisgICAgLCBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCgw
KQorICAgICwgbV9tYXhVcGxvYWRDb3VudFBlclVwZGF0ZSgwKQorICAgICwgbV9udW1CZWdpblVw
bG9hZHMoMCkKKyAgICAsIG1fbnVtRW5kVXBsb2FkcygwKQorICAgICwgbV9udW1Db25zZWN1dGl2
ZUZsdXNoZXMoMCkKKyAgICAsIG1fbnVtRGFuZ2xpbmdVcGxvYWRzKDApCisgICAgLCBtX251bVRv
dGFsVXBsb2FkcygwKQorICAgICwgbV9udW1Ub3RhbEZsdXNoZXMoMCkKKyAgICAsIG1fbnVtUHJl
dmlvdXNVcGxvYWRzKDApCisgICAgLCBtX251bVByZXZpb3VzRmx1c2hlcygwKQorICAgIHsgfQor
CitwdWJsaWM6CisgICAgdm9pZCBvbkZsdXNoKCkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGZv
ciBiYWNrLXRvLWJhY2sgZmx1c2hlcy4KKyAgICAgICAgRVhQRUNUX0VRKDAsIG1fbnVtQ29uc2Vj
dXRpdmVGbHVzaGVzKSA8PCAiQmFjay10by1iYWNrIGZsdXNoZXMgZGV0ZWN0ZWQuIjsKKworICAg
ICAgICAvLyBDaGVjayBmb3IgcHJlbWF0dXJlIGZsdXNoZXMKKyAgICAgICAgaWYgKG1fbnVtUHJl
dmlvdXNVcGxvYWRzICE9IG1fbWF4VXBsb2FkQ291bnRQZXJVcGRhdGUpIHsKKyAgICAgICAgICAg
IGlmIChtX251bVRvdGFsVXBsb2FkcyA8IG1fZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQpCisgICAg
ICAgICAgICAgICAgRVhQRUNUX0dFKG1fbnVtRGFuZ2xpbmdVcGxvYWRzLCBrRmx1c2hQZXJpb2RG
dWxsKSA8PCAiUHJlbWF0dXJlIGZsdXNoIGRldGVjdGVkIGluIGZ1bGwgdXBsb2Fkcy4iOworICAg
ICAgICAgICAgZWxzZSBpZiAobV9udW1Ub3RhbFVwbG9hZHMgPiBtX2Z1bGxVcGxvYWRDb3VudEV4
cGVjdGVkICYmIG1fbnVtVG90YWxVcGxvYWRzIDwgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQp
CisgICAgICAgICAgICAgICAgRVhQRUNUX0dFKG1fbnVtRGFuZ2xpbmdVcGxvYWRzLCBrRmx1c2hQ
ZXJpb2RQYXJ0aWFsKSA8PCAiUHJlbWF0dXJlIGZsdXNoIGRldGVjdGVkIGluIHBhcnRpYWwgdXBs
b2Fkcy4iOworICAgICAgICB9CisKKyAgICAgICAgbV9udW1EYW5nbGluZ1VwbG9hZHMgPSAwOwor
ICAgICAgICBtX251bUNvbnNlY3V0aXZlRmx1c2hlcysrOworICAgICAgICBtX251bVRvdGFsRmx1
c2hlcysrOworICAgICAgICBtX251bVByZXZpb3VzRmx1c2hlcysrOworICAgIH0KKworICAgIHZv
aWQgb25CZWdpblVwbG9hZHMoKQorICAgIHsKKyAgICAgICAgbV9udW1QcmV2aW91c0ZsdXNoZXMg
PSAwOworICAgICAgICBtX251bVByZXZpb3VzVXBsb2FkcyA9IDA7CisgICAgICAgIG1fbnVtQmVn
aW5VcGxvYWRzKys7CisgICAgfQorCisgICAgdm9pZCBvblVwbG9hZCgpCisgICAgeworICAgICAg
ICAvLyBDaGVjayBmb3IgdG9vIG1hbnkgY29uc2VjdXRpdmUgdXBsb2FkcworICAgICAgICBpZiAo
bV9udW1Ub3RhbFVwbG9hZHMgPCBtX2Z1bGxVcGxvYWRDb3VudEV4cGVjdGVkKQorICAgICAgICAg
ICAgRVhQRUNUX0xUKG1fbnVtRGFuZ2xpbmdVcGxvYWRzLCBrRmx1c2hQZXJpb2RGdWxsKSA8PCAi
VG9vIG1hbnkgY29uc2VjdXRpdmUgZnVsbCB1cGxvYWRzIGRldGVjdGVkLiI7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIEVYUEVDVF9MVChtX251bURhbmdsaW5nVXBsb2Fkcywga0ZsdXNoUGVy
aW9kUGFydGlhbCkgPDwgIlRvbyBtYW55IGNvbnNlY3V0aXZlIHBhcnRpYWwgdXBsb2FkcyBkZXRl
Y3RlZC4iOworCisgICAgICAgIG1fbnVtQ29uc2VjdXRpdmVGbHVzaGVzID0gMDsKKyAgICAgICAg
bV9udW1EYW5nbGluZ1VwbG9hZHMrKzsKKyAgICAgICAgbV9udW1Ub3RhbFVwbG9hZHMrKzsKKyAg
ICAgICAgbV9udW1QcmV2aW91c1VwbG9hZHMrKzsKKyAgICB9CisKKyAgICB2b2lkIG9uRW5kVXBs
b2FkcygpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMCwgbV9udW1EYW5nbGluZ1VwbG9hZHMp
IDw8ICJMYXN0IHVwbG9hZCB3YXNuJ3QgZm9sbG93ZWQgYnkgYSBmbHVzaC4iOworCisgICAgICAg
IC8vIE5vdGU6IFRoZSBtX251bVRvdGFsVXBsb2FkcyAhPSBtX2Z1bGxVcGxvYWRDb3VudEV4cGVj
dGVkIGNvbXBhcmlzb24KKyAgICAgICAgLy8gYWxsb3dzIGZvciB0aGUgcXVvdGEgbm90IHRvIGJl
IGhpdCBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgdHJhc2l0aW9uaW5nCisgICAgICAgIC8vIGZy
b20gZnVsbCB1cGxvYWRzIHRvIHBhcnRpYWwgdXBsb2Fkcy4KKyAgICAgICAgaWYgKG1fbnVtVG90
YWxVcGxvYWRzICE9IG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkICYmIG1fbnVtVG90YWxVcGxv
YWRzICE9IG1fZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQpIHsKKyAgICAgICAgICAgIEVYUEVDVF9F
UShtX21heFVwbG9hZENvdW50UGVyVXBkYXRlLCBtX251bVByZXZpb3VzVXBsb2FkcykKKyAgICAg
ICAgICAgICAgICA8PCAiZW5kVXBsb2FkKCkgd2FzIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSB0ZXh0
dXJlcyB0byB1cGxvYWQsIGJ1dCB0aGUgdXBsb2FkIHF1b3RhIGhhc24ndCBiZWVuIGZpbGxlZC4i
OworICAgICAgICB9CisKKyAgICAgICAgbV9udW1FbmRVcGxvYWRzKys7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIE93blB0cjxX
ZWJUaHJlYWQ+IHRocmVhZDsKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSh0aHJl
YWQuZ2V0KCkpOworCisgICAgICAgIG1fY29udGV4dCA9IENDR3JhcGhpY3NDb250ZXh0OjpjcmVh
dGUzRCgKKyAgICAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNzQ29udGV4
dDNERm9yVXBsb2FkVGVzdCh0aGlzKSkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFy
RG93bigpCisgICAgeworICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAgIH0K
KworICAgIHZvaWQgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIoaW50IGNvdW50KQorICAgIHsK
KyAgICAgICAgbV9mdWxsVXBsb2FkQ291bnRFeHBlY3RlZCArPSBjb3VudDsKKyAgICAgICAgbV90
b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CisKKyAgICAgICAgY29uc3QgSW50UmVj
dCByZWN0KDAsIDAsIDMwMCwgMTUwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICAgICAgbV91cGRhdGVyLmFwcGVuZEZ1bGxVcGRhdGUoJm1fdGV4dHVy
ZSwgcmVjdCwgcmVjdCk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1Rv
VXBkYXRlcihpbnQgY291bnQpCisgICAgeworICAgICAgICBtX3BhcnRpYWxDb3VudEV4cGVjdGVk
ICs9IGNvdW50OworICAgICAgICBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCArPSBjb3VudDsK
KworICAgICAgICBjb25zdCBJbnRSZWN0IHJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICBtX3VwZGF0ZXIuYXBw
ZW5kUGFydGlhbFVwZGF0ZSgmbV90ZXh0dXJlLCByZWN0LCByZWN0KTsKKyAgICB9CisKKyAgICB2
b2lkIHNldE1heFVwbG9hZENvdW50UGVyVXBkYXRlKGludCBjb3VudCkKKyAgICB7CisgICAgICAg
IG1fbWF4VXBsb2FkQ291bnRQZXJVcGRhdGUgPSBjb3VudDsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICAvLyBDbGFzc2VzIHJlcXVpcmVkIHRvIGludGVyYWN0IGFuZCB0ZXN0IHRoZSBDQ1RleHR1
cmVVcGRhdGVyCisgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CisgICAg
Q0NUZXh0dXJlVXBkYXRlciBtX3VwZGF0ZXI7CisgICAgVGV4dHVyZUZvclVwbG9hZFRlc3QgbV90
ZXh0dXJlOworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIG1fYWxsb2NhdG9yOworICAgIEZha2VU
ZXh0dXJlQ29waWVyIG1fY29waWVyOworICAgIFRleHR1cmVVcGxvYWRlckZvclVwbG9hZFRlc3Qg
bV91cGxvYWRlcjsKKworICAgIC8vIFByb3BlcnRpZXMgLyBleHBlY3RhdGlvbnMgb2YgdGhpcyB0
ZXN0CisgICAgaW50IG1fZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQ7CisgICAgaW50IG1fcGFydGlh
bENvdW50RXhwZWN0ZWQ7CisgICAgaW50IG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkOworICAg
IGludCBtX21heFVwbG9hZENvdW50UGVyVXBkYXRlOworCisgICAgLy8gRHluYW1pYyBwcm9wZXJ0
aWVzIG9mIHRoaXMgdGVzdAorICAgIGludCBtX251bUJlZ2luVXBsb2FkczsKKyAgICBpbnQgbV9u
dW1FbmRVcGxvYWRzOworICAgIGludCBtX251bUNvbnNlY3V0aXZlRmx1c2hlczsKKyAgICBpbnQg
bV9udW1EYW5nbGluZ1VwbG9hZHM7CisgICAgaW50IG1fbnVtVG90YWxVcGxvYWRzOworICAgIGlu
dCBtX251bVRvdGFsRmx1c2hlczsKKyAgICBpbnQgbV9udW1QcmV2aW91c1VwbG9hZHM7CisgICAg
aW50IG1fbnVtUHJldmlvdXNGbHVzaGVzOworfTsKKworCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4
dDNERm9yVXBsb2FkVGVzdDo6Zmx1c2godm9pZCkKK3sKKyAgICBtX3Rlc3QtPm9uRmx1c2goKTsK
K30KKwordm9pZCBUZXh0dXJlVXBsb2FkZXJGb3JVcGxvYWRUZXN0OjpiZWdpblVwbG9hZHMoKQor
eworICAgIG1fdGVzdC0+b25CZWdpblVwbG9hZHMoKTsKK30KKwordm9pZCBUZXh0dXJlVXBsb2Fk
ZXJGb3JVcGxvYWRUZXN0OjplbmRVcGxvYWRzKCkKK3sKKyAgICBtX3Rlc3QtPm9uRW5kVXBsb2Fk
cygpOworfQorCit2b2lkIFRleHR1cmVVcGxvYWRlckZvclVwbG9hZFRlc3Q6OnVwbG9hZFRleHR1
cmUoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlKiB0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6VGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCBzb3VyY2VS
ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCBkZXN0UmVjdCkKK3sKKyAgICBtX3Rlc3QtPm9uVXBsb2FkKCk7Cit9CisK
KworLy8gWkVSTyBVUExPQURTIFRFU1RTCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIFpl
cm9VcGxvYWRzKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKDApOworICAgIGFw
cGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKDApOworICAgIG1fdXBkYXRlci51cGRhdGUobV9j
b250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIG1fdG90
YWxVcGxvYWRDb3VudEV4cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgwLCBtX251bUJlZ2luVXBs
b2Fkcyk7CisgICAgRVhQRUNUX0VRKDAsIG1fbnVtRW5kVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VR
KDAsIG1fbnVtUHJldmlvdXNGbHVzaGVzKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9udW1QcmV2aW91
c1VwbG9hZHMpOworfQorCisKKy8vIE9ORSBVUExPQUQgVEVTVFMKK1RFU1RfRihDQ1RleHR1cmVV
cGRhdGVyVGVzdCwgT25lRnVsbFVwbG9hZCkKK3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBk
YXRlcigxKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcigwKTsKKyAgICBtX3Vw
ZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZt
X3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEo
MSwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMp
OworICAgIEVYUEVDVF9FUSgxLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VR
KDEsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKK30KKworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJU
ZXN0LCBPbmVQYXJ0aWFsVXBsb2FkKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVy
KDApOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKDEpOworICAgIG1fdXBkYXRl
ci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBs
b2FkZXIsIG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgxLCBt
X251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fbnVtUHJldmlvdXNGbHVzaGVzKTsKKyAgICBFWFBFQ1RfRVEoMSwg
bV9udW1QcmV2aW91c1VwbG9hZHMpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3Qs
IE9uZUZ1bGxPbmVQYXJ0aWFsVXBsb2FkKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRh
dGVyKDEpOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKDEpOworICAgIG1fdXBk
YXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1f
dXBsb2FkZXIsIG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkKTsKKworICAgIC8vIFdlIGV4cGVj
dCB0aGUgZnVsbCB1cGxvYWRzIHRvIGJlIGZvbGxvd2VkIGJ5IGEgZmx1c2gKKyAgICAvLyBiZWZv
cmUgdGhlIHBhcnRpYWwgdXBsb2FkcyBiZWdpbi4KKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdp
blVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVD
VF9FUSgyLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKDIsIG1fbnVtUHJl
dmlvdXNVcGxvYWRzKTsKK30KKworCisvLyBOTyBSRU1BSU5ERVIgVEVTVFMKKy8vIFRoaXMgY2xh
c3Mgb2YgdGVzdHMgdXBsb2FkIGEgbnVtYmVyIG9mIHRleHR1cmVzIHRoYXQgaXMgYSBtdWx0aXBs
ZSBvZiB0aGUgZmx1c2ggcGVyaW9kLgorY29uc3QgaW50IGZ1bGxVcGxvYWRGbHVzaE11bHRpcGxl
ciA9IDc7Citjb25zdCBpbnQgZnVsbE5vUmVtYWluZGVyQ291bnQgPSBmdWxsVXBsb2FkRmx1c2hN
dWx0aXBsZXIgKiBrRmx1c2hQZXJpb2RGdWxsOworCitjb25zdCBpbnQgcGFydGlhbFVwbG9hZEZs
dXNoTXVsdGlwbGVyID0gMTE7Citjb25zdCBpbnQgcGFydGlhbE5vUmVtYWluZGVyQ291bnQgPSBw
YXJ0aWFsVXBsb2FkRmx1c2hNdWx0aXBsZXIgKiBrRmx1c2hQZXJpb2RQYXJ0aWFsOworCitURVNU
X0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlGdWxsVXBsb2Fkc05vUmVtYWluZGVyKQorewor
ICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKGZ1bGxOb1JlbWFpbmRlckNvdW50KTsKKyAg
ICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcigwKTsKKyAgICBtX3VwZGF0ZXIudXBkYXRl
KG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBt
X3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdp
blVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVD
VF9FUShmdWxsVXBsb2FkRmx1c2hNdWx0aXBsZXIsIG1fbnVtUHJldmlvdXNGbHVzaGVzKTsKKyAg
ICBFWFBFQ1RfRVEoZnVsbE5vUmVtYWluZGVyQ291bnQsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsK
K30KKworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBNYW55UGFydGlhbFVwbG9hZHNOb1Jl
bWFpbmRlcikKK3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcigwKTsKKyAgICBhcHBl
bmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihwYXJ0aWFsTm9SZW1haW5kZXJDb3VudCk7CisgICAg
bV91cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRvciwgJm1fY29waWVy
LCAmbV91cGxvYWRlciwgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQpOworCisgICAgRVhQRUNU
X0VRKDEsIG1fbnVtQmVnaW5VcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1FbmRVcGxv
YWRzKTsKKyAgICBFWFBFQ1RfRVEocGFydGlhbFVwbG9hZEZsdXNoTXVsdGlwbGVyLCBtX251bVBy
ZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKHBhcnRpYWxOb1JlbWFpbmRlckNvdW50LCBt
X251bVByZXZpb3VzVXBsb2Fkcyk7Cit9CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwg
TWFueUZ1bGxNYW55UGFydGlhbFVwbG9hZHNOb1JlbWFpbmRlcikKK3sKKyAgICBhcHBlbmRGdWxs
VXBsb2Fkc1RvVXBkYXRlcihmdWxsTm9SZW1haW5kZXJDb3VudCk7CisgICAgYXBwZW5kUGFydGlh
bFVwbG9hZHNUb1VwZGF0ZXIocGFydGlhbE5vUmVtYWluZGVyQ291bnQpOworICAgIG1fdXBkYXRl
ci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBs
b2FkZXIsIG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgxLCBt
X251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7Cisg
ICAgRVhQRUNUX0VRKGZ1bGxVcGxvYWRGbHVzaE11bHRpcGxlciArIHBhcnRpYWxVcGxvYWRGbHVz
aE11bHRpcGxlciwgbV9udW1QcmV2aW91c0ZsdXNoZXMpOworICAgIEVYUEVDVF9FUShmdWxsTm9S
ZW1haW5kZXJDb3VudCArIHBhcnRpYWxOb1JlbWFpbmRlckNvdW50LCBtX251bVByZXZpb3VzVXBs
b2Fkcyk7Cit9CisKKworLy8gTUlOL01BWCBSRU1BSU5ERVIgVEVTVFMKKy8vIFRoaXMgY2xhc3Mg
b2YgdGVzdHMgbWl4IGFuZCBtYXRjaCB1cGxvYWRpbmcgMSBtb3JlIGFuZCAxIGxlc3MgdGV4dHVy
ZQorLy8gdGhhbiBhIG11bHRpcGxlIG9mIHRoZSBmbHVzaCBwZXJpb2QuCisKK2NvbnN0IGludCBm
dWxsTWluUmVtYWluZGVyQ291bnQgPSBmdWxsTm9SZW1haW5kZXJDb3VudCArIDE7Citjb25zdCBp
bnQgZnVsbE1heFJlbWFpbmRlckNvdW50ID0gZnVsbE5vUmVtYWluZGVyQ291bnQgLSAxOworY29u
c3QgaW50IHBhcnRpYWxNaW5SZW1haW5kZXJDb3VudCA9IHBhcnRpYWxOb1JlbWFpbmRlckNvdW50
ICsgMTsKK2NvbnN0IGludCBwYXJ0aWFsTWF4UmVtYWluZGVyQ291bnQgPSBwYXJ0aWFsTm9SZW1h
aW5kZXJDb3VudCAtIDE7CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgTWFueUZ1bGxB
bmRQYXJ0aWFsTWluUmVtYWluZGVyKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVy
KGZ1bGxNaW5SZW1haW5kZXJDb3VudCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0
ZXIocGFydGlhbE1pblJlbWFpbmRlckNvdW50KTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29u
dGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBtX3RvdGFs
VXBsb2FkQ291bnRFeHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdpblVwbG9h
ZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVDVF9FUShm
dWxsVXBsb2FkRmx1c2hNdWx0aXBsZXIgKyBwYXJ0aWFsVXBsb2FkRmx1c2hNdWx0aXBsZXIgKyAy
LCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKGZ1bGxNaW5SZW1haW5kZXJD
b3VudCArIHBhcnRpYWxNaW5SZW1haW5kZXJDb3VudCwgbV9udW1QcmV2aW91c1VwbG9hZHMpOwor
fQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlGdWxsQW5kUGFydGlhbFVwbG9h
ZHNNYXhSZW1haW5kZXIpCit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIoZnVsbE1h
eFJlbWFpbmRlckNvdW50KTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihwYXJ0
aWFsTWF4UmVtYWluZGVyQ291bnQpOworICAgIG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0Lmdl
dCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIG1fdG90YWxVcGxvYWRD
b3VudEV4cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgxLCBtX251bUJlZ2luVXBsb2Fkcyk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKGZ1bGxVcGxv
YWRGbHVzaE11bHRpcGxlciArIHBhcnRpYWxVcGxvYWRGbHVzaE11bHRpcGxlciwgbV9udW1QcmV2
aW91c0ZsdXNoZXMpOworICAgIEVYUEVDVF9FUShmdWxsTWF4UmVtYWluZGVyQ291bnQgKyBwYXJ0
aWFsTWF4UmVtYWluZGVyQ291bnQsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKK30KKworVEVTVF9G
KENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBNYW55RnVsbE1pblJlbWFpbmRlck1hbnlQYXJ0aWFsTWF4
UmVtYWluZGVyKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKGZ1bGxNaW5SZW1h
aW5kZXJDb3VudCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZXIocGFydGlhbE1h
eFJlbWFpbmRlckNvdW50KTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwg
Jm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291bnRF
eHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVY
UEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgoZnVsbFVwbG9hZEZs
dXNoTXVsdGlwbGVyKzEpICsgcGFydGlhbFVwbG9hZEZsdXNoTXVsdGlwbGVyLCBtX251bVByZXZp
b3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKGZ1bGxNaW5SZW1haW5kZXJDb3VudCArIHBhcnRp
YWxNYXhSZW1haW5kZXJDb3VudCwgbV9udW1QcmV2aW91c1VwbG9hZHMpOworfQorCitURVNUX0Yo
Q0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlGdWxsTWF4UmVtYWluZGVyTWFueVBhcnRpYWxNaW5S
ZW1haW5kZXIpCit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIoZnVsbE1heFJlbWFp
bmRlckNvdW50KTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihwYXJ0aWFsTWlu
UmVtYWluZGVyQ291bnQpOworICAgIG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAm
bV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIG1fdG90YWxVcGxvYWRDb3VudEV4
cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgxLCBtX251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQ
RUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKGZ1bGxVcGxvYWRGbHVz
aE11bHRpcGxlciArIChwYXJ0aWFsVXBsb2FkRmx1c2hNdWx0aXBsZXIrMSksIG1fbnVtUHJldmlv
dXNGbHVzaGVzKTsKKyAgICBFWFBFQ1RfRVEoZnVsbE1heFJlbWFpbmRlckNvdW50ICsgcGFydGlh
bE1pblJlbWFpbmRlckNvdW50LCBtX251bVByZXZpb3VzVXBsb2Fkcyk7Cit9CisKKworLy8gTVVM
VElQTEUgVVBEQVRFIFRFU1RTCisvLyBUaGVzZSB0ZXN0cyBhdHRlbXB0IHRvIHVwbG9hZCB0b28g
bWFueSB0ZXh0dXJlcyBhdCBvbmNlLCByZXF1aXJpbmcKKy8vIG11bHRpcGxlIGNhbGxzIHRvIHVw
ZGF0ZSgpLgorCitpbnQgZXhwZWN0ZWRGbHVzaGVzKGludCB1cGxvYWRzLCBpbnQgZmx1c2hQZXJp
b2QpCit7CisgICAgcmV0dXJuICh1cGxvYWRzICsgZmx1c2hQZXJpb2QgLSAxKSAvIGZsdXNoUGVy
aW9kOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIFRyaXBsZVVwZGF0ZUZpbmFs
VXBkYXRlRnVsbEFuZFBhcnRpYWwpCit7CisgICAgY29uc3QgaW50IGtNYXhVcGxvYWRzUGVyVXBk
YXRlID0gNDA7CisgICAgY29uc3QgaW50IGtGdWxsVXBsb2FkcyA9IDEwMDsKKyAgICBjb25zdCBp
bnQga1BhcnRpYWxVcGxvYWRzID0gMjA7CisKKyAgICBpbnQgZXhwZWN0ZWRQcmV2aW91c0ZsdXNo
ZXMgPSAwOworICAgIGludCBleHBlY3RlZFByZXZpb3VzVXBsb2FkcyA9IDA7CisKKyAgICBzZXRN
YXhVcGxvYWRDb3VudFBlclVwZGF0ZShrTWF4VXBsb2Fkc1BlclVwZGF0ZSk7CisgICAgYXBwZW5k
RnVsbFVwbG9hZHNUb1VwZGF0ZXIoa0Z1bGxVcGxvYWRzKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBs
b2Fkc1RvVXBkYXRlcihrUGFydGlhbFVwbG9hZHMpOworCisgICAgLy8gRmlyc3QgdXBkYXRlICg0
MCBmdWxsKQorICAgIG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0
b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsKKworICAg
IEVYUEVDVF9FUSgxLCBtX251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbnVt
RW5kVXBsb2Fkcyk7CisKKyAgICBleHBlY3RlZFByZXZpb3VzRmx1c2hlcyA9IGV4cGVjdGVkRmx1
c2hlcyhrTWF4VXBsb2Fkc1BlclVwZGF0ZSwga0ZsdXNoUGVyaW9kRnVsbCk7CisgICAgRVhQRUNU
X0VRKGV4cGVjdGVkUHJldmlvdXNGbHVzaGVzLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisKKyAg
ICBleHBlY3RlZFByZXZpb3VzVXBsb2FkcyA9IGtNYXhVcGxvYWRzUGVyVXBkYXRlOworICAgIEVY
UEVDVF9FUShleHBlY3RlZFByZXZpb3VzVXBsb2FkcywgbV9udW1QcmV2aW91c1VwbG9hZHMpOwor
CisgICAgLy8gU2Vjb25kIHVwZGF0ZSAoNDAgZnVsbCkKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1f
Y29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4
VXBsb2Fkc1BlclVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfRVEoMiwgbV9udW1CZWdpblVwbG9hZHMp
OworICAgIEVYUEVDVF9FUSgyLCBtX251bUVuZFVwbG9hZHMpOworCisgICAgZXhwZWN0ZWRQcmV2
aW91c0ZsdXNoZXMgPSBleHBlY3RlZEZsdXNoZXMoa01heFVwbG9hZHNQZXJVcGRhdGUsIGtGbHVz
aFBlcmlvZEZ1bGwpOworICAgIEVYUEVDVF9FUShleHBlY3RlZFByZXZpb3VzRmx1c2hlcywgbV9u
dW1QcmV2aW91c0ZsdXNoZXMpOworCisgICAgZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMgPSBrTWF4
VXBsb2Fkc1BlclVwZGF0ZTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMs
IG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKKworICAgIC8vIFRoaXJkIHVwZGF0ZSAoMjAgZnVsbCwg
MjAgcGFydGlhbCkKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxs
b2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBsb2Fkc1BlclVwZGF0ZSk7CisK
KyAgICBFWFBFQ1RfRVEoMywgIG1fbnVtQmVnaW5VcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoMywg
bV9udW1FbmRVcGxvYWRzKTsKKworICAgIGV4cGVjdGVkUHJldmlvdXNGbHVzaGVzID0gZXhwZWN0
ZWRGbHVzaGVzKGtGdWxsVXBsb2Fkcy1rTWF4VXBsb2Fkc1BlclVwZGF0ZSoyLCBrRmx1c2hQZXJp
b2RGdWxsKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZsdXNoZXMo
a1BhcnRpYWxVcGxvYWRzLCBrRmx1c2hQZXJpb2RQYXJ0aWFsKTsKKyAgICBFWFBFQ1RfRVEoZXhw
ZWN0ZWRQcmV2aW91c0ZsdXNoZXMsIG1fbnVtUHJldmlvdXNGbHVzaGVzKTsKKworICAgIGV4cGVj
dGVkUHJldmlvdXNVcGxvYWRzID0gKGtGdWxsVXBsb2Fkcy1rTWF4VXBsb2Fkc1BlclVwZGF0ZSoy
KStrUGFydGlhbFVwbG9hZHM7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkUHJldmlvdXNVcGxvYWRz
LCBtX251bVByZXZpb3VzVXBsb2Fkcyk7CisKKyAgICAvLyBGaW5hbCBzYW5pdHkgY2hlY2tzCisg
ICAgRVhQRUNUX0VRKGtGdWxsVXBsb2FkcyArIGtQYXJ0aWFsVXBsb2FkcywgbV9udW1Ub3RhbFVw
bG9hZHMpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIFRyaXBsZVVwZGF0ZUZp
bmFsVXBkYXRlQWxsUGFydGlhbCkKK3sKKyAgICBjb25zdCBpbnQga01heFVwbG9hZHNQZXJVcGRh
dGUgPSA0MDsKKyAgICBjb25zdCBpbnQga0Z1bGxVcGxvYWRzID0gNzA7CisgICAgY29uc3QgaW50
IGtQYXJ0aWFsVXBsb2FkcyA9IDMwOworCisgICAgaW50IGV4cGVjdGVkUHJldmlvdXNGbHVzaGVz
ID0gMDsKKyAgICBpbnQgZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMgPSAwOworCisgICAgc2V0TWF4
VXBsb2FkQ291bnRQZXJVcGRhdGUoa01heFVwbG9hZHNQZXJVcGRhdGUpOworICAgIGFwcGVuZEZ1
bGxVcGxvYWRzVG9VcGRhdGVyKGtGdWxsVXBsb2Fkcyk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9h
ZHNUb1VwZGF0ZXIoa1BhcnRpYWxVcGxvYWRzKTsKKworICAgIC8vIEZpcnN0IHVwZGF0ZSAoNDAg
ZnVsbCkKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9y
LCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBsb2Fkc1BlclVwZGF0ZSk7CisKKyAgICBF
WFBFQ1RfRVEoMSwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVu
ZFVwbG9hZHMpOworCisgICAgZXhwZWN0ZWRQcmV2aW91c0ZsdXNoZXMgPSBleHBlY3RlZEZsdXNo
ZXMoa01heFVwbG9hZHNQZXJVcGRhdGUsIGtGbHVzaFBlcmlvZEZ1bGwpOworICAgIEVYUEVDVF9F
UShleHBlY3RlZFByZXZpb3VzRmx1c2hlcywgbV9udW1QcmV2aW91c0ZsdXNoZXMpOworCisgICAg
ZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMgPSBrTWF4VXBsb2Fkc1BlclVwZGF0ZTsKKyAgICBFWFBF
Q1RfRVEoZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKKwor
ICAgIC8vIFNlY29uZCB1cGRhdGUgKDMwIGZ1bGwsIG9wdGlvbmFsbHkgMTAgcGFydGlhbCkKKyAg
ICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3Bp
ZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBsb2Fkc1BlclVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfRVEo
MiwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgyLCBtX251bUVuZFVwbG9hZHMp
OworICAgIEVYUEVDVF9MRShtX251bVByZXZpb3VzVXBsb2Fkcywga01heFVwbG9hZHNQZXJVcGRh
dGUpOworICAgIC8vIEJlIGxlbmllbnQgb24gdGhlIGV4YWN0IG51bWJlciBvZiBmbHVzaGVzIGhl
cmUsIGFzIHRoZSBudW1iZXIgb2YgZmx1c2hlcworICAgIC8vIHdpbGwgZGVwZW5kIG9uIHdoZXRo
ZXIgc29tZSBwYXJ0aWFsIHVwbG9hZHMgd2VyZSBwZXJmb3JtZWQuCisgICAgLy8gb25GbHVzaCgp
LCBvblVwbG9hZCgpLCBhbmQgb25FbmRVcGxvYWQoKSB3aWxsIGRvIGJhc2ljIGZsdXNoIGNoZWNr
cyBmb3IgdXMgYW55d2F5LgorCisgICAgLy8gVGhpcmQgdXBkYXRlICgzMCBwYXJ0aWFsIE9SIDIw
IHBhcnRpYWwgaWYgMTAgcGFydGlhbCB1cGxvYWRlZCBpbiBzZWNvbmQgdXBkYXRlKQorICAgIG1f
dXBkYXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwg
Jm1fdXBsb2FkZXIsIGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsKKworICAgIEVYUEVDVF9FUSgzLCBt
X251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDMsIG1fbnVtRW5kVXBsb2Fkcyk7Cisg
ICAgRVhQRUNUX0xFKG1fbnVtUHJldmlvdXNVcGxvYWRzLCBrTWF4VXBsb2Fkc1BlclVwZGF0ZSk7
CisgICAgLy8gQmUgbGVuaWVudCBvbiB0aGUgZXhhY3QgbnVtYmVyIG9mIGZsdXNoZXMgaGVyZSBh
cyB3ZWxsLgorCisgICAgLy8gRmluYWwgc2FuaXR5IGNoZWNrcworICAgIEVYUEVDVF9FUShrRnVs
bFVwbG9hZHMgKyBrUGFydGlhbFVwbG9hZHMsIG1fbnVtVG90YWxVcGxvYWRzKTsKK30KKworCit9
IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152370</attachid>
            <date>2012-07-13 16:35:33 -0700</date>
            <delta_ts>2012-07-13 18:49:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89035-20120713163532.patch</filename>
            <type>text/plain</type>
            <size>24751</size>
            <attacher name="Brian Anderson">brianderson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZhOTc4NzQxYzdhOTU2
MDU0MTI2NDUwYjE2ZTVhMmMzMDcyZTc4My4uNzU5MzU1NzYzYzgxMzc3M2FmNTlhZjM2MTdiOWUz
NzY0NWJlMTA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA3LTExICBCcmlh
biBBbmRlcnNvbiAgPGJyaWFuZGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCBmbHVzaGVzIHRvIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdXRvbWF0aWMgZmx1c2hlcyBhcmUg
YmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb21tYW5kIGJ1ZmZlciwgc28KKyAgICAgICAgdGhpcyBt
b3ZlcyB0aGUgZmx1c2hlcyBpbnRvIHRoZSBDQ1RleHR1cmVVcGRhdGVyIGl0c2VsZi4KKworICAg
ICAgICBDQ1RleHR1cmVVcGRhdGVyVGVzdCBhZGRlZCB0byB2ZXJpZnkgdGV4dHVyZSB1cGxvYWQv
Zmx1c2hpbmcgcGF0dGVybnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NHcmFwaGljc0Nv
bnRleHQ6OmZsdXNoKToKKyAgICAgICAgKENDR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRl
KTogTWFudWFsIGZsdXNoZXMgYWRkZWQgaGVyZS4KKwogMjAxMi0wNy0xMiAgRGFuYSBKYW5zZW5z
ICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFRoZSByb290IGxh
eWVyIHNob3VsZCBub3QgdHJ5IGNyZWF0ZSBhIHNlY29uZCBSZW5kZXJTdXJmYWNlIGZvciBpdHNl
bGYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZmFmMjZhNzdhYTY1NTY4YTJkMDY3ZTY3
OGUzNTI2MDFjOTJhM2FlZC4uY2RmZDVlYTFlMTM0YzVhYWNjNTc4N2MyZDE1NDE1MzFiZjFlZDIw
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNy0x
MSAgQnJpYW4gQW5kZXJzb24gIDxicmlhbmRlcnNvbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
QWRkIGZsdXNoZXMgdG8gQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzNQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENDVGV4dHVyZVVwZGF0ZXJUZXN0IGFkZGVk
IHRvIHZlcmlmeSB0ZXh0dXJlIHVwbG9hZC9mbHVzaGluZyBwYXR0ZXJucy4KKworICAgICAgICAq
IFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcDog
QWRkZWQuCisKIDIwMTItMDctMTIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IHRyeSBjcmVh
dGUgYSBzZWNvbmQgUmVuZGVyU3VyZmFjZSBmb3IgaXRzZWxmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dyYXBoaWNzQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHcmFwaGlj
c0NvbnRleHQuaAppbmRleCA0MDU4ODVmZmI1YzMzMjMzMDE2NmQzMzM2YjBkODk3Mzg4MjBmMTI1
Li5iZThjOGE1NTdhOTM0MDM4ZWFmYWZmZTM1ODAwZDVhNGZiNWNiNmJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dyYXBoaWNzQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDR3JhcGhpY3NDb250ZXh0LmgKQEAgLTQ4LDYgKzQ4LDEyIEBAIHB1YmxpYzoKIAogICAgIFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCgpIHsgcmV0dXJuIG1fY29udGV4
dDNELmdldCgpOyB9CiAKKyAgICB2b2lkIGZsdXNoKCkKKyAgICB7CisgICAgICAgIGlmIChtX2Nv
bnRleHQzRCkKKyAgICAgICAgICAgIG1fY29udGV4dDNELT5mbHVzaCgpOworICAgIH0KKwogcHJp
dmF0ZToKICAgICBDQ0dyYXBoaWNzQ29udGV4dCgpIHsgfQogICAgIGV4cGxpY2l0IENDR3JhcGhp
Y3NDb250ZXh0KFBhc3NPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dDNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCAzMTkwZDgyZmZjN2Jh
ZTc5ZTU1ZWZmYmM1MDJiODQ0OTA3NGI2NjI2Li5iYzFlZDc1YWY5YWY1MGQ5NjRiNzQ3MzE0MzM3
ZmU5YzRlYzFmZTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAtMzks
NiArMzksOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3N0YXRpYyBjb25zdCBpbnQga1VwbG9hZEZsdXNoUGVyaW9kID0gNDsKKwogQ0NUZXh0dXJlVXBk
YXRlcjo6Q0NUZXh0dXJlVXBkYXRlcigpCiAgICAgOiBtX2VudHJ5SW5kZXgoMCkKIHsKQEAgLTkz
LDEyICs5NSwyMCBAQCB2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShDQ0dyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsbwogCiAgICAgICAgIHVwbG9hZGVy
LT5iZWdpblVwbG9hZHMoKTsKIAorICAgICAgICBpbnQgZnVsbFVwbG9hZENvdW50ID0gMDsKICAg
ICAgICAgc2l6ZV90IG1heEluZGV4ID0gbWluKG1fZW50cnlJbmRleCArIGNvdW50LCBtX2Z1bGxF
bnRyaWVzLnNpemUoKSk7CiAgICAgICAgIGZvciAoaW5kZXggPSBtX2VudHJ5SW5kZXg7IGluZGV4
IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFVwZGF0ZUVudHJ5JiBlbnRyeSA9
IG1fZnVsbEVudHJpZXNbaW5kZXhdOwogICAgICAgICAgICAgdXBsb2FkZXItPnVwbG9hZFRleHR1
cmUoY29udGV4dCwgZW50cnkudGV4dHVyZSwgYWxsb2NhdG9yLCBlbnRyeS5zb3VyY2VSZWN0LCBl
bnRyeS5kZXN0UmVjdCk7CisgICAgICAgICAgICBmdWxsVXBsb2FkQ291bnQrKzsKKyAgICAgICAg
ICAgIGlmICghKGZ1bGxVcGxvYWRDb3VudCAlIGtVcGxvYWRGbHVzaFBlcmlvZCkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+Zmx1c2goKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGVyZSBhcmUgbm8gZGFuZ2xpbmcgdXBsb2FkcyB3aXRob3V0IGEgZmx1c2guCisgICAg
ICAgIGlmIChmdWxsVXBsb2FkQ291bnQgJSBrVXBsb2FkRmx1c2hQZXJpb2QpCisgICAgICAgICAg
ICBjb250ZXh0LT5mbHVzaCgpOworCiAgICAgICAgIGJvb2wgbW9yZVVwbG9hZHMgPSBtYXhJbmRl
eCA8IG1fZnVsbEVudHJpZXMuc2l6ZSgpOwogCiAgICAgICAgIEFTU0VSVChtX3BhcnRpYWxFbnRy
aWVzLnNpemUoKSA8PSBjb3VudCk7CkBAIC0xMTYsOCArMTI2LDE2IEBAIHZvaWQgQ0NUZXh0dXJl
VXBkYXRlcjo6dXBkYXRlKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2Nh
dG9yKiBhbGxvCiAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1fcGFydGlhbEVudHJp
ZXMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkgPSBt
X3BhcnRpYWxFbnRyaWVzW2luZGV4XTsKICAgICAgICAgICAgIHVwbG9hZGVyLT51cGxvYWRUZXh0
dXJlKGNvbnRleHQsIGVudHJ5LnRleHR1cmUsIGFsbG9jYXRvciwgZW50cnkuc291cmNlUmVjdCwg
ZW50cnkuZGVzdFJlY3QpOworICAgICAgICAgICAgaWYgKCEoKGluZGV4KzEpICUga1VwbG9hZEZs
dXNoUGVyaW9kKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5mbHVzaCgpOwogICAgICAgICB9
CiAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkYW5nbGluZyBwYXJ0aWFsIHVw
bG9hZHMgd2l0aG91dCBhIGZsdXNoLgorICAgICAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRv
IHVzZSAoaW5kZXgrMSkgaW4gdGhpcyBjYXNlIGJlY2F1c2UgaW5kZXggd2FzCisgICAgICAgIC8v
IGluY3JlbWVudGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZvciBsb29wLgorICAgICAgICBpZiAoaW5k
ZXggJSBrVXBsb2FkRmx1c2hQZXJpb2QpCisgICAgICAgICAgICBjb250ZXh0LT5mbHVzaCgpOwor
CiAgICAgICAgIHVwbG9hZGVyLT5lbmRVcGxvYWRzKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCAzZjkwNWE3YWI0MjNlOTExYWE3YzBjNzk2MDAxZjg2NWEwNTkw
MWEzLi41OWMwMDc5NWUzN2VjMGFhZDA0OTI2Y2E5ZTNjMjhmMDY2YzA4MzhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTg0LDYgKzg0LDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTb2xpZENv
bG9yTGF5ZXJJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGVzdENvbW1vbi5o
JywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1RleHR1cmVVcGRhdGVyVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDVGlsZWRMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbGVk
TGF5ZXJUZXN0Q29tbW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUZXh0dXJlVXBkYXRlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwYmJkMzZmNDc4ZWM1
ODg0MmUzYzVlMWZjNGY5MGExNzVkNDNjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcApAQCAtMCwwICsxLDUy
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5o
IgorI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyB0
ZXN0aW5nOjpUZXN0OworCisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGludCBrRmx1c2hQZXJpb2RG
dWxsID0gNDsKK2NvbnN0IGludCBrRmx1c2hQZXJpb2RQYXJ0aWFsID0ga0ZsdXNoUGVyaW9kRnVs
bDsKKworY2xhc3MgQ0NUZXh0dXJlVXBkYXRlclRlc3Q7CisKK2NsYXNzIFdlYkdyYXBoaWNzQ29u
dGV4dDNERm9yVXBsb2FkVGVzdCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Qgewor
cHVibGljOgorICAgIFdlYkdyYXBoaWNzQ29udGV4dDNERm9yVXBsb2FkVGVzdChDQ1RleHR1cmVV
cGRhdGVyVGVzdCAqdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGZs
dXNoKHZvaWQpOworICAgIHZpcnR1YWwgR3JHTEludGVyZmFjZSogb25DcmVhdGVHckdMSW50ZXJm
YWNlKCkgeyByZXR1cm4gMDsgfQorCitwcml2YXRlOgorICAgIENDVGV4dHVyZVVwZGF0ZXJUZXN0
KiBtX3Rlc3Q7Cit9OworCisKK2NsYXNzIFRleHR1cmVVcGxvYWRlckZvclVwbG9hZFRlc3QgOiBw
dWJsaWMgRmFrZVRleHR1cmVVcGxvYWRlciB7CitwdWJsaWM6CisgICAgVGV4dHVyZVVwbG9hZGVy
Rm9yVXBsb2FkVGVzdChDQ1RleHR1cmVVcGRhdGVyVGVzdCAqdGVzdCkgOiBtX3Rlc3QodGVzdCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5VcGxvYWRzKCk7CisgICAgdmlydHVhbCB2b2lk
IGVuZFVwbG9hZHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZShXZWJDb3JlOjpD
Q0dyYXBoaWNzQ29udGV4dCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViQ29yZTo6VGV4dHVyZUFsbG9jYXRvciosCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCBzb3VyY2VSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QgZGVzdFJlY3QpOwor
Citwcml2YXRlOgorICAgIENDVGV4dHVyZVVwZGF0ZXJUZXN0KiBtX3Rlc3Q7Cit9OworCisKK2Ns
YXNzIFRleHR1cmVGb3JVcGxvYWRUZXN0IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUgeworcHVibGljOgorICAgIFRleHR1cmVGb3JVcGxvYWRUZXN0KCkgOiBMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlKGFkb3B0UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPigwKSkgeyB9
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqLCBUZXh0dXJl
QWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVz
dFJlY3QpIHsgfQorfTsKKworCitjbGFzcyBDQ1RleHR1cmVVcGRhdGVyVGVzdCA6IHB1YmxpYyBU
ZXN0IHsKK3B1YmxpYzoKKyAgICBDQ1RleHR1cmVVcGRhdGVyVGVzdCgpCisgICAgOiBtX3VwbG9h
ZGVyKHRoaXMpCisgICAgLCBtX2Z1bGxVcGxvYWRDb3VudEV4cGVjdGVkKDApCisgICAgLCBtX3Bh
cnRpYWxDb3VudEV4cGVjdGVkKDApCisgICAgLCBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCgw
KQorICAgICwgbV9tYXhVcGxvYWRDb3VudFBlclVwZGF0ZSgwKQorICAgICwgbV9udW1CZWdpblVw
bG9hZHMoMCkKKyAgICAsIG1fbnVtRW5kVXBsb2FkcygwKQorICAgICwgbV9udW1Db25zZWN1dGl2
ZUZsdXNoZXMoMCkKKyAgICAsIG1fbnVtRGFuZ2xpbmdVcGxvYWRzKDApCisgICAgLCBtX251bVRv
dGFsVXBsb2FkcygwKQorICAgICwgbV9udW1Ub3RhbEZsdXNoZXMoMCkKKyAgICAsIG1fbnVtUHJl
dmlvdXNVcGxvYWRzKDApCisgICAgLCBtX251bVByZXZpb3VzRmx1c2hlcygwKQorICAgIHsgfQor
CitwdWJsaWM6CisgICAgdm9pZCBvbkZsdXNoKCkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGZv
ciBiYWNrLXRvLWJhY2sgZmx1c2hlcy4KKyAgICAgICAgRVhQRUNUX0VRKDAsIG1fbnVtQ29uc2Vj
dXRpdmVGbHVzaGVzKSA8PCAiQmFjay10by1iYWNrIGZsdXNoZXMgZGV0ZWN0ZWQuIjsKKworICAg
ICAgICAvLyBDaGVjayBmb3IgcHJlbWF0dXJlIGZsdXNoZXMKKyAgICAgICAgaWYgKG1fbnVtUHJl
dmlvdXNVcGxvYWRzICE9IG1fbWF4VXBsb2FkQ291bnRQZXJVcGRhdGUpIHsKKyAgICAgICAgICAg
IGlmIChtX251bVRvdGFsVXBsb2FkcyA8IG1fZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQpCisgICAg
ICAgICAgICAgICAgRVhQRUNUX0dFKG1fbnVtRGFuZ2xpbmdVcGxvYWRzLCBrRmx1c2hQZXJpb2RG
dWxsKSA8PCAiUHJlbWF0dXJlIGZsdXNoIGRldGVjdGVkIGluIGZ1bGwgdXBsb2Fkcy4iOworICAg
ICAgICAgICAgZWxzZSBpZiAobV9udW1Ub3RhbFVwbG9hZHMgPiBtX2Z1bGxVcGxvYWRDb3VudEV4
cGVjdGVkICYmIG1fbnVtVG90YWxVcGxvYWRzIDwgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQp
CisgICAgICAgICAgICAgICAgRVhQRUNUX0dFKG1fbnVtRGFuZ2xpbmdVcGxvYWRzLCBrRmx1c2hQ
ZXJpb2RQYXJ0aWFsKSA8PCAiUHJlbWF0dXJlIGZsdXNoIGRldGVjdGVkIGluIHBhcnRpYWwgdXBs
b2Fkcy4iOworICAgICAgICB9CisKKyAgICAgICAgbV9udW1EYW5nbGluZ1VwbG9hZHMgPSAwOwor
ICAgICAgICBtX251bUNvbnNlY3V0aXZlRmx1c2hlcysrOworICAgICAgICBtX251bVRvdGFsRmx1
c2hlcysrOworICAgICAgICBtX251bVByZXZpb3VzRmx1c2hlcysrOworICAgIH0KKworICAgIHZv
aWQgb25CZWdpblVwbG9hZHMoKQorICAgIHsKKyAgICAgICAgbV9udW1QcmV2aW91c0ZsdXNoZXMg
PSAwOworICAgICAgICBtX251bVByZXZpb3VzVXBsb2FkcyA9IDA7CisgICAgICAgIG1fbnVtQmVn
aW5VcGxvYWRzKys7CisgICAgfQorCisgICAgdm9pZCBvblVwbG9hZCgpCisgICAgeworICAgICAg
ICAvLyBDaGVjayBmb3IgdG9vIG1hbnkgY29uc2VjdXRpdmUgdXBsb2FkcworICAgICAgICBpZiAo
bV9udW1Ub3RhbFVwbG9hZHMgPCBtX2Z1bGxVcGxvYWRDb3VudEV4cGVjdGVkKQorICAgICAgICAg
ICAgRVhQRUNUX0xUKG1fbnVtRGFuZ2xpbmdVcGxvYWRzLCBrRmx1c2hQZXJpb2RGdWxsKSA8PCAi
VG9vIG1hbnkgY29uc2VjdXRpdmUgZnVsbCB1cGxvYWRzIGRldGVjdGVkLiI7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIEVYUEVDVF9MVChtX251bURhbmdsaW5nVXBsb2Fkcywga0ZsdXNoUGVy
aW9kUGFydGlhbCkgPDwgIlRvbyBtYW55IGNvbnNlY3V0aXZlIHBhcnRpYWwgdXBsb2FkcyBkZXRl
Y3RlZC4iOworCisgICAgICAgIG1fbnVtQ29uc2VjdXRpdmVGbHVzaGVzID0gMDsKKyAgICAgICAg
bV9udW1EYW5nbGluZ1VwbG9hZHMrKzsKKyAgICAgICAgbV9udW1Ub3RhbFVwbG9hZHMrKzsKKyAg
ICAgICAgbV9udW1QcmV2aW91c1VwbG9hZHMrKzsKKyAgICB9CisKKyAgICB2b2lkIG9uRW5kVXBs
b2FkcygpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMCwgbV9udW1EYW5nbGluZ1VwbG9hZHMp
IDw8ICJMYXN0IHVwbG9hZCB3YXNuJ3QgZm9sbG93ZWQgYnkgYSBmbHVzaC4iOworCisgICAgICAg
IC8vIE5vdGU6IFRoZSBtX251bVRvdGFsVXBsb2FkcyAhPSBtX2Z1bGxVcGxvYWRDb3VudEV4cGVj
dGVkIGNvbXBhcmlzb24KKyAgICAgICAgLy8gYWxsb3dzIGZvciB0aGUgcXVvdGEgbm90IHRvIGJl
IGhpdCBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgdHJhc2l0aW9uaW5nCisgICAgICAgIC8vIGZy
b20gZnVsbCB1cGxvYWRzIHRvIHBhcnRpYWwgdXBsb2Fkcy4KKyAgICAgICAgaWYgKG1fbnVtVG90
YWxVcGxvYWRzICE9IG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkICYmIG1fbnVtVG90YWxVcGxv
YWRzICE9IG1fZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQpIHsKKyAgICAgICAgICAgIEVYUEVDVF9F
UShtX21heFVwbG9hZENvdW50UGVyVXBkYXRlLCBtX251bVByZXZpb3VzVXBsb2FkcykKKyAgICAg
ICAgICAgICAgICA8PCAiZW5kVXBsb2FkKCkgd2FzIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSB0ZXh0
dXJlcyB0byB1cGxvYWQsIGJ1dCB0aGUgdXBsb2FkIHF1b3RhIGhhc24ndCBiZWVuIGZpbGxlZC4i
OworICAgICAgICB9CisKKyAgICAgICAgbV9udW1FbmRVcGxvYWRzKys7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIE93blB0cjxX
ZWJUaHJlYWQ+IHRocmVhZDsKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSh0aHJl
YWQuZ2V0KCkpOworCisgICAgICAgIG1fY29udGV4dCA9IENDR3JhcGhpY3NDb250ZXh0OjpjcmVh
dGUzRCgKKyAgICAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNzQ29udGV4
dDNERm9yVXBsb2FkVGVzdCh0aGlzKSkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFy
RG93bigpCisgICAgeworICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAgIH0K
KworICAgIHZvaWQgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIoaW50IGNvdW50KQorICAgIHsK
KyAgICAgICAgbV9mdWxsVXBsb2FkQ291bnRFeHBlY3RlZCArPSBjb3VudDsKKyAgICAgICAgbV90
b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CisKKyAgICAgICAgY29uc3QgSW50UmVj
dCByZWN0KDAsIDAsIDMwMCwgMTUwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICAgICAgbV91cGRhdGVyLmFwcGVuZEZ1bGxVcGRhdGUoJm1fdGV4dHVy
ZSwgcmVjdCwgcmVjdCk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1Rv
VXBkYXRlcihpbnQgY291bnQpCisgICAgeworICAgICAgICBtX3BhcnRpYWxDb3VudEV4cGVjdGVk
ICs9IGNvdW50OworICAgICAgICBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCArPSBjb3VudDsK
KworICAgICAgICBjb25zdCBJbnRSZWN0IHJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICBtX3VwZGF0ZXIuYXBw
ZW5kUGFydGlhbFVwZGF0ZSgmbV90ZXh0dXJlLCByZWN0LCByZWN0KTsKKyAgICB9CisKKyAgICB2
b2lkIHNldE1heFVwbG9hZENvdW50UGVyVXBkYXRlKGludCBjb3VudCkKKyAgICB7CisgICAgICAg
IG1fbWF4VXBsb2FkQ291bnRQZXJVcGRhdGUgPSBjb3VudDsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICAvLyBDbGFzc2VzIHJlcXVpcmVkIHRvIGludGVyYWN0IGFuZCB0ZXN0IHRoZSBDQ1RleHR1
cmVVcGRhdGVyCisgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CisgICAg
Q0NUZXh0dXJlVXBkYXRlciBtX3VwZGF0ZXI7CisgICAgVGV4dHVyZUZvclVwbG9hZFRlc3QgbV90
ZXh0dXJlOworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIG1fYWxsb2NhdG9yOworICAgIEZha2VU
ZXh0dXJlQ29waWVyIG1fY29waWVyOworICAgIFRleHR1cmVVcGxvYWRlckZvclVwbG9hZFRlc3Qg
bV91cGxvYWRlcjsKKworICAgIC8vIFByb3BlcnRpZXMgLyBleHBlY3RhdGlvbnMgb2YgdGhpcyB0
ZXN0CisgICAgaW50IG1fZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQ7CisgICAgaW50IG1fcGFydGlh
bENvdW50RXhwZWN0ZWQ7CisgICAgaW50IG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkOworICAg
IGludCBtX21heFVwbG9hZENvdW50UGVyVXBkYXRlOworCisgICAgLy8gRHluYW1pYyBwcm9wZXJ0
aWVzIG9mIHRoaXMgdGVzdAorICAgIGludCBtX251bUJlZ2luVXBsb2FkczsKKyAgICBpbnQgbV9u
dW1FbmRVcGxvYWRzOworICAgIGludCBtX251bUNvbnNlY3V0aXZlRmx1c2hlczsKKyAgICBpbnQg
bV9udW1EYW5nbGluZ1VwbG9hZHM7CisgICAgaW50IG1fbnVtVG90YWxVcGxvYWRzOworICAgIGlu
dCBtX251bVRvdGFsRmx1c2hlczsKKyAgICBpbnQgbV9udW1QcmV2aW91c1VwbG9hZHM7CisgICAg
aW50IG1fbnVtUHJldmlvdXNGbHVzaGVzOworfTsKKworCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4
dDNERm9yVXBsb2FkVGVzdDo6Zmx1c2godm9pZCkKK3sKKyAgICBtX3Rlc3QtPm9uRmx1c2goKTsK
K30KKwordm9pZCBUZXh0dXJlVXBsb2FkZXJGb3JVcGxvYWRUZXN0OjpiZWdpblVwbG9hZHMoKQor
eworICAgIG1fdGVzdC0+b25CZWdpblVwbG9hZHMoKTsKK30KKwordm9pZCBUZXh0dXJlVXBsb2Fk
ZXJGb3JVcGxvYWRUZXN0OjplbmRVcGxvYWRzKCkKK3sKKyAgICBtX3Rlc3QtPm9uRW5kVXBsb2Fk
cygpOworfQorCit2b2lkIFRleHR1cmVVcGxvYWRlckZvclVwbG9hZFRlc3Q6OnVwbG9hZFRleHR1
cmUoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlKiB0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6VGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCBzb3VyY2VS
ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCBkZXN0UmVjdCkKK3sKKyAgICBtX3Rlc3QtPm9uVXBsb2FkKCk7Cit9CisK
KworLy8gWkVSTyBVUExPQURTIFRFU1RTCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIFpl
cm9VcGxvYWRzKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKDApOworICAgIGFw
cGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKDApOworICAgIG1fdXBkYXRlci51cGRhdGUobV9j
b250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIG1fdG90
YWxVcGxvYWRDb3VudEV4cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgwLCBtX251bUJlZ2luVXBs
b2Fkcyk7CisgICAgRVhQRUNUX0VRKDAsIG1fbnVtRW5kVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VR
KDAsIG1fbnVtUHJldmlvdXNGbHVzaGVzKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9udW1QcmV2aW91
c1VwbG9hZHMpOworfQorCisKKy8vIE9ORSBVUExPQUQgVEVTVFMKK1RFU1RfRihDQ1RleHR1cmVV
cGRhdGVyVGVzdCwgT25lRnVsbFVwbG9hZCkKK3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBk
YXRlcigxKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcigwKTsKKyAgICBtX3Vw
ZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZt
X3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEo
MSwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMp
OworICAgIEVYUEVDVF9FUSgxLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VR
KDEsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKK30KKworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJU
ZXN0LCBPbmVQYXJ0aWFsVXBsb2FkKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVy
KDApOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKDEpOworICAgIG1fdXBkYXRl
ci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBs
b2FkZXIsIG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgxLCBt
X251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fbnVtUHJldmlvdXNGbHVzaGVzKTsKKyAgICBFWFBFQ1RfRVEoMSwg
bV9udW1QcmV2aW91c1VwbG9hZHMpOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3Qs
IE9uZUZ1bGxPbmVQYXJ0aWFsVXBsb2FkKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRh
dGVyKDEpOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVyKDEpOworICAgIG1fdXBk
YXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1f
dXBsb2FkZXIsIG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkKTsKKworICAgIC8vIFdlIGV4cGVj
dCB0aGUgZnVsbCB1cGxvYWRzIHRvIGJlIGZvbGxvd2VkIGJ5IGEgZmx1c2gKKyAgICAvLyBiZWZv
cmUgdGhlIHBhcnRpYWwgdXBsb2FkcyBiZWdpbi4KKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdp
blVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVD
VF9FUSgyLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKDIsIG1fbnVtUHJl
dmlvdXNVcGxvYWRzKTsKK30KKworCisvLyBOTyBSRU1BSU5ERVIgVEVTVFMKKy8vIFRoaXMgY2xh
c3Mgb2YgdGVzdHMgdXBsb2FkIGEgbnVtYmVyIG9mIHRleHR1cmVzIHRoYXQgaXMgYSBtdWx0aXBs
ZSBvZiB0aGUgZmx1c2ggcGVyaW9kLgorY29uc3QgaW50IGZ1bGxVcGxvYWRGbHVzaE11bHRpcGxl
ciA9IDc7Citjb25zdCBpbnQgZnVsbE5vUmVtYWluZGVyQ291bnQgPSBmdWxsVXBsb2FkRmx1c2hN
dWx0aXBsZXIgKiBrRmx1c2hQZXJpb2RGdWxsOworCitjb25zdCBpbnQgcGFydGlhbFVwbG9hZEZs
dXNoTXVsdGlwbGVyID0gMTE7Citjb25zdCBpbnQgcGFydGlhbE5vUmVtYWluZGVyQ291bnQgPSBw
YXJ0aWFsVXBsb2FkRmx1c2hNdWx0aXBsZXIgKiBrRmx1c2hQZXJpb2RQYXJ0aWFsOworCitURVNU
X0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlGdWxsVXBsb2Fkc05vUmVtYWluZGVyKQorewor
ICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKGZ1bGxOb1JlbWFpbmRlckNvdW50KTsKKyAg
ICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcigwKTsKKyAgICBtX3VwZGF0ZXIudXBkYXRl
KG1fY29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBt
X3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdp
blVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVD
VF9FUShmdWxsVXBsb2FkRmx1c2hNdWx0aXBsZXIsIG1fbnVtUHJldmlvdXNGbHVzaGVzKTsKKyAg
ICBFWFBFQ1RfRVEoZnVsbE5vUmVtYWluZGVyQ291bnQsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsK
K30KKworVEVTVF9GKENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBNYW55UGFydGlhbFVwbG9hZHNOb1Jl
bWFpbmRlcikKK3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlcigwKTsKKyAgICBhcHBl
bmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihwYXJ0aWFsTm9SZW1haW5kZXJDb3VudCk7CisgICAg
bV91cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRvciwgJm1fY29waWVy
LCAmbV91cGxvYWRlciwgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQpOworCisgICAgRVhQRUNU
X0VRKDEsIG1fbnVtQmVnaW5VcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1FbmRVcGxv
YWRzKTsKKyAgICBFWFBFQ1RfRVEocGFydGlhbFVwbG9hZEZsdXNoTXVsdGlwbGVyLCBtX251bVBy
ZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKHBhcnRpYWxOb1JlbWFpbmRlckNvdW50LCBt
X251bVByZXZpb3VzVXBsb2Fkcyk7Cit9CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwg
TWFueUZ1bGxNYW55UGFydGlhbFVwbG9hZHNOb1JlbWFpbmRlcikKK3sKKyAgICBhcHBlbmRGdWxs
VXBsb2Fkc1RvVXBkYXRlcihmdWxsTm9SZW1haW5kZXJDb3VudCk7CisgICAgYXBwZW5kUGFydGlh
bFVwbG9hZHNUb1VwZGF0ZXIocGFydGlhbE5vUmVtYWluZGVyQ291bnQpOworICAgIG1fdXBkYXRl
ci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBs
b2FkZXIsIG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgxLCBt
X251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7Cisg
ICAgRVhQRUNUX0VRKGZ1bGxVcGxvYWRGbHVzaE11bHRpcGxlciArIHBhcnRpYWxVcGxvYWRGbHVz
aE11bHRpcGxlciwgbV9udW1QcmV2aW91c0ZsdXNoZXMpOworICAgIEVYUEVDVF9FUShmdWxsTm9S
ZW1haW5kZXJDb3VudCArIHBhcnRpYWxOb1JlbWFpbmRlckNvdW50LCBtX251bVByZXZpb3VzVXBs
b2Fkcyk7Cit9CisKKworLy8gTUlOL01BWCBSRU1BSU5ERVIgVEVTVFMKKy8vIFRoaXMgY2xhc3Mg
b2YgdGVzdHMgbWl4IGFuZCBtYXRjaCB1cGxvYWRpbmcgMSBtb3JlIGFuZCAxIGxlc3MgdGV4dHVy
ZQorLy8gdGhhbiBhIG11bHRpcGxlIG9mIHRoZSBmbHVzaCBwZXJpb2QuCisKK2NvbnN0IGludCBm
dWxsTWluUmVtYWluZGVyQ291bnQgPSBmdWxsTm9SZW1haW5kZXJDb3VudCArIDE7Citjb25zdCBp
bnQgZnVsbE1heFJlbWFpbmRlckNvdW50ID0gZnVsbE5vUmVtYWluZGVyQ291bnQgLSAxOworY29u
c3QgaW50IHBhcnRpYWxNaW5SZW1haW5kZXJDb3VudCA9IHBhcnRpYWxOb1JlbWFpbmRlckNvdW50
ICsgMTsKK2NvbnN0IGludCBwYXJ0aWFsTWF4UmVtYWluZGVyQ291bnQgPSBwYXJ0aWFsTm9SZW1h
aW5kZXJDb3VudCAtIDE7CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgTWFueUZ1bGxB
bmRQYXJ0aWFsTWluUmVtYWluZGVyKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVy
KGZ1bGxNaW5SZW1haW5kZXJDb3VudCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0
ZXIocGFydGlhbE1pblJlbWFpbmRlckNvdW50KTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29u
dGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBtX3RvdGFs
VXBsb2FkQ291bnRFeHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdpblVwbG9h
ZHMpOworICAgIEVYUEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVDVF9FUShm
dWxsVXBsb2FkRmx1c2hNdWx0aXBsZXIgKyBwYXJ0aWFsVXBsb2FkRmx1c2hNdWx0aXBsZXIgKyAy
LCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKGZ1bGxNaW5SZW1haW5kZXJD
b3VudCArIHBhcnRpYWxNaW5SZW1haW5kZXJDb3VudCwgbV9udW1QcmV2aW91c1VwbG9hZHMpOwor
fQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlGdWxsQW5kUGFydGlhbFVwbG9h
ZHNNYXhSZW1haW5kZXIpCit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIoZnVsbE1h
eFJlbWFpbmRlckNvdW50KTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihwYXJ0
aWFsTWF4UmVtYWluZGVyQ291bnQpOworICAgIG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0Lmdl
dCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIG1fdG90YWxVcGxvYWRD
b3VudEV4cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgxLCBtX251bUJlZ2luVXBsb2Fkcyk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKGZ1bGxVcGxv
YWRGbHVzaE11bHRpcGxlciArIHBhcnRpYWxVcGxvYWRGbHVzaE11bHRpcGxlciwgbV9udW1QcmV2
aW91c0ZsdXNoZXMpOworICAgIEVYUEVDVF9FUShmdWxsTWF4UmVtYWluZGVyQ291bnQgKyBwYXJ0
aWFsTWF4UmVtYWluZGVyQ291bnQsIG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKK30KKworVEVTVF9G
KENDVGV4dHVyZVVwZGF0ZXJUZXN0LCBNYW55RnVsbE1pblJlbWFpbmRlck1hbnlQYXJ0aWFsTWF4
UmVtYWluZGVyKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVyKGZ1bGxNaW5SZW1h
aW5kZXJDb3VudCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZXIocGFydGlhbE1h
eFJlbWFpbmRlckNvdW50KTsKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwg
Jm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBtX3RvdGFsVXBsb2FkQ291bnRF
eHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEoMSwgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVY
UEVDVF9FUSgxLCBtX251bUVuZFVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgoZnVsbFVwbG9hZEZs
dXNoTXVsdGlwbGVyKzEpICsgcGFydGlhbFVwbG9hZEZsdXNoTXVsdGlwbGVyLCBtX251bVByZXZp
b3VzRmx1c2hlcyk7CisgICAgRVhQRUNUX0VRKGZ1bGxNaW5SZW1haW5kZXJDb3VudCArIHBhcnRp
YWxNYXhSZW1haW5kZXJDb3VudCwgbV9udW1QcmV2aW91c1VwbG9hZHMpOworfQorCitURVNUX0Yo
Q0NUZXh0dXJlVXBkYXRlclRlc3QsIE1hbnlGdWxsTWF4UmVtYWluZGVyTWFueVBhcnRpYWxNaW5S
ZW1haW5kZXIpCit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZXIoZnVsbE1heFJlbWFp
bmRlckNvdW50KTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlcihwYXJ0aWFsTWlu
UmVtYWluZGVyQ291bnQpOworICAgIG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAm
bV9hbGxvY2F0b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIG1fdG90YWxVcGxvYWRDb3VudEV4
cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgxLCBtX251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQ
RUNUX0VRKDEsIG1fbnVtRW5kVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKGZ1bGxVcGxvYWRGbHVz
aE11bHRpcGxlciArIChwYXJ0aWFsVXBsb2FkRmx1c2hNdWx0aXBsZXIrMSksIG1fbnVtUHJldmlv
dXNGbHVzaGVzKTsKKyAgICBFWFBFQ1RfRVEoZnVsbE1heFJlbWFpbmRlckNvdW50ICsgcGFydGlh
bE1pblJlbWFpbmRlckNvdW50LCBtX251bVByZXZpb3VzVXBsb2Fkcyk7Cit9CisKKworLy8gTVVM
VElQTEUgVVBEQVRFIFRFU1RTCisvLyBUaGVzZSB0ZXN0cyBhdHRlbXB0IHRvIHVwbG9hZCB0b28g
bWFueSB0ZXh0dXJlcyBhdCBvbmNlLCByZXF1aXJpbmcKKy8vIG11bHRpcGxlIGNhbGxzIHRvIHVw
ZGF0ZSgpLgorCitpbnQgZXhwZWN0ZWRGbHVzaGVzKGludCB1cGxvYWRzLCBpbnQgZmx1c2hQZXJp
b2QpCit7CisgICAgcmV0dXJuICh1cGxvYWRzICsgZmx1c2hQZXJpb2QgLSAxKSAvIGZsdXNoUGVy
aW9kOworfQorCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlclRlc3QsIFRyaXBsZVVwZGF0ZUZpbmFs
VXBkYXRlRnVsbEFuZFBhcnRpYWwpCit7CisgICAgY29uc3QgaW50IGtNYXhVcGxvYWRzUGVyVXBk
YXRlID0gNDA7CisgICAgY29uc3QgaW50IGtGdWxsVXBsb2FkcyA9IDEwMDsKKyAgICBjb25zdCBp
bnQga1BhcnRpYWxVcGxvYWRzID0gMjA7CisKKyAgICBpbnQgZXhwZWN0ZWRQcmV2aW91c0ZsdXNo
ZXMgPSAwOworICAgIGludCBleHBlY3RlZFByZXZpb3VzVXBsb2FkcyA9IDA7CisKKyAgICBzZXRN
YXhVcGxvYWRDb3VudFBlclVwZGF0ZShrTWF4VXBsb2Fkc1BlclVwZGF0ZSk7CisgICAgYXBwZW5k
RnVsbFVwbG9hZHNUb1VwZGF0ZXIoa0Z1bGxVcGxvYWRzKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBs
b2Fkc1RvVXBkYXRlcihrUGFydGlhbFVwbG9hZHMpOworCisgICAgLy8gRmlyc3QgdXBkYXRlICg0
MCBmdWxsKQorICAgIG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0
b3IsICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsKKworICAg
IEVYUEVDVF9FUSgxLCBtX251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbnVt
RW5kVXBsb2Fkcyk7CisKKyAgICBleHBlY3RlZFByZXZpb3VzRmx1c2hlcyA9IGV4cGVjdGVkRmx1
c2hlcyhrTWF4VXBsb2Fkc1BlclVwZGF0ZSwga0ZsdXNoUGVyaW9kRnVsbCk7CisgICAgRVhQRUNU
X0VRKGV4cGVjdGVkUHJldmlvdXNGbHVzaGVzLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisKKyAg
ICBleHBlY3RlZFByZXZpb3VzVXBsb2FkcyA9IGtNYXhVcGxvYWRzUGVyVXBkYXRlOworICAgIEVY
UEVDVF9FUShleHBlY3RlZFByZXZpb3VzVXBsb2FkcywgbV9udW1QcmV2aW91c1VwbG9hZHMpOwor
CisgICAgLy8gU2Vjb25kIHVwZGF0ZSAoNDAgZnVsbCkKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1f
Y29udGV4dC5nZXQoKSwgJm1fYWxsb2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4
VXBsb2Fkc1BlclVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfRVEoMiwgbV9udW1CZWdpblVwbG9hZHMp
OworICAgIEVYUEVDVF9FUSgyLCBtX251bUVuZFVwbG9hZHMpOworCisgICAgZXhwZWN0ZWRQcmV2
aW91c0ZsdXNoZXMgPSBleHBlY3RlZEZsdXNoZXMoa01heFVwbG9hZHNQZXJVcGRhdGUsIGtGbHVz
aFBlcmlvZEZ1bGwpOworICAgIEVYUEVDVF9FUShleHBlY3RlZFByZXZpb3VzRmx1c2hlcywgbV9u
dW1QcmV2aW91c0ZsdXNoZXMpOworCisgICAgZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMgPSBrTWF4
VXBsb2Fkc1BlclVwZGF0ZTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMs
IG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKKworICAgIC8vIFRoaXJkIHVwZGF0ZSAoMjAgZnVsbCwg
MjAgcGFydGlhbCkKKyAgICBtX3VwZGF0ZXIudXBkYXRlKG1fY29udGV4dC5nZXQoKSwgJm1fYWxs
b2NhdG9yLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCBrTWF4VXBsb2Fkc1BlclVwZGF0ZSk7CisK
KyAgICBFWFBFQ1RfRVEoMywgbV9udW1CZWdpblVwbG9hZHMpOworICAgIEVYUEVDVF9FUSgzLCBt
X251bUVuZFVwbG9hZHMpOworCisgICAgZXhwZWN0ZWRQcmV2aW91c0ZsdXNoZXMgPSBleHBlY3Rl
ZEZsdXNoZXMoa0Z1bGxVcGxvYWRzLWtNYXhVcGxvYWRzUGVyVXBkYXRlKjIsIGtGbHVzaFBlcmlv
ZEZ1bGwpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRmx1c2hlcyhr
UGFydGlhbFVwbG9hZHMsIGtGbHVzaFBlcmlvZFBhcnRpYWwpOworICAgIEVYUEVDVF9FUShleHBl
Y3RlZFByZXZpb3VzRmx1c2hlcywgbV9udW1QcmV2aW91c0ZsdXNoZXMpOworCisgICAgZXhwZWN0
ZWRQcmV2aW91c1VwbG9hZHMgPSAoa0Z1bGxVcGxvYWRzLWtNYXhVcGxvYWRzUGVyVXBkYXRlKjIp
K2tQYXJ0aWFsVXBsb2FkczsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQcmV2aW91c1VwbG9hZHMs
IG1fbnVtUHJldmlvdXNVcGxvYWRzKTsKKworICAgIC8vIEZpbmFsIHNhbml0eSBjaGVja3MKKyAg
ICBFWFBFQ1RfRVEoa0Z1bGxVcGxvYWRzICsga1BhcnRpYWxVcGxvYWRzLCBtX251bVRvdGFsVXBs
b2Fkcyk7Cit9CisKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVyVGVzdCwgVHJpcGxlVXBkYXRlRmlu
YWxVcGRhdGVBbGxQYXJ0aWFsKQoreworICAgIGNvbnN0IGludCBrTWF4VXBsb2Fkc1BlclVwZGF0
ZSA9IDQwOworICAgIGNvbnN0IGludCBrRnVsbFVwbG9hZHMgPSA3MDsKKyAgICBjb25zdCBpbnQg
a1BhcnRpYWxVcGxvYWRzID0gMzA7CisKKyAgICBpbnQgZXhwZWN0ZWRQcmV2aW91c0ZsdXNoZXMg
PSAwOworICAgIGludCBleHBlY3RlZFByZXZpb3VzVXBsb2FkcyA9IDA7CisKKyAgICBzZXRNYXhV
cGxvYWRDb3VudFBlclVwZGF0ZShrTWF4VXBsb2Fkc1BlclVwZGF0ZSk7CisgICAgYXBwZW5kRnVs
bFVwbG9hZHNUb1VwZGF0ZXIoa0Z1bGxVcGxvYWRzKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fk
c1RvVXBkYXRlcihrUGFydGlhbFVwbG9hZHMpOworCisgICAgLy8gRmlyc3QgdXBkYXRlICg0MCBm
dWxsKQorICAgIG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3Is
ICZtX2NvcGllciwgJm1fdXBsb2FkZXIsIGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsKKworICAgIEVY
UEVDVF9FUSgxLCBtX251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbnVtRW5k
VXBsb2Fkcyk7CisKKyAgICBleHBlY3RlZFByZXZpb3VzRmx1c2hlcyA9IGV4cGVjdGVkRmx1c2hl
cyhrTWF4VXBsb2Fkc1BlclVwZGF0ZSwga0ZsdXNoUGVyaW9kRnVsbCk7CisgICAgRVhQRUNUX0VR
KGV4cGVjdGVkUHJldmlvdXNGbHVzaGVzLCBtX251bVByZXZpb3VzRmx1c2hlcyk7CisKKyAgICBl
eHBlY3RlZFByZXZpb3VzVXBsb2FkcyA9IGtNYXhVcGxvYWRzUGVyVXBkYXRlOworICAgIEVYUEVD
VF9FUShleHBlY3RlZFByZXZpb3VzVXBsb2FkcywgbV9udW1QcmV2aW91c1VwbG9hZHMpOworCisg
ICAgLy8gU2Vjb25kIHVwZGF0ZSAoMzAgZnVsbCwgb3B0aW9uYWxseSAxMCBwYXJ0aWFsKQorICAg
IG1fdXBkYXRlci51cGRhdGUobV9jb250ZXh0LmdldCgpLCAmbV9hbGxvY2F0b3IsICZtX2NvcGll
ciwgJm1fdXBsb2FkZXIsIGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsKKworICAgIEVYUEVDVF9FUSgy
LCBtX251bUJlZ2luVXBsb2Fkcyk7CisgICAgRVhQRUNUX0VRKDIsIG1fbnVtRW5kVXBsb2Fkcyk7
CisgICAgRVhQRUNUX0xFKG1fbnVtUHJldmlvdXNVcGxvYWRzLCBrTWF4VXBsb2Fkc1BlclVwZGF0
ZSk7CisgICAgLy8gQmUgbGVuaWVudCBvbiB0aGUgZXhhY3QgbnVtYmVyIG9mIGZsdXNoZXMgaGVy
ZSwgYXMgdGhlIG51bWJlciBvZiBmbHVzaGVzCisgICAgLy8gd2lsbCBkZXBlbmQgb24gd2hldGhl
ciBzb21lIHBhcnRpYWwgdXBsb2FkcyB3ZXJlIHBlcmZvcm1lZC4KKyAgICAvLyBvbkZsdXNoKCks
IG9uVXBsb2FkKCksIGFuZCBvbkVuZFVwbG9hZCgpIHdpbGwgZG8gYmFzaWMgZmx1c2ggY2hlY2tz
IGZvciB1cyBhbnl3YXkuCisKKyAgICAvLyBUaGlyZCB1cGRhdGUgKDMwIHBhcnRpYWwgT1IgMjAg
cGFydGlhbCBpZiAxMCBwYXJ0aWFsIHVwbG9hZGVkIGluIHNlY29uZCB1cGRhdGUpCisgICAgbV91
cGRhdGVyLnVwZGF0ZShtX2NvbnRleHQuZ2V0KCksICZtX2FsbG9jYXRvciwgJm1fY29waWVyLCAm
bV91cGxvYWRlciwga01heFVwbG9hZHNQZXJVcGRhdGUpOworCisgICAgRVhQRUNUX0VRKDMsIG1f
bnVtQmVnaW5VcGxvYWRzKTsKKyAgICBFWFBFQ1RfRVEoMywgbV9udW1FbmRVcGxvYWRzKTsKKyAg
ICBFWFBFQ1RfTEUobV9udW1QcmV2aW91c1VwbG9hZHMsIGtNYXhVcGxvYWRzUGVyVXBkYXRlKTsK
KyAgICAvLyBCZSBsZW5pZW50IG9uIHRoZSBleGFjdCBudW1iZXIgb2YgZmx1c2hlcyBoZXJlIGFz
IHdlbGwuCisKKyAgICAvLyBGaW5hbCBzYW5pdHkgY2hlY2tzCisgICAgRVhQRUNUX0VRKGtGdWxs
VXBsb2FkcyArIGtQYXJ0aWFsVXBsb2FkcywgbV9udW1Ub3RhbFVwbG9hZHMpOworfQorCisKK30g
Ly8gbmFtZXNwYWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>