<?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>68572</bug_id>
          
          <creation_ts>2011-09-21 14:46:59 -0700</creation_ts>
          <short_desc>Create unit tests for LayerChromium</short_desc>
          <delta_ts>2011-10-11 16:50:40 -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>Layout and Rendering</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>
          
          <blocked>67341</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>husky</cc>
    
    <cc>jamesr</cc>
    
    <cc>jbates</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>471170</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-21 14:46:59 -0700</bug_when>
    <thetext>This patch is ready for review, but not for commit.   I still need to comb over it once more to make sure tests actually test things properly.

4 cases are currently DISABLED.  I&apos;m OK with removing the removeChild() tests, but I kept them there for now just since they were already implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471172</commentid>
    <comment_count>1</comment_count>
      <attachid>108238</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-21 14:49:37 -0700</bug_when>
    <thetext>Created attachment 108238
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471294</commentid>
    <comment_count>2</comment_count>
      <attachid>108238</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-21 17:28:36 -0700</bug_when>
    <thetext>Comment on attachment 108238
Patch

Attachment 108238 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9792022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471337</commentid>
    <comment_count>3</comment_count>
      <attachid>108272</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-21 20:58:31 -0700</bug_when>
    <thetext>Created attachment 108272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471339</commentid>
    <comment_count>4</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-21 21:03:46 -0700</bug_when>
    <thetext>This new patch is much more correct, testing destructors properly.  I have &quot;tested the tests&quot; mostly, but should do one more thorough pass to really make sure.

Additionally, please search for the key word &quot;semantics&quot; --&gt; 3 or 4 places in comments where I use that word are questions about whether the semantics of LayerChromium are appropriate or could be improved.

Once semantics are discussed I can enable the last &quot;disabled&quot; test and submit the final patch.   All other tests are enabled.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471940</commentid>
    <comment_count>5</comment_count>
      <attachid>108272</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-22 16:46:31 -0700</bug_when>
    <thetext>Comment on attachment 108272
Patch

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

First round of comments.  This definitely needs some work, but I&apos;m really excited about having more coverage here.

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:34
&gt; +using ::testing::_;

what is this?

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:67
&gt; +    static int m_numInstancesDestroyed;

we tend to use an s_ prefix for statics (as opposed to an m_ prefix for member variables) so this should be s_numInstancesDestroyed

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:74
&gt; +    void SetUp()

this function is virtual (since testing::Test::SetUp() is declared virtual in gtest.h).  Please include the virtual keyword here

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:83
&gt; +        // silentDelegate is initialized to be just a stub and will
&gt; +        // not print any warnings. It is used when we are not worried
&gt; +        // about testing how the delegate is called.
&gt; +
&gt; +        EXPECT_CALL(silentDelegate, drawsContent()).Times(AnyNumber());
&gt; +        EXPECT_CALL(silentDelegate, preserves3D()).Times(AnyNumber());
&gt; +        EXPECT_CALL(silentDelegate, paintContents(_, _)).Times(AnyNumber());
&gt; +        EXPECT_CALL(silentDelegate, notifySyncRequired()).Times(AnyNumber());

isn&apos;t this exactly the same as passing 0 in for the delegate?

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:86
&gt; +    void explicitlyDestroyLayer(PassRefPtr&lt;LayerChromium&gt; layer) const

This appears to be redundant with LayerChromiumWithInstrumentedDestructor.  Is there any reason to have both?

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:156
&gt; +    // All delegates and layers are declared here so that each test case
&gt; +    // is more readable. The meaning behind variable names should be
&gt; +    // clear when reading the specific test cases.
&gt; +    MockLayerDelegate mockDelegate, silentDelegate, parentDelegate, childDelegate;
&gt; +    RefPtr&lt;LayerChromium&gt; testLayer, parent, child, child1, child2, child3, child4, grandChild1, grandChild2, grandChild3;

While I appreciate the sentiment, I actually think doing this makes the tests much harder to read.  It still just just as many lines of code to instantiate each LayerChromium for a given test case (one) and you have to jump through unnatural hoops in order to drop references, etc.  I think you should instantiate the objects you need for a test within that test.

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:160
&gt; +// FIXME: this fixture is temporary just while developing test cases
&gt; +class LayerChromiumTest_WORK_IN_PROGRESS : public LayerChromiumTest {

I don&apos;t understand what the point of this is - do you intend to check this in? does the _WORK_IN_PROGRESS suffix have some special meaning to the tools, or is it intended for humans?

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:162
&gt; +    void SetUp() { LayerChromiumTest::SetUp(); }

this line is a complete no-op.  LayerChromiumTest::SetUp() is virtual (because void SetUp() is declared virtual in testing::Test()), so if you left this out calling SetUp() on an instance of LayerChromiumTest_WORK_IN_PROGRESS would call LayerChromiumTest::SetUp()

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:163
&gt; +    void createSimpleTestTree() { LayerChromiumTest::createSimpleTestTree(); }

why is this here?

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:188
&gt; +    EXPECT_EQ(parent-&gt;children().size(), (size_t)0);

We use C++ style casts, not C style.  That means this should be static_cast&lt;size_t&gt;(0)

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:193
&gt; +    EXPECT_EQ(parent-&gt;children().size(), (size_t)1);

should be static_cast&lt;&gt;. there are many more instances of this in the rest of the code, so I didn&apos;t mark them all.

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:275
&gt; +    // insert to empty list
&gt; +    EXPECT_CALL(parentDelegate, notifySyncRequired()).Times(1);
&gt; +    parent-&gt;insertChild(child3, 0);
&gt; +    Mock::VerifyAndClearExpectations(&amp;parentDelegate);

It&apos;s not useful to include a comment that merely repeats what the next line of code does.  We can all read the code.  In a comment you should try to provide information that is not obvious from just reading the code - for instance, explain why you are doing things in a certain way, subtle interactions between systems that aren&apos;t clear from just reading the code, etc.  If there aren&apos;t any such things to note, then just don&apos;t add a comment.

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:308
&gt; +    // FIXME: There are awkward semantics that notifySyncRequired gets
&gt; +    //        called for each child that gets removed from within the
&gt; +    //        parent&apos;s destructor. are those semantics OK? It feels
&gt; +    //        like it may come back to bite us down the road.
&gt; +    //        for now, this will print warnings in the test but not fail.

Does it matter how many times notifySyncRequired is called?

Tests should be silent when passing.

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:358
&gt; +TEST_F(LayerChromiumTest_WORK_IN_PROGRESS, replaceChildWithNewChild)

these tests raise an interesting point: why is replaceChild part of our interface anyway? I can&apos;t find any callers, and it looks like it was added in the initial import of the GraphicsLayer stuff.  I&apos;ll follow up with Simon to see if we need to keep this.

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:507
&gt; +    // FIXME: the base class LayerChromium always returns false and doesn&apos;t use the delegate drawsContent().
&gt; +    // this test should be disabled until we resolve whether those semantics are appropriate or not.
&gt; +    // if it should return false without calling delegate, then we have to subclass the LayerChromium
&gt; +    // and override that function so that we can test descendantDrawsContent().

It&apos;s not a good idea to check in intentionally disabled code.  Code that is in the repo is code that the whole project has to maintain, even if it&apos;s disabled or dead code.  If you aren&apos;t sure whether to land something then keep it in a local git repo or in a patch on another bug.

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:584
&gt; +    /*

why is this part commented out?

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:658
&gt; +    EXPECT_CALL(mockDelegate, notifySyncRequired()).Times(1);
&gt; +    testLayer-&gt;setAnchorPoint(FloatPoint(1.23f, 4.56f));
&gt; +    Mock::VerifyAndClearExpectations(&amp;mockDelegate);

we repeat this stanza a lot, seems like it could use a helper function of some sort

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:730
&gt; +    // FIXME: uncomment this when we can reasonably stub the CCLayerTreeHost.
&gt; +    //
&gt; +    // EXPECT_CALL(mockDelegate, notifySyncRequired()).Times(1);
&gt; +    // testLayer-&gt;setLayerTreeHost(dummyPointer);
&gt; +    // Mock::VerifyAndClearExpectations(&amp;mockDelegate);
&gt; +    // verifyFloatRectsAlmostEqual(testLayer-&gt;dirtyRect(), FloatRect(0.0f, 0.0f, 5.0f, 10.0f));
&gt; +    //
&gt; +    // testLayer-&gt;resetNeedsDisplay();
&gt; +    // EXPECT_TRUE(testLayer-&gt;dirtyRect().isEmpty());

see commments above about not checking in commented out code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471944</commentid>
    <comment_count>6</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-09-22 16:55:39 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:188
&gt; &gt; +    EXPECT_EQ(parent-&gt;children().size(), (size_t)0);
&gt; 
&gt; We use C++ style casts, not C style.  That means this should be static_cast&lt;size_t&gt;(0)
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:193
&gt; &gt; +    EXPECT_EQ(parent-&gt;children().size(), (size_t)1);
&gt; 
&gt; should be static_cast&lt;&gt;. there are many more instances of this in the rest of the code, so I didn&apos;t mark them all.

Or just 0u and 1u, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472009</commentid>
    <comment_count>7</comment_count>
      <attachid>108272</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-22 18:47:46 -0700</bug_when>
    <thetext>Comment on attachment 108272
Patch

Thanks for the comments.  I wasnt intending to land disabled tests or messy FIXME comments.  That was my (apparently unsuccessful) way of asking questions in-line with the code. Would it be better if I just put a bullet list of issues in a separate post on the bug?   How do you want me to communicate those points next time?

Anyway, I&apos;ll fix the style issues, and rest of my responses are inline.  Most of my responses will need one more pass of feedback from people to decide how to proceed.  Thanks!

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

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:34
&gt;&gt; +using ::testing::_;
&gt; 
&gt; what is this?

This is gtest&apos;s symbol to represent &quot;any parameter&quot; in an EXPECT_CALL macro - when we expect a mocked function to be called, but we don&apos;t care what parameters are passed to it.  This is used with the silentDelegate.  If we end up removing silentDelegate, we can remove this, too.   Or if you prefer I can just have one line that says &quot;using namespace ::testing&quot; instead.

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:83
&gt;&gt; +        EXPECT_CALL(silentDelegate, notifySyncRequired()).Times(AnyNumber());
&gt; 
&gt; isn&apos;t this exactly the same as passing 0 in for the delegate?

in my opinion -  A &quot;mock delegate&quot; and &quot;no delegate at all&quot; are not the same - LayerChromium should believe it has a working delegate, but we don&apos;t care how it uses the delegate.   In our particular implementation of LayerChromium, yes they would produce the same &quot;test results&quot;, but that&apos;s only a side effect of how we programmed the LayerChromium.  For example, if later we find its useful to add an early-exit if m_delegate is NULL...  Then we may not be testing what we think we are testing.  Using a stub seems less brittle to me.  Thoughts?

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:86
&gt;&gt; +    void explicitlyDestroyLayer(PassRefPtr&lt;LayerChromium&gt; layer) const
&gt; 
&gt; This appears to be redundant with LayerChromiumWithInstrumentedDestructor.  Is there any reason to have both?

I think its important that we directly test LayerChromium when possible.  Testing the subclass could be misleading if we introduce errors into the subclass.  However, to make the leak test, we had no choice but to passively check the destructor is called, and that should be the only test that uses this subclass.

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:156
&gt;&gt; +    RefPtr&lt;LayerChromium&gt; testLayer, parent, child, child1, child2, child3, child4, grandChild1, grandChild2, grandChild3;
&gt; 
&gt; While I appreciate the sentiment, I actually think doing this makes the tests much harder to read.  It still just just as many lines of code to instantiate each LayerChromium for a given test case (one) and you have to jump through unnatural hoops in order to drop references, etc.  I think you should instantiate the objects you need for a test within that test.

OK, will do =)

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:160
&gt;&gt; +class LayerChromiumTest_WORK_IN_PROGRESS : public LayerChromiumTest {
&gt; 
&gt; I don&apos;t understand what the point of this is - do you intend to check this in? does the _WORK_IN_PROGRESS suffix have some special meaning to the tools, or is it intended for humans?

No, this will not be in the final patch.  Sorry, I thought the comment was clear enough.  This was my way of keeping track of when I really considered each test to be &quot;verified&quot; that it test what we think its testing.  As I&apos;ve been verifying tests, I&apos;ve been migrating them to LayerChromiumTest, and this WORK_IN_PROGRESS class will be deleted.

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:308
&gt;&gt; +    //        for now, this will print warnings in the test but not fail.
&gt; 
&gt; Does it matter how many times notifySyncRequired is called?
&gt; 
&gt; Tests should be silent when passing.

I feel like it does indeed matter how many times notifySyncRequired is called.  If we&apos;re planning to make LayerChromium part of a &quot;public CC API&quot;, where the user has to receive these notifySyncRequired calls, we should clearly define when/why it would be called.  To me, it makes sense if this is called exactly once per public function, or not at all, but definitely not multiple times.  The way the code is now, whenever we remove all children, or even in the destructor which feels particularly weird, notifySyncRequired can get called several times in a row.   It doesn&apos;t seem like a good idea to have that sort of behavior on the public api side of the code... thoughts?

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:358
&gt;&gt; +TEST_F(LayerChromiumTest_WORK_IN_PROGRESS, replaceChildWithNewChild)
&gt; 
&gt; these tests raise an interesting point: why is replaceChild part of our interface anyway? I can&apos;t find any callers, and it looks like it was added in the initial import of the GraphicsLayer stuff.  I&apos;ll follow up with Simon to see if we need to keep this.

OK, I&apos;ll adapt this code to whatever you all decide.

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:507
&gt;&gt; +    // and override that function so that we can test descendantDrawsContent().
&gt; 
&gt; It&apos;s not a good idea to check in intentionally disabled code.  Code that is in the repo is code that the whole project has to maintain, even if it&apos;s disabled or dead code.  If you aren&apos;t sure whether to land something then keep it in a local git repo or in a patch on another bug.

Yes, I didn&apos;t intend to land any disabled tests.  the point was for us to discuss the LayerChromium semantics.  I believe that we&apos;re discussing this right now in https://bugs.webkit.org/show_bug.cgi?id=67750 and I would prefer to settle that issue before we land this patch.  So yeah, this will either be enabled, or removed entirely, before landing.

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:584
&gt;&gt; +    /*
&gt; 
&gt; why is this part commented out?

my mistake, I should uncomment and fix this code.

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:658
&gt;&gt; +    Mock::VerifyAndClearExpectations(&amp;mockDelegate);
&gt; 
&gt; we repeat this stanza a lot, seems like it could use a helper function of some sort

OK, sure.  But I think it would require a macro because of the arbitrary function in the middle (including arbitrary parameters, so templates don&apos;t seem practical either).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472689</commentid>
    <comment_count>8</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-23 19:08:35 -0700</bug_when>
    <thetext>One more issue arose with the semantics of LayerChromium:

in setNeedsDisplay( dirtyRect ), we are calling unite(dirtyRect).  This means that an empty dirty rect can cause the united dirty rect to be larger.

Is this important for some reason?  Can we change it to uniteIfNonZero(...) instead?

Once this and all the other questions are answered, I&apos;ll go ahead and submit another patch.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474068</commentid>
    <comment_count>9</comment_count>
      <attachid>108867</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-27 10:49:27 -0700</bug_when>
    <thetext>Created attachment 108867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474075</commentid>
    <comment_count>10</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-27 10:56:38 -0700</bug_when>
    <thetext>This patch is significantly cleaned up and fixed.  From my side, this patch is ready for commit.   Please let me know any more changes you would like to make.

All tests are enabled and pass;  There are two FIXMEs that need to be addressed by separate bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474082</commentid>
    <comment_count>11</comment_count>
      <attachid>108867</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 11:00:15 -0700</bug_when>
    <thetext>Comment on attachment 108867
Patch

Attachment 108867 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9881385</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474097</commentid>
    <comment_count>12</comment_count>
      <attachid>108872</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-27 11:15:55 -0700</bug_when>
    <thetext>Created attachment 108872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474164</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-27 12:56:01 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:83
&gt; &gt;&gt; +        EXPECT_CALL(silentDelegate, notifySyncRequired()).Times(AnyNumber());
&gt; &gt; 
&gt; &gt; isn&apos;t this exactly the same as passing 0 in for the delegate?
&gt; 
&gt; in my opinion -  A &quot;mock delegate&quot; and &quot;no delegate at all&quot; are not the same - LayerChromium should believe it has a working delegate, but we don&apos;t care how it uses the delegate.   In our particular implementation of LayerChromium, yes they would produce the same &quot;test results&quot;, but that&apos;s only a side effect of how we programmed the LayerChromium.  For example, if later we find its useful to add an early-exit if m_delegate is NULL...  Then we may not be testing what we think we are testing.  Using a stub seems less brittle to me.  Thoughts?

I don&apos;t think that&apos;s true.  We create LayerChromiums will NULL delegates and NULL out the delegate on LayerChromiums and expect that to behave the same way as having a no-op delegate.

&gt; 
&gt; &gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:86
&gt; &gt;&gt; +    void explicitlyDestroyLayer(PassRefPtr&lt;LayerChromium&gt; layer) const
&gt; &gt; 
&gt; &gt; This appears to be redundant with LayerChromiumWithInstrumentedDestructor.  Is there any reason to have both?
&gt; 
&gt; I think its important that we directly test LayerChromium when possible.  Testing the subclass could be misleading if we introduce errors into the subclass.  However, to make the leak test, we had no choice but to passively check the destructor is called, and that should be the only test that uses this subclass.
&gt; 

I think having a subclass that only provides a destructor is perfectly valid to use in tests where you want the subclass to behave the same in every way except for the destruction behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474166</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-27 12:56:32 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; One more issue arose with the semantics of LayerChromium:
&gt; 
&gt; in setNeedsDisplay( dirtyRect ), we are calling unite(dirtyRect).  This means that an empty dirty rect can cause the united dirty rect to be larger.
&gt; 

Do we ever actually do this?

&gt; Is this important for some reason?  Can we change it to uniteIfNonZero(...) instead?
&gt; 
&gt; Once this and all the other questions are answered, I&apos;ll go ahead and submit another patch.
&gt; 
&gt; Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474228</commentid>
    <comment_count>15</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-27 14:18:20 -0700</bug_when>
    <thetext>
In response to the remaining 3 issues:

(1)  Discussed offline with jamesr, we agreed to keep silentDelegate there.

(2) removed the explicitlyDestroy stuff, and used the instrumented destructor instead, which is more correct.

(3) the issue about unite vs uniteIfNonZero is actually a non-issue.  Oddly, those two functions in FloatRect seem to have almost the exact same semantics, and that should be reported in a separate issue.


patch will be uploaded in just a moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474231</commentid>
    <comment_count>16</comment_count>
      <attachid>108896</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-27 14:19:10 -0700</bug_when>
    <thetext>Created attachment 108896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476300</commentid>
    <comment_count>17</comment_count>
      <attachid>108896</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-30 14:03:09 -0700</bug_when>
    <thetext>Comment on attachment 108896
Patch

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

R=me. To upload a new patch to fix the nits and request commit, but without requiring a new review, replaced &apos;Reviewed by NOBODY (OOPS!).&apos; in the ChangeLog with &apos;Reviewed by James Robinson.&apos; and do:

webkit-patch upload --no-review --request-commit

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:56
&gt; +    LayerChromiumWithInstrumentedDestructor(CCLayerDelegate* delegate)

nit: explicit keyword on 1-arg constructors, please.

c++ got the default wrong for this behavior - i think you should have to say &apos;implicit&apos; to get implicit type conversion behavior. it&apos;s super annoying :(

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:262
&gt; +    // The child delegate notifySynRequired should not be called when inserting.

typo: notifySynRequired-&gt;notifySyncRequired</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476469</commentid>
    <comment_count>18</comment_count>
      <attachid>109386</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-30 17:58:10 -0700</bug_when>
    <thetext>Created attachment 109386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476501</commentid>
    <comment_count>19</comment_count>
      <attachid>109386</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 19:11:13 -0700</bug_when>
    <thetext>Comment on attachment 109386
Patch

Clearing flags on attachment: 109386

Committed r96450: &lt;http://trac.webkit.org/changeset/96450&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476502</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 19:11:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108238</attachid>
            <date>2011-09-21 14:49:37 -0700</date>
            <delta_ts>2011-09-21 20:58:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68572-20110921144936.patch</filename>
            <type>text/plain</type>
            <size>30248</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUzODEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MjU1OGYwZDY1MGFmZmUwMTIwZWNlODJiYjNhOTBhZjllYTllMjkzMS4uNzUzN2U5YjNkYzMwZjA4
MjQyYTNkMTJmYzIwZThiZTVmMWU5YWEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxMS0wOS0yMSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBVbml0IHRlc3RzIGZvciBMYXllckNocm9taXVtLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1NzIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgor
ICAgICAgICAqIHRlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcDogQWRkZWQuCisKIDIwMTEtMDkt
MTcgIGNoYW5kcmEgc2hla2FyIHZhbGxhbGEgIDxjaGFuZHJhLnZhbGxhbGFAbW90b3JvbGEuY29t
PgogCiAgICAgICAgIFtjaHJvbWl1bV1UaGUgZm9jdXMgb2YgYW4gaW5wdXQgZmllbGQgaW5zaWRl
IGFuIElmcmFtZSBkb2Vzbid0IGdldCBjbGVhcmVkIGV2ZW4gdGhvdWdoIGNsZWFyRm9jdXNlZE5v
ZGUgaXMgY2FsbGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNzM3NTJhMjk0
YzQwMGFiYzg5N2IzYTgzNTIwYzY0YTIxYmYxYTE0MS4uZDA4NjNmOTFjM2M5NDE2NDFhOWVhNWM5
Y2NjMzdiNWEyNjE2YzZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02Myw2
ICs2Myw3IEBACiAgICAgICAgICAgICAndGVzdHMvSW5uZXJHZXN0dXJlUmVjb2duaXplclRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAg
ICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRjZTY2
OGYxNmU5MmIxOTFlMDEzYjg0MjNiMmE3OTU3MWE0YTdjMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0wLDAg
KzEsNzIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgOjp0ZXN0
aW5nOjpNb2NrOwordXNpbmcgOjp0ZXN0aW5nOjpfOwordXNpbmcgOjp0ZXN0aW5nOjpBbnlOdW1i
ZXI7Cit1c2luZyA6OnRlc3Rpbmc6OlJldHVybjsKKworLy8gRklYTUU6IGNsZWFudXBSZXNvdXJj
ZXNSZWN1cnNpdmUgbmVlZHMgdG8gYmUgdGVzdGVkIGZvciBkZXJpdmVkIGNsYXNzZXMsIGJ1dAor
Ly8gICAgICAgIHRoZXJlIGlzIGFjdHVhbGx5IG5vdGhpbmcgdG8gdGVzdCBmb3IgdGhlIExheWVy
Q2hyb21pdW0gYmFzZSBjbGFzcyBpdHNlbGYuCisvLyAgICAgICAgZG9uJ3QgZm9yZ2V0IHRvIGRv
IHRoYXQgd2hlbiBhZGRpbmcgdW5pdCB0ZXN0cyBmb3Igc3BlY2lmaWMgbGF5ZXIgdHlwZXMuCisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJE
ZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgTU9DS19DT05TVF9NRVRIT0QwKGRyYXdzQ29udGVudCwg
Ym9vbCgpKTsKKyAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJvb2woKSk7Cisg
ICAgTU9DS19NRVRIT0QyKHBhaW50Q29udGVudHMsIHZvaWQoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYpKTsKKyAgICBNT0NLX01FVEhPRDAobm90aWZ5U3luY1JlcXVpcmVkLCB2b2lk
KCkpOworfTsKKworY2xhc3MgTGF5ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVz
dCB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICAvLyBzaWxl
bnREZWxlZ2F0ZSBpcyBpbml0aWFsaXplZCB0byBiZSBqdXN0IGEgc3R1YiBhbmQgd2lsbAorICAg
ICAgICAvLyBub3QgcHJpbnQgYW55IHdhcm5pbmdzLiBJdCBpcyB1c2VkIHdoZW4gd2UgYXJlIG5v
dCB3b3JyaWVkCisgICAgICAgIC8vIGFib3V0IHRlc3RpbmcgaG93IHRoZSBkZWxlZ2F0ZSBpcyBj
YWxsZWQuCisKKyAgICAgICAgRVhQRUNUX0NBTEwoc2lsZW50RGVsZWdhdGUsIGRyYXdzQ29udGVu
dCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKHNpbGVudERlbGVn
YXRlLCBwcmVzZXJ2ZXMzRCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIEVYUEVDVF9D
QUxMKHNpbGVudERlbGVnYXRlLCBwYWludENvbnRlbnRzKF8sIF8pKS5UaW1lcyhBbnlOdW1iZXIo
KSk7CisgICAgICAgIEVYUEVDVF9DQUxMKHNpbGVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWly
ZWQoKSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZlcmlmeVRl
c3RUcmVlSW5pdGlhbFN0YXRlKCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUShwYXJlbnQtPmNo
aWxkcmVuKCkuc2l6ZSgpLCAzKTsKKyAgICAgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4o
KVswXSwgY2hpbGQxKTsKKyAgICAgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVsxXSwg
Y2hpbGQyKTsKKyAgICAgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVsyXSwgY2hpbGQz
KTsKKyAgICAgICAgRVhQRUNUX0VRKGNoaWxkMS0+cGFyZW50KCksIHBhcmVudC5nZXQoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShjaGlsZDItPnBhcmVudCgpLCBwYXJlbnQuZ2V0KCkpOworICAgICAg
ICBFWFBFQ1RfRVEoY2hpbGQzLT5wYXJlbnQoKSwgcGFyZW50LmdldCgpKTsKKworICAgICAgICBF
WFBFQ1RfRVEoY2hpbGQxLT5jaGlsZHJlbigpLnNpemUoKSwgMik7CisgICAgICAgIEVYUEVDVF9F
UShjaGlsZDEtPmNoaWxkcmVuKClbMF0sIGdyYW5kQ2hpbGQxKTsKKyAgICAgICAgRVhQRUNUX0VR
KGNoaWxkMS0+Y2hpbGRyZW4oKVsxXSwgZ3JhbmRDaGlsZDIpOworICAgICAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZDEtPnBhcmVudCgpLCBjaGlsZDEuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZDItPnBhcmVudCgpLCBjaGlsZDEuZ2V0KCkpOworCisgICAgICAgIEVYUEVDVF9F
UShjaGlsZDItPmNoaWxkcmVuKCkuc2l6ZSgpLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRKGNoaWxk
Mi0+Y2hpbGRyZW4oKVswXSwgZ3JhbmRDaGlsZDMpOworICAgICAgICBFWFBFQ1RfRVEoZ3JhbmRD
aGlsZDMtPnBhcmVudCgpLCBjaGlsZDIuZ2V0KCkpOworCisgICAgICAgIEVYUEVDVF9FUShjaGls
ZDMtPmNoaWxkcmVuKCkuc2l6ZSgpLCAwKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjcmVhdGVT
aW1wbGVUZXN0VHJlZSgpCisgICAgeworICAgICAgICBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoJnNpbGVudERlbGVnYXRlKTsKKyAgICAgICAgY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7CisgICAgICAgIGNoaWxkMiA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworICAgICAgICBjaGlsZDMgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsKKyAgICAgICAgZ3JhbmRDaGlsZDEgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsKKyAgICAgICAgZ3JhbmRDaGlsZDIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsKKyAgICAgICAgZ3JhbmRDaGls
ZDMgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsKKworICAgICAgICBw
YXJlbnQtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQy
KTsKKyAgICAgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZDMpOworICAgICAgICAKKyAgICAgICAg
Y2hpbGQxLT5hZGRDaGlsZChncmFuZENoaWxkMSk7CisgICAgICAgIGNoaWxkMS0+YWRkQ2hpbGQo
Z3JhbmRDaGlsZDIpOworICAgICAgICAKKyAgICAgICAgY2hpbGQyLT5hZGRDaGlsZChncmFuZENo
aWxkMyk7CisKKyAgICAgICAgdmVyaWZ5VGVzdFRyZWVJbml0aWFsU3RhdGUoKTsKKyAgICB9CisK
KyAgICB2b2lkIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChjb25zdCBGbG9hdFJlY3QmIHIx
LCBjb25zdCBGbG9hdFJlY3QmIHIyKSBjb25zdAorICAgIHsKKyAgICAgICAgRVhQRUNUX0ZMT0FU
X0VRKHIxLmxvY2F0aW9uKCkueCgpLCByMi5sb2NhdGlvbigpLngoKSk7CisgICAgICAgIEVYUEVD
VF9GTE9BVF9FUShyMS5sb2NhdGlvbigpLnkoKSwgcjIubG9jYXRpb24oKS55KCkpOworICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEocjEuc2l6ZSgpLndpZHRoKCksIHIyLnNpemUoKS53aWR0aCgpKTsK
KyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHIxLnNpemUoKS5oZWlnaHQoKSwgcjIuc2l6ZSgpLmhl
aWdodCgpKTsKKyAgICB9CisgICAgCisgICAgLy8gQWxsIGRlbGVnYXRlcyBhbmQgbGF5ZXJzIGFy
ZSBkZWNsYXJlZCBoZXJlIHNvIHRoYXQgZWFjaCB0ZXN0IGNhc2UKKyAgICAvLyBpcyBtb3JlIHJl
YWRhYmxlLiBUaGUgbWVhbmluZyBiZWhpbmQgdmFyaWFibGUgbmFtZXMgc2hvdWxkIGJlCisgICAg
Ly8gY2xlYXIgd2hlbiByZWFkaW5nIHRoZSBzcGVjaWZpYyB0ZXN0IGNhc2VzLgorICAgIE1vY2tM
YXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZSwgc2lsZW50RGVsZWdhdGUsIHBhcmVudERlbGVnYXRl
LCBjaGlsZERlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIsIHBh
cmVudCwgY2hpbGQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMsIGNoaWxkNCwgZ3JhbmRDaGlsZDEs
IGdyYW5kQ2hpbGQyLCBncmFuZENoaWxkMzsKK307CisKKy8vIEZJWE1FOiB0aGlzIGZpeHR1cmUg
aXMgdGVtcG9yYXJ5IGp1c3Qgd2hpbGUgZGV2ZWxvcGluZyB0ZXN0IGNhc2VzCitjbGFzcyBMYXll
ckNocm9taXVtVGVzdF9XT1JLX0lOX1BST0dSRVNTIDogcHVibGljIExheWVyQ2hyb21pdW1UZXN0
IHsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIFNldFVwKCkgeyBMYXllckNocm9taXVtVGVzdDo6U2V0
VXAoKTsgfQorICAgIHZvaWQgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKSB7IExheWVyQ2hyb21pdW1U
ZXN0OjpjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOyB9Cit9OworCitURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3RfV09SS19JTl9QUk9HUkVTUywgYmFzaWNDcmVhdGVBbmREZXN0cm95KQoreworICAgIC8v
IG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBqdXN0IGJlY2F1c2UgdGhl
IGxheWVyIGlzIGNyZWF0ZWQgb3IgZGVzdHJveWVkLgorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxl
Z2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOworCisgICAgdGVzdExheWVyID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOworICAgIEVYUEVDVF9UUlVFKHRl
c3RMYXllci5nZXQoKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGRlc3RydWN0b3IgZ2V0cyBp
bnZva2VkLgorICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBv
biB0aGUgZGVzdHJ1Y3RvciBiZWNhdXNlIHRoZSBsYXllciBoYXMgbm8gY2hpbGRyZW4uCisgICAg
dGVzdExheWVyLnJlbGVhc2UoKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLmdldCgpKTsK
K30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIGFkZENoaWxk
KQoreworICAgIHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUp
OworICAgIGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKwor
ICAgIC8vIFBhcmVudCBjYWxscyBub3RpZnlTeW5jUmVxdWlyZWQgZXhhY3RseSBvbmNlIHdoZW4g
YWRkaW5nIGNoaWxkLgorICAgIEVYUEVDVF9DQUxMKHBhcmVudERlbGVnYXRlLCBub3RpZnlTeW5j
UmVxdWlyZWQoKSkuVGltZXMoMSk7CisKKyAgICAvLyBVcG9uIGNyZWF0aW9uLCBsYXllcnMgc2hv
dWxkIG5vdCBoYXZlIGNoaWxkcmVuIG9yIHBhcmVudC4KKyAgICBFWFBFQ1RfRVEocGFyZW50LT5j
aGlsZHJlbigpLnNpemUoKSwgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5wYXJlbnQoKSk7
CisKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKworICAgIEVYUEVDVF9FUShwYXJlbnQt
PmNoaWxkcmVuKCkuc2l6ZSgpLCAxKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigp
WzBdLCBjaGlsZC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkLT5wYXJlbnQoKSwgcGFyZW50
LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQtPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkp
OworCisgICAgLy8gRm9yY2UgdmVyaWZpY2F0aW9uIHNvIHRoYXQgd2Uga25vdyBub3RpZnlTeW5j
UmVxdWlyZWQgd2FzIGNhbGxlZCBiZWNhdXNlIG9mIGFkZENoaWxkKCkKKyAgICBNb2NrOjpWZXJp
ZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmcGFyZW50RGVsZWdhdGUpOworCisgICAgLy8gRklYTUU6
IHRoZXNlIGFyZSB0aGUgc2VtYW50aWNzIGN1cnJlbnRseSBpbXBsZW1lbnRlZCBieSBMYXllckNo
cm9taXVtLCBidXQgaXQgc2VlbXMgYXdrd2FyZC4uLgorICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJl
ZCBzaG91bGQgYmUgY2FsbGVkIG9uIHRoZSBwYXJlbnQgZGVzdHJ1Y3RvciwgYmVjYXVzZSB0aGUg
bGF5ZXIgaGFzIG9uZSBjaGlsZC4KKyAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90
aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHBhcmVudC5yZWxlYXNlKCk7CisgICAg
Y2hpbGQucmVsZWFzZSgpOworCisgICAgLy8gc2FuaXR5IGNoZWNrIHRoYXQgZGVzdHJ1Y3RvcnMg
d2VyZSBhY3R1YWxseSBpbnZva2VkLCBvdGhlcndpc2UgbW9jayBkZWxlZ2F0ZSBjYW4gZ2l2ZSBh
IGZhbHNlIHBvc2l0aXZlLgorICAgIEVYUEVDVF9GQUxTRShwYXJlbnQuZ2V0KCkpOworICAgIEVY
UEVDVF9GQUxTRShjaGlsZC5nZXQoKSk7Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdF9X
T1JLX0lOX1BST0dSRVNTLCB2ZXJpZnlDaGlsZEhhc05vUGFyZW50QWZ0ZXJQYXJlbnREZXN0cm95
ZWQpCit7CisgICAgcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0
ZSk7CisgICAgY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsK
KyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKworICAgIEVYUEVDVF9UUlVFKGNoaWxkLT5w
YXJlbnQoKSk7CisKKyAgICAvLyBtYWtlIHN1cmUgcGFyZW50J3MgZGVzdHJ1Y3RvciBpcyBjYWxs
ZWQKKyAgICBwYXJlbnQucmVsZWFzZSgpOworICAgIEVYUEVDVF9GQUxTRShwYXJlbnQuZ2V0KCkp
OworCisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5wYXJlbnQoKSk7Cit9CisKK1RFU1RfRihMYXll
ckNocm9taXVtVGVzdF9XT1JLX0lOX1BST0dSRVNTLCBESVNBQkxFRF92ZXJpZnlEZXN0cnVjdG9y
RG9lc05vdExlYWspCit7CisgICAgLy8gRklYTUU6IHRvIGZpbmlzaCB0aGlzIHRlc3QsIHdlIG11
c3QgYWRkIGhvb2tzIHRvIGRldGVjdCB3aGV0aGVyCisgICAgLy8gdGhlIExheWVyQ2hyb21pdW0g
ZGVzdHJ1Y3RvciB3YXMgY2FsbGVkLgorICAgIAorICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7
CisKKyAgICAvLyBGSVhNRTogc2hvdWxkIGV4cGVjdCBoZXJlIHRoYXQgYWxsIG5vZGVzIG9mIHRo
ZSB0cmVlIGV4aXN0LgorCisgICAgLy8gUmVsZWFzZSBhbGwgcG9pbnRlcnMgZXhjZXB0IHRoZSBw
YXJlbnQuCisgICAgLy8gbm8gZGVzdHJ1Y3RvcnMgc2hvdWxkIGJlIGNhbGxlZCB5ZXQuCisgICAg
Z3JhbmRDaGlsZDEucmVsZWFzZSgpOworICAgIGdyYW5kQ2hpbGQyLnJlbGVhc2UoKTsKKyAgICBn
cmFuZENoaWxkMy5yZWxlYXNlKCk7CisgICAgY2hpbGQxLnJlbGVhc2UoKTsKKyAgICBjaGlsZDIu
cmVsZWFzZSgpOworICAgIGNoaWxkMy5yZWxlYXNlKCk7CisKKyAgICAvLyBGSVhNRTogc2hvdWxk
IGV4cGVjdCBoZXJlIHRoYXQgbm8gZGVzdHJ1Y3RvcnMgd2VyZSBjYWxsZWQuCisKKyAgICAvLyBy
ZWxlYXNpbmcgdGhlIHBhcmVudCBzaG91bGQgY2F1c2UgYWxsIGRlc3RydWN0b3JzIHRvIGJlIGlu
dm9rZWQuCisgICAgcGFyZW50LnJlbGVhc2UoKTsKKworICAgIC8vIEZJWE1FOiBzaG91bGQgZXhw
ZWN0IGhlcmUgdGhhdCBkZXN0cnVjdG9yIHdhcyBjYWxsZWQgZm9yIGFsbCBub2Rlcy4KK30KKwor
VEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIGluc2VydENoaWxkKQor
eworICAgIHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUpOwor
ICAgIGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworICAg
IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworICAgIGNo
aWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworICAgIGNoaWxk
NCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworCisgICAgRVhQRUNU
X0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCksIDApOworCisgICAgLy8gaW5zZXJ0IHRvIGVt
cHR5IGxpc3QKKyAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVp
cmVkKCkpLlRpbWVzKDEpOworICAgIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQzLCAwKTsKKyAg
ICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmcGFyZW50RGVsZWdhdGUpOworCisg
ICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCksIDEpOworICAgIEVYUEVDVF9F
UShwYXJlbnQtPmNoaWxkcmVuKClbMF0sIGNoaWxkMyk7CisKKyAgICAvLyBpbnNlcnQgdG8gYmVn
aW5uaW5nIG9mIGxpc3QKKyAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3lu
Y1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAw
KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmcGFyZW50RGVsZWdhdGUp
OworCisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCksIDIpOworICAgIEVY
UEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKClbMF0sIGNoaWxkMSk7CisgICAgRVhQRUNUX0VRKHBh
cmVudC0+Y2hpbGRyZW4oKVsxXSwgY2hpbGQzKTsKKyAgICAKKyAgICAvLyBpbnNlcnQgdG8gbWlk
ZGxlIG9mIGxpc3QKKyAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1Jl
cXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKTsK
KyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmcGFyZW50RGVsZWdhdGUpOwor
CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCksIDMpOworICAgIEVYUEVD
VF9FUShwYXJlbnQtPmNoaWxkcmVuKClbMF0sIGNoaWxkMSk7CisgICAgRVhQRUNUX0VRKHBhcmVu
dC0+Y2hpbGRyZW4oKVsxXSwgY2hpbGQyKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJl
bigpWzJdLCBjaGlsZDMpOworICAgIAorICAgIC8vIGluc2VydCB0byBlbmQgb2YgbGlzdAorICAg
IEVYUEVDVF9DQUxMKHBhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMo
MSk7CisgICAgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDQsIDMpOworICAgIE1vY2s6OlZlcmlm
eUFuZENsZWFyRXhwZWN0YXRpb25zKCZwYXJlbnREZWxlZ2F0ZSk7CisKKyAgICBFWFBFQ1RfRVEo
cGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSwgNCk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hp
bGRyZW4oKVswXSwgY2hpbGQxKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpWzFd
LCBjaGlsZDIpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKClbMl0sIGNoaWxkMyk7
CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVszXSwgY2hpbGQ0KTsKK30KKworVEVT
VF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIGluc2VydENoaWxkUGFzdEVu
ZE9mTGlzdCkKK3sKKyAgICBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERl
bGVnYXRlKTsKKyAgICBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVn
YXRlKTsKKyAgICBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRl
KTsKKworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpLCAwKTsKKworICAg
IC8vIGluc2VydCB0byBhbiBvdXQtb2YtYm91bmRzIGluZGV4CisgICAgcGFyZW50LT5pbnNlcnRD
aGlsZChjaGlsZDEsIDUzKTsKKworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKCkuc2l6
ZSgpLCAxKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpWzBdLCBjaGlsZDEpOwor
CisgICAgLy8gaW5zZXJ0IGFub3RoZXIgb25lIHRvIG91dC1vZi1ib3VuZHMsIHdoZW4gbGlzdCBp
cyBub3QgYWxyZWFkeSBlbXB0eS4KKyAgICBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMiwgMjQ1
OSk7CisKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSwgMik7CisgICAg
RVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVswXSwgY2hpbGQxKTsKKyAgICBFWFBFQ1RfRVEo
cGFyZW50LT5jaGlsZHJlbigpWzFdLCBjaGlsZDIpOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3RfV09SS19JTl9QUk9HUkVTUywgaW5zZXJ0U2FtZUNoaWxkVHdpY2UpCit7CisgICAgcGFy
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7CisgICAgY2hpbGQx
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7CisKKyAgICBFWFBFQ1Rf
RVEocGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSwgMCk7CisKKyAgICAvLyBpbnNlcnQgdG8gYW4g
b3V0LW9mLWJvdW5kcyBpbmRleAorICAgIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAwKTsK
KworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpLCAxKTsKKyAgICBFWFBF
Q1RfRVEocGFyZW50LT5jaGlsZHJlbigpWzBdLCBjaGlsZDEpOworCisgICAgLy8gaW5zZXJ0IGFu
b3RoZXIgb25lIHRvIG91dC1vZi1ib3VuZHMsIHdoZW4gbGlzdCBpcyBub3QgYWxyZWFkeSBlbXB0
eS4KKyAgICBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMSwgMCk7CisKKyAgICBFWFBFQ1RfRVEo
cGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSwgMSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hp
bGRyZW4oKVswXSwgY2hpbGQxKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktf
SU5fUFJPR1JFU1MsIERJU0FCTEVEX3JlbW92ZUV4aXN0aW5nQ2hpbGRGcm9tUGFyZW50KQorewor
ICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlQ2hpbGQg
aXMgYSBwcm90ZWN0ZWQgbWVtYmVyLgorICAgIC8vIHBhcmVudC0+cmVtb3ZlQ2hpbGQoY2hpbGQx
KTsKKworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpLCAyKTsKKyAgICBF
WFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpWzBdLCBjaGlsZDIpOworICAgIEVYUEVDVF9FUShw
YXJlbnQtPmNoaWxkcmVuKClbMV0sIGNoaWxkMyk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQx
LT5wYXJlbnQoKSk7Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdF9XT1JLX0lOX1BST0dS
RVNTLCBESVNBQkxFRF9yZW1vdmVJbnZhbGlkQ2hpbGRGcm9tUGFyZW50KQoreworICAgIGNyZWF0
ZVNpbXBsZVRlc3RUcmVlKCk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQ0LT5wYXJlbnQoKSk7
CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlQ2hpbGQgaXMgYSBwcm90ZWN0ZWQgbWVtYmVyLgorICAg
IC8vIHBhcmVudC0+cmVtb3ZlQ2hpbGQoY2hpbGQ0KTsKKworICAgIC8vIFJlbW92aW5nIGludmFs
aWQgY2hpbGQgc2hvdWxkIGJlIGEgbm8tb3AKKyAgICAvLyBzbyBub3RoaW5nIHNob3VsZCBjaGFu
Z2UuCisgICAgdmVyaWZ5VGVzdFRyZWVJbml0aWFsU3RhdGUoKTsKKworICAgIEVYUEVDVF9GQUxT
RShjaGlsZDQtPnBhcmVudCgpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktf
SU5fUFJPR1JFU1MsIHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZCkKK3sKKyAgICBjcmVhdGVTaW1w
bGVUZXN0VHJlZSgpOworICAgIGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50
RGVsZWdhdGUpOworCisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkNC0+cGFyZW50KCkpOworCisgICAg
cGFyZW50LT5yZXBsYWNlQ2hpbGQoY2hpbGQyLmdldCgpLCBjaGlsZDQpOworICAgIAorICAgIEVY
UEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpLCAzKTsKKyAgICBFWFBFQ1RfRVEocGFy
ZW50LT5jaGlsZHJlbigpWzBdLCBjaGlsZDEpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxk
cmVuKClbMV0sIGNoaWxkNCk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVsyXSwg
Y2hpbGQzKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQ0LT5wYXJlbnQoKSwgcGFyZW50LmdldCgpKTsK
KworICAgIEVYUEVDVF9GQUxTRShjaGlsZDItPnBhcmVudCgpKTsKK30KKworVEVTVF9GKExheWVy
Q2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZFRo
YXRIYXNPdGhlclBhcmVudCkKK3sKKyAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworCisgICAg
Ly8gY3JlYXRlIGFub3RoZXIgc2ltcGxlIHRyZWUgd2l0aCB0ZXN0TGF5ZXIgYW5kIGNoaWxkNC4K
KyAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsK
KyAgICBjaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsKKyAg
ICB0ZXN0TGF5ZXItPmFkZENoaWxkKGNoaWxkNCk7CisgICAgRVhQRUNUX0VRKHRlc3RMYXllci0+
Y2hpbGRyZW4oKS5zaXplKCksIDEpOworICAgIEVYUEVDVF9FUSh0ZXN0TGF5ZXItPmNoaWxkcmVu
KClbMF0sIGNoaWxkNCk7CisgICAgRVhQRUNUX0VRKGNoaWxkNC0+cGFyZW50KCksIHRlc3RMYXll
ci5nZXQoKSk7CisKKyAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZChjaGlsZDIuZ2V0KCksIGNoaWxk
NCk7CisKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSwgMyk7CisgICAg
RVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVswXSwgY2hpbGQxKTsKKyAgICBFWFBFQ1RfRVEo
cGFyZW50LT5jaGlsZHJlbigpWzFdLCBjaGlsZDQpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNo
aWxkcmVuKClbMl0sIGNoaWxkMyk7CisgICAgRVhQRUNUX0VRKGNoaWxkNC0+cGFyZW50KCksIHBh
cmVudC5nZXQoKSk7CisKKyAgICAvLyB0ZXN0TGF5ZXIgc2hvdWxkIG5vIGxvbmdlciBoYXZlIGNo
aWxkNAorICAgIC8vIGFuZCBjaGlsZDIgc2hvdWxkIG5vIGxvbmdlciBoYXZlIGEgcGFyZW50Lgor
ICAgIEVYUEVDVF9FUSh0ZXN0TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpLCAwKTsKKyAgICBFWFBF
Q1RfRkFMU0UoY2hpbGQyLT5wYXJlbnQoKSk7Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVz
dF9XT1JLX0lOX1BST0dSRVNTLCByZXBsYWNlQ2hpbGRXaXRoU2FtZUNoaWxkKQoreworICAgIGNy
ZWF0ZVNpbXBsZVRlc3RUcmVlKCk7CisKKyAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZChjaGlsZDIu
Z2V0KCksIGNoaWxkMik7CisKKyAgICB2ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpOworCisg
ICAgLy8gRklYTUU6IG5lZWQgdG8gbWFrZSBzdXJlIG5vIG5vdGlmeVN5bmNSZXF1aXJlZCB3YXMg
Y2FsbGVkLgorfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3RfV09SS19JTl9QUk9HUkVTUywg
cmVtb3ZlQWxsQ2hpbGRyZW4pCit7CisgICAgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKKworICAg
IHBhcmVudC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNo
aWxkcmVuKCkuc2l6ZSgpLCAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQxLT5wYXJlbnQoKSk7
CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMi0+cGFyZW50KCkpOworICAgIEVYUEVDVF9GQUxTRShj
aGlsZDMtPnBhcmVudCgpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5f
UFJPR1JFU1MsIHNldENoaWxkcmVuKQoreworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiBuZXdDaGlsZHJlbjsKKyAgICBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNp
bGVudERlbGVnYXRlKTsKKyAgICBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVu
dERlbGVnYXRlKTsKKyAgICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQxKTsKKyAgICBuZXdDaGls
ZHJlbi5hcHBlbmQoY2hpbGQyKTsKKworICAgIHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgmc2lsZW50RGVsZWdhdGUpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQxKTsKKworICAg
IHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworCisg
ICAgLy8gSW5pdGlhbCBjb25pZGl0aW9uczogY2hpbGQxIGhhcyBhIHBhcmVudCwgY2hpbGQyIGhh
cyBubyBwYXJlbnQuCisgICAgRVhQRUNUX0VRKHRlc3RMYXllci0+Y2hpbGRyZW4oKS5zaXplKCks
IDApOworICAgIEVYUEVDVF9FUShjaGlsZDEtPnBhcmVudCgpLCBwYXJlbnQuZ2V0KCkpOworICAg
IEVYUEVDVF9GQUxTRShjaGlsZDItPnBhcmVudCgpKTsKKyAgICAKKyAgICB0ZXN0TGF5ZXItPnNl
dENoaWxkcmVuKG5ld0NoaWxkcmVuKTsKKworICAgIC8vIEV4cGVjdCB0aGF0IGFsbCBjaGlsZHJl
biBoYXZlIHRlc3RMYXllciBhcyB0aGUgcGFyZW50LgorICAgIEVYUEVDVF9FUSh0ZXN0TGF5ZXIt
PmNoaWxkcmVuKCkuc2l6ZSgpLCAyKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQxLT5wYXJlbnQoKSwg
dGVzdExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQyLT5wYXJlbnQoKSwgdGVzdExh
eWVyLmdldCgpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JF
U1MsIGdldFJvb3RMYXllckFmdGVyVHJlZU1hbmlwdWxhdGlvbnMpCit7CisgICAgY3JlYXRlU2lt
cGxlVGVzdFRyZWUoKTsKKyAgICBjaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVu
dERlbGVnYXRlKTsKKworICAgIEVYUEVDVF9FUShwYXJlbnQtPnJvb3RMYXllcigpLCBwYXJlbnQu
Z2V0KCkpOworICAgIEVYUEVDVF9FUShjaGlsZDEtPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkp
OworICAgIEVYUEVDVF9FUShjaGlsZDItPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAg
IEVYUEVDVF9FUShjaGlsZDMtPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVD
VF9FUShjaGlsZDQtPnJvb3RMYXllcigpLCBjaGlsZDQuZ2V0KCkpOworICAgIEVYUEVDVF9FUShn
cmFuZENoaWxkMS0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGdy
YW5kQ2hpbGQyLT5yb290TGF5ZXIoKSwgcGFyZW50LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoZ3Jh
bmRDaGlsZDMtPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworCisgICAgY2hpbGQxLT5yZW1v
dmVGcm9tUGFyZW50KCk7CisKKyAgICAvLyBjaGlsZDEgYW5kIGl0cyBjaGlsZHJlbiwgZ3JhbmRD
aGlsZDEgYW5kIGdyYW5kQ2hpbGQyIGFyZSBub3cgb24gYSBzZXBhcmF0ZSBzdWJ0cmVlLgorICAg
IEVYUEVDVF9FUShwYXJlbnQtPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVD
VF9FUShjaGlsZDEtPnJvb3RMYXllcigpLCBjaGlsZDEuZ2V0KCkpOworICAgIEVYUEVDVF9FUShj
aGlsZDItPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVDVF9FUShjaGlsZDMt
PnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVDVF9FUShjaGlsZDQtPnJvb3RM
YXllcigpLCBjaGlsZDQuZ2V0KCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkMS0+cm9vdExh
eWVyKCksIGNoaWxkMS5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGQyLT5yb290TGF5
ZXIoKSwgY2hpbGQxLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZDMtPnJvb3RMYXll
cigpLCBwYXJlbnQuZ2V0KCkpOworCisgICAgZ3JhbmRDaGlsZDMtPmFkZENoaWxkKGNoaWxkNCk7
CisgICAgCisgICAgRVhQRUNUX0VRKHBhcmVudC0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7
CisgICAgRVhQRUNUX0VRKGNoaWxkMS0+cm9vdExheWVyKCksIGNoaWxkMS5nZXQoKSk7CisgICAg
RVhQRUNUX0VRKGNoaWxkMi0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkMy0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGNo
aWxkNC0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hp
bGQxLT5yb290TGF5ZXIoKSwgY2hpbGQxLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZDItPnJvb3RMYXllcigpLCBjaGlsZDEuZ2V0KCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxk
My0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisKKyAgICBjaGlsZDItPnJlcGxhY2VDaGls
ZChncmFuZENoaWxkMy5nZXQoKSwgY2hpbGQxKTsKKworICAgIC8vIGdyYW5kQ2hpbGQzIGdldHMg
b3JwaGFuZWQgYW5kIHRoZSBjaGlsZDEgc3VidHJlZSBnZXRzIHBsYW50ZWQgYmFjayBpbnRvIHRo
ZSB0cmVlIHVuZGVyIGNoaWxkMi4KKyAgICBFWFBFQ1RfRVEocGFyZW50LT5yb290TGF5ZXIoKSwg
cGFyZW50LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQxLT5yb290TGF5ZXIoKSwgcGFyZW50
LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQyLT5yb290TGF5ZXIoKSwgcGFyZW50LmdldCgp
KTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQzLT5yb290TGF5ZXIoKSwgcGFyZW50LmdldCgpKTsKKyAg
ICBFWFBFQ1RfRVEoY2hpbGQ0LT5yb290TGF5ZXIoKSwgZ3JhbmRDaGlsZDMuZ2V0KCkpOworICAg
IEVYUEVDVF9FUShncmFuZENoaWxkMS0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAg
RVhQRUNUX0VRKGdyYW5kQ2hpbGQyLT5yb290TGF5ZXIoKSwgcGFyZW50LmdldCgpKTsKKyAgICBF
WFBFQ1RfRVEoZ3JhbmRDaGlsZDMtPnJvb3RMYXllcigpLCBncmFuZENoaWxkMy5nZXQoKSk7Cit9
CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdF9XT1JLX0lOX1BST0dSRVNTLCBESVNBQkxFRF9n
ZXREZXNjZW5kYW50RHJhd3NDb250ZW50QWZ0ZXJUcmVlTWFuaXB1bGF0aW9ucykKK3sKKyAgICAv
LworICAgIC8vIEZJWE1FOiB0aGUgYmFzZSBjbGFzcyBMYXllckNocm9taXVtIGFsd2F5cyByZXR1
cm5zIGZhbHNlIGFuZCBkb2Vzbid0IHVzZSB0aGUgZGVsZWdhdGUgZHJhd3NDb250ZW50KCkuCisg
ICAgLy8gdGhpcyB0ZXN0IHNob3VsZCBiZSBkaXNhYmxlZCB1bnRpbCB3ZSByZXNvbHZlIHdoZXRo
ZXIgdGhvc2Ugc2VtYW50aWNzIGFyZSBhcHByb3ByaWF0ZSBvciBub3QuCisgICAgLy8gaWYgaXQg
c2hvdWxkIHJldHVybiBmYWxzZSB3aXRob3V0IGNhbGxpbmcgZGVsZWdhdGUsIHRoZW4gd2UgaGF2
ZSB0byBzdWJjbGFzcyB0aGUgTGF5ZXJDaHJvbWl1bQorICAgIC8vIGFuZCBvdmVycmlkZSB0aGF0
IGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIHRlc3QgZGVzY2VuZGFudERyYXdzQ29udGVudCgpLgor
ICAgIC8vCisKKyAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworICAgIGNoaWxkNCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKworICAgIC8vIFNldCBjaGlsZDQgc28g
dGhhdCBpdCBkcmF3cyBjb250ZW50LgorICAgIC8vIEFsbCBvdGhlciBsYXllcnMgZG8gbm90IGRy
YXcgY29udGVudCAodGhlIG1vY2sgcmV0dXJucyBmYWxzZSBieSBkZWZhdWx0KS4KKyAgICBFWFBF
Q1RfQ0FMTChtb2NrRGVsZWdhdGUsIGRyYXdzQ29udGVudCgpKS5UaW1lcyhBbnlOdW1iZXIoKSku
V2lsbFJlcGVhdGVkbHkoUmV0dXJuKHRydWUpKTsKKworICAgIC8vIENhcmVmdWwsIGNoaWxkNCBp
cyBub3QgYSBkZXNjZW5kYW50IG9mIGl0c2VsZi4gU28gaXQgaXMgY29ycmVjdCBmb3IgdGhpcyB0
byByZXR1cm4gZmFsc2UuCisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkNC0+ZGVzY2VuZGFudERyYXdz
Q29udGVudCgpKTsKKworICAgIEVYUEVDVF9GQUxTRShwYXJlbnQtPmRlc2NlbmRhbnREcmF3c0Nv
bnRlbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMS0+ZGVzY2VuZGFudERyYXdzQ29udGVu
dCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQyLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkp
OworICAgIEVYUEVDVF9GQUxTRShjaGlsZDMtPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQxLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpOwor
ICAgIEVYUEVDVF9GQUxTRShncmFuZENoaWxkMi0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZDMtPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7
CisKKyAgICBncmFuZENoaWxkMy0+YWRkQ2hpbGQoY2hpbGQ0KTsKKworICAgIC8vIHBhcmVudCAt
LT4gY2hpbGQyIC0tPiBncmFuZENoaWxkMyAtLT4gY2hpbGQ0CisgICAgLy8gc28gcGFyZW50LCBj
aGlsZDIsIGFuZCBncmFuZENoaWxkMyBzaG91bGQgcmV0dXJuIHRydWUKKyAgICBFWFBFQ1RfVFJV
RShwYXJlbnQtPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNo
aWxkMS0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZDIt
PmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMy0+ZGVz
Y2VuZGFudERyYXdzQ29udGVudCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZDEtPmRl
c2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQyLT5k
ZXNjZW5kYW50RHJhd3NDb250ZW50KCkpOworICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGQzLT5k
ZXNjZW5kYW50RHJhd3NDb250ZW50KCkpOworCisgICAgY2hpbGQyLT5yZW1vdmVGcm9tUGFyZW50
KCk7CisKKyAgICAvLyBjaGlsZDIgLS0+IGdyYW5kQ2hpbGQzIC0tPiBjaGlsZDQKKyAgICAvLyBw
YXJlbnQgc2hvdWxkIG5vdyByZXR1cm4gZmFsc2UsIGNoaWxkMiBhbmQgZ3JhbmRjaGlsZDMgc2hv
dWxkIHJldHVybiB0cnVlLgorICAgIEVYUEVDVF9GQUxTRShwYXJlbnQtPmRlc2NlbmRhbnREcmF3
c0NvbnRlbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMS0+ZGVzY2VuZGFudERyYXdzQ29u
dGVudCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZDItPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMy0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZDEtPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7
CisgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQyLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkp
OworICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGQzLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkp
OworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3RfV09SS19JTl9QUk9HUkVTUywgY2hlY2tT
ZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCit7CisgICAgLy8gU2VtYW50aWNz
IGZvciBzZXROZWVkc0Rpc3BsYXkgd2hpY2ggYXJlIHRlc3RlZCBoZXJlOgorICAgIC8vICAgY3Jl
YXRlcyBhIHVuaW9uZWQgZGlydHlSZWN0IGFwcHJvcHJpYXRlbHkuCisgICAgLy8gICBpbmRpcmVj
dGx5IGNhbGxzIG5vdGlmeVN5bmNSZXF1aXJlZCwgZXhhY3RseSBvbmNlIGZvciBlYWNoIGNhbGwg
dG8gc2V0TmVlZHNEaXNwbGF5LgorCisgICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCZtb2NrRGVsZWdhdGUpOworICAgIEludFNpemUgdGVzdEJvdW5kcyA9IEludFNpemUoNTAx
LCA1MDgpOworICAgIAorICAgIEZsb2F0UmVjdCBkaXJ0eTEgPSBGbG9hdFJlY3QoMTAuMGYsIDE1
LjBmLCAxLjBmLCAyLjBmKTsKKyAgICBGbG9hdFJlY3QgZGlydHkyID0gRmxvYXRSZWN0KDIwLjBm
LCAyNS4wZiwgMy4wZiwgNC4wZik7CisgICAgRmxvYXRSZWN0IGVtcHR5RGlydHlSZWN0ID0gRmxv
YXRSZWN0KDQwLjBmLCA0NS4wZiwgMCwgMCk7CisgICAgRmxvYXRSZWN0IG91dE9mQm91bmRzRGly
dHlSZWN0ID0gRmxvYXRSZWN0KDQwMC4wZiwgNDA1LjBmLCA1MDAuMGYsIDUwMi4wZik7CisKKyAg
ICAvLyBCZWZvcmUgYW55dGhpbmcsIHRlc3RMYXllciBzaG91bGQgaGF2ZSBhbiBlbXB0eSBkaXJ0
eSByZWN0LgorICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgp
KTsKKworICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkp
LlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpOworICAgIHRl
c3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsgLy8gdGVzdGVkIHByb3Blcmx5IGJlbG93Lgor
ICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworCisg
ICAgLy8ganVzdCBmb3Igc2FuaXR5IGNoZWNraW5nLgorICAgIEVYUEVDVF9UUlVFKHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIFRoZSByZWFsIHRlc3QgYmVnaW5z
IGhlcmUuCisgICAgRVhQRUNUX0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQo
KSkuVGltZXMoMSk7CisgICAgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkxKTsKKyAg
ICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVnYXRlKTsKKworICAg
IHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbCh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLCBkaXJ0
eTEpOworICAgIC8qCisgICAgRVhQRUNUX0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlTeW5jUmVx
dWlyZWQoKSkuVGltZXMoMSk7CisgICAgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHky
KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVnYXRlKTsK
KworICAgIC8vIGF0IHRoaXMgcG9pbnQgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSBzaG91bGQgYmUg
dGhlIHVuaW9uIG9mIGRpcnR5MSBhbmQgZGlydHkyLgorICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1v
c3RFcXVhbCh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLCBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAy
My4wZiwgMjkuMGYpKTsKKworICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3lu
Y1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGVt
cHR5RGlydHlSZWN0KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9j
a0RlbGVnYXRlKTsKKworICAgIC8vIHRlc3RMYXllci0+ZGlydHlSZWN0KCkgc2hvdWxkIG5vdCBo
YXZlIGNoYW5nZWQgYmVjYXVzZSBvZiB0aGUgZW1wdHkgZGlydHkgcmVjdC4KKyAgICB2ZXJpZnlG
bG9hdFJlY3RzQWxtb3N0RXF1YWwodGVzdExheWVyLT5kaXJ0eVJlY3QoKSwgRmxvYXRSZWN0KDEw
LjBmLCAxNS4wZiwgMjMuMGYsIDI5LjBmKSk7CisKKyAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdh
dGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICB0ZXN0TGF5ZXItPnNldE5l
ZWRzRGlzcGxheShvdXRPZkJvdW5kc0RpcnR5UmVjdCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xl
YXJFeHBlY3RhdGlvbnMoJm1vY2tEZWxlZ2F0ZSk7CisKKyAgICAvLyBMYXllckNocm9taXVtIHNo
b3VsZCBhY2NlcHQgZGlydHkgcmVjdHMgdGhhdCBnbyBiZXlvbmQgaXRzIGJvdW5kcworICAgIHZl
cmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbCh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLCBGbG9hdFJl
Y3QoMTAuMGYsIDE1LjBmLCA5MDAuMGYsIDkwNy4wZikpOworICAgIAorICAgIEVYUEVDVF9DQUxM
KG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHRlc3RM
YXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMoJm1vY2tEZWxlZ2F0ZSk7CisKKyAgICAvLyBnZW5lcmljIHNldE5lZWRzRGlzcGxheSgp
IHNob3VsZCBjYXVzZSB0aGUgZW50aXJlIGJvdW5kcyB0byBiZSBkaXJ0eSwKKyAgICAvLyBvdmVy
cmlkaW5nIGFueSBleGlzdGluZyBkaXJ0eSByZWN0LgorICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1v
c3RFcXVhbCh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLCBGbG9hdFJlY3QoMCwgMCwgdGVzdEJvdW5k
cy53aWR0aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSk7CisgCisgICAgLy8gcmVzZXROZWVkc0Rp
c3BsYXkgc2hvdWxkIGVtcHR5IHRoZSBkaXJ0eSByZWN0LCBhbmQgTk9UIGNhbGwgbm90aWZ5U3lu
Y1JlcXVpcmVkLgorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVp
cmVkKCkpLlRpbWVzKDApOworICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAg
ICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVnYXRlKTsKKyAgICAK
KyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7Ki8KK30K
KworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIGNoZWNrUHJvcGVy
dHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCit7CisKKyAgICB0ZXN0TGF5ZXIgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAgcGFyZW50ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7IC8vIGp1c3QgYSBkdW1teSBsYXllciBmb3Ig
dGhpcyB0ZXN0IGNhc2UuCisgICAgCisgICAgLy8KKyAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhh
dCBzaG91bGQgbm90IGNhbGwgbmVlZHNEaXNwbGF5IGFuZCBuZWVkc0NvbW1pdCB3aGVuIGNoYW5n
ZWQ6CisgICAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byB2ZXJpZnkgbm90aWZ5U3luYyB3
YXMgbm90IGNhbGxlZCBhbmQgdG8gdmVyaWZ5IHRoYXQgZGlydHlSZWN0IGlzIHN0aWxsIGVtcHR5
LgorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRp
bWVzKDApOworICAgIHRlc3RMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICB0ZXN0
TGF5ZXItPnNldE5hbWUoIlRlc3QgTGF5ZXIiKTsKKyAgICB0ZXN0TGF5ZXItPnNldE1hc2tMYXll
cihwYXJlbnQuZ2V0KCkpOworICAgIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5T25Cb3VuZHND
aGFuZ2UodHJ1ZSk7CisgICAgdGVzdExheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3Qo
MCwgMCwgNDAsIDUwKSk7CisgICAgdGVzdExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCgxMCwgMTApKTsKKyAgICB0ZXN0TGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IodHJ1ZSk7Cisg
ICAgLy8gRklYTUU6IHVuY29tbWVudCB0aGlzIGFmdGVyIHVwZGF0aW5nIGNvZGUgYmFzZQorICAg
IC8vIHRlc3RMYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKTsKKyAgICAvLyB0
ZXN0TGF5ZXItPnNldERlbGVnYXRlKCk7CisgICAgdGVzdExheWVyLT5zZXRSZXBsaWNhTGF5ZXIo
cGFyZW50LmdldCgpKTsKKyAgICB0ZXN0TGF5ZXItPnNldERyYXdPcGFjaXR5KDAuNWYpOworICAg
IHRlc3RMYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdCgzLCAzLCA4LCA4KSk7CisgICAgdGVz
dExheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKDApOworICAgIHRlc3RMYXllci0+c2V0RHJh
d1RyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKyAgICB0ZXN0TGF5ZXItPnNldFNj
cmVlblNwYWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworICAgIHRlc3RMYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KDQsIDUsIDYsIDcpKTsKKyAgICBNb2Nr
OjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVnYXRlKTsKKyAgICBFWFBFQ1Rf
VFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgCisgICAgCisgICAg
Ly8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNDb21taXQgKGJ1dCBu
b3Qgc2V0TmVlZHNEaXNwbGF5KQorICAgIC8vIHRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGluZGly
ZWN0bHkgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQsIGJ1dCB0aGUgZGlydHkgcmVjdCBzaG91bGQg
bm90IGNoYW5nZS4KKworICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1Jl
cXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgxLjIzZiwgNC41NmYpKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9u
cygmbW9ja0RlbGVnYXRlKTsKKyAgICAKKyAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdhdGUsIG5v
dGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICB0ZXN0TGF5ZXItPnNldEFuY2hvclBv
aW50WigwLjdmKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0Rl
bGVnYXRlKTsKKyAgICAKKyAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNS
ZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICB0ZXN0TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihD
b2xvcigwLjRmLCAwLjRmLCAwLjRmKSk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMoJm1vY2tEZWxlZ2F0ZSk7CisgICAgCisgICAgRVhQRUNUX0NBTEwobW9ja0RlbGVnYXRl
LCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgdGVzdExheWVyLT5zZXRDbGVh
cnNDb250ZXh0KHRydWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZt
b2NrRGVsZWdhdGUpOworICAgIAorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5
U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0SGlkZGVuKHRydWUp
OworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOwor
ICAgIAorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkp
LlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICBNb2NrOjpW
ZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVnYXRlKTsKKyAgICAKKyAgICBFWFBF
Q1RfQ0FMTChtb2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAg
ICB0ZXN0TGF5ZXItPnNldE9wYXF1ZShmYWxzZSk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJF
eHBlY3RhdGlvbnMoJm1vY2tEZWxlZ2F0ZSk7CisgICAgCisgICAgRVhQRUNUX0NBTEwobW9ja0Rl
bGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgdGVzdExheWVyLT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KDQuMGYsIDkuMGYpKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRD
bGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVnYXRlKTsKKyAgICAKKyAgICBFWFBFQ1RfQ0FMTCht
b2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICB0ZXN0TGF5
ZXItPnNldFpQb3NpdGlvbigwLjVmKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0
aW9ucygmbW9ja0RlbGVnYXRlKTsKKyAgICAKKyAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdhdGUs
IG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICB0ZXN0TGF5ZXItPnNldFN1Ymxh
eWVyVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworICAgIE1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworICAgIAorICAgIEVYUEVDVF9DQUxM
KG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHRlc3RM
YXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworICAgIE1vY2s6OlZl
cmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworICAgIAorICAgIEVYUEVD
VF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAg
IHRlc3RMYXllci0+c2V0RG91YmxlU2lkZWQoZmFsc2UpOworICAgIE1vY2s6OlZlcmlmeUFuZENs
ZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworICAgIAorICAgIEVYUEVDVF9DQUxMKG1v
Y2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHRlc3RMYXll
ci0+c2V0R2VvbWV0cnlGbGlwcGVkKHRydWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhw
ZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworCisgICAgLy8gdGhlIGFib3ZlIHRlc3RzIHNob3Vs
ZCBub3QgaGF2ZSBjYXVzZWQgYSBub24tZW1wdHkgZGlydHkgcmVjdC4KKyAgICBFWFBFQ1RfVFJV
RSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUZXN0IHByb3Bl
cnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVkc0Rpc3BsYXkKKyAgICAvLyBUaGVzZSBwcm9w
ZXJ0aWVzIHdpbGwgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQgYW5kIGNoYW5nZSB0aGUgZGlydHkg
cmVjdC4KKyAgICAKKyAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1
aXJlZCgpKS5UaW1lcygxKTsKKyAgICB0ZXN0TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUsIDEw
KSk7IC8vIHRoaXMgc2hvdWxkIGJlIG5vbi1lbXB0eSBzaXplIHRvIHRyaWdnZXIgdGhlIGludGVu
ZGVkIGNhc2UuCisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tEZWxl
Z2F0ZSk7CisgICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKHRlc3RMYXllci0+ZGlydHlS
ZWN0KCksIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1LjBmLCAxMC4wZikpOworCisgICAgdGVzdExh
eWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGly
dHlSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIEZJWE1FOiB1bmNvbW1lbnQgdGhpcyB3aGVu
IHdlIGNhbiByZWFzb25hYmx5IHN0dWIgdGhlIENDTGF5ZXJUcmVlSG9zdC4KKyAgICAvLworICAg
IC8vIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVz
KDEpOworICAgIC8vIHRlc3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChkdW1teVBvaW50ZXIpOwor
ICAgIC8vIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOwor
ICAgIC8vIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbCh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgp
LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNS4wZiwgMTAuMGYpKTsKKyAgICAvLworICAgIC8vIHRl
c3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAvLyBFWFBFQ1RfVFJVRSh0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdh
dGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICB0ZXN0TGF5ZXItPnNldEZy
YW1lKEZsb2F0UmVjdCgxLjBmLCAyLjBmLCAzLjBmLCA0LjBmKSk7CisgICAgTW9jazo6VmVyaWZ5
QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tEZWxlZ2F0ZSk7CisgICAgdmVyaWZ5RmxvYXRSZWN0
c0FsbW9zdEVxdWFsKHRlc3RMYXllci0+ZGlydHlSZWN0KCksIEZsb2F0UmVjdCgwLjBmLCAwLjBm
LCA1LjBmLCAxMC4wZikpOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108272</attachid>
            <date>2011-09-21 20:58:31 -0700</date>
            <delta_ts>2011-09-27 10:49:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68572-20110921205830.patch</filename>
            <type>text/plain</type>
            <size>31993</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUzODEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MjU1OGYwZDY1MGFmZmUwMTIwZWNlODJiYjNhOTBhZjllYTllMjkzMS4uNzUzN2U5YjNkYzMwZjA4
MjQyYTNkMTJmYzIwZThiZTVmMWU5YWEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxMS0wOS0yMSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBVbml0IHRlc3RzIGZvciBMYXllckNocm9taXVtLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1NzIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgor
ICAgICAgICAqIHRlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcDogQWRkZWQuCisKIDIwMTEtMDkt
MTcgIGNoYW5kcmEgc2hla2FyIHZhbGxhbGEgIDxjaGFuZHJhLnZhbGxhbGFAbW90b3JvbGEuY29t
PgogCiAgICAgICAgIFtjaHJvbWl1bV1UaGUgZm9jdXMgb2YgYW4gaW5wdXQgZmllbGQgaW5zaWRl
IGFuIElmcmFtZSBkb2Vzbid0IGdldCBjbGVhcmVkIGV2ZW4gdGhvdWdoIGNsZWFyRm9jdXNlZE5v
ZGUgaXMgY2FsbGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNzM3NTJhMjk0
YzQwMGFiYzg5N2IzYTgzNTIwYzY0YTIxYmYxYTE0MS4uZDA4NjNmOTFjM2M5NDE2NDFhOWVhNWM5
Y2NjMzdiNWEyNjE2YzZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02Myw2
ICs2Myw3IEBACiAgICAgICAgICAgICAndGVzdHMvSW5uZXJHZXN0dXJlUmVjb2duaXplclRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTW9ja0dyYXBoaWNzQ29udGV4dDNEVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAg
ICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdmYTZj
MzAxZGE1ZGIyZDgyNDk2MjE0ODhlYWJiNDFmYjM1ODIwYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0wLDAg
KzEsNzM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgOjp0ZXN0
aW5nOjpNb2NrOwordXNpbmcgOjp0ZXN0aW5nOjpfOwordXNpbmcgOjp0ZXN0aW5nOjpBbnlOdW1i
ZXI7Cit1c2luZyA6OnRlc3Rpbmc6OlJldHVybjsKKworLy8gRklYTUU6IGNsZWFudXBSZXNvdXJj
ZXNSZWN1cnNpdmUgbmVlZHMgdG8gYmUgdGVzdGVkIGZvciBkZXJpdmVkIGNsYXNzZXMsIGJ1dAor
Ly8gICAgICAgIHRoZXJlIGlzIGFjdHVhbGx5IG5vdGhpbmcgdG8gdGVzdCBmb3IgdGhlIExheWVy
Q2hyb21pdW0gYmFzZSBjbGFzcyBpdHNlbGYuCisvLyAgICAgICAgZG9uJ3QgZm9yZ2V0IHRvIGRv
IHRoYXQgd2hlbiBhZGRpbmcgdW5pdCB0ZXN0cyBmb3Igc3BlY2lmaWMgbGF5ZXIgdHlwZXMuCisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJE
ZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgTU9DS19DT05TVF9NRVRIT0QwKGRyYXdzQ29udGVudCwg
Ym9vbCgpKTsKKyAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJvb2woKSk7Cisg
ICAgTU9DS19NRVRIT0QyKHBhaW50Q29udGVudHMsIHZvaWQoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYpKTsKKyAgICBNT0NLX01FVEhPRDAobm90aWZ5U3luY1JlcXVpcmVkLCB2b2lk
KCkpOworfTsKKworY2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9y
IDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIExheWVyQ2hyb21pdW1XaXRo
SW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcihDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQorICAgICAg
ICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0
dWFsIH5MYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoKQorICAgIHsKKyAg
ICAgICAgbV9udW1JbnN0YW5jZXNEZXN0cm95ZWQrKzsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpIHsgcmV0dXJuIG1fbnVtSW5zdGFuY2VzRGVzdHJv
eWVkOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBtX251bUluc3RhbmNlc0Rlc3Ryb3ll
ZDsKK307CisKK2ludCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6Om1f
bnVtSW5zdGFuY2VzRGVzdHJveWVkID0gMDsKKworY2xhc3MgTGF5ZXJDaHJvbWl1bVRlc3QgOiBw
dWJsaWMgdGVzdGluZzo6VGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBTZXRVcCgpCisgICAg
eworICAgICAgICAvLyBzaWxlbnREZWxlZ2F0ZSBpcyBpbml0aWFsaXplZCB0byBiZSBqdXN0IGEg
c3R1YiBhbmQgd2lsbAorICAgICAgICAvLyBub3QgcHJpbnQgYW55IHdhcm5pbmdzLiBJdCBpcyB1
c2VkIHdoZW4gd2UgYXJlIG5vdCB3b3JyaWVkCisgICAgICAgIC8vIGFib3V0IHRlc3RpbmcgaG93
IHRoZSBkZWxlZ2F0ZSBpcyBjYWxsZWQuCisKKyAgICAgICAgRVhQRUNUX0NBTEwoc2lsZW50RGVs
ZWdhdGUsIGRyYXdzQ29udGVudCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIEVYUEVD
VF9DQUxMKHNpbGVudERlbGVnYXRlLCBwcmVzZXJ2ZXMzRCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7
CisgICAgICAgIEVYUEVDVF9DQUxMKHNpbGVudERlbGVnYXRlLCBwYWludENvbnRlbnRzKF8sIF8p
KS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKHNpbGVudERlbGVnYXRl
LCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgIH0KKworICAg
IHZvaWQgZXhwbGljaXRseURlc3Ryb3lMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGxh
eWVyKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhlIHVzZXIgb2YgdGhpcyBmdW5jdGlvbiBt
dXN0IHJlbGVhc2UoKSB0aGVpciBSZWZQdHIgd2hlbgorICAgICAgICAvLyBwYXNzaW5nIGl0IHRv
IHRoaXMgZnVuY3Rpb24uCisKKyAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmFpbHMsIHRo
ZW4gc29tZSBvdGhlciBzbWFydCBwb2ludGVyIGlzCisgICAgICAgIC8vIGhvbGRpbmcgb24gdG8g
dXMsIGFuZCB0aGF0IGlzIHByb2JhYmx5IHZlcnkgaW1wb3J0YW50IHRvIGtub3cuCisgICAgICAg
IEFTU0VSVF9UUlVFKGxheWVyLmdldCgpLT5oYXNPbmVSZWYoKSk7CisKKyAgICAgICAgLy8ga25v
d2luZyB0aGVyZSBpcyBvbmx5IG9uZSByZWYgbGVmdCwgd2hlbiB0aGlzIGxheWVyIGV4aXRzCisg
ICAgICAgIC8vIHNjb3BlLCB0aGUgTGF5ZXJDaHJvbWl1bSBvYmplY3Qgd2lsbCBiZSBkZXN0cm95
ZWQuCisgICAgfQorICAgIAorICAgIHZvaWQgdmVyaWZ5VGVzdFRyZWVJbml0aWFsU3RhdGUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCks
IChzaXplX3QpMyk7CisgICAgICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKClbMF0sIGNo
aWxkMSk7CisgICAgICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKClbMV0sIGNoaWxkMik7
CisgICAgICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKClbMl0sIGNoaWxkMyk7CisgICAg
ICAgIEVYUEVDVF9FUShjaGlsZDEtPnBhcmVudCgpLCBwYXJlbnQuZ2V0KCkpOworICAgICAgICBF
WFBFQ1RfRVEoY2hpbGQyLT5wYXJlbnQoKSwgcGFyZW50LmdldCgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKGNoaWxkMy0+cGFyZW50KCksIHBhcmVudC5nZXQoKSk7CisKKyAgICAgICAgRVhQRUNUX0VR
KGNoaWxkMS0+Y2hpbGRyZW4oKS5zaXplKCksIChzaXplX3QpMik7CisgICAgICAgIEVYUEVDVF9F
UShjaGlsZDEtPmNoaWxkcmVuKClbMF0sIGdyYW5kQ2hpbGQxKTsKKyAgICAgICAgRVhQRUNUX0VR
KGNoaWxkMS0+Y2hpbGRyZW4oKVsxXSwgZ3JhbmRDaGlsZDIpOworICAgICAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZDEtPnBhcmVudCgpLCBjaGlsZDEuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZDItPnBhcmVudCgpLCBjaGlsZDEuZ2V0KCkpOworCisgICAgICAgIEVYUEVDVF9F
UShjaGlsZDItPmNoaWxkcmVuKCkuc2l6ZSgpLCAoc2l6ZV90KTEpOworICAgICAgICBFWFBFQ1Rf
RVEoY2hpbGQyLT5jaGlsZHJlbigpWzBdLCBncmFuZENoaWxkMyk7CisgICAgICAgIEVYUEVDVF9F
UShncmFuZENoaWxkMy0+cGFyZW50KCksIGNoaWxkMi5nZXQoKSk7CisKKyAgICAgICAgRVhQRUNU
X0VRKGNoaWxkMy0+Y2hpbGRyZW4oKS5zaXplKCksIChzaXplX3QpMCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKQorICAgIHsKKyAgICAgICAgcGFyZW50ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7CisgICAgICAgIGNoaWxkMSA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworICAgICAgICBjaGlsZDIg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsKKyAgICAgICAgY2hpbGQz
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7CisgICAgICAgIGdyYW5k
Q2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7CisgICAgICAg
IGdyYW5kQ2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7Cisg
ICAgICAgIGdyYW5kQ2hpbGQzID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0
ZSk7CisKKyAgICAgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZDEpOworICAgICAgICBwYXJlbnQt
PmFkZENoaWxkKGNoaWxkMik7CisgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQzKTsKKyAg
ICAgICAgCisgICAgICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOworICAgICAgICBj
aGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQyKTsKKyAgICAgICAgCisgICAgICAgIGNoaWxkMi0+
YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworCisgICAgICAgIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0
YXRlKCk7CisgICAgfQorCisgICAgdm9pZCB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoY29u
c3QgRmxvYXRSZWN0JiByMSwgY29uc3QgRmxvYXRSZWN0JiByMikgY29uc3QKKyAgICB7CisgICAg
ICAgIEVYUEVDVF9GTE9BVF9FUShyMS5sb2NhdGlvbigpLngoKSwgcjIubG9jYXRpb24oKS54KCkp
OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEocjEubG9jYXRpb24oKS55KCksIHIyLmxvY2F0aW9u
KCkueSgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHIxLnNpemUoKS53aWR0aCgpLCByMi5z
aXplKCkud2lkdGgoKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShyMS5zaXplKCkuaGVpZ2h0
KCksIHIyLnNpemUoKS5oZWlnaHQoKSk7CisgICAgfQorICAgIAorICAgIC8vIEFsbCBkZWxlZ2F0
ZXMgYW5kIGxheWVycyBhcmUgZGVjbGFyZWQgaGVyZSBzbyB0aGF0IGVhY2ggdGVzdCBjYXNlCisg
ICAgLy8gaXMgbW9yZSByZWFkYWJsZS4gVGhlIG1lYW5pbmcgYmVoaW5kIHZhcmlhYmxlIG5hbWVz
IHNob3VsZCBiZQorICAgIC8vIGNsZWFyIHdoZW4gcmVhZGluZyB0aGUgc3BlY2lmaWMgdGVzdCBj
YXNlcy4KKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtb2NrRGVsZWdhdGUsIHNpbGVudERlbGVnYXRl
LCBwYXJlbnREZWxlZ2F0ZSwgY2hpbGREZWxlZ2F0ZTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gdGVzdExheWVyLCBwYXJlbnQsIGNoaWxkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzLCBjaGls
ZDQsIGdyYW5kQ2hpbGQxLCBncmFuZENoaWxkMiwgZ3JhbmRDaGlsZDM7Cit9OworCisvLyBGSVhN
RTogdGhpcyBmaXh0dXJlIGlzIHRlbXBvcmFyeSBqdXN0IHdoaWxlIGRldmVsb3BpbmcgdGVzdCBj
YXNlcworY2xhc3MgTGF5ZXJDaHJvbWl1bVRlc3RfV09SS19JTl9QUk9HUkVTUyA6IHB1YmxpYyBM
YXllckNocm9taXVtVGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBTZXRVcCgpIHsgTGF5ZXJD
aHJvbWl1bVRlc3Q6OlNldFVwKCk7IH0KKyAgICB2b2lkIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCkg
eyBMYXllckNocm9taXVtVGVzdDo6Y3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsgfQorfTsKKworVEVT
VF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIGJhc2ljQ3JlYXRlQW5kRGVz
dHJveSkKK3sKKyAgICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQg
anVzdCBiZWNhdXNlIHRoZSBsYXllciBpcyBjcmVhdGVkIG9yIGRlc3Ryb3llZC4KKyAgICBFWFBF
Q1RfQ0FMTChtb2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygwKTsKKwor
ICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAg
ICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXIuZ2V0KCkpOworCisgICAgLy8gbm90aWZ5U3luY1JlcXVp
cmVkIHNob3VsZCBhbHNvIG5vdCBiZSBjYWxsZWQgb24gdGhlIGRlc3RydWN0b3Igd2hlbiB0aGUg
bGF5ZXIgaGFzIG5vIGNoaWxkcmVuLgorICAgIC8vIHNvIHdlIGV4cGxpY2l0bHkgbWFrZSBzdXJl
IExheWVyQ2hyb21pdW0gaXMgZGVzdHJveWVkIGJlZm9yZSBtb2NrIGRlbGVnYXRlLgorICAgIGV4
cGxpY2l0bHlEZXN0cm95TGF5ZXIodGVzdExheWVyLnJlbGVhc2UoKSk7Cit9CisKK1RFU1RfRihM
YXllckNocm9taXVtVGVzdF9XT1JLX0lOX1BST0dSRVNTLCBhZGRDaGlsZCkKK3sKKyAgICBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnBhcmVudERlbGVnYXRlKTsKKyAgICBjaGlsZCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7CisKKyAgICAvLyBQYXJlbnQg
Y2FsbHMgbm90aWZ5U3luY1JlcXVpcmVkIGV4YWN0bHkgb25jZSB3aGVuIGFkZGluZyBjaGlsZC4K
KyAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRp
bWVzKDEpOworCisgICAgLy8gVXBvbiBjcmVhdGlvbiwgbGF5ZXJzIHNob3VsZCBub3QgaGF2ZSBj
aGlsZHJlbiBvciBwYXJlbnQuCisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXpl
KCksIChzaXplX3QpMCk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5wYXJlbnQoKSk7CisKKyAg
ICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxk
cmVuKCkuc2l6ZSgpLCAoc2l6ZV90KTEpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVu
KClbMF0sIGNoaWxkLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQtPnBhcmVudCgpLCBwYXJl
bnQuZ2V0KCkpOworICAgIEVYUEVDVF9FUShjaGlsZC0+cm9vdExheWVyKCksIHBhcmVudC5nZXQo
KSk7CisKKyAgICAvLyBGb3JjZSB2ZXJpZmljYXRpb24gc28gdGhhdCB3ZSBrbm93IG5vdGlmeVN5
bmNSZXF1aXJlZCB3YXMgY2FsbGVkIGJlY2F1c2Ugb2YgYWRkQ2hpbGQoKQorICAgIE1vY2s6OlZl
cmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZwYXJlbnREZWxlZ2F0ZSk7CisKKyAgICAvLyBGSVhN
RTogdGhlc2UgYXJlIHRoZSBzZW1hbnRpY3MgY3VycmVudGx5IGltcGxlbWVudGVkIGJ5IExheWVy
Q2hyb21pdW0sIGJ1dCBpdCBzZWVtcyBhd2t3YXJkLi4uCisgICAgLy8gbm90aWZ5U3luY1JlcXVp
cmVkIHNob3VsZCBiZSBjYWxsZWQgb24gdGhlIHBhcmVudCBkZXN0cnVjdG9yLCBiZWNhdXNlIHRo
ZSBsYXllciBoYXMgYSBjaGlsZC4KKyAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90
aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworCisgICAgLy8gZm9yY2UgZGVzdHJ1Y3RvcnMg
dG8gYmUgaW52b2tlZCwgb3RoZXJ3aXNlIG1vY2sgZGVsZWdhdGUgY2FuIGdpdmUgYSBmYWxzZSBw
b3NpdGl2ZS4KKyAgICBleHBsaWNpdGx5RGVzdHJveUxheWVyKHBhcmVudC5yZWxlYXNlKCkpOwor
ICAgIGV4cGxpY2l0bHlEZXN0cm95TGF5ZXIoY2hpbGQucmVsZWFzZSgpKTsKK30KKworVEVTVF9G
KExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIHZlcmlmeUNoaWxkSGFzTm9QYXJl
bnRBZnRlclBhcmVudERlc3Ryb3llZCkKK3sKKyAgICBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoJnNpbGVudERlbGVnYXRlKTsKKyAgICBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgmc2lsZW50RGVsZWdhdGUpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworCisgICAg
RVhQRUNUX1RSVUUoY2hpbGQtPnBhcmVudCgpKTsKKworICAgIC8vIG1ha2Ugc3VyZSBwYXJlbnQn
cyBkZXN0cnVjdG9yIGlzIGNhbGxlZAorICAgIGV4cGxpY2l0bHlEZXN0cm95TGF5ZXIocGFyZW50
LnJlbGVhc2UoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnBhcmVudCgpKTsKK30KKwor
VEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIHZlcmlmeURlc3RydWN0
b3JEb2VzTm90TGVhaykKK3sKKyAgICAvLyBJbiB0aGlzIHRlc3Qgd2UgZXhwbGljaXRseSBpbnN0
YW50aWF0ZSBhIHNwZWNpYWwgc3ViY2xhc3Mgb2YKKyAgICAvLyBMYXllckNocm9taXVtIHNvIHdl
IGNhbiB0cmFjayB0aGUgbnVtYmVyIG9mIGRlc3RydWN0b3JzIGNhbGxlZC4KKyAgICAKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yPiBwYXJlbnQsIGNo
aWxkMSwgY2hpbGQyLCBjaGlsZDMsIGdyYW5kQ2hpbGQxLCBncmFuZENoaWxkMiwgZ3JhbmRDaGls
ZDM7CisgICAgcGFyZW50ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVu
dGVkRGVzdHJ1Y3Rvcigmc2lsZW50RGVsZWdhdGUpKTsKKyAgICBjaGlsZDEgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZzaWxlbnREZWxlZ2F0
ZSkpOworICAgIGNoaWxkMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1l
bnRlZERlc3RydWN0b3IoJnNpbGVudERlbGVnYXRlKSk7CisgICAgY2hpbGQzID0gYWRvcHRSZWYo
bmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcigmc2lsZW50RGVsZWdh
dGUpKTsKKyAgICBncmFuZENoaWxkMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aElu
c3RydW1lbnRlZERlc3RydWN0b3IoJnNpbGVudERlbGVnYXRlKSk7CisgICAgZ3JhbmRDaGlsZDIg
PSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZz
aWxlbnREZWxlZ2F0ZSkpOworICAgIGdyYW5kQ2hpbGQzID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcigmc2lsZW50RGVsZWdhdGUpKTsKKworICAg
IC8vIHNldCB1cCBhIHNpbXBsZSB0cmVlLgorICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQxKTsK
KyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMik7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGls
ZDMpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOworICAgIGNoaWxkMS0+YWRk
Q2hpbGQoZ3JhbmRDaGlsZDIpOworICAgIGNoaWxkMi0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOwor
CisgICAgLy8gQ2xlYXIgYWxsIHRoZSBjaGlsZHJlbiBSZWZQdHJzIGhlcmUuIEJ1dCBzaW5jZSB0
aGV5IGFyZSBhdHRhY2hlZCB0byB0aGUgdHJlZSwgbm8gZGVzdHJ1Y3RvcnMgc2hvdWxkIGJlIGNh
bGxlZCB5ZXQuCisgICAgY2hpbGQxLmNsZWFyKCk7CisgICAgY2hpbGQyLmNsZWFyKCk7CisgICAg
Y2hpbGQzLmNsZWFyKCk7CisgICAgZ3JhbmRDaGlsZDEuY2xlYXIoKTsKKyAgICBncmFuZENoaWxk
Mi5jbGVhcigpOworICAgIGdyYW5kQ2hpbGQzLmNsZWFyKCk7CisgICAgCisgICAgRVhQRUNUX0VR
KExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2Vz
RGVzdHJveWVkKCksIDApOworCisgICAgLy8gZGVsZXRpbmcgdGhlIHBhcmVudCBzaG91bGQgY2F1
c2UgYWxsIGRlc3RydWN0b3JzIHRvIGJlIGludm9rZWQuCisgICAgZXhwbGljaXRseURlc3Ryb3lM
YXllcihwYXJlbnQucmVsZWFzZSgpKTsKKworICAgIEVYUEVDVF9FUShMYXllckNocm9taXVtV2l0
aEluc3RydW1lbnRlZERlc3RydWN0b3I6OmdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpLCA3KTsK
K30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIGluc2VydENo
aWxkKQoreworICAgIHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdh
dGUpOworICAgIGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUp
OworICAgIGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOwor
ICAgIGNoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworICAg
IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworCisgICAg
RVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCksIChzaXplX3QpMCk7CisKKyAgICAv
LyBpbnNlcnQgdG8gZW1wdHkgbGlzdAorICAgIEVYUEVDVF9DQUxMKHBhcmVudERlbGVnYXRlLCBu
b3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgcGFyZW50LT5pbnNlcnRDaGlsZChj
aGlsZDMsIDApOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZwYXJlbnRE
ZWxlZ2F0ZSk7CisKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSwgKHNp
emVfdCkxKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpWzBdLCBjaGlsZDMpOwor
CisgICAgLy8gaW5zZXJ0IHRvIGJlZ2lubmluZyBvZiBsaXN0CisgICAgRVhQRUNUX0NBTEwocGFy
ZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICBwYXJlbnQt
Pmluc2VydENoaWxkKGNoaWxkMSwgMCk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMoJnBhcmVudERlbGVnYXRlKTsKKworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpLCAoc2l6ZV90KTIpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKClb
MF0sIGNoaWxkMSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVsxXSwgY2hpbGQz
KTsKKyAgICAKKyAgICAvLyBpbnNlcnQgdG8gbWlkZGxlIG9mIGxpc3QKKyAgICBFWFBFQ1RfQ0FM
TChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHBh
cmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4
cGVjdGF0aW9ucygmcGFyZW50RGVsZWdhdGUpOworCisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hp
bGRyZW4oKS5zaXplKCksIChzaXplX3QpMyk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRy
ZW4oKVswXSwgY2hpbGQxKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpWzFdLCBj
aGlsZDIpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKClbMl0sIGNoaWxkMyk7Cisg
ICAgCisgICAgLy8gaW5zZXJ0IHRvIGVuZCBvZiBsaXN0CisgICAgRVhQRUNUX0NBTEwocGFyZW50
RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICBwYXJlbnQtPmlu
c2VydENoaWxkKGNoaWxkNCwgMyk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlv
bnMoJnBhcmVudERlbGVnYXRlKTsKKworICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgYXdrd2FyZCBz
ZW1hbnRpY3MgdGhhdCBub3RpZnlTeW5jUmVxdWlyZWQgZ2V0cworICAgIC8vICAgICAgICBjYWxs
ZWQgZm9yIGVhY2ggY2hpbGQgdGhhdCBnZXRzIHJlbW92ZWQgZnJvbSB3aXRoaW4gdGhlCisgICAg
Ly8gICAgICAgIHBhcmVudCdzIGRlc3RydWN0b3IuIGFyZSB0aG9zZSBzZW1hbnRpY3MgT0s/IEl0
IGZlZWxzCisgICAgLy8gICAgICAgIGxpa2UgaXQgbWF5IGNvbWUgYmFjayB0byBiaXRlIHVzIGRv
d24gdGhlIHJvYWQuCisgICAgLy8gICAgICAgIGZvciBub3csIHRoaXMgd2lsbCBwcmludCB3YXJu
aW5ncyBpbiB0aGUgdGVzdCBidXQgbm90IGZhaWwuCisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hp
bGRyZW4oKS5zaXplKCksIChzaXplX3QpNCk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRy
ZW4oKVswXSwgY2hpbGQxKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpWzFdLCBj
aGlsZDIpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKClbMl0sIGNoaWxkMyk7Cisg
ICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVszXSwgY2hpbGQ0KTsKK30KKworVEVTVF9G
KExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIGluc2VydENoaWxkUGFzdEVuZE9m
TGlzdCkKK3sKKyAgICBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVn
YXRlKTsKKyAgICBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRl
KTsKKyAgICBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsK
KworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpLCAoc2l6ZV90KTApOwor
CisgICAgLy8gaW5zZXJ0IHRvIGFuIG91dC1vZi1ib3VuZHMgaW5kZXgKKyAgICBwYXJlbnQtPmlu
c2VydENoaWxkKGNoaWxkMSwgNTMpOworCisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4o
KS5zaXplKCksIChzaXplX3QpMSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVsw
XSwgY2hpbGQxKTsKKworICAgIC8vIGluc2VydCBhbm90aGVyIG9uZSB0byBvdXQtb2YtYm91bmRz
LCB3aGVuIGxpc3QgaXMgbm90IGFscmVhZHkgZW1wdHkuCisgICAgcGFyZW50LT5pbnNlcnRDaGls
ZChjaGlsZDIsIDI0NTkpOworCisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXpl
KCksIChzaXplX3QpMik7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVswXSwgY2hp
bGQxKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpWzFdLCBjaGlsZDIpOworfQor
CitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3RfV09SS19JTl9QUk9HUkVTUywgaW5zZXJ0U2FtZUNo
aWxkVHdpY2UpCit7CisgICAgcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnRE
ZWxlZ2F0ZSk7CisgICAgY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxl
Z2F0ZSk7CisKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSwgKHNpemVf
dCkwKTsKKworICAgIC8vIGluc2VydCB0byBhbiBlbXB0eSBsaXN0CisgICAgcGFyZW50LT5pbnNl
cnRDaGlsZChjaGlsZDEsIDApOworCisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5z
aXplKCksIChzaXplX3QpMSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVswXSwg
Y2hpbGQxKTsKKworICAgIC8vIGluc2VydCBhbm90aGVyIG9uZSB0byBvdXQtb2YtYm91bmRzLCB3
aGVuIGxpc3QgaXMgbm90IGFscmVhZHkgZW1wdHkuCisgICAgcGFyZW50LT5pbnNlcnRDaGlsZChj
aGlsZDEsIDApOworCisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCksIChz
aXplX3QpMSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVswXSwgY2hpbGQxKTsK
K30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIHJlcGxhY2VD
aGlsZFdpdGhOZXdDaGlsZCkKK3sKKyAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworICAgIGNo
aWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworCisgICAgRVhQ
RUNUX0ZBTFNFKGNoaWxkNC0+cGFyZW50KCkpOworCisgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQo
Y2hpbGQyLmdldCgpLCBjaGlsZDQpOworICAgIAorICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxk
cmVuKCkuc2l6ZSgpLCAoc2l6ZV90KTMpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmNoaWxkcmVu
KClbMF0sIGNoaWxkMSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVsxXSwgY2hp
bGQ0KTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5jaGlsZHJlbigpWzJdLCBjaGlsZDMpOworICAg
IEVYUEVDVF9FUShjaGlsZDQtPnBhcmVudCgpLCBwYXJlbnQuZ2V0KCkpOworCisgICAgRVhQRUNU
X0ZBTFNFKGNoaWxkMi0+cGFyZW50KCkpOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3Rf
V09SS19JTl9QUk9HUkVTUywgcmVwbGFjZUNoaWxkV2l0aE5ld0NoaWxkVGhhdEhhc090aGVyUGFy
ZW50KQoreworICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7CisKKyAgICAvLyBjcmVhdGUgYW5v
dGhlciBzaW1wbGUgdHJlZSB3aXRoIHRlc3RMYXllciBhbmQgY2hpbGQ0LgorICAgIHRlc3RMYXll
ciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworICAgIGNoaWxkNCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworICAgIHRlc3RMYXllci0+
YWRkQ2hpbGQoY2hpbGQ0KTsKKyAgICBFWFBFQ1RfRVEodGVzdExheWVyLT5jaGlsZHJlbigpLnNp
emUoKSwgKHNpemVfdCkxKTsKKyAgICBFWFBFQ1RfRVEodGVzdExheWVyLT5jaGlsZHJlbigpWzBd
LCBjaGlsZDQpOworICAgIEVYUEVDVF9FUShjaGlsZDQtPnBhcmVudCgpLCB0ZXN0TGF5ZXIuZ2V0
KCkpOworCisgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQoY2hpbGQyLmdldCgpLCBjaGlsZDQpOwor
CisgICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCksIChzaXplX3QpMyk7Cisg
ICAgRVhQRUNUX0VRKHBhcmVudC0+Y2hpbGRyZW4oKVswXSwgY2hpbGQxKTsKKyAgICBFWFBFQ1Rf
RVEocGFyZW50LT5jaGlsZHJlbigpWzFdLCBjaGlsZDQpOworICAgIEVYUEVDVF9FUShwYXJlbnQt
PmNoaWxkcmVuKClbMl0sIGNoaWxkMyk7CisgICAgRVhQRUNUX0VRKGNoaWxkNC0+cGFyZW50KCks
IHBhcmVudC5nZXQoKSk7CisKKyAgICAvLyB0ZXN0TGF5ZXIgc2hvdWxkIG5vIGxvbmdlciBoYXZl
IGNoaWxkNAorICAgIC8vIGFuZCBjaGlsZDIgc2hvdWxkIG5vIGxvbmdlciBoYXZlIGEgcGFyZW50
LgorICAgIEVYUEVDVF9FUSh0ZXN0TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpLCAoc2l6ZV90KTAp
OworICAgIEVYUEVDVF9GQUxTRShjaGlsZDItPnBhcmVudCgpKTsKK30KKworVEVTVF9GKExheWVy
Q2hyb21pdW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIHJlcGxhY2VDaGlsZFdpdGhTYW1lQ2hpbGQp
Cit7CisgICAgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKKworICAgIHBhcmVudC0+cmVwbGFjZUNo
aWxkKGNoaWxkMi5nZXQoKSwgY2hpbGQyKTsKKworICAgIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0
YXRlKCk7CisKKyAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHN1cmUgbm8gbm90aWZ5U3luY1Jl
cXVpcmVkIHdhcyBjYWxsZWQuCit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdF9XT1JLX0lO
X1BST0dSRVNTLCByZW1vdmVBbGxDaGlsZHJlbikKK3sKKyAgICBjcmVhdGVTaW1wbGVUZXN0VHJl
ZSgpOworCisgICAgcGFyZW50LT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgRVhQRUNUX0VR
KHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCksIChzaXplX3QpMCk7CisgICAgRVhQRUNUX0ZBTFNF
KGNoaWxkMS0+cGFyZW50KCkpOworICAgIEVYUEVDVF9GQUxTRShjaGlsZDItPnBhcmVudCgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQzLT5wYXJlbnQoKSk7Cit9CisKK1RFU1RfRihMYXllckNo
cm9taXVtVGVzdF9XT1JLX0lOX1BST0dSRVNTLCBzZXRDaGlsZHJlbikKK3sKKyAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbmV3Q2hpbGRyZW47CisgICAgY2hpbGQxID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7CisgICAgY2hpbGQyID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZzaWxlbnREZWxlZ2F0ZSk7CisgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKGNo
aWxkMSk7CisgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKGNoaWxkMik7CisKKyAgICBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERlbGVnYXRlKTsKKyAgICBwYXJlbnQtPmFkZENo
aWxkKGNoaWxkMSk7CisKKyAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNp
bGVudERlbGVnYXRlKTsKKworICAgIC8vIEluaXRpYWwgY29uaWRpdGlvbnM6IGNoaWxkMSBoYXMg
YSBwYXJlbnQsIGNoaWxkMiBoYXMgbm8gcGFyZW50LgorICAgIEVYUEVDVF9FUSh0ZXN0TGF5ZXIt
PmNoaWxkcmVuKCkuc2l6ZSgpLCAoc2l6ZV90KTApOworICAgIEVYUEVDVF9FUShjaGlsZDEtPnBh
cmVudCgpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVDVF9GQUxTRShjaGlsZDItPnBhcmVudCgp
KTsKKyAgICAKKyAgICB0ZXN0TGF5ZXItPnNldENoaWxkcmVuKG5ld0NoaWxkcmVuKTsKKworICAg
IC8vIEV4cGVjdCB0aGF0IGFsbCBjaGlsZHJlbiBoYXZlIHRlc3RMYXllciBhcyB0aGUgcGFyZW50
LgorICAgIEVYUEVDVF9FUSh0ZXN0TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpLCAoc2l6ZV90KTIp
OworICAgIEVYUEVDVF9FUShjaGlsZDEtPnBhcmVudCgpLCB0ZXN0TGF5ZXIuZ2V0KCkpOworICAg
IEVYUEVDVF9FUShjaGlsZDItPnBhcmVudCgpLCB0ZXN0TGF5ZXIuZ2V0KCkpOworfQorCitURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3RfV09SS19JTl9QUk9HUkVTUywgZ2V0Um9vdExheWVyQWZ0ZXJU
cmVlTWFuaXB1bGF0aW9ucykKK3sKKyAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworICAgIGNo
aWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmc2lsZW50RGVsZWdhdGUpOworCisgICAgRVhQ
RUNUX0VRKHBhcmVudC0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAgRVhQRUNUX0VR
KGNoaWxkMS0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxk
Mi0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMy0+cm9v
dExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkNC0+cm9vdExheWVy
KCksIGNoaWxkNC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGQxLT5yb290TGF5ZXIo
KSwgcGFyZW50LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZDItPnJvb3RMYXllcigp
LCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkMy0+cm9vdExheWVyKCks
IHBhcmVudC5nZXQoKSk7CisKKyAgICBjaGlsZDEtPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAg
IC8vIGNoaWxkMSBhbmQgaXRzIGNoaWxkcmVuLCBncmFuZENoaWxkMSBhbmQgZ3JhbmRDaGlsZDIg
YXJlIG5vdyBvbiBhIHNlcGFyYXRlIHN1YnRyZWUuCisgICAgRVhQRUNUX0VRKHBhcmVudC0+cm9v
dExheWVyKCksIHBhcmVudC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMS0+cm9vdExheWVy
KCksIGNoaWxkMS5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMi0+cm9vdExheWVyKCksIHBh
cmVudC5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMy0+cm9vdExheWVyKCksIHBhcmVudC5n
ZXQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkNC0+cm9vdExheWVyKCksIGNoaWxkNC5nZXQoKSk7
CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGQxLT5yb290TGF5ZXIoKSwgY2hpbGQxLmdldCgpKTsK
KyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZDItPnJvb3RMYXllcigpLCBjaGlsZDEuZ2V0KCkpOwor
ICAgIEVYUEVDVF9FUShncmFuZENoaWxkMy0+cm9vdExheWVyKCksIHBhcmVudC5nZXQoKSk7CisK
KyAgICBncmFuZENoaWxkMy0+YWRkQ2hpbGQoY2hpbGQ0KTsKKyAgICAKKyAgICBFWFBFQ1RfRVEo
cGFyZW50LT5yb290TGF5ZXIoKSwgcGFyZW50LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQx
LT5yb290TGF5ZXIoKSwgY2hpbGQxLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQyLT5yb290
TGF5ZXIoKSwgcGFyZW50LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQzLT5yb290TGF5ZXIo
KSwgcGFyZW50LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQ0LT5yb290TGF5ZXIoKSwgcGFy
ZW50LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZDEtPnJvb3RMYXllcigpLCBjaGls
ZDEuZ2V0KCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkMi0+cm9vdExheWVyKCksIGNoaWxk
MS5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGQzLT5yb290TGF5ZXIoKSwgcGFyZW50
LmdldCgpKTsKKworICAgIGNoaWxkMi0+cmVwbGFjZUNoaWxkKGdyYW5kQ2hpbGQzLmdldCgpLCBj
aGlsZDEpOworCisgICAgLy8gZ3JhbmRDaGlsZDMgZ2V0cyBvcnBoYW5lZCBhbmQgdGhlIGNoaWxk
MSBzdWJ0cmVlIGdldHMgcGxhbnRlZCBiYWNrIGludG8gdGhlIHRyZWUgdW5kZXIgY2hpbGQyLgor
ICAgIEVYUEVDVF9FUShwYXJlbnQtPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVY
UEVDVF9FUShjaGlsZDEtPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVDVF9F
UShjaGlsZDItPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVDVF9FUShjaGls
ZDMtPnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVDVF9FUShjaGlsZDQtPnJv
b3RMYXllcigpLCBncmFuZENoaWxkMy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGQx
LT5yb290TGF5ZXIoKSwgcGFyZW50LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZDIt
PnJvb3RMYXllcigpLCBwYXJlbnQuZ2V0KCkpOworICAgIEVYUEVDVF9FUShncmFuZENoaWxkMy0+
cm9vdExheWVyKCksIGdyYW5kQ2hpbGQzLmdldCgpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21p
dW1UZXN0X1dPUktfSU5fUFJPR1JFU1MsIERJU0FCTEVEX2dldERlc2NlbmRhbnREcmF3c0NvbnRl
bnRBZnRlclRyZWVNYW5pcHVsYXRpb25zKQoreworICAgIC8vCisgICAgLy8gRklYTUU6IHRoZSBi
YXNlIGNsYXNzIExheWVyQ2hyb21pdW0gYWx3YXlzIHJldHVybnMgZmFsc2UgYW5kIGRvZXNuJ3Qg
dXNlIHRoZSBkZWxlZ2F0ZSBkcmF3c0NvbnRlbnQoKS4KKyAgICAvLyB0aGlzIHRlc3Qgc2hvdWxk
IGJlIGRpc2FibGVkIHVudGlsIHdlIHJlc29sdmUgd2hldGhlciB0aG9zZSBzZW1hbnRpY3MgYXJl
IGFwcHJvcHJpYXRlIG9yIG5vdC4KKyAgICAvLyBpZiBpdCBzaG91bGQgcmV0dXJuIGZhbHNlIHdp
dGhvdXQgY2FsbGluZyBkZWxlZ2F0ZSwgdGhlbiB3ZSBoYXZlIHRvIHN1YmNsYXNzIHRoZSBMYXll
ckNocm9taXVtCisgICAgLy8gYW5kIG92ZXJyaWRlIHRoYXQgZnVuY3Rpb24gc28gdGhhdCB3ZSBj
YW4gdGVzdCBkZXNjZW5kYW50RHJhd3NDb250ZW50KCkuCisgICAgLy8KKworICAgIGNyZWF0ZVNp
bXBsZVRlc3RUcmVlKCk7CisgICAgY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2Nr
RGVsZWdhdGUpOworCisgICAgLy8gU2V0IGNoaWxkNCBzbyB0aGF0IGl0IGRyYXdzIGNvbnRlbnQu
CisgICAgLy8gQWxsIG90aGVyIGxheWVycyBkbyBub3QgZHJhdyBjb250ZW50ICh0aGUgbW9jayBy
ZXR1cm5zIGZhbHNlIGJ5IGRlZmF1bHQpLgorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwg
ZHJhd3NDb250ZW50KCkpLlRpbWVzKEFueU51bWJlcigpKS5XaWxsUmVwZWF0ZWRseShSZXR1cm4o
dHJ1ZSkpOworCisgICAgLy8gQ2FyZWZ1bCwgY2hpbGQ0IGlzIG5vdCBhIGRlc2NlbmRhbnQgb2Yg
aXRzZWxmLiBTbyBpdCBpcyBjb3JyZWN0IGZvciB0aGlzIHRvIHJldHVybiBmYWxzZS4KKyAgICBF
WFBFQ1RfRkFMU0UoY2hpbGQ0LT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpOworCisgICAgRVhQ
RUNUX0ZBTFNFKHBhcmVudC0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoY2hpbGQxLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpOworICAgIEVYUEVDVF9GQUxT
RShjaGlsZDItPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNo
aWxkMy0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRD
aGlsZDEtPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGdyYW5k
Q2hpbGQyLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpOworICAgIEVYUEVDVF9GQUxTRShncmFu
ZENoaWxkMy0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKTsKKworICAgIGdyYW5kQ2hpbGQzLT5h
ZGRDaGlsZChjaGlsZDQpOworCisgICAgLy8gcGFyZW50IC0tPiBjaGlsZDIgLS0+IGdyYW5kQ2hp
bGQzIC0tPiBjaGlsZDQKKyAgICAvLyBzbyBwYXJlbnQsIGNoaWxkMiwgYW5kIGdyYW5kQ2hpbGQz
IHNob3VsZCByZXR1cm4gdHJ1ZQorICAgIEVYUEVDVF9UUlVFKHBhcmVudC0+ZGVzY2VuZGFudERy
YXdzQ29udGVudCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQxLT5kZXNjZW5kYW50RHJhd3ND
b250ZW50KCkpOworICAgIEVYUEVDVF9UUlVFKGNoaWxkMi0+ZGVzY2VuZGFudERyYXdzQ29udGVu
dCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQzLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkp
OworICAgIEVYUEVDVF9GQUxTRShncmFuZENoaWxkMS0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZDItPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQo
KSk7CisgICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDMtPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQo
KSk7CisKKyAgICBjaGlsZDItPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIC8vIGNoaWxkMiAt
LT4gZ3JhbmRDaGlsZDMgLS0+IGNoaWxkNAorICAgIC8vIHBhcmVudCBzaG91bGQgbm93IHJldHVy
biBmYWxzZSwgY2hpbGQyIGFuZCBncmFuZGNoaWxkMyBzaG91bGQgcmV0dXJuIHRydWUuCisgICAg
RVhQRUNUX0ZBTFNFKHBhcmVudC0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoY2hpbGQxLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpOworICAgIEVYUEVDVF9U
UlVFKGNoaWxkMi0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y2hpbGQzLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpOworICAgIEVYUEVDVF9GQUxTRShncmFu
ZENoaWxkMS0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZ3Jh
bmRDaGlsZDItPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7CisgICAgRVhQRUNUX1RSVUUoZ3Jh
bmRDaGlsZDMtPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSk7Cit9CisKK1RFU1RfRihMYXllckNo
cm9taXVtVGVzdF9XT1JLX0lOX1BST0dSRVNTLCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0Nv
cnJlY3RCZWhhdmlvcikKK3sKKyAgICAvLyBTZW1hbnRpY3MgZm9yIHNldE5lZWRzRGlzcGxheSB3
aGljaCBhcmUgdGVzdGVkIGhlcmU6CisgICAgLy8gICBjcmVhdGVzIGEgdW5pb25lZCBkaXJ0eVJl
Y3QgYXBwcm9wcmlhdGVseS4KKyAgICAvLyAgIGluZGlyZWN0bHkgY2FsbHMgbm90aWZ5U3luY1Jl
cXVpcmVkLCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggY2FsbCB0byBzZXROZWVkc0Rpc3BsYXkuCisK
KyAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7Cisg
ICAgSW50U2l6ZSB0ZXN0Qm91bmRzID0gSW50U2l6ZSg1MDEsIDUwOCk7CisgICAgCisgICAgRmxv
YXRSZWN0IGRpcnR5MSA9IEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEuMGYsIDIuMGYpOworICAg
IEZsb2F0UmVjdCBkaXJ0eTIgPSBGbG9hdFJlY3QoMjAuMGYsIDI1LjBmLCAzLjBmLCA0LjBmKTsK
KyAgICBGbG9hdFJlY3QgZW1wdHlEaXJ0eVJlY3QgPSBGbG9hdFJlY3QoNDAuMGYsIDQ1LjBmLCAw
LCAwKTsKKyAgICBGbG9hdFJlY3Qgb3V0T2ZCb3VuZHNEaXJ0eVJlY3QgPSBGbG9hdFJlY3QoNDAw
LjBmLCA0MDUuMGYsIDUwMC4wZiwgNTAyLjBmKTsKKworICAgIC8vIEJlZm9yZSBhbnl0aGluZywg
dGVzdExheWVyIHNob3VsZCBoYXZlIGFuIGVtcHR5IGRpcnR5IHJlY3QuCisgICAgRVhQRUNUX1RS
VUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0NBTEwo
bW9ja0RlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgdGVzdExh
eWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcyk7CisgICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlz
cGxheSgpOyAvLyB0ZXN0ZWQgcHJvcGVybHkgYmVsb3cuCisgICAgTW9jazo6VmVyaWZ5QW5kQ2xl
YXJFeHBlY3RhdGlvbnMoJm1vY2tEZWxlZ2F0ZSk7CisKKyAgICAvLyBqdXN0IGZvciBzYW5pdHkg
Y2hlY2tpbmcuCisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5
KCkpOworCisgICAgLy8gVGhlIHJlYWwgdGVzdCBiZWdpbnMgaGVyZS4KKyAgICBFWFBFQ1RfQ0FM
TChtb2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICB0ZXN0
TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTEpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFy
RXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworCisgICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9z
dEVxdWFsKHRlc3RMYXllci0+ZGlydHlSZWN0KCksIGRpcnR5MSk7CisgICAgLyoKKyAgICBFWFBF
Q1RfQ0FMTChtb2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAg
ICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTIpOworICAgIE1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworCisgICAgLy8gYXQgdGhpcyBwb2lu
dCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpIHNob3VsZCBiZSB0aGUgdW5pb24gb2YgZGlydHkxIGFu
ZCBkaXJ0eTIuCisgICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKHRlc3RMYXllci0+ZGly
dHlSZWN0KCksIEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDIzLjBmLCAyOS4wZikpOworCisgICAg
RVhQRUNUX0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7
CisgICAgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3QpOworICAgIE1v
Y2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworCisgICAgLy8g
dGVzdExheWVyLT5kaXJ0eVJlY3QoKSBzaG91bGQgbm90IGhhdmUgY2hhbmdlZCBiZWNhdXNlIG9m
IHRoZSBlbXB0eSBkaXJ0eSByZWN0LgorICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbCh0
ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLCBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAyMy4wZiwgMjku
MGYpKTsKKworICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVk
KCkpLlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KG91dE9mQm91bmRz
RGlydHlSZWN0KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0Rl
bGVnYXRlKTsKKworICAgIC8vIExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0
cyB0aGF0IGdvIGJleW9uZCBpdHMgYm91bmRzCisgICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVx
dWFsKHRlc3RMYXllci0+ZGlydHlSZWN0KCksIEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDkwMC4w
ZiwgOTA3LjBmKSk7CisgICAgCisgICAgRVhQRUNUX0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlT
eW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXko
KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVnYXRlKTsK
KworICAgIC8vIGdlbmVyaWMgc2V0TmVlZHNEaXNwbGF5KCkgc2hvdWxkIGNhdXNlIHRoZSBlbnRp
cmUgYm91bmRzIHRvIGJlIGRpcnR5LAorICAgIC8vIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIGRp
cnR5IHJlY3QuCisgICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKHRlc3RMYXllci0+ZGly
dHlSZWN0KCksIEZsb2F0UmVjdCgwLCAwLCB0ZXN0Qm91bmRzLndpZHRoKCksIHRlc3RCb3VuZHMu
aGVpZ2h0KCkpKTsKKyAKKyAgICAvLyByZXNldE5lZWRzRGlzcGxheSBzaG91bGQgZW1wdHkgdGhl
IGRpcnR5IHJlY3QsIGFuZCBOT1QgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQuCisgICAgRVhQRUNU
X0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7CisgICAg
dGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFy
RXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworICAgIAorICAgIEVYUEVDVF9UUlVFKHRlc3RM
YXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsqLworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3RfV09SS19JTl9QUk9HUkVTUywgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RC
ZWhhdmlvcikKK3sKKworICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9j
a0RlbGVnYXRlKTsKKyAgICBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnNpbGVudERl
bGVnYXRlKTsgLy8ganVzdCBhIGR1bW15IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4KKyAgICAK
KyAgICAvLworICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgY2FsbCBuZWVk
c0Rpc3BsYXkgYW5kIG5lZWRzQ29tbWl0IHdoZW4gY2hhbmdlZDoKKyAgICAvLyBUaGUgcHVycG9z
ZSBvZiB0aGlzIGlzIHRvIHZlcmlmeSBub3RpZnlTeW5jIHdhcyBub3QgY2FsbGVkIGFuZCB0byB2
ZXJpZnkgdGhhdCBkaXJ0eVJlY3QgaXMgc3RpbGwgZW1wdHkuCisgICAgRVhQRUNUX0NBTEwobW9j
a0RlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7CisgICAgdGVzdExheWVy
LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIHRlc3RMYXllci0+c2V0TmFtZSgiVGVzdCBM
YXllciIpOworICAgIHRlc3RMYXllci0+c2V0TWFza0xheWVyKHBhcmVudC5nZXQoKSk7CisgICAg
dGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSh0cnVlKTsKKyAgICB0ZXN0
TGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCA0MCwgNTApKTsKKyAgICB0
ZXN0TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDEwLCAxMCkpOworICAgIHRlc3RM
YXllci0+c2V0VXNlc0xheWVyU2Npc3Nvcih0cnVlKTsKKyAgICAvLyBGSVhNRTogdW5jb21tZW50
IHRoaXMgYWZ0ZXIgdXBkYXRpbmcgY29kZSBiYXNlCisgICAgLy8gdGVzdExheWVyLT5zZXRJc05v
bkNvbXBvc2l0ZWRDb250ZW50KHRydWUpOworICAgIC8vIHRlc3RMYXllci0+c2V0RGVsZWdhdGUo
KTsKKyAgICB0ZXN0TGF5ZXItPnNldFJlcGxpY2FMYXllcihwYXJlbnQuZ2V0KCkpOworICAgIHRl
c3RMYXllci0+c2V0RHJhd09wYWNpdHkoMC41Zik7CisgICAgdGVzdExheWVyLT5zZXRTY2lzc29y
UmVjdChJbnRSZWN0KDMsIDMsIDgsIDgpKTsKKyAgICB0ZXN0TGF5ZXItPnNldFRhcmdldFJlbmRl
clN1cmZhY2UoMCk7CisgICAgdGVzdExheWVyLT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0
aW9uTWF0cml4KCkpOworICAgIHRlc3RMYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSk7CisgICAgdGVzdExheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KEludFJlY3QoNCwgNSwgNiwgNykpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0
YXRpb25zKCZtb2NrRGVsZWdhdGUpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlS
ZWN0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAKKyAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhh
dCBzaG91bGQgY2FsbCBzZXROZWVkc0NvbW1pdCAoYnV0IG5vdCBzZXROZWVkc0Rpc3BsYXkpCisg
ICAgLy8gdGhlc2UgcHJvcGVydGllcyBzaG91bGQgaW5kaXJlY3RseSBjYWxsIG5vdGlmeVN5bmNS
ZXF1aXJlZCwgYnV0IHRoZSBkaXJ0eSByZWN0IHNob3VsZCBub3QgY2hhbmdlLgorCisgICAgRVhQ
RUNUX0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7Cisg
ICAgdGVzdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDEuMjNmLCA0LjU2ZikpOwor
ICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworICAg
IAorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRp
bWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0QW5jaG9yUG9pbnRaKDAuN2YpOworICAgIE1vY2s6
OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOworICAgIAorICAgIEVY
UEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOwor
ICAgIHRlc3RMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDAuNGYsIDAuNGYsIDAuNGYp
KTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVnYXRlKTsK
KyAgICAKKyAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgp
KS5UaW1lcygxKTsKKyAgICB0ZXN0TGF5ZXItPnNldENsZWFyc0NvbnRleHQodHJ1ZSk7CisgICAg
TW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tEZWxlZ2F0ZSk7CisgICAgCisg
ICAgRVhQRUNUX0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMo
MSk7CisgICAgdGVzdExheWVyLT5zZXRIaWRkZW4odHJ1ZSk7CisgICAgTW9jazo6VmVyaWZ5QW5k
Q2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tEZWxlZ2F0ZSk7CisgICAgCisgICAgRVhQRUNUX0NBTEwo
bW9ja0RlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgdGVzdExh
eWVyLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRp
b25zKCZtb2NrRGVsZWdhdGUpOworICAgIAorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwg
bm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0T3BhcXVl
KGZhbHNlKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVn
YXRlKTsKKyAgICAKKyAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1
aXJlZCgpKS5UaW1lcygxKTsKKyAgICB0ZXN0TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
NC4wZiwgOS4wZikpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2Nr
RGVsZWdhdGUpOworICAgIAorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3lu
Y1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0WlBvc2l0aW9uKDAuNWYp
OworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrRGVsZWdhdGUpOwor
ICAgIAorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkp
LlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1v
Y2tEZWxlZ2F0ZSk7CisgICAgCisgICAgRVhQRUNUX0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlT
eW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgdGVzdExheWVyLT5zZXRUcmFuc2Zvcm0oVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlv
bnMoJm1vY2tEZWxlZ2F0ZSk7CisgICAgCisgICAgRVhQRUNUX0NBTEwobW9ja0RlbGVnYXRlLCBu
b3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgdGVzdExheWVyLT5zZXREb3VibGVT
aWRlZChmYWxzZSk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tE
ZWxlZ2F0ZSk7CisgICAgCisgICAgRVhQRUNUX0NBTEwobW9ja0RlbGVnYXRlLCBub3RpZnlTeW5j
UmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgdGVzdExheWVyLT5zZXRHZW9tZXRyeUZsaXBwZWQo
dHJ1ZSk7CisgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tEZWxlZ2F0
ZSk7CisKKyAgICAvLyB0aGUgYWJvdmUgdGVzdHMgc2hvdWxkIG5vdCBoYXZlIGNhdXNlZCBhIG5v
bi1lbXB0eSBkaXJ0eSByZWN0LgorICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0
KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxs
IHNldE5lZWRzRGlzcGxheQorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlm
eVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBkaXJ0eSByZWN0LgorICAgIAorICAgIEVYUEVD
VF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDEpOworICAg
IHRlc3RMYXllci0+c2V0Qm91bmRzKEludFNpemUoNSwgMTApKTsgLy8gdGhpcyBzaG91bGQgYmUg
bm9uLWVtcHR5IHNpemUgdG8gdHJpZ2dlciB0aGUgaW50ZW5kZWQgY2FzZS4KKyAgICBNb2NrOjpW
ZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0RlbGVnYXRlKTsKKyAgICB2ZXJpZnlGbG9h
dFJlY3RzQWxtb3N0RXF1YWwodGVzdExheWVyLT5kaXJ0eVJlY3QoKSwgRmxvYXRSZWN0KDAuMGYs
IDAuMGYsIDUuMGYsIDEwLjBmKSk7CisKKyAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5
KCk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOwor
CisgICAgLy8gRklYTUU6IHVuY29tbWVudCB0aGlzIHdoZW4gd2UgY2FuIHJlYXNvbmFibHkgc3R1
YiB0aGUgQ0NMYXllclRyZWVIb3N0LgorICAgIC8vCisgICAgLy8gRVhQRUNUX0NBTEwobW9ja0Rl
bGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgLy8gdGVzdExheWVy
LT5zZXRMYXllclRyZWVIb3N0KGR1bW15UG9pbnRlcik7CisgICAgLy8gTW9jazo6VmVyaWZ5QW5k
Q2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tEZWxlZ2F0ZSk7CisgICAgLy8gdmVyaWZ5RmxvYXRSZWN0
c0FsbW9zdEVxdWFsKHRlc3RMYXllci0+ZGlydHlSZWN0KCksIEZsb2F0UmVjdCgwLjBmLCAwLjBm
LCA1LjBmLCAxMC4wZikpOworICAgIC8vCisgICAgLy8gdGVzdExheWVyLT5yZXNldE5lZWRzRGlz
cGxheSgpOworICAgIC8vIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0
eSgpKTsKKworICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVk
KCkpLlRpbWVzKDEpOworICAgIHRlc3RMYXllci0+c2V0RnJhbWUoRmxvYXRSZWN0KDEuMGYsIDIu
MGYsIDMuMGYsIDQuMGYpKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygm
bW9ja0RlbGVnYXRlKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwodGVzdExheWVy
LT5kaXJ0eVJlY3QoKSwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108867</attachid>
            <date>2011-09-27 10:49:27 -0700</date>
            <delta_ts>2011-09-27 11:15:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68572-20110927104926.patch</filename>
            <type>text/plain</type>
            <size>33860</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYwOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
Yjg0OTkyYTE3NzEzMjFmYTYwNmExOGUwODU4ZjFmNjhjNmE4Y2YwOC4uNjU2MGQ5YjYwOGE5OWJl
OGFiZjg5Mzc4YTIwMDY2NjIwYWJhYWEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMS0wOS0yNyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgdW5pdCB0ZXN0cyBmb3IgTGF5ZXJDaHJvbWl1bS4g
IEVtcGhhc2lzIG9uIHZlcmlmeWluZworICAgICAgICBiZWhhdmlvciBvZiBub3RpZnlTeW5jUmVx
dWlyZWQgY2FsbGJhY2sgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTcyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0
ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorCiAyMDExLTA5LTI2ICBOYXQgRHVj
YSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1ha2UgQ0NUaHJl
YWRQcm94eSBkcmF3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA3Mzc1MmEyOTRj
NDAwYWJjODk3YjNhODM1MjBjNjRhMjFiZjFhMTQxLi5kMDg2M2Y5MWMzYzk0MTY0MWE5ZWE1Yzlj
Y2MzN2I1YTI2MTZjNmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTYzLDYg
KzYzLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Nb2NrR3JhcGhpY3NDb250ZXh0M0RUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1BPREFyZW5hVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjQ3YzU5
NmMwNDU0ZjIyN2YzOTkxNzVmZDAxZjk3YWJjZjk1NWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCAr
MSw2NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyA6OnRlc3Rp
bmc6Ok1vY2s7Cit1c2luZyA6OnRlc3Rpbmc6Ol87Cit1c2luZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7
Cit1c2luZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKK3VzaW5nIDo6dGVzdGluZzo6UmV0dXJuOwor
CisjZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihkZWxlZ2F0
ZSwgbnVtVGltZXNFeHBlY3RlZE5vdGlmeVN5bmMsIGNvZGVUb1Rlc3QpIFwKKyAgICBFWFBFQ1Rf
Q0FMTCgoZGVsZWdhdGUpLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoKG51bVRpbWVzRXhw
ZWN0ZWROb3RpZnlTeW5jKSk7IFwKKyAgICBjb2RlVG9UZXN0OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNb2NrOjpWZXJpZnlB
bmRDbGVhckV4cGVjdGF0aW9ucygmKGRlbGVnYXRlKSkKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
TW9ja0xheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsKK3B1YmxpYzoKKyAg
ICBNT0NLX0NPTlNUX01FVEhPRDAoZHJhd3NDb250ZW50LCBib29sKCkpOworICAgIE1PQ0tfQ09O
U1RfTUVUSE9EMChwcmVzZXJ2ZXMzRCwgYm9vbCgpKTsKKyAgICBNT0NLX01FVEhPRDIocGFpbnRD
b250ZW50cywgdm9pZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikpOworICAgIE1P
Q0tfTUVUSE9EMChub3RpZnlTeW5jUmVxdWlyZWQsIHZvaWQoKSk7Cit9OworCitjbGFzcyBMYXll
ckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IgOiBwdWJsaWMgTGF5ZXJDaHJvbWl1
bSB7CitwdWJsaWM6CisgICAgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9y
KENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCisgICAgICAgIDogTGF5ZXJDaHJvbWl1bShkZWxl
Z2F0ZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+TGF5ZXJDaHJvbWl1bVdpdGhJbnN0
cnVtZW50ZWREZXN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHNfbnVtSW5zdGFuY2VzRGVzdHJv
eWVkKys7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQo
KSB7IHJldHVybiBzX251bUluc3RhbmNlc0Rlc3Ryb3llZDsgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyBpbnQgc19udW1JbnN0YW5jZXNEZXN0cm95ZWQ7Cit9OworCitpbnQgTGF5ZXJDaHJvbWl1
bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpzX251bUluc3RhbmNlc0Rlc3Ryb3llZCA9IDA7
CisKK2NsYXNzIExheWVyQ2hyb21pdW1UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICAvLyBtX3Np
bGVudERlbGVnYXRlIGlzIGluaXRpYWxpemVkIHRvIGJlIGp1c3QgYSBzdHViIGFuZCB3aWxsCisg
ICAgICAgIC8vIG5vdCBwcmludCBhbnkgd2FybmluZ3MuIEl0IGlzIHVzZWQgd2hlbiB3ZSBhcmUg
bm90IHdvcnJpZWQKKyAgICAgICAgLy8gYWJvdXQgdGVzdGluZyBob3cgdGhlIGRlbGVnYXRlIGlz
IGNhbGxlZC4KKyAgICAgICAgRVhQRUNUX0NBTEwobV9zaWxlbnREZWxlZ2F0ZSwgZHJhd3NDb250
ZW50KCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobV9zaWxlbnRE
ZWxlZ2F0ZSwgcHJlc2VydmVzM0QoKSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgICAgICBFWFBF
Q1RfQ0FMTChtX3NpbGVudERlbGVnYXRlLCBwYWludENvbnRlbnRzKF8sIF8pKS5UaW1lcyhBbnlO
dW1iZXIoKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1fc2lsZW50RGVsZWdhdGUsIG5vdGlmeVN5
bmNSZXF1aXJlZCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgfQorCisgICAgdm9pZCBleHBs
aWNpdGx5RGVzdHJveUxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBUaGUgdXNlciBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgcmVsZWFz
ZSgpIHRoZWlyIFJlZlB0ciB3aGVuCisgICAgICAgIC8vIHBhc3NpbmcgaXQgdG8gdGhpcyBmdW5j
dGlvbi4KKworICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlvbiBmYWlscywgdGhlbiBzb21lIG90
aGVyIHNtYXJ0IHBvaW50ZXIgaXMKKyAgICAgICAgLy8gaG9sZGluZyBvbiB0byB1cywgYW5kIHRo
YXQgaXMgcHJvYmFibHkgdmVyeSBpbXBvcnRhbnQgdG8ga25vdy4KKyAgICAgICAgQVNTRVJUX1RS
VUUobGF5ZXIuZ2V0KCktPmhhc09uZVJlZigpKTsKKworICAgICAgICAvLyBLbm93aW5nIHRoZXJl
IGlzIG9ubHkgb25lIHJlZiBsZWZ0LCB3aGVuIHRoaXMgbGF5ZXIgZXhpdHMKKyAgICAgICAgLy8g
c2NvcGUsIHRoZSBMYXllckNocm9taXVtIG9iamVjdCB3aWxsIGJlIGRlc3Ryb3llZC4KKyAgICB9
CisKKyAgICB2b2lkIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0YXRlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCBtX3BhcmVudC0+Y2hpbGRy
ZW4oKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZDEsIG1fcGFyZW50LT5jaGls
ZHJlbigpWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGQyLCBtX3BhcmVudC0+Y2hpbGRy
ZW4oKVsxXSk7CisgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkMywgbV9wYXJlbnQtPmNoaWxkcmVu
KClbMl0pOworICAgICAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQxLT5wYXJl
bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDItPnBhcmVu
dCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMy0+cGFyZW50
KCkpOworCisgICAgICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBtX2NoaWxk
MS0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEobV9ncmFuZENoaWxkMSwg
bV9jaGlsZDEtPmNoaWxkcmVuKClbMF0pOworICAgICAgICBFWFBFQ1RfRVEobV9ncmFuZENoaWxk
MiwgbV9jaGlsZDEtPmNoaWxkcmVuKClbMV0pOworICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZDEu
Z2V0KCksIG1fZ3JhbmRDaGlsZDEtPnBhcmVudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fY2hp
bGQxLmdldCgpLCBtX2dyYW5kQ2hpbGQyLT5wYXJlbnQoKSk7CisKKyAgICAgICAgQVNTRVJUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMSksIG1fY2hpbGQyLT5jaGlsZHJlbigpLnNpemUoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShtX2dyYW5kQ2hpbGQzLCBtX2NoaWxkMi0+Y2hpbGRyZW4oKVswXSk7
CisgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkMi5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cGFyZW50
KCkpOworCisgICAgICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBtX2NoaWxk
My0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIH0KKworICAgIHZvaWQgY3JlYXRlU2ltcGxlVGVz
dFRyZWUoKQorICAgIHsKKyAgICAgICAgbV9wYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
Jm1fcGFyZW50RGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkMSA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgICAgIG1fY2hpbGQyID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZDMgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgICAgICBtX2dyYW5kQ2hpbGQx
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICAgICAgbV9n
cmFuZENoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Cisg
ICAgICAgIG1fZ3JhbmRDaGlsZDMgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVs
ZWdhdGUpOworCisgICAgICAgIEVYUEVDVF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5
bmNSZXF1aXJlZCgpKS5UaW1lcygzKTsKKyAgICAgICAgbV9wYXJlbnQtPmFkZENoaWxkKG1fY2hp
bGQxKTsKKyAgICAgICAgbV9wYXJlbnQtPmFkZENoaWxkKG1fY2hpbGQyKTsKKyAgICAgICAgbV9w
YXJlbnQtPmFkZENoaWxkKG1fY2hpbGQzKTsKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJF
eHBlY3RhdGlvbnMoJm1fcGFyZW50RGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkMS0+YWRkQ2hp
bGQobV9ncmFuZENoaWxkMSk7CisgICAgICAgIG1fY2hpbGQxLT5hZGRDaGlsZChtX2dyYW5kQ2hp
bGQyKTsKKyAgICAgICAgbV9jaGlsZDItPmFkZENoaWxkKG1fZ3JhbmRDaGlsZDMpOworCisgICAg
ICAgIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0YXRlKCk7CisgICAgfQorCisgICAgdm9pZCB2ZXJp
ZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoY29uc3QgRmxvYXRSZWN0JiBleHBlY3RlZCwgY29uc3Qg
RmxvYXRSZWN0JiBhY3R1YWwpIGNvbnN0CisgICAgeworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEo
ZXhwZWN0ZWQubG9jYXRpb24oKS54KCksIGFjdHVhbC5sb2NhdGlvbigpLngoKSk7CisgICAgICAg
IEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5sb2NhdGlvbigpLnkoKSwgYWN0dWFsLmxvY2F0aW9u
KCkueSgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVkLnNpemUoKS53aWR0aCgp
LCBhY3R1YWwuc2l6ZSgpLndpZHRoKCkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0
ZWQuc2l6ZSgpLmhlaWdodCgpLCBhY3R1YWwuc2l6ZSgpLmhlaWdodCgpKTsKKyAgICB9CisKKyAg
ICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtX3NpbGVudERlbGVnYXRlLCBtX3BhcmVudERlbGVnYXRlOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3BhcmVudCwgbV9jaGlsZDEsIG1fY2hpbGQyLCBt
X2NoaWxkMywgbV9ncmFuZENoaWxkMSwgbV9ncmFuZENoaWxkMiwgbV9ncmFuZENoaWxkMzsKK307
CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgYmFzaWNDcmVhdGVBbmREZXN0cm95KQorewor
ICAgIE1vY2tMYXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKKworICAgIC8vIG5vdGlmeVN5bmNS
ZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBqdXN0IGJlY2F1c2UgdGhlIGxheWVyIGlzIGNy
ZWF0ZWQgb3IgZGVzdHJveWVkLgorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5
U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOworCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHRl
c3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICBBU1NF
UlRfVFJVRSh0ZXN0TGF5ZXIuZ2V0KCkpOworCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNo
b3VsZCBhbHNvIG5vdCBiZSBjYWxsZWQgb24gdGhlIGRlc3RydWN0b3Igd2hlbiB0aGUgbGF5ZXIg
aGFzIG5vIGNoaWxkcmVuLgorICAgIC8vIHNvIHdlIGV4cGxpY2l0bHkgbWFrZSBzdXJlIExheWVy
Q2hyb21pdW0gaXMgZGVzdHJveWVkIGJlZm9yZSBtb2NrIGRlbGVnYXRlLgorICAgIGV4cGxpY2l0
bHlEZXN0cm95TGF5ZXIodGVzdExheWVyLnJlbGVhc2UoKSk7Cit9CisKK1RFU1RfRihMYXllckNo
cm9taXVtVGVzdCwgYWRkQW5kUmVtb3ZlQ2hpbGQpCit7CisgICAgTW9ja0xheWVyRGVsZWdhdGUg
cGFyZW50RGVsZWdhdGU7CisgICAgTW9ja0xheWVyRGVsZWdhdGUgY2hpbGREZWxlZ2F0ZTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZw
YXJlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKworICAgIC8vIFVwb24gY3JlYXRpb24s
IGxheWVycyBzaG91bGQgbm90IGhhdmUgY2hpbGRyZW4gb3IgcGFyZW50LgorICAgIEFTU0VSVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnBhcmVudCgpKTsKKworICAgIC8vIFBhcmVudCBjYWxscyBu
b3RpZnlTeW5jUmVxdWlyZWQgZXhhY3RseSBvbmNlIHdoZW4gYWRkaW5nIGNoaWxkLgorICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwg
cGFyZW50LT5hZGRDaGlsZChjaGlsZCkpOworCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMSksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGls
ZC5nZXQoKSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50Lmdl
dCgpLCBjaGlsZC0+cGFyZW50KCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxk
LT5yb290TGF5ZXIoKSk7CisKKyAgICAvLyByZW1vdmVGcm9tUGFyZW50IHNob3VsZCBjYXVzZSB0
aGUgcGFyZW50J3Mgbm90aWZ5U3luY1JlcXVpcmVkIHRvIGJlIGNhbGxlZCBleGFjdGx5IG9uY2Uu
CisgICAgLy8gVGhlIGNoaWxkRGVsZWdhdGUgbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCByZW1h
aW4gdW4tdXNlZC4KKyAgICBFWFBFQ1RfQ0FMTChjaGlsZERlbGVnYXRlLCBub3RpZnlTeW5jUmVx
dWlyZWQoKSkuVGltZXMoMCk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpKTsKK30K
KworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlEZXN0cnVjdG9yU2VtYW50aWNzKQor
eworICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOworICAgIE1vY2tMYXllckRl
bGVnYXRlIGNoaWxkRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7
CisKKyAgICAvLyBTZXQgdXAgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbnMKKyAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+
YWRkQ2hpbGQoY2hpbGQpKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZC0+cGFyZW50KCkpOworCisg
ICAgLy8gV2hlbiBiZWluZyBkZXN0cm95ZWQsIG5vdGlmeVN5bmNSZXF1aXJlZCBpcyBjYWxsZWQg
b25jZSBmb3IgdGhlIHBhcmVudCwgYmVjYXVzZSBpdCBoYXMgb25lIGNoaWxkLAorICAgIC8vIGJ1
dCBzaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgdGhlIGNoaWxkIHdoaWNoIGhhcyBubyBjaGlsZHJl
bi4KKyAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkp
LlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKGNoaWxkRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1
aXJlZCgpKS5UaW1lcygwKTsKKworICAgIGV4cGxpY2l0bHlEZXN0cm95TGF5ZXIocGFyZW50LnJl
bGVhc2UoKSk7CisKKyAgICAvLyBDaGlsZCBzaG91bGQgaGF2ZSBiZWVuIHVuLXBhcmVudGVkIGNv
cnJlY3RseSwgYnV0IG5vdCB5ZXQgZGVzdHJveWVkIHNpbmNlIHdlIGhhdmUgYSByZWZlcmVuY2Ug
dG8gaXQuCisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5wYXJlbnQoKSk7Cit9CisKK1RFU1RfRihM
YXllckNocm9taXVtVGVzdCwgdmVyaWZ5RGVzdHJ1Y3RvckRvZXNOb3RMZWFrKQoreworICAgIC8v
IEluIHRoaXMgdGVzdCB3ZSBleHBsaWNpdGx5IGluc3RhbnRpYXRlIGEgc3BlY2lhbCBzdWJjbGFz
cyBvZgorICAgIC8vIExheWVyQ2hyb21pdW0gc28gd2UgY2FuIHRyYWNrIHRoZSBudW1iZXIgb2Yg
ZGVzdHJ1Y3RvcnMgY2FsbGVkLgorCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1
bWVudGVkRGVzdHJ1Y3Rvcj4gcGFyZW50LCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzLCBncmFuZENo
aWxkMSwgZ3JhbmRDaGlsZDIsIGdyYW5kQ2hpbGQzOworICAgIHBhcmVudCA9IGFkb3B0UmVmKG5l
dyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdh
dGUpKTsKKyAgICBjaGlsZDEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVt
ZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7CisgICAgY2hpbGQyID0gYWRvcHRS
ZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigmbV9zaWxlbnRE
ZWxlZ2F0ZSkpOworICAgIGNoaWxkMyA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aElu
c3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKKyAgICBncmFuZENoaWxk
MSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3Io
Jm1fc2lsZW50RGVsZWdhdGUpKTsKKyAgICBncmFuZENoaWxkMiA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsK
KyAgICBncmFuZENoaWxkMyA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1l
bnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKKworICAgIC8vIHNldCB1cCBhIHNp
bXBsZSB0cmVlLgorICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKGNoaWxkMik7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZDMpOworICAgIGNoaWxk
MS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGls
ZDIpOworICAgIGNoaWxkMi0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworCisgICAgLy8gQ2xlYXIg
YWxsIHRoZSBjaGlsZHJlbiBSZWZQdHJzIGhlcmUuIEJ1dCBzaW5jZSB0aGV5IGFyZSBhdHRhY2hl
ZCB0byB0aGUgdHJlZSwgbm8gZGVzdHJ1Y3RvcnMgc2hvdWxkIGJlIGNhbGxlZCB5ZXQuCisgICAg
Y2hpbGQxLmNsZWFyKCk7CisgICAgY2hpbGQyLmNsZWFyKCk7CisgICAgY2hpbGQzLmNsZWFyKCk7
CisgICAgZ3JhbmRDaGlsZDEuY2xlYXIoKTsKKyAgICBncmFuZENoaWxkMi5jbGVhcigpOworICAg
IGdyYW5kQ2hpbGQzLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfRVEoMCwgTGF5ZXJDaHJvbWl1bVdp
dGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQoKSk7CisK
KyAgICAvLyBkZWxldGluZyB0aGUgcGFyZW50IHNob3VsZCBjYXVzZSBhbGwgZGVzdHJ1Y3RvcnMg
dG8gYmUgaW52b2tlZC4KKyAgICBleHBsaWNpdGx5RGVzdHJveUxheWVyKHBhcmVudC5yZWxlYXNl
KCkpOworCisgICAgRVhQRUNUX0VRKDcsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVz
dHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkpOworfQorCitURVNUX0YoTGF5ZXJD
aHJvbWl1bVRlc3QsIGluc2VydENoaWxkKQoreworICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVu
dERlbGVnYXRlOworICAgIE1vY2tMYXllckRlbGVnYXRlIGNoaWxkRGVsZWdhdGU7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZwYXJlbnRE
ZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+Y2hpbGQxID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT5jaGls
ZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmNoaWxkRGVsZWdhdGUpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPmNoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0
ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+Y2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCZjaGlsZERlbGVnYXRlKTsKKworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KDApLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKworICAgIC8vIFRoZSBjaGlsZCBkZWxl
Z2F0ZSBub3RpZnlTeW5SZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGluc2VydGlu
Zy4KKyAgICBFWFBFQ1RfQ0FMTChjaGlsZERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSku
VGltZXMoMCk7CisKKyAgICAvLyBDYXNlIDE6IGluc2VydGluZyB0byBlbXB0eSBsaXN0LgorICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwg
MSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDMsIDApKTsKKyAgICBBU1NFUlRfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigxKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkMywgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50
LmdldCgpLCBjaGlsZDMtPnBhcmVudCgpKTsKKworICAgIC8vIENhc2UgMjogaW5zZXJ0aW5nIHRv
IGJlZ2lubmluZyBvZiBsaXN0CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMSwgMCkp
OworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBwYXJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxkcmVuKClbMF0p
OworICAgIEVYUEVDVF9FUShjaGlsZDMsIHBhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CisgICAgRVhQ
RUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQxLT5wYXJlbnQoKSk7CisKKyAgICAvLyBDYXNlIDM6
IGluc2VydGluZyB0byBtaWRkbGUgb2YgbGlzdAorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRDaGlsZChj
aGlsZDIsIDEpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcGFyZW50
LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFyZW50LT5jaGls
ZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxkcmVuKClbMV0p
OworICAgIEVYUEVDVF9FUShjaGlsZDMsIHBhcmVudC0+Y2hpbGRyZW4oKVsyXSk7CisgICAgRVhQ
RUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQyLT5wYXJlbnQoKSk7CisKKyAgICAvLyBDYXNlIDQ6
IGluc2VydGluZyB0byBlbmQgb2YgbGlzdAorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGls
ZDQsIDMpKTsKKworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCBwYXJlbnQt
PmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxk
cmVuKClbMF0pOworICAgIEVYUEVDVF9FUShjaGlsZDIsIHBhcmVudC0+Y2hpbGRyZW4oKVsxXSk7
CisgICAgRVhQRUNUX0VRKGNoaWxkMywgcGFyZW50LT5jaGlsZHJlbigpWzJdKTsKKyAgICBFWFBF
Q1RfRVEoY2hpbGQ0LCBwYXJlbnQtPmNoaWxkcmVuKClbM10pOworICAgIEVYUEVDVF9FUShwYXJl
bnQuZ2V0KCksIGNoaWxkNC0+cGFyZW50KCkpOworCisgICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3Rv
ciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBpdHMgY2hpbGRy
ZW4uCisgICAgRVhQRUNUX0NBTEwocGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgp
KS5UaW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBpbnNl
cnRDaGlsZFBhc3RFbmRPZkxpc3QpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnRE
ZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisKKyAgICAvLyBpbnNl
cnQgdG8gYW4gb3V0LW9mLWJvdW5kcyBpbmRleAorICAgIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hp
bGQxLCA1Myk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgcGFyZW50
LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFyZW50LT5jaGls
ZHJlbigpWzBdKTsKKworICAgIC8vIGluc2VydCBhbm90aGVyIGNoaWxkIHRvIG91dC1vZi1ib3Vu
ZHMsIHdoZW4gbGlzdCBpcyBub3QgYWxyZWFkeSBlbXB0eS4KKyAgICBwYXJlbnQtPmluc2VydENo
aWxkKGNoaWxkMiwgMjQ1OSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigy
KSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFy
ZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxk
cmVuKClbMV0pOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2VydFNhbWVDaGls
ZFR3aWNlKQoreworICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnBhcmVu
dERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKwor
ICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVuKCku
c2l6ZSgpKTsKKworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihw
YXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDEsIDApKTsKKyAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEs
IHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigyKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQy
LCBwYXJlbnQtPmNoaWxkcmVuKClbMV0pOworCisgICAgLy8gSW5zZXJ0aW5nIHRoZSBzYW1lIGNo
aWxkIGFnYWluIHNob3VsZCBjYXVzZSB0aGUgY2hpbGQgdG8gYmUgcmVtb3ZlZCBhbmQgcmUtaW5z
ZXJ0ZWQgYXQgdGhlIG5ldyBsb2NhdGlvbi4KKyAgICAvLyBTbyB0aGUgcGFyZW50J3Mgbm90aWZ5
U3luY1JlcXVpcmVkIHdvdWxkIGJlIGNhbGxlZCBvbmUgb3IgbW9yZSB0aW1lcy4KKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIEF0TGVh
c3QoMSksIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAxKSk7CisKKyAgICAvLyBjaGlsZDEg
c2hvdWxkIG5vdyBiZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgorICAgIEFTU0VSVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDIpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfRVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxkcmVuKClbMF0pOworICAgIEVYUEVDVF9FUShjaGls
ZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CisKKyAgICAvLyBwYXJlbnQncyBkZXN0cnVjdG9y
IHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGxlZnRvdmVyIGNo
aWxkcmVuCisgICAgRVhQRUNUX0NBTEwocGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJl
ZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBp
bnNlcnRDaGlsZFRoYXRBbHJlYWR5SGFkUGFyZW50KQoreworICAgIE1vY2tMYXllckRlbGVnYXRl
IG9sZFBhcmVudERlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBvbGRQYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJm9sZFBhcmVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERl
bGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworCisgICAgLy8gc2V0IHVwIGFuZCBzYW5pdHkt
Y2hlY2sgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbnMKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9U
SUZZX1NZTkNfQkVIQVZJT1Iob2xkUGFyZW50RGVsZWdhdGUsIDEsIG9sZFBhcmVudC0+YWRkQ2hp
bGQoY2hpbGQpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgb2xkUGFy
ZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oMCksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGlsZCwg
b2xkUGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEob2xkUGFyZW50LmdldCgp
LCBjaGlsZC0+cGFyZW50KCkpOworCisgICAgLy8gSW5zZXJ0aW5nIHRvIG5ldyBwYXJlbnQgY2F1
c2VzIG9sZCBwYXJlbnQncyBub3RpZnlTeW5jUmVxdWlyZWQgdG8gYmUgY2FsbGVkLgorICAgIC8v
IE5vdGUgdGhhdCBpdCBhbHNvIGNhdXNlcyBwYXJlbnQncyBub3RpZnlTeW5jUmVxdWlyZWQgdG8g
YmUgY2FsbGVkLCBidXQgdGhhdCBpcyB0ZXN0ZWQgZWxzZXdoZXJlLgorICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihvbGRQYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50
LT5pbnNlcnRDaGlsZChjaGlsZCwgMCkpOworCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMCksIG9sZFBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEFTU0VSVF9FUShz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoY2hpbGQsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CisgICAgRVhQRUNUX0VRKHBh
cmVudC5nZXQoKSwgY2hpbGQtPnBhcmVudCgpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1U
ZXN0LCByZXBsYWNlQ2hpbGRXaXRoTmV3Q2hpbGQpCit7CisgICAgY3JlYXRlU2ltcGxlVGVzdFRy
ZWUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRShjaGlsZDQtPnBh
cmVudCgpKTsKKworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
X3BhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBtX3BhcmVudC0+cmVwbGFjZUNoaWxkKG1fY2hp
bGQyLmdldCgpLCBjaGlsZDQpKTsKKworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KDMpLCBtX3BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShtX2NoaWxk
MSwgbV9wYXJlbnQtPmNoaWxkcmVuKClbMF0pOworICAgIEVYUEVDVF9FUShjaGlsZDQsIG1fcGFy
ZW50LT5jaGlsZHJlbigpWzFdKTsKKyAgICBFWFBFQ1RfRVEobV9jaGlsZDMsIG1fcGFyZW50LT5j
aGlsZHJlbigpWzJdKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIGNoaWxkNC0+cGFy
ZW50KCkpOworCisgICAgRVhQRUNUX0ZBTFNFKG1fY2hpbGQyLT5wYXJlbnQoKSk7CisKKyAgICAv
LyBwYXJlbnQncyBkZXN0cnVjdG9yIHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBp
dCByZW1vdmVzIGxlZnRvdmVyIGNoaWxkcmVuCisgICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxl
Z2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworfQorCitURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZFRoYXRIYXNPdGhl
clBhcmVudCkKK3sKKyAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworCisgICAgLy8gY3JlYXRl
IGFub3RoZXIgc2ltcGxlIHRyZWUgd2l0aCB0ZXN0TGF5ZXIgYW5kIGNoaWxkNC4KKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3Np
bGVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICB0ZXN0TGF5ZXItPmFkZENo
aWxkKGNoaWxkNCk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMSksIHRlc3RM
YXllci0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDQsIHRlc3RMYXll
ci0+Y2hpbGRyZW4oKVswXSk7CisgICAgRVhQRUNUX0VRKHRlc3RMYXllci5nZXQoKSwgY2hpbGQ0
LT5wYXJlbnQoKSk7CisKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IobV9wYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgxKSwgbV9wYXJlbnQtPnJlcGxhY2VDaGlsZCht
X2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigzKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEobV9j
aGlsZDEsIG1fcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQ0LCBt
X3BhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQzLCBtX3BhcmVu
dC0+Y2hpbGRyZW4oKVsyXSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBjaGlsZDQt
PnBhcmVudCgpKTsKKworICAgIC8vIHRlc3RMYXllciBzaG91bGQgbm8gbG9uZ2VyIGhhdmUgY2hp
bGQ0LAorICAgIC8vIGFuZCBjaGlsZDIgc2hvdWxkIG5vIGxvbmdlciBoYXZlIGEgcGFyZW50Lgor
ICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCB0ZXN0TGF5ZXItPmNoaWxkcmVu
KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9jaGlsZDItPnBhcmVudCgpKTsKKworICAg
IC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5U3luY1JlcXVpcmVkIGFz
IGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRyZW4KKyAgICBFWFBFQ1RfQ0FMTChtX3BhcmVudERl
bGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7Cit9CisKK1RF
U1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNoaWxkV2l0aFNhbWVDaGlsZCkKK3sKKyAg
ICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNo
b3VsZCBub3QgYmUgY2FsbGVkIGJlY2F1c2UgaXRzIHRoZSBzYW1lIGNoaWxkCisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUsIDAsIG1f
cGFyZW50LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCksIG1fY2hpbGQyKSk7CisKKyAgICB2
ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpOworCisgICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3Rv
ciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBsZWZ0b3ZlciBj
aGlsZHJlbgorICAgIEVYUEVDVF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1
aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCByZW1vdmVBbGxDaGlsZHJlbikKK3sKKyAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworCisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdh
dGUsIEF0TGVhc3QoMSksIG1fcGFyZW50LT5yZW1vdmVBbGxDaGlsZHJlbigpKTsKKworICAgIEFT
U0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBtX3BhcmVudC0+Y2hpbGRyZW4oKS5zaXpl
KCkpOworICAgIEVYUEVDVF9GQUxTRShtX2NoaWxkMS0+cGFyZW50KCkpOworICAgIEVYUEVDVF9G
QUxTRShtX2NoaWxkMi0+cGFyZW50KCkpOworICAgIEVYUEVDVF9GQUxTRShtX2NoaWxkMy0+cGFy
ZW50KCkpOworCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVk
IGlmIHRyeWluZyB0byByZW1vdmVBbGxDaGlsZHJlbiB3aGVuIHRoZXJlIGFyZSBubyBjaGlsZHJl
bi4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobV9wYXJlbnRE
ZWxlZ2F0ZSwgMCwgbV9wYXJlbnQtPnJlbW92ZUFsbENoaWxkcmVuKCkpOworfQorCitURVNUX0Yo
TGF5ZXJDaHJvbWl1bVRlc3QsIHNldENoaWxkcmVuKQoreworICAgIE1vY2tMYXllckRlbGVnYXRl
IG5ld1BhcmVudERlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBvbGRQYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBuZXdQYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm5ld1BhcmVu
dERlbGVnYXRlKTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwor
CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG5ld0NoaWxkcmVuOworICAgIG5l
d0NoaWxkcmVuLmFwcGVuZChjaGlsZDEpOworICAgIG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZDIp
OworCisgICAgLy8gU2V0IHVwIGFuZCB2ZXJpZnkgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbnM6IGNo
aWxkMSBoYXMgYSBwYXJlbnQsIGNoaWxkMiBoYXMgbm8gcGFyZW50LgorICAgIG9sZFBhcmVudC0+
YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwg
bmV3UGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKG9sZFBhcmVudC5n
ZXQoKSwgY2hpbGQxLT5wYXJlbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMi0+cGFyZW50
KCkpOworCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG5ld1Bh
cmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBuZXdQYXJlbnQtPnNldENoaWxkcmVuKG5ld0NoaWxk
cmVuKSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgbmV3UGFyZW50
LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKG5ld1BhcmVudC5nZXQoKSwgY2hp
bGQxLT5wYXJlbnQoKSk7CisgICAgRVhQRUNUX0VRKG5ld1BhcmVudC5nZXQoKSwgY2hpbGQyLT5w
YXJlbnQoKSk7CisKKyAgICAvLyBwYXJlbnQncyBkZXN0cnVjdG9yIHdpbGwgaW52b2tlIG5vdGlm
eVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGl0cyBjaGlsZHJlbi4KKyAgICBFWFBFQ1RfQ0FM
TChuZXdQYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEF0TGVhc3Qo
MSkpOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGdldFJvb3RMYXllckFmdGVyVHJl
ZU1hbmlwdWxhdGlvbnMpCit7CisgICAgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVu
dERlbGVnYXRlKTsKKworICAgIC8vIEluIHRoaXMgdGVzdCBjYXNlLCB3ZSBkb24ndCBjYXJlIGFi
b3V0IGhvdyB0aGUgcGFyZW50J3Mgbm90aWZ5U3luY1JlcXVpcmVkIGlzIGNhbGxlZC4KKyAgICBF
WFBFQ1RfQ0FMTChtX3BhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMo
QW55TnVtYmVyKCkpOworCisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX3BhcmVudC0+
cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDEtPnJv
b3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQyLT5yb290
TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMy0+cm9vdExh
eWVyKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDQuZ2V0KCksICAgY2hpbGQ0LT5yb290TGF5ZXIo
KSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dyYW5kQ2hpbGQxLT5yb290TGF5
ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dyYW5kQ2hpbGQyLT5yb290
TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dyYW5kQ2hpbGQzLT5y
b290TGF5ZXIoKSk7CisKKyAgICBtX2NoaWxkMS0+cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAg
Ly8gY2hpbGQxIGFuZCBpdHMgY2hpbGRyZW4sIGdyYW5kQ2hpbGQxIGFuZCBncmFuZENoaWxkMiBh
cmUgbm93IG9uIGEgc2VwYXJhdGUgc3VidHJlZS4KKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0
KCksIG1fcGFyZW50LT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgp
LCBtX2NoaWxkMS0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwg
bV9jaGlsZDItPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1f
Y2hpbGQzLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkNC5nZXQoKSwgY2hpbGQ0
LT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5kQ2hp
bGQxLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5k
Q2hpbGQyLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dy
YW5kQ2hpbGQzLT5yb290TGF5ZXIoKSk7CisKKyAgICBtX2dyYW5kQ2hpbGQzLT5hZGRDaGlsZChj
aGlsZDQpOworCisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX3BhcmVudC0+cm9vdExh
eWVyKCkpOworICAgIEVYUEVDVF9FUShtX2NoaWxkMS5nZXQoKSwgbV9jaGlsZDEtPnJvb3RMYXll
cigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQyLT5yb290TGF5ZXIo
KSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMy0+cm9vdExheWVyKCkp
OworICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgY2hpbGQ0LT5yb290TGF5ZXIoKSk7Cisg
ICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5kQ2hpbGQxLT5yb290TGF5ZXIoKSk7
CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5kQ2hpbGQyLT5yb290TGF5ZXIo
KSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dyYW5kQ2hpbGQzLT5yb290TGF5
ZXIoKSk7CisKKyAgICBtX2NoaWxkMi0+cmVwbGFjZUNoaWxkKG1fZ3JhbmRDaGlsZDMuZ2V0KCks
IG1fY2hpbGQxKTsKKworICAgIC8vIGdyYW5kQ2hpbGQzIGdldHMgb3JwaGFuZWQgYW5kIHRoZSBj
aGlsZDEgc3VidHJlZSBnZXRzIHBsYW50ZWQgYmFjayBpbnRvIHRoZSB0cmVlIHVuZGVyIGNoaWxk
Mi4KKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fcGFyZW50LT5yb290TGF5ZXIoKSk7
CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMS0+cm9vdExheWVyKCkpOwor
ICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDItPnJvb3RMYXllcigpKTsKKyAg
ICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQzLT5yb290TGF5ZXIoKSk7CisgICAg
RVhQRUNUX0VRKG1fZ3JhbmRDaGlsZDMuZ2V0KCksIGNoaWxkNC0+cm9vdExheWVyKCkpOworICAg
IEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMS0+cm9vdExheWVyKCkpOwor
ICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMi0+cm9vdExheWVyKCkp
OworICAgIEVYUEVDVF9FUShtX2dyYW5kQ2hpbGQzLmdldCgpLCBtX2dyYW5kQ2hpbGQzLT5yb290
TGF5ZXIoKSk7Cit9CisKKy8vIEZJWE1FOiBuZWVkIHRvIGFkZCBhIHRlc3QgZm9yIGdldERlc2Nl
bmRhbnREcmF3c0NvbnRlbnQgYWZ0ZXIgcmVzb2x2aW5nCisvLyAgICAgICAgc29tZSBpc3N1ZXMg
d2l0aCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkuCisvLyAgICAgICAg
c2VlIGRpc2N1c3Npb24gb24gaXNzdWUgNjc3NTAKKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKK3sKKyAgICAvLyBU
aGUgc2VtYW50aWNzIGZvciBzZXROZWVkc0Rpc3BsYXkgd2hpY2ggYXJlIHRlc3RlZCBoZXJlOgor
ICAgIC8vICAgMS4gY3JlYXRlcyBhIHVuaW9uZWQgZGlydHlSZWN0IGFwcHJvcHJpYXRlbHkuCisg
ICAgLy8gICAyLiBpbmRpcmVjdGx5IGNhbGxzIG5vdGlmeVN5bmNSZXF1aXJlZCwgZXhhY3RseSBv
bmNlIGZvciBlYWNoIGNhbGwgdG8gc2V0TmVlZHNEaXNwbGF5LgorCisgICAgTW9ja0xheWVyRGVs
ZWdhdGUgbW9ja0RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAgSW50U2l6ZSB0ZXN0
Qm91bmRzID0gSW50U2l6ZSg1MDEsIDUwOCk7CisKKyAgICBGbG9hdFJlY3QgZGlydHkxID0gRmxv
YXRSZWN0KDEwLjBmLCAxNS4wZiwgMS4wZiwgMi4wZik7CisgICAgRmxvYXRSZWN0IGRpcnR5MiA9
IEZsb2F0UmVjdCgyMC4wZiwgMjUuMGYsIDMuMGYsIDQuMGYpOworICAgIEZsb2F0UmVjdCBlbXB0
eURpcnR5UmVjdCA9IEZsb2F0UmVjdCg0MC4wZiwgNDUuMGYsIDAsIDApOworICAgIEZsb2F0UmVj
dCBvdXRPZkJvdW5kc0RpcnR5UmVjdCA9IEZsb2F0UmVjdCg0MDAuMGYsIDQwNS4wZiwgNTAwLjBm
LCA1MDIuMGYpOworCisgICAgLy8gQmVmb3JlIGFueXRoaW5nLCB0ZXN0TGF5ZXIgc2hvdWxkIGhh
dmUgYW4gZW1wdHkgZGlydHkgcmVjdC4KKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW5pdGlhbGl6YXRpb24s
IGJ1dCBub3RpZnlTeW5jUmVxdWlyZWQgYmVoYXZpb3IgaXMgdmVyaWZpZWQgYW55d2F5IHRvIGF2
b2lkIHdhcm5pbmdzLgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKKyAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAw
LCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RM
YXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIFRoZSByZWFsIHRlc3QgYmVn
aW5zIGhlcmUuCisKKyAgICAvLyBDYXNlIDE6IGJhc2ljCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkoZGlydHkxKSk7CisgICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGRpcnR5
MSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisKKyAgICAvLyBDYXNlIDI6IGEgc2Vjb25kIGRp
cnR5IHJlY3Qgc2hvdWxkIGJlIHVuaW9uZWQgb2YgZGlydHkxIGFuZCBkaXJ0eTIuCisgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVz
dExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkyKSk7CisgICAgdmVyaWZ5RmxvYXRSZWN0c0Fs
bW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkpOworCisgICAgLy8gQ2FzZSAzOiBkaXJ0eSByZWN0IHNob3VsZCBub3Qg
Y2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkgcmVjdC4KKyAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNl
dE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVjdCkpOworICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1v
c3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXIt
PmRpcnR5UmVjdCgpKTsKKworICAgIC8vIENhc2UgNDogTGF5ZXJDaHJvbWl1bSBzaG91bGQgYWNj
ZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28gYmV5b25kIGl0cyBib3VuZHMKKyAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldE5lZWRzRGlzcGxheShvdXRPZkJvdW5kc0RpcnR5UmVjdCkpOworICAgIHZlcmlmeUZsb2F0
UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiks
IHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworCisgICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3Bs
YXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFyZyBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSBi
b3VuZHMgdG8gYmUgZGlydHksCisgICAgLy8gICAgICAgICBvdmVycmlkaW5nIGFueSBleGlzdGlu
ZyBkaXJ0eSByZWN0LgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOworICAgIHZl
cmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0
aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisKKyAg
ICAvLyByZXNldE5lZWRzRGlzcGxheSBzaG91bGQgZW1wdHkgdGhlIGRpcnR5IHJlY3QsIGFuZCBO
T1QgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlz
cGxheSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHko
KSk7Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNh
dXNlc0NvcnJlY3RCZWhhdmlvcikKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBpbml0aWFsRGVs
ZWdhdGU7CisgICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmluaXRpYWxE
ZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGR1bW15TGF5ZXIgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOyAvLyBqdXN0IGEgZHVtbXkgbGF5ZXIg
Zm9yIHRoaXMgdGVzdCBjYXNlLgorCisgICAgLy8gc2FuaXR5IGNoZWNrIG9mIGluaXRpYWwgdGVz
dCBjb25kaXRpb24KKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1w
dHkoKSk7CisKKyAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGNhbGwgbmVl
ZHNEaXNwbGF5IGFuZCBuZWVkc0NvbW1pdCB3aGVuIGNoYW5nZWQuCisgICAgLy8gbm90aWZ5U3lu
Y1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVkLCBhbmQgdGhlIGRpcnR5UmVjdCBzaG91bGQg
cmVtYWluIHN0aWxsIGVtcHR5LgorICAgIEVYUEVDVF9DQUxMKGluaXRpYWxEZWxlZ2F0ZSwgbm90
aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOyAvLyBvbGQgZGVsZWdhdGUgc2hvdWxkIG5vdCBi
ZSB1c2VkIHdoZW4gc2V0RGVsZWdhdGUgZ2l2ZXMgYSBuZXcgZGVsZWdhdGUuCisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExh
eWVyLT5zZXREZWxlZ2F0ZSgmbW9ja0RlbGVnYXRlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRNYXNr
c1RvQm91bmRzKHRydWUpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7
CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMCwgdGVzdExheWVyLT5zZXRNYXNrTGF5ZXIoZHVtbXlMYXllci5nZXQoKSkpOworICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRl
c3RMYXllci0+c2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UodHJ1ZSkpOworICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RM
YXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDQwLCA1MCkpKTsKKyAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0
ZXN0TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDEwLCAxMCkpKTsKKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0
TGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IodHJ1ZSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0SXNO
b25Db21wb3NpdGVkQ29udGVudCh0cnVlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRSZXBsaWNhTGF5
ZXIoZHVtbXlMYXllci5nZXQoKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RHJhd09wYWNpdHkoMC41
ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVs
ZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdCgzLCAzLCA4LCA4KSkp
OworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDAsIHRlc3RMYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSgwKSk7CisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExh
eWVyLT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0
TGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsK
KyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAwLCB0ZXN0TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCg0LCA1LCA2LCA3
KSkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsK
KworICAgIC8vIE5leHQsIHRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRz
Q29tbWl0IChidXQgbm90IHNldE5lZWRzRGlzcGxheSkKKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVz
IHNob3VsZCBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLCBidXQgdGhlIGRpcnR5
IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2UuCisgICAgLy8gTm90ZSB0aGF0IGZvciBtYW55IG9mIHRo
ZXNlIHByb3BlcnRpZXMgaXQgaXMgaW1wb3J0YW50IHRvIHRlc3Qgc2V0dGluZyB0aGUgcHJvcGVy
dHkgdG8gYSB2YWx1ZSB0aGF0CisgICAgLy8gaXMgZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgY29u
c3RydWN0b3IgaW5pdGlhbGl6ZXMgaXQgdG8uCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50KDEuMjNmLCA0LjU2ZikpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9U
SUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEFuY2hvclBv
aW50WigwLjdmKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMC40
ZiwgMC40ZiwgMC40ZikpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldENsZWFyc0NvbnRleHQodHJ1ZSkp
OworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDEsIHRlc3RMYXllci0+c2V0SGlkZGVuKHRydWUpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE9w
YWNpdHkoMC41ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0T3BhcXVlKGZhbHNlKSk7CisgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVz
dExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDQuMGYsIDkuMGYpKSk7CisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExh
eWVyLT5zZXRaUG9zaXRpb24oMC41ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0U3VibGF5ZXJUcmFu
c2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0VHJhbnNm
b3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9U
SUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldERvdWJsZVNp
ZGVkKGZhbHNlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRHZW9tZXRyeUZsaXBwZWQodHJ1ZSkpOwor
CisgICAgLy8gVGhlIGFib3ZlIHRlc3RzIHNob3VsZCBub3QgaGF2ZSBjYXVzZWQgYSBub24tZW1w
dHkgZGlydHkgcmVjdC4KKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlz
RW1wdHkoKSk7CisKKyAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXRO
ZWVkc0Rpc3BsYXkKKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHdpbGwgY2FsbCBub3RpZnlTeW5j
UmVxdWlyZWQgYW5kIGNoYW5nZSB0aGUgZGlydHkgcmVjdC4KKyAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJv
dW5kcyhJbnRTaXplKDUsIDEwKSkpOworICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChG
bG9hdFJlY3QoMC4wZiwgMC4wZiwgNS4wZiwgMTAuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgp
KTsKKyAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgRVhQRUNUX1RSVUUo
dGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAgRVhFQ1VURV9BTkRfVkVS
SUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRG
cmFtZShGbG9hdFJlY3QoMS4wZiwgMi4wZiwgMy4wZiwgNC4wZikpKTsKKyAgICB2ZXJpZnlGbG9h
dFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVz
dExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgp
OworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKwor
ICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFkZCBhIHRlc3QgZm9yIHNldExheWVyVHJlZUhvc3Qgd2l0
aCBhIG5vbi1udWxsIHN0dWJiZWQgQ0NMYXllclRyZWVIb3N0LgorfQorCit9IC8vIG5hbWVzcGFj
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108872</attachid>
            <date>2011-09-27 11:15:55 -0700</date>
            <delta_ts>2011-09-27 14:19:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68572-20110927111554.patch</filename>
            <type>text/plain</type>
            <size>33062</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYwOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
Yjg0OTkyYTE3NzEzMjFmYTYwNmExOGUwODU4ZjFmNjhjNmE4Y2YwOC4uNjU2MGQ5YjYwOGE5OWJl
OGFiZjg5Mzc4YTIwMDY2NjIwYWJhYWEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMS0wOS0yNyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgdW5pdCB0ZXN0cyBmb3IgTGF5ZXJDaHJvbWl1bS4g
IEVtcGhhc2lzIG9uIHZlcmlmeWluZworICAgICAgICBiZWhhdmlvciBvZiBub3RpZnlTeW5jUmVx
dWlyZWQgY2FsbGJhY2sgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTcyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0
ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorCiAyMDExLTA5LTI2ICBOYXQgRHVj
YSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1ha2UgQ0NUaHJl
YWRQcm94eSBkcmF3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA3Mzc1MmEyOTRj
NDAwYWJjODk3YjNhODM1MjBjNjRhMjFiZjFhMTQxLi5kMDg2M2Y5MWMzYzk0MTY0MWE5ZWE1Yzlj
Y2MzN2I1YTI2MTZjNmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTYzLDYg
KzYzLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Nb2NrR3JhcGhpY3NDb250ZXh0M0RUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1BPREFyZW5hVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzIxMTQ4
NDQ0NWI2ZThkMDJlMmQ3NjE5MDM2NDNmZGNmYmRkMGYxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCAr
MSw2NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyA6OnRlc3Rp
bmc6Ok1vY2s7Cit1c2luZyA6OnRlc3Rpbmc6Ol87Cit1c2luZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7
Cit1c2luZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKK3VzaW5nIDo6dGVzdGluZzo6UmV0dXJuOwor
CisjZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihkZWxlZ2F0
ZSwgbnVtVGltZXNFeHBlY3RlZE5vdGlmeVN5bmMsIGNvZGVUb1Rlc3QpIFwKKyAgICBFWFBFQ1Rf
Q0FMTCgoZGVsZWdhdGUpLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoKG51bVRpbWVzRXhw
ZWN0ZWROb3RpZnlTeW5jKSk7IFwKKyAgICBjb2RlVG9UZXN0OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNb2NrOjpWZXJpZnlB
bmRDbGVhckV4cGVjdGF0aW9ucygmKGRlbGVnYXRlKSkKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
TW9ja0xheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsKK3B1YmxpYzoKKyAg
ICBNT0NLX0NPTlNUX01FVEhPRDAoZHJhd3NDb250ZW50LCBib29sKCkpOworICAgIE1PQ0tfQ09O
U1RfTUVUSE9EMChwcmVzZXJ2ZXMzRCwgYm9vbCgpKTsKKyAgICBNT0NLX01FVEhPRDIocGFpbnRD
b250ZW50cywgdm9pZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikpOworICAgIE1P
Q0tfTUVUSE9EMChub3RpZnlTeW5jUmVxdWlyZWQsIHZvaWQoKSk7Cit9OworCitjbGFzcyBMYXll
ckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IgOiBwdWJsaWMgTGF5ZXJDaHJvbWl1
bSB7CitwdWJsaWM6CisgICAgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9y
KENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCisgICAgICAgIDogTGF5ZXJDaHJvbWl1bShkZWxl
Z2F0ZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+TGF5ZXJDaHJvbWl1bVdpdGhJbnN0
cnVtZW50ZWREZXN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHNfbnVtSW5zdGFuY2VzRGVzdHJv
eWVkKys7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQo
KSB7IHJldHVybiBzX251bUluc3RhbmNlc0Rlc3Ryb3llZDsgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyBpbnQgc19udW1JbnN0YW5jZXNEZXN0cm95ZWQ7Cit9OworCitpbnQgTGF5ZXJDaHJvbWl1
bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpzX251bUluc3RhbmNlc0Rlc3Ryb3llZCA9IDA7
CisKK2NsYXNzIExheWVyQ2hyb21pdW1UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICAvLyBtX3Np
bGVudERlbGVnYXRlIGlzIGluaXRpYWxpemVkIHRvIGJlIGp1c3QgYSBzdHViIGFuZCB3aWxsCisg
ICAgICAgIC8vIG5vdCBwcmludCBhbnkgd2FybmluZ3MuIEl0IGlzIHVzZWQgd2hlbiB3ZSBhcmUg
bm90IHdvcnJpZWQKKyAgICAgICAgLy8gYWJvdXQgdGVzdGluZyBob3cgdGhlIGRlbGVnYXRlIGlz
IGNhbGxlZC4KKyAgICAgICAgRVhQRUNUX0NBTEwobV9zaWxlbnREZWxlZ2F0ZSwgZHJhd3NDb250
ZW50KCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobV9zaWxlbnRE
ZWxlZ2F0ZSwgcHJlc2VydmVzM0QoKSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgICAgICBFWFBF
Q1RfQ0FMTChtX3NpbGVudERlbGVnYXRlLCBwYWludENvbnRlbnRzKF8sIF8pKS5UaW1lcyhBbnlO
dW1iZXIoKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1fc2lsZW50RGVsZWdhdGUsIG5vdGlmeVN5
bmNSZXF1aXJlZCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgfQorCisgICAgdm9pZCBleHBs
aWNpdGx5RGVzdHJveUxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBUaGUgdXNlciBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgcmVsZWFz
ZSgpIHRoZWlyIFJlZlB0ciB3aGVuCisgICAgICAgIC8vIHBhc3NpbmcgaXQgdG8gdGhpcyBmdW5j
dGlvbi4KKworICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlvbiBmYWlscywgdGhlbiBzb21lIG90
aGVyIHNtYXJ0IHBvaW50ZXIgaXMKKyAgICAgICAgLy8gaG9sZGluZyBvbiB0byB1cywgYW5kIHRo
YXQgaXMgcHJvYmFibHkgdmVyeSBpbXBvcnRhbnQgdG8ga25vdy4KKyAgICAgICAgQVNTRVJUX1RS
VUUobGF5ZXIuZ2V0KCktPmhhc09uZVJlZigpKTsKKworICAgICAgICAvLyBLbm93aW5nIHRoZXJl
IGlzIG9ubHkgb25lIHJlZiBsZWZ0LCB3aGVuIHRoaXMgbGF5ZXIgZXhpdHMKKyAgICAgICAgLy8g
c2NvcGUsIHRoZSBMYXllckNocm9taXVtIG9iamVjdCB3aWxsIGJlIGRlc3Ryb3llZC4KKyAgICB9
CisKKyAgICB2b2lkIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0YXRlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCBtX3BhcmVudC0+Y2hpbGRy
ZW4oKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZDEsIG1fcGFyZW50LT5jaGls
ZHJlbigpWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGQyLCBtX3BhcmVudC0+Y2hpbGRy
ZW4oKVsxXSk7CisgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkMywgbV9wYXJlbnQtPmNoaWxkcmVu
KClbMl0pOworICAgICAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQxLT5wYXJl
bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDItPnBhcmVu
dCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMy0+cGFyZW50
KCkpOworCisgICAgICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBtX2NoaWxk
MS0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEobV9ncmFuZENoaWxkMSwg
bV9jaGlsZDEtPmNoaWxkcmVuKClbMF0pOworICAgICAgICBFWFBFQ1RfRVEobV9ncmFuZENoaWxk
MiwgbV9jaGlsZDEtPmNoaWxkcmVuKClbMV0pOworICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZDEu
Z2V0KCksIG1fZ3JhbmRDaGlsZDEtPnBhcmVudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fY2hp
bGQxLmdldCgpLCBtX2dyYW5kQ2hpbGQyLT5wYXJlbnQoKSk7CisKKyAgICAgICAgQVNTRVJUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMSksIG1fY2hpbGQyLT5jaGlsZHJlbigpLnNpemUoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShtX2dyYW5kQ2hpbGQzLCBtX2NoaWxkMi0+Y2hpbGRyZW4oKVswXSk7
CisgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkMi5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cGFyZW50
KCkpOworCisgICAgICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBtX2NoaWxk
My0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIH0KKworICAgIHZvaWQgY3JlYXRlU2ltcGxlVGVz
dFRyZWUoKQorICAgIHsKKyAgICAgICAgbV9wYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
Jm1fcGFyZW50RGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkMSA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgICAgIG1fY2hpbGQyID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZDMgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgICAgICBtX2dyYW5kQ2hpbGQx
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICAgICAgbV9n
cmFuZENoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7Cisg
ICAgICAgIG1fZ3JhbmRDaGlsZDMgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVs
ZWdhdGUpOworCisgICAgICAgIEVYUEVDVF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5
bmNSZXF1aXJlZCgpKS5UaW1lcygzKTsKKyAgICAgICAgbV9wYXJlbnQtPmFkZENoaWxkKG1fY2hp
bGQxKTsKKyAgICAgICAgbV9wYXJlbnQtPmFkZENoaWxkKG1fY2hpbGQyKTsKKyAgICAgICAgbV9w
YXJlbnQtPmFkZENoaWxkKG1fY2hpbGQzKTsKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJF
eHBlY3RhdGlvbnMoJm1fcGFyZW50RGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkMS0+YWRkQ2hp
bGQobV9ncmFuZENoaWxkMSk7CisgICAgICAgIG1fY2hpbGQxLT5hZGRDaGlsZChtX2dyYW5kQ2hp
bGQyKTsKKyAgICAgICAgbV9jaGlsZDItPmFkZENoaWxkKG1fZ3JhbmRDaGlsZDMpOworCisgICAg
ICAgIHZlcmlmeVRlc3RUcmVlSW5pdGlhbFN0YXRlKCk7CisgICAgfQorCisgICAgdm9pZCB2ZXJp
ZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoY29uc3QgRmxvYXRSZWN0JiBleHBlY3RlZCwgY29uc3Qg
RmxvYXRSZWN0JiBhY3R1YWwpIGNvbnN0CisgICAgeworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEo
ZXhwZWN0ZWQubG9jYXRpb24oKS54KCksIGFjdHVhbC5sb2NhdGlvbigpLngoKSk7CisgICAgICAg
IEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5sb2NhdGlvbigpLnkoKSwgYWN0dWFsLmxvY2F0aW9u
KCkueSgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVkLnNpemUoKS53aWR0aCgp
LCBhY3R1YWwuc2l6ZSgpLndpZHRoKCkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0
ZWQuc2l6ZSgpLmhlaWdodCgpLCBhY3R1YWwuc2l6ZSgpLmhlaWdodCgpKTsKKyAgICB9CisKKyAg
ICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtX3NpbGVudERlbGVnYXRlLCBtX3BhcmVudERlbGVnYXRlOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3BhcmVudCwgbV9jaGlsZDEsIG1fY2hpbGQyLCBt
X2NoaWxkMywgbV9ncmFuZENoaWxkMSwgbV9ncmFuZENoaWxkMiwgbV9ncmFuZENoaWxkMzsKK307
CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgYmFzaWNDcmVhdGVBbmREZXN0cm95KQorewor
ICAgIE1vY2tMYXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKKworICAgIC8vIG5vdGlmeVN5bmNS
ZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBqdXN0IGJlY2F1c2UgdGhlIGxheWVyIGlzIGNy
ZWF0ZWQgb3IgZGVzdHJveWVkLgorICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5
U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOworCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHRl
c3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICBBU1NF
UlRfVFJVRSh0ZXN0TGF5ZXIuZ2V0KCkpOworCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNo
b3VsZCBhbHNvIG5vdCBiZSBjYWxsZWQgb24gdGhlIGRlc3RydWN0b3Igd2hlbiB0aGUgbGF5ZXIg
aGFzIG5vIGNoaWxkcmVuLgorICAgIC8vIHNvIHdlIGV4cGxpY2l0bHkgbWFrZSBzdXJlIExheWVy
Q2hyb21pdW0gaXMgZGVzdHJveWVkIGJlZm9yZSBtb2NrIGRlbGVnYXRlLgorICAgIGV4cGxpY2l0
bHlEZXN0cm95TGF5ZXIodGVzdExheWVyLnJlbGVhc2UoKSk7Cit9CisKK1RFU1RfRihMYXllckNo
cm9taXVtVGVzdCwgYWRkQW5kUmVtb3ZlQ2hpbGQpCit7CisgICAgTW9ja0xheWVyRGVsZWdhdGUg
cGFyZW50RGVsZWdhdGU7CisgICAgTW9ja0xheWVyRGVsZWdhdGUgY2hpbGREZWxlZ2F0ZTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZw
YXJlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKworICAgIC8vIFVwb24gY3JlYXRpb24s
IGxheWVycyBzaG91bGQgbm90IGhhdmUgY2hpbGRyZW4gb3IgcGFyZW50LgorICAgIEFTU0VSVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnBhcmVudCgpKTsKKworICAgIC8vIFBhcmVudCBjYWxscyBu
b3RpZnlTeW5jUmVxdWlyZWQgZXhhY3RseSBvbmNlIHdoZW4gYWRkaW5nIGNoaWxkLgorICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwg
cGFyZW50LT5hZGRDaGlsZChjaGlsZCkpOworCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMSksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGls
ZC5nZXQoKSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50Lmdl
dCgpLCBjaGlsZC0+cGFyZW50KCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxk
LT5yb290TGF5ZXIoKSk7CisKKyAgICAvLyByZW1vdmVGcm9tUGFyZW50IHNob3VsZCBjYXVzZSB0
aGUgcGFyZW50J3Mgbm90aWZ5U3luY1JlcXVpcmVkIHRvIGJlIGNhbGxlZCBleGFjdGx5IG9uY2Uu
CisgICAgLy8gVGhlIGNoaWxkRGVsZWdhdGUgbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCByZW1h
aW4gdW4tdXNlZC4KKyAgICBFWFBFQ1RfQ0FMTChjaGlsZERlbGVnYXRlLCBub3RpZnlTeW5jUmVx
dWlyZWQoKSkuVGltZXMoMCk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpKTsKK30K
KworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlEZXN0cnVjdG9yU2VtYW50aWNzKQor
eworICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOworICAgIE1vY2tMYXllckRl
bGVnYXRlIGNoaWxkRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7
CisKKyAgICAvLyBTZXQgdXAgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbnMKKyAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+
YWRkQ2hpbGQoY2hpbGQpKTsKKyAgICBFWFBFQ1RfVFJVRShjaGlsZC0+cGFyZW50KCkpOworCisg
ICAgLy8gV2hlbiBiZWluZyBkZXN0cm95ZWQsIG5vdGlmeVN5bmNSZXF1aXJlZCBpcyBjYWxsZWQg
b25jZSBmb3IgdGhlIHBhcmVudCwgYmVjYXVzZSBpdCBoYXMgb25lIGNoaWxkLAorICAgIC8vIGJ1
dCBzaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgdGhlIGNoaWxkIHdoaWNoIGhhcyBubyBjaGlsZHJl
bi4KKyAgICBFWFBFQ1RfQ0FMTChwYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkp
LlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKGNoaWxkRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1
aXJlZCgpKS5UaW1lcygwKTsKKworICAgIGV4cGxpY2l0bHlEZXN0cm95TGF5ZXIocGFyZW50LnJl
bGVhc2UoKSk7CisKKyAgICAvLyBDaGlsZCBzaG91bGQgaGF2ZSBiZWVuIHVuLXBhcmVudGVkIGNv
cnJlY3RseSwgYnV0IG5vdCB5ZXQgZGVzdHJveWVkIHNpbmNlIHdlIGhhdmUgYSByZWZlcmVuY2Ug
dG8gaXQuCisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5wYXJlbnQoKSk7Cit9CisKK1RFU1RfRihM
YXllckNocm9taXVtVGVzdCwgdmVyaWZ5RGVzdHJ1Y3RvckRvZXNOb3RMZWFrKQoreworICAgIC8v
IEluIHRoaXMgdGVzdCB3ZSBleHBsaWNpdGx5IGluc3RhbnRpYXRlIGEgc3BlY2lhbCBzdWJjbGFz
cyBvZgorICAgIC8vIExheWVyQ2hyb21pdW0gc28gd2UgY2FuIHRyYWNrIHRoZSBudW1iZXIgb2Yg
ZGVzdHJ1Y3RvcnMgY2FsbGVkLgorCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1
bWVudGVkRGVzdHJ1Y3Rvcj4gcGFyZW50LCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzLCBncmFuZENo
aWxkMSwgZ3JhbmRDaGlsZDIsIGdyYW5kQ2hpbGQzOworICAgIHBhcmVudCA9IGFkb3B0UmVmKG5l
dyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdh
dGUpKTsKKyAgICBjaGlsZDEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVt
ZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7CisgICAgY2hpbGQyID0gYWRvcHRS
ZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigmbV9zaWxlbnRE
ZWxlZ2F0ZSkpOworICAgIGNoaWxkMyA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aElu
c3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKKyAgICBncmFuZENoaWxk
MSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3Io
Jm1fc2lsZW50RGVsZWdhdGUpKTsKKyAgICBncmFuZENoaWxkMiA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsK
KyAgICBncmFuZENoaWxkMyA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1l
bnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKKworICAgIC8vIHNldCB1cCBhIHNp
bXBsZSB0cmVlLgorICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKGNoaWxkMik7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZDMpOworICAgIGNoaWxk
MS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGls
ZDIpOworICAgIGNoaWxkMi0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworCisgICAgLy8gQ2xlYXIg
YWxsIHRoZSBjaGlsZHJlbiBSZWZQdHJzIGhlcmUuIEJ1dCBzaW5jZSB0aGV5IGFyZSBhdHRhY2hl
ZCB0byB0aGUgdHJlZSwgbm8gZGVzdHJ1Y3RvcnMgc2hvdWxkIGJlIGNhbGxlZCB5ZXQuCisgICAg
Y2hpbGQxLmNsZWFyKCk7CisgICAgY2hpbGQyLmNsZWFyKCk7CisgICAgY2hpbGQzLmNsZWFyKCk7
CisgICAgZ3JhbmRDaGlsZDEuY2xlYXIoKTsKKyAgICBncmFuZENoaWxkMi5jbGVhcigpOworICAg
IGdyYW5kQ2hpbGQzLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfRVEoMCwgTGF5ZXJDaHJvbWl1bVdp
dGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQoKSk7CisK
KyAgICAvLyBkZWxldGluZyB0aGUgcGFyZW50IHNob3VsZCBjYXVzZSBhbGwgZGVzdHJ1Y3RvcnMg
dG8gYmUgaW52b2tlZC4KKyAgICBleHBsaWNpdGx5RGVzdHJveUxheWVyKHBhcmVudC5yZWxlYXNl
KCkpOworCisgICAgRVhQRUNUX0VRKDcsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVz
dHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkpOworfQorCitURVNUX0YoTGF5ZXJD
aHJvbWl1bVRlc3QsIGluc2VydENoaWxkKQoreworICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVu
dERlbGVnYXRlOworICAgIE1vY2tMYXllckRlbGVnYXRlIGNoaWxkRGVsZWdhdGU7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZwYXJlbnRE
ZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+Y2hpbGQxID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT5jaGls
ZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmNoaWxkRGVsZWdhdGUpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPmNoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0
ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+Y2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCZjaGlsZERlbGVnYXRlKTsKKworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KDApLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKworICAgIC8vIFRoZSBjaGlsZCBkZWxl
Z2F0ZSBub3RpZnlTeW5SZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGluc2VydGlu
Zy4KKyAgICBFWFBFQ1RfQ0FMTChjaGlsZERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSku
VGltZXMoMCk7CisKKyAgICAvLyBDYXNlIDE6IGluc2VydGluZyB0byBlbXB0eSBsaXN0LgorICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwg
MSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDMsIDApKTsKKyAgICBBU1NFUlRfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigxKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkMywgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50
LmdldCgpLCBjaGlsZDMtPnBhcmVudCgpKTsKKworICAgIC8vIENhc2UgMjogaW5zZXJ0aW5nIHRv
IGJlZ2lubmluZyBvZiBsaXN0CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMSwgMCkp
OworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBwYXJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxkcmVuKClbMF0p
OworICAgIEVYUEVDVF9FUShjaGlsZDMsIHBhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CisgICAgRVhQ
RUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQxLT5wYXJlbnQoKSk7CisKKyAgICAvLyBDYXNlIDM6
IGluc2VydGluZyB0byBtaWRkbGUgb2YgbGlzdAorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRDaGlsZChj
aGlsZDIsIDEpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcGFyZW50
LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFyZW50LT5jaGls
ZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxkcmVuKClbMV0p
OworICAgIEVYUEVDVF9FUShjaGlsZDMsIHBhcmVudC0+Y2hpbGRyZW4oKVsyXSk7CisgICAgRVhQ
RUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQyLT5wYXJlbnQoKSk7CisKKyAgICAvLyBDYXNlIDQ6
IGluc2VydGluZyB0byBlbmQgb2YgbGlzdAorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGls
ZDQsIDMpKTsKKworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCBwYXJlbnQt
PmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxk
cmVuKClbMF0pOworICAgIEVYUEVDVF9FUShjaGlsZDIsIHBhcmVudC0+Y2hpbGRyZW4oKVsxXSk7
CisgICAgRVhQRUNUX0VRKGNoaWxkMywgcGFyZW50LT5jaGlsZHJlbigpWzJdKTsKKyAgICBFWFBF
Q1RfRVEoY2hpbGQ0LCBwYXJlbnQtPmNoaWxkcmVuKClbM10pOworICAgIEVYUEVDVF9FUShwYXJl
bnQuZ2V0KCksIGNoaWxkNC0+cGFyZW50KCkpOworCisgICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3Rv
ciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBpdHMgY2hpbGRy
ZW4uCisgICAgRVhQRUNUX0NBTEwocGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgp
KS5UaW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBpbnNl
cnRDaGlsZFBhc3RFbmRPZkxpc3QpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnRE
ZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisKKyAgICAvLyBpbnNl
cnQgdG8gYW4gb3V0LW9mLWJvdW5kcyBpbmRleAorICAgIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hp
bGQxLCA1Myk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgcGFyZW50
LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFyZW50LT5jaGls
ZHJlbigpWzBdKTsKKworICAgIC8vIGluc2VydCBhbm90aGVyIGNoaWxkIHRvIG91dC1vZi1ib3Vu
ZHMsIHdoZW4gbGlzdCBpcyBub3QgYWxyZWFkeSBlbXB0eS4KKyAgICBwYXJlbnQtPmluc2VydENo
aWxkKGNoaWxkMiwgMjQ1OSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigy
KSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFy
ZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxk
cmVuKClbMV0pOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2VydFNhbWVDaGls
ZFR3aWNlKQoreworICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJnBhcmVu
dERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKwor
ICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVuKCku
c2l6ZSgpKTsKKworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihw
YXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDEsIDApKTsKKyAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEs
IHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigyKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQy
LCBwYXJlbnQtPmNoaWxkcmVuKClbMV0pOworCisgICAgLy8gSW5zZXJ0aW5nIHRoZSBzYW1lIGNo
aWxkIGFnYWluIHNob3VsZCBjYXVzZSB0aGUgY2hpbGQgdG8gYmUgcmVtb3ZlZCBhbmQgcmUtaW5z
ZXJ0ZWQgYXQgdGhlIG5ldyBsb2NhdGlvbi4KKyAgICAvLyBTbyB0aGUgcGFyZW50J3Mgbm90aWZ5
U3luY1JlcXVpcmVkIHdvdWxkIGJlIGNhbGxlZCBvbmUgb3IgbW9yZSB0aW1lcy4KKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIEF0TGVh
c3QoMSksIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAxKSk7CisKKyAgICAvLyBjaGlsZDEg
c2hvdWxkIG5vdyBiZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgorICAgIEFTU0VSVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDIpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfRVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxkcmVuKClbMF0pOworICAgIEVYUEVDVF9FUShjaGls
ZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CisKKyAgICAvLyBwYXJlbnQncyBkZXN0cnVjdG9y
IHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGxlZnRvdmVyIGNo
aWxkcmVuCisgICAgRVhQRUNUX0NBTEwocGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJl
ZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBp
bnNlcnRDaGlsZFRoYXRBbHJlYWR5SGFkUGFyZW50KQoreworICAgIE1vY2tMYXllckRlbGVnYXRl
IG9sZFBhcmVudERlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBvbGRQYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJm9sZFBhcmVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERl
bGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworCisgICAgLy8gc2V0IHVwIGFuZCBzYW5pdHkt
Y2hlY2sgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbnMKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9U
SUZZX1NZTkNfQkVIQVZJT1Iob2xkUGFyZW50RGVsZWdhdGUsIDEsIG9sZFBhcmVudC0+YWRkQ2hp
bGQoY2hpbGQpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgb2xkUGFy
ZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oMCksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGlsZCwg
b2xkUGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEob2xkUGFyZW50LmdldCgp
LCBjaGlsZC0+cGFyZW50KCkpOworCisgICAgLy8gSW5zZXJ0aW5nIHRvIG5ldyBwYXJlbnQgY2F1
c2VzIG9sZCBwYXJlbnQncyBub3RpZnlTeW5jUmVxdWlyZWQgdG8gYmUgY2FsbGVkLgorICAgIC8v
IE5vdGUgdGhhdCBpdCBhbHNvIGNhdXNlcyBwYXJlbnQncyBub3RpZnlTeW5jUmVxdWlyZWQgdG8g
YmUgY2FsbGVkLCBidXQgdGhhdCBpcyB0ZXN0ZWQgZWxzZXdoZXJlLgorICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihvbGRQYXJlbnREZWxlZ2F0ZSwgMSwgcGFyZW50
LT5pbnNlcnRDaGlsZChjaGlsZCwgMCkpOworCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMCksIG9sZFBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEFTU0VSVF9FUShz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoY2hpbGQsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CisgICAgRVhQRUNUX0VRKHBh
cmVudC5nZXQoKSwgY2hpbGQtPnBhcmVudCgpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1U
ZXN0LCByZXBsYWNlQ2hpbGRXaXRoTmV3Q2hpbGQpCit7CisgICAgY3JlYXRlU2ltcGxlVGVzdFRy
ZWUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRShjaGlsZDQtPnBh
cmVudCgpKTsKKworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
X3BhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBtX3BhcmVudC0+cmVwbGFjZUNoaWxkKG1fY2hp
bGQyLmdldCgpLCBjaGlsZDQpKTsKKworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KDMpLCBtX3BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShtX2NoaWxk
MSwgbV9wYXJlbnQtPmNoaWxkcmVuKClbMF0pOworICAgIEVYUEVDVF9FUShjaGlsZDQsIG1fcGFy
ZW50LT5jaGlsZHJlbigpWzFdKTsKKyAgICBFWFBFQ1RfRVEobV9jaGlsZDMsIG1fcGFyZW50LT5j
aGlsZHJlbigpWzJdKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIGNoaWxkNC0+cGFy
ZW50KCkpOworCisgICAgRVhQRUNUX0ZBTFNFKG1fY2hpbGQyLT5wYXJlbnQoKSk7CisKKyAgICAv
LyBwYXJlbnQncyBkZXN0cnVjdG9yIHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBp
dCByZW1vdmVzIGxlZnRvdmVyIGNoaWxkcmVuCisgICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxl
Z2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworfQorCitURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHJlcGxhY2VDaGlsZFdpdGhOZXdDaGlsZFRoYXRIYXNPdGhl
clBhcmVudCkKK3sKKyAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworCisgICAgLy8gY3JlYXRl
IGFub3RoZXIgc2ltcGxlIHRyZWUgd2l0aCB0ZXN0TGF5ZXIgYW5kIGNoaWxkNC4KKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3Np
bGVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICB0ZXN0TGF5ZXItPmFkZENo
aWxkKGNoaWxkNCk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMSksIHRlc3RM
YXllci0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDQsIHRlc3RMYXll
ci0+Y2hpbGRyZW4oKVswXSk7CisgICAgRVhQRUNUX0VRKHRlc3RMYXllci5nZXQoKSwgY2hpbGQ0
LT5wYXJlbnQoKSk7CisKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IobV9wYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgxKSwgbV9wYXJlbnQtPnJlcGxhY2VDaGlsZCht
X2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigzKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEobV9j
aGlsZDEsIG1fcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQ0LCBt
X3BhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQzLCBtX3BhcmVu
dC0+Y2hpbGRyZW4oKVsyXSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBjaGlsZDQt
PnBhcmVudCgpKTsKKworICAgIC8vIHRlc3RMYXllciBzaG91bGQgbm8gbG9uZ2VyIGhhdmUgY2hp
bGQ0LAorICAgIC8vIGFuZCBjaGlsZDIgc2hvdWxkIG5vIGxvbmdlciBoYXZlIGEgcGFyZW50Lgor
ICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCB0ZXN0TGF5ZXItPmNoaWxkcmVu
KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9jaGlsZDItPnBhcmVudCgpKTsKKworICAg
IC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5U3luY1JlcXVpcmVkIGFz
IGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRyZW4KKyAgICBFWFBFQ1RfQ0FMTChtX3BhcmVudERl
bGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7Cit9CisKK1RF
U1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNoaWxkV2l0aFNhbWVDaGlsZCkKK3sKKyAg
ICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNo
b3VsZCBub3QgYmUgY2FsbGVkIGJlY2F1c2UgaXRzIHRoZSBzYW1lIGNoaWxkCisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUsIDAsIG1f
cGFyZW50LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCksIG1fY2hpbGQyKSk7CisKKyAgICB2
ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpOworCisgICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3Rv
ciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBsZWZ0b3ZlciBj
aGlsZHJlbgorICAgIEVYUEVDVF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1
aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCByZW1vdmVBbGxDaGlsZHJlbikKK3sKKyAgICBjcmVhdGVTaW1wbGVUZXN0VHJlZSgpOworCisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdh
dGUsIEF0TGVhc3QoMSksIG1fcGFyZW50LT5yZW1vdmVBbGxDaGlsZHJlbigpKTsKKworICAgIEFT
U0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBtX3BhcmVudC0+Y2hpbGRyZW4oKS5zaXpl
KCkpOworICAgIEVYUEVDVF9GQUxTRShtX2NoaWxkMS0+cGFyZW50KCkpOworICAgIEVYUEVDVF9G
QUxTRShtX2NoaWxkMi0+cGFyZW50KCkpOworICAgIEVYUEVDVF9GQUxTRShtX2NoaWxkMy0+cGFy
ZW50KCkpOworCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVk
IGlmIHRyeWluZyB0byByZW1vdmVBbGxDaGlsZHJlbiB3aGVuIHRoZXJlIGFyZSBubyBjaGlsZHJl
bi4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobV9wYXJlbnRE
ZWxlZ2F0ZSwgMCwgbV9wYXJlbnQtPnJlbW92ZUFsbENoaWxkcmVuKCkpOworfQorCitURVNUX0Yo
TGF5ZXJDaHJvbWl1bVRlc3QsIHNldENoaWxkcmVuKQoreworICAgIE1vY2tMYXllckRlbGVnYXRl
IG5ld1BhcmVudERlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBvbGRQYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBuZXdQYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm5ld1BhcmVu
dERlbGVnYXRlKTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOwor
CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG5ld0NoaWxkcmVuOworICAgIG5l
d0NoaWxkcmVuLmFwcGVuZChjaGlsZDEpOworICAgIG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZDIp
OworCisgICAgLy8gU2V0IHVwIGFuZCB2ZXJpZnkgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbnM6IGNo
aWxkMSBoYXMgYSBwYXJlbnQsIGNoaWxkMiBoYXMgbm8gcGFyZW50LgorICAgIG9sZFBhcmVudC0+
YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwg
bmV3UGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKG9sZFBhcmVudC5n
ZXQoKSwgY2hpbGQxLT5wYXJlbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMi0+cGFyZW50
KCkpOworCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG5ld1Bh
cmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBuZXdQYXJlbnQtPnNldENoaWxkcmVuKG5ld0NoaWxk
cmVuKSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgbmV3UGFyZW50
LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKG5ld1BhcmVudC5nZXQoKSwgY2hp
bGQxLT5wYXJlbnQoKSk7CisgICAgRVhQRUNUX0VRKG5ld1BhcmVudC5nZXQoKSwgY2hpbGQyLT5w
YXJlbnQoKSk7CisKKyAgICAvLyBwYXJlbnQncyBkZXN0cnVjdG9yIHdpbGwgaW52b2tlIG5vdGlm
eVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGl0cyBjaGlsZHJlbi4KKyAgICBFWFBFQ1RfQ0FM
TChuZXdQYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEF0TGVhc3Qo
MSkpOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGdldFJvb3RMYXllckFmdGVyVHJl
ZU1hbmlwdWxhdGlvbnMpCit7CisgICAgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVu
dERlbGVnYXRlKTsKKworICAgIC8vIEluIHRoaXMgdGVzdCBjYXNlLCB3ZSBkb24ndCBjYXJlIGFi
b3V0IGhvdyB0aGUgcGFyZW50J3Mgbm90aWZ5U3luY1JlcXVpcmVkIGlzIGNhbGxlZC4KKyAgICBF
WFBFQ1RfQ0FMTChtX3BhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMo
QW55TnVtYmVyKCkpOworCisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX3BhcmVudC0+
cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDEtPnJv
b3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQyLT5yb290
TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMy0+cm9vdExh
eWVyKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDQuZ2V0KCksICAgY2hpbGQ0LT5yb290TGF5ZXIo
KSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dyYW5kQ2hpbGQxLT5yb290TGF5
ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dyYW5kQ2hpbGQyLT5yb290
TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dyYW5kQ2hpbGQzLT5y
b290TGF5ZXIoKSk7CisKKyAgICBtX2NoaWxkMS0+cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAg
Ly8gY2hpbGQxIGFuZCBpdHMgY2hpbGRyZW4sIGdyYW5kQ2hpbGQxIGFuZCBncmFuZENoaWxkMiBh
cmUgbm93IG9uIGEgc2VwYXJhdGUgc3VidHJlZS4KKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0
KCksIG1fcGFyZW50LT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgp
LCBtX2NoaWxkMS0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwg
bV9jaGlsZDItPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1f
Y2hpbGQzLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkNC5nZXQoKSwgY2hpbGQ0
LT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5kQ2hp
bGQxLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5k
Q2hpbGQyLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dy
YW5kQ2hpbGQzLT5yb290TGF5ZXIoKSk7CisKKyAgICBtX2dyYW5kQ2hpbGQzLT5hZGRDaGlsZChj
aGlsZDQpOworCisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX3BhcmVudC0+cm9vdExh
eWVyKCkpOworICAgIEVYUEVDVF9FUShtX2NoaWxkMS5nZXQoKSwgbV9jaGlsZDEtPnJvb3RMYXll
cigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQyLT5yb290TGF5ZXIo
KSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMy0+cm9vdExheWVyKCkp
OworICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgY2hpbGQ0LT5yb290TGF5ZXIoKSk7Cisg
ICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5kQ2hpbGQxLT5yb290TGF5ZXIoKSk7
CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5kQ2hpbGQyLT5yb290TGF5ZXIo
KSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2dyYW5kQ2hpbGQzLT5yb290TGF5
ZXIoKSk7CisKKyAgICBtX2NoaWxkMi0+cmVwbGFjZUNoaWxkKG1fZ3JhbmRDaGlsZDMuZ2V0KCks
IG1fY2hpbGQxKTsKKworICAgIC8vIGdyYW5kQ2hpbGQzIGdldHMgb3JwaGFuZWQgYW5kIHRoZSBj
aGlsZDEgc3VidHJlZSBnZXRzIHBsYW50ZWQgYmFjayBpbnRvIHRoZSB0cmVlIHVuZGVyIGNoaWxk
Mi4KKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fcGFyZW50LT5yb290TGF5ZXIoKSk7
CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMS0+cm9vdExheWVyKCkpOwor
ICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDItPnJvb3RMYXllcigpKTsKKyAg
ICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQzLT5yb290TGF5ZXIoKSk7CisgICAg
RVhQRUNUX0VRKG1fZ3JhbmRDaGlsZDMuZ2V0KCksIGNoaWxkNC0+cm9vdExheWVyKCkpOworICAg
IEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMS0+cm9vdExheWVyKCkpOwor
ICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMi0+cm9vdExheWVyKCkp
OworICAgIEVYUEVDVF9FUShtX2dyYW5kQ2hpbGQzLmdldCgpLCBtX2dyYW5kQ2hpbGQzLT5yb290
TGF5ZXIoKSk7Cit9CisKKy8vIEZJWE1FOiBuZWVkIHRvIGFkZCBhIHRlc3QgZm9yIGdldERlc2Nl
bmRhbnREcmF3c0NvbnRlbnQgYWZ0ZXIgcmVzb2x2aW5nCisvLyAgICAgICAgc29tZSBpc3N1ZXMg
d2l0aCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkuCisvLyAgICAgICAg
c2VlIGRpc2N1c3Npb24gb24gaXNzdWUgNjc3NTAKKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKK3sKKyAgICAvLyBU
aGUgc2VtYW50aWNzIGZvciBzZXROZWVkc0Rpc3BsYXkgd2hpY2ggYXJlIHRlc3RlZCBoZXJlOgor
ICAgIC8vICAgMS4gY3JlYXRlcyBhIHVuaW9uZWQgZGlydHlSZWN0IGFwcHJvcHJpYXRlbHkuCisg
ICAgLy8gICAyLiBpbmRpcmVjdGx5IGNhbGxzIG5vdGlmeVN5bmNSZXF1aXJlZCwgZXhhY3RseSBv
bmNlIGZvciBlYWNoIGNhbGwgdG8gc2V0TmVlZHNEaXNwbGF5LgorCisgICAgTW9ja0xheWVyRGVs
ZWdhdGUgbW9ja0RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAgSW50U2l6ZSB0ZXN0
Qm91bmRzID0gSW50U2l6ZSg1MDEsIDUwOCk7CisKKyAgICBGbG9hdFJlY3QgZGlydHkxID0gRmxv
YXRSZWN0KDEwLjBmLCAxNS4wZiwgMS4wZiwgMi4wZik7CisgICAgRmxvYXRSZWN0IGRpcnR5MiA9
IEZsb2F0UmVjdCgyMC4wZiwgMjUuMGYsIDMuMGYsIDQuMGYpOworICAgIEZsb2F0UmVjdCBlbXB0
eURpcnR5UmVjdCA9IEZsb2F0UmVjdCg0MC4wZiwgNDUuMGYsIDAsIDApOworICAgIEZsb2F0UmVj
dCBvdXRPZkJvdW5kc0RpcnR5UmVjdCA9IEZsb2F0UmVjdCg0MDAuMGYsIDQwNS4wZiwgNTAwLjBm
LCA1MDIuMGYpOworCisgICAgLy8gQmVmb3JlIGFueXRoaW5nLCB0ZXN0TGF5ZXIgc2hvdWxkIGhh
dmUgYW4gZW1wdHkgZGlydHkgcmVjdC4KKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW5pdGlhbGl6YXRpb24s
IGJ1dCBub3RpZnlTeW5jUmVxdWlyZWQgYmVoYXZpb3IgaXMgdmVyaWZpZWQgYW55d2F5IHRvIGF2
b2lkIHdhcm5pbmdzLgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKKyAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAw
LCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RM
YXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIFRoZSByZWFsIHRlc3QgYmVn
aW5zIGhlcmUuCisKKyAgICAvLyBDYXNlIDE6IGJhc2ljCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkoZGlydHkxKSk7CisgICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGRpcnR5
MSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisKKyAgICAvLyBDYXNlIDI6IGEgc2Vjb25kIGRp
cnR5IHJlY3Qgc2hvdWxkIGJlIHVuaW9uZWQgb2YgZGlydHkxIGFuZCBkaXJ0eTIuCisgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVz
dExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkyKSk7CisgICAgdmVyaWZ5RmxvYXRSZWN0c0Fs
bW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkpOworCisgICAgLy8gQ2FzZSAzOiBkaXJ0eSByZWN0IHNob3VsZCBub3Qg
Y2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkgcmVjdC4KKyAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNl
dE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVjdCkpOworICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1v
c3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXIt
PmRpcnR5UmVjdCgpKTsKKworICAgIC8vIENhc2UgNDogTGF5ZXJDaHJvbWl1bSBzaG91bGQgYWNj
ZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28gYmV5b25kIGl0cyBib3VuZHMKKyAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldE5lZWRzRGlzcGxheShvdXRPZkJvdW5kc0RpcnR5UmVjdCkpOworICAgIHZlcmlmeUZsb2F0
UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiks
IHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworCisgICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3Bs
YXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFyZyBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSBi
b3VuZHMgdG8gYmUgZGlydHksCisgICAgLy8gICAgICAgICBvdmVycmlkaW5nIGFueSBleGlzdGlu
ZyBkaXJ0eSByZWN0LgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOworICAgIHZl
cmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0
aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisKKyAg
ICAvLyByZXNldE5lZWRzRGlzcGxheSBzaG91bGQgZW1wdHkgdGhlIGRpcnR5IHJlY3QsIGFuZCBO
T1QgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlz
cGxheSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHko
KSk7Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNh
dXNlc0NvcnJlY3RCZWhhdmlvcikKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBpbml0aWFsRGVs
ZWdhdGU7CisgICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmluaXRpYWxE
ZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGR1bW15TGF5ZXIgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOyAvLyBqdXN0IGEgZHVtbXkgbGF5ZXIg
Zm9yIHRoaXMgdGVzdCBjYXNlLgorCisgICAgLy8gc2FuaXR5IGNoZWNrIG9mIGluaXRpYWwgdGVz
dCBjb25kaXRpb24KKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1w
dHkoKSk7CisKKyAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGNhbGwgbmVl
ZHNEaXNwbGF5IGFuZCBuZWVkc0NvbW1pdCB3aGVuIGNoYW5nZWQuCisgICAgLy8gbm90aWZ5U3lu
Y1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVkLCBhbmQgdGhlIGRpcnR5UmVjdCBzaG91bGQg
cmVtYWluIHN0aWxsIGVtcHR5LgorICAgIEVYUEVDVF9DQUxMKGluaXRpYWxEZWxlZ2F0ZSwgbm90
aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOyAvLyBvbGQgZGVsZWdhdGUgc2hvdWxkIG5vdCBi
ZSB1c2VkIHdoZW4gc2V0RGVsZWdhdGUgZ2l2ZXMgYSBuZXcgZGVsZWdhdGUuCisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExh
eWVyLT5zZXREZWxlZ2F0ZSgmbW9ja0RlbGVnYXRlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRNYXNr
c1RvQm91bmRzKHRydWUpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7
CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMCwgdGVzdExheWVyLT5zZXRNYXNrTGF5ZXIoZHVtbXlMYXllci5nZXQoKSkpOworICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRl
c3RMYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDQwLCA1MCkpKTsKKyAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAw
LCB0ZXN0TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDEwLCAxMCkpKTsKKyAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0
ZXN0TGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IodHJ1ZSkpOworICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0
SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRSZXBsaWNh
TGF5ZXIoZHVtbXlMYXllci5nZXQoKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RHJhd09wYWNpdHko
MC41ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2Nr
RGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdCgzLCAzLCA4LCA4
KSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVs
ZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSgwKSk7CisgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVz
dExheWVyLT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKKyAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0
ZXN0TGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkp
KTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVn
YXRlLCAwLCB0ZXN0TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCg0LCA1LCA2
LCA3KSkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgp
KTsKKworICAgIC8vIE5leHQsIHRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5l
ZWRzQ29tbWl0IChidXQgbm90IHNldE5lZWRzRGlzcGxheSkKKyAgICAvLyBUaGVzZSBwcm9wZXJ0
aWVzIHNob3VsZCBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLCBidXQgdGhlIGRp
cnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2UuCisgICAgLy8gTm90ZSB0aGF0IGZvciBtYW55IG9m
IHRoZXNlIHByb3BlcnRpZXMgaXQgaXMgaW1wb3J0YW50IHRvIHRlc3Qgc2V0dGluZyB0aGUgcHJv
cGVydHkgdG8gYSB2YWx1ZSB0aGF0CisgICAgLy8gaXMgZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUg
Y29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgaXQgdG8uCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50KDEuMjNmLCA0LjU2ZikpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEFuY2hv
clBvaW50WigwLjdmKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3Io
MC40ZiwgMC40ZiwgMC40ZikpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE9wYWNpdHkoMC41ZikpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUs
IDEsIHRlc3RMYXllci0+c2V0T3BhcXVlKGZhbHNlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KDQuMGYsIDkuMGYpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRTdWJsYXll
clRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVS
SUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRU
cmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0RG91
YmxlU2lkZWQoZmFsc2UpKTsKKworICAgIC8vIFRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgbm90IGhh
dmUgY2F1c2VkIGEgbm9uLWVtcHR5IGRpcnR5IHJlY3QuCisgICAgRVhQRUNUX1RSVUUodGVzdExh
eWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRo
YXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNEaXNwbGF5CisgICAgLy8gVGhlc2UgcHJvcGVydGllcyB3
aWxsIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkIGFuZCBjaGFuZ2UgdGhlIGRpcnR5IHJlY3QuCisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MSwgdGVzdExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1LCAxMCkpKTsKKyAgICB2ZXJpZnlGbG9h
dFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVz
dExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgp
OworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKwor
ICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFkZCBhIHRlc3QgZm9yIHNldExheWVyVHJlZUhvc3Qgd2l0
aCBhIG5vbi1udWxsIHN0dWJiZWQgQ0NMYXllclRyZWVIb3N0LgorfQorCit9IC8vIG5hbWVzcGFj
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108896</attachid>
            <date>2011-09-27 14:19:10 -0700</date>
            <delta_ts>2011-09-30 17:58:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68572-20110927141909.patch</filename>
            <type>text/plain</type>
            <size>33890</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYwOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
Yjg0OTkyYTE3NzEzMjFmYTYwNmExOGUwODU4ZjFmNjhjNmE4Y2YwOC4uNjU2MGQ5YjYwOGE5OWJl
OGFiZjg5Mzc4YTIwMDY2NjIwYWJhYWEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMS0wOS0yNyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgdW5pdCB0ZXN0cyBmb3IgTGF5ZXJDaHJvbWl1bS4g
IEVtcGhhc2lzIG9uIHZlcmlmeWluZworICAgICAgICBiZWhhdmlvciBvZiBub3RpZnlTeW5jUmVx
dWlyZWQgY2FsbGJhY2sgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTcyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0
ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorCiAyMDExLTA5LTI2ICBOYXQgRHVj
YSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1ha2UgQ0NUaHJl
YWRQcm94eSBkcmF3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA3Mzc1MmEyOTRj
NDAwYWJjODk3YjNhODM1MjBjNjRhMjFiZjFhMTQxLi5kMDg2M2Y5MWMzYzk0MTY0MWE5ZWE1Yzlj
Y2MzN2I1YTI2MTZjNmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTYzLDYg
KzYzLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Nb2NrR3JhcGhpY3NDb250ZXh0M0RUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1BPREFyZW5hVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2FiODM2
YjJmMjYxZDU2MDNmODhhZGU3ZDNmMGQxN2Y2NDAyMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCAr
MSw2NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyA6OnRlc3Rp
bmc6Ok1vY2s7Cit1c2luZyA6OnRlc3Rpbmc6Ol87Cit1c2luZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7
Cit1c2luZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKK3VzaW5nIDo6dGVzdGluZzo6UmV0dXJuOwor
CisjZGVmaW5lIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihkZWxlZ2F0
ZSwgbnVtVGltZXNFeHBlY3RlZE5vdGlmeVN5bmMsIGNvZGVUb1Rlc3QpIFwKKyAgICBFWFBFQ1Rf
Q0FMTCgoZGVsZWdhdGUpLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoKG51bVRpbWVzRXhw
ZWN0ZWROb3RpZnlTeW5jKSk7IFwKKyAgICBjb2RlVG9UZXN0OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNb2NrOjpWZXJpZnlB
bmRDbGVhckV4cGVjdGF0aW9ucygmKGRlbGVnYXRlKSkKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
TW9ja0xheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsKK3B1YmxpYzoKKyAg
ICBNT0NLX0NPTlNUX01FVEhPRDAoZHJhd3NDb250ZW50LCBib29sKCkpOworICAgIE1PQ0tfQ09O
U1RfTUVUSE9EMChwcmVzZXJ2ZXMzRCwgYm9vbCgpKTsKKyAgICBNT0NLX01FVEhPRDIocGFpbnRD
b250ZW50cywgdm9pZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikpOworICAgIE1P
Q0tfTUVUSE9EMChub3RpZnlTeW5jUmVxdWlyZWQsIHZvaWQoKSk7Cit9OworCitjbGFzcyBMYXll
ckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IgOiBwdWJsaWMgTGF5ZXJDaHJvbWl1
bSB7CitwdWJsaWM6CisgICAgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9y
KENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCisgICAgICAgIDogTGF5ZXJDaHJvbWl1bShkZWxl
Z2F0ZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+TGF5ZXJDaHJvbWl1bVdpdGhJbnN0
cnVtZW50ZWREZXN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHNfbnVtSW5zdGFuY2VzRGVzdHJv
eWVkKys7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQo
KSB7IHJldHVybiBzX251bUluc3RhbmNlc0Rlc3Ryb3llZDsgfQorICAgIHN0YXRpYyB2b2lkIHJl
c2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkgeyBzX251bUluc3RhbmNlc0Rlc3Ryb3llZCA9IDA7
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IHNfbnVtSW5zdGFuY2VzRGVzdHJveWVkOwor
fTsKKworaW50IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6c19udW1J
bnN0YW5jZXNEZXN0cm95ZWQgPSAwOworCitjbGFzcyBMYXllckNocm9taXVtVGVzdCA6IHB1Ymxp
YyB0ZXN0aW5nOjpUZXN0IHsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQor
ICAgIHsKKyAgICAgICAgLy8gbV9zaWxlbnREZWxlZ2F0ZSBpcyBpbml0aWFsaXplZCB0byBiZSBq
dXN0IGEgc3R1YiBhbmQgd2lsbAorICAgICAgICAvLyBub3QgcHJpbnQgYW55IHdhcm5pbmdzLiBJ
dCBpcyB1c2VkIHdoZW4gd2UgYXJlIG5vdCB3b3JyaWVkCisgICAgICAgIC8vIGFib3V0IHRlc3Rp
bmcgaG93IHRoZSBkZWxlZ2F0ZSBpcyBjYWxsZWQuCisgICAgICAgIEVYUEVDVF9DQUxMKG1fc2ls
ZW50RGVsZWdhdGUsIGRyYXdzQ29udGVudCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAg
IEVYUEVDVF9DQUxMKG1fc2lsZW50RGVsZWdhdGUsIHByZXNlcnZlczNEKCkpLlRpbWVzKEFueU51
bWJlcigpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobV9zaWxlbnREZWxlZ2F0ZSwgcGFpbnRDb250
ZW50cyhfLCBfKSkuVGltZXMoQW55TnVtYmVyKCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtX3Np
bGVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQW55TnVtYmVyKCkpOwor
CisgICAgICAgIC8vIFN0YXRpYyB2YXJpYWJsZXMgbmVlZCB0byBiZSByZXNldCBmb3IgZXZlcnkg
bmV3IHRlc3QgY2FzZQorICAgICAgICBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3Ry
dWN0b3I6OnJlc2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCk7CisgICAgfQorCisgICAgdm9pZCB2
ZXJpZnlUZXN0VHJlZUluaXRpYWxTdGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGQxLCBtX3BhcmVudC0+Y2hpbGRyZW4oKVswXSk7Cisg
ICAgICAgIEVYUEVDVF9FUShtX2NoaWxkMiwgbV9wYXJlbnQtPmNoaWxkcmVuKClbMV0pOworICAg
ICAgICBFWFBFQ1RfRVEobV9jaGlsZDMsIG1fcGFyZW50LT5jaGlsZHJlbigpWzJdKTsKKyAgICAg
ICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMS0+cGFyZW50KCkpOworICAgICAg
ICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQyLT5wYXJlbnQoKSk7CisgICAgICAg
IEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDMtPnBhcmVudCgpKTsKKworICAgICAg
ICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgbV9jaGlsZDEtPmNoaWxkcmVuKCku
c2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fZ3JhbmRDaGlsZDEsIG1fY2hpbGQxLT5jaGls
ZHJlbigpWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fZ3JhbmRDaGlsZDIsIG1fY2hpbGQxLT5j
aGlsZHJlbigpWzFdKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5k
Q2hpbGQxLT5wYXJlbnQoKSk7CisgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkMS5nZXQoKSwgbV9n
cmFuZENoaWxkMi0+cGFyZW50KCkpOworCisgICAgICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDEpLCBtX2NoaWxkMi0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVEobV9ncmFuZENoaWxkMywgbV9jaGlsZDItPmNoaWxkcmVuKClbMF0pOworICAgICAgICBFWFBF
Q1RfRVEobV9jaGlsZDIuZ2V0KCksIG1fZ3JhbmRDaGlsZDMtPnBhcmVudCgpKTsKKworICAgICAg
ICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgbV9jaGlsZDMtPmNoaWxkcmVuKCku
c2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCkKKyAgICB7
CisgICAgICAgIG1fcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3BhcmVudERlbGVn
YXRlKTsKKyAgICAgICAgbV9jaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50
RGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9z
aWxlbnREZWxlZ2F0ZSk7CisgICAgICAgIG1fY2hpbGQzID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICAgICAgbV9ncmFuZENoaWxkMSA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgICAgIG1fZ3JhbmRDaGlsZDIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgICAgICBtX2dyYW5k
Q2hpbGQzID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKworICAg
ICAgICBFWFBFQ1RfQ0FMTChtX3BhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSku
VGltZXMoMyk7CisgICAgICAgIG1fcGFyZW50LT5hZGRDaGlsZChtX2NoaWxkMSk7CisgICAgICAg
IG1fcGFyZW50LT5hZGRDaGlsZChtX2NoaWxkMik7CisgICAgICAgIG1fcGFyZW50LT5hZGRDaGls
ZChtX2NoaWxkMyk7CisgICAgICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZt
X3BhcmVudERlbGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZDEtPmFkZENoaWxkKG1fZ3JhbmRDaGls
ZDEpOworICAgICAgICBtX2NoaWxkMS0+YWRkQ2hpbGQobV9ncmFuZENoaWxkMik7CisgICAgICAg
IG1fY2hpbGQyLT5hZGRDaGlsZChtX2dyYW5kQ2hpbGQzKTsKKworICAgICAgICB2ZXJpZnlUZXN0
VHJlZUluaXRpYWxTdGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgdmVyaWZ5RmxvYXRSZWN0c0Fs
bW9zdEVxdWFsKGNvbnN0IEZsb2F0UmVjdCYgZXhwZWN0ZWQsIGNvbnN0IEZsb2F0UmVjdCYgYWN0
dWFsKSBjb25zdAorICAgIHsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVkLmxvY2F0
aW9uKCkueCgpLCBhY3R1YWwubG9jYXRpb24oKS54KCkpOworICAgICAgICBFWFBFQ1RfRkxPQVRf
RVEoZXhwZWN0ZWQubG9jYXRpb24oKS55KCksIGFjdHVhbC5sb2NhdGlvbigpLnkoKSk7CisgICAg
ICAgIEVYUEVDVF9GTE9BVF9FUShleHBlY3RlZC5zaXplKCkud2lkdGgoKSwgYWN0dWFsLnNpemUo
KS53aWR0aCgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGV4cGVjdGVkLnNpemUoKS5oZWln
aHQoKSwgYWN0dWFsLnNpemUoKS5oZWlnaHQoKSk7CisgICAgfQorCisgICAgTW9ja0xheWVyRGVs
ZWdhdGUgbV9zaWxlbnREZWxlZ2F0ZSwgbV9wYXJlbnREZWxlZ2F0ZTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbV9wYXJlbnQsIG1fY2hpbGQxLCBtX2NoaWxkMiwgbV9jaGlsZDMsIG1fZ3Jh
bmRDaGlsZDEsIG1fZ3JhbmRDaGlsZDIsIG1fZ3JhbmRDaGlsZDM7Cit9OworCitURVNUX0YoTGF5
ZXJDaHJvbWl1bVRlc3QsIGJhc2ljQ3JlYXRlQW5kRGVzdHJveSkKK3sKKyAgICBNb2NrTGF5ZXJE
ZWxlZ2F0ZSBtb2NrRGVsZWdhdGU7CisKKyAgICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxk
IG5vdCBiZSBjYWxsZWQganVzdCBiZWNhdXNlIHRoZSBsYXllciBpcyBjcmVhdGVkIG9yIGRlc3Ry
b3llZC4KKyAgICBFWFBFQ1RfQ0FMTChtb2NrRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgp
KS5UaW1lcygwKTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERl
c3RydWN0b3I+IHRlc3RMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3Ry
dW1lbnRlZERlc3RydWN0b3IoJm1vY2tEZWxlZ2F0ZSkpOworICAgIEFTU0VSVF9UUlVFKHRlc3RM
YXllci5nZXQoKSk7CisKKyAgICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIGFsc28gbm90
IGJlIGNhbGxlZCBvbiB0aGUgZGVzdHJ1Y3RvciB3aGVuIHRoZSBsYXllciBoYXMgbm8gY2hpbGRy
ZW4uCisgICAgLy8gc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGxheWVyIGlzIGRlc3Ryb3ll
ZCBiZWZvcmUgdGhlIG1vY2sgZGVsZWdhdGUuCisgICAgQVNTRVJUX0VRKDAsIExheWVyQ2hyb21p
dW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkp
OworICAgIHRlc3RMYXllci5yZWxlYXNlKCk7CisgICAgQVNTRVJUX0VRKDEsIExheWVyQ2hyb21p
dW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJveWVkKCkp
OworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGFkZEFuZFJlbW92ZUNoaWxkKQorewor
ICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOworICAgIE1vY2tMYXllckRlbGVn
YXRlIGNoaWxkRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7CisK
KyAgICAvLyBVcG9uIGNyZWF0aW9uLCBsYXllcnMgc2hvdWxkIG5vdCBoYXZlIGNoaWxkcmVuIG9y
IHBhcmVudC4KKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcGFyZW50LT5j
aGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5wYXJlbnQoKSk7CisK
KyAgICAvLyBQYXJlbnQgY2FsbHMgbm90aWZ5U3luY1JlcXVpcmVkIGV4YWN0bHkgb25jZSB3aGVu
IGFkZGluZyBjaGlsZC4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpKTsKKworICAgIEFT
U0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQuZ2V0KCksIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7Cisg
ICAgRVhQRUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQtPnBhcmVudCgpKTsKKyAgICBFWFBFQ1Rf
RVEocGFyZW50LmdldCgpLCBjaGlsZC0+cm9vdExheWVyKCkpOworCisgICAgLy8gcmVtb3ZlRnJv
bVBhcmVudCBzaG91bGQgY2F1c2UgdGhlIHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCB0byBi
ZSBjYWxsZWQgZXhhY3RseSBvbmNlLgorICAgIC8vIFRoZSBjaGlsZERlbGVnYXRlIG5vdGlmeVN5
bmNSZXF1aXJlZCBzaG91bGQgcmVtYWluIHVuLXVzZWQuCisgICAgRVhQRUNUX0NBTEwoY2hpbGRE
ZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOworICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgY2hpbGQtPnJl
bW92ZUZyb21QYXJlbnQoKSk7Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5
RGVzdHJ1Y3RvclNlbWFudGljcykKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBwYXJlbnREZWxl
Z2F0ZTsKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBjaGlsZERlbGVnYXRlOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I+IHBhcmVudCA9IGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJnBhcmVudERlbGVn
YXRlKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKworICAgIC8vIFNldCB1cCBpbml0aWFsIHRlc3QgY29u
ZGl0aW9ucworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJl
bnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5hZGRDaGlsZChjaGlsZCkpOworICAgIEVYUEVDVF9UUlVF
KGNoaWxkLT5wYXJlbnQoKSk7CisKKyAgICAvLyBXaGVuIGJlaW5nIGRlc3Ryb3llZCwgbm90aWZ5
U3luY1JlcXVpcmVkIGlzIGNhbGxlZCBvbmNlIGZvciB0aGUgcGFyZW50LCBiZWNhdXNlIGl0IGhh
cyBvbmUgY2hpbGQsCisgICAgLy8gYnV0IHNob3VsZCBub3QgYmUgY2FsbGVkIGZvciB0aGUgY2hp
bGQgd2hpY2ggaGFzIG5vIGNoaWxkcmVuLgorICAgIEVYUEVDVF9DQUxMKHBhcmVudERlbGVnYXRl
LCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwoY2hpbGRE
ZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOworCisgICAgQVNTRVJUX0VR
KDAsIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFu
Y2VzRGVzdHJveWVkKCkpOworICAgIHBhcmVudC5yZWxlYXNlKCk7CisgICAgQVNTRVJUX0VRKDEs
IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2Vz
RGVzdHJveWVkKCkpOworCisgICAgLy8gQ2hpbGQgc2hvdWxkIGhhdmUgYmVlbiB1bi1wYXJlbnRl
ZCBjb3JyZWN0bHksIGJ1dCBub3QgeWV0IGRlc3Ryb3llZCBzaW5jZSB3ZSBoYXZlIGEgcmVmZXJl
bmNlIHRvIGl0LgorICAgIEVYUEVDVF9GQUxTRShjaGlsZC0+cGFyZW50KCkpOworfQorCitURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeURlc3RydWN0b3JEb2VzTm90TGVhaykKK3sKKyAg
ICAvLyBJbiB0aGlzIHRlc3Qgd2UgZXhwbGljaXRseSBpbnN0YW50aWF0ZSBhIHNwZWNpYWwgc3Vi
Y2xhc3Mgb2YKKyAgICAvLyBMYXllckNocm9taXVtIHNvIHdlIGNhbiB0cmFjayB0aGUgbnVtYmVy
IG9mIGRlc3RydWN0b3JzIGNhbGxlZC4KKworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aElu
c3RydW1lbnRlZERlc3RydWN0b3I+IHBhcmVudCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMywgZ3Jh
bmRDaGlsZDEsIGdyYW5kQ2hpbGQyLCBncmFuZENoaWxkMzsKKyAgICBwYXJlbnQgPSBhZG9wdFJl
ZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERl
bGVnYXRlKSk7CisgICAgY2hpbGQxID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5z
dHJ1bWVudGVkRGVzdHJ1Y3RvcigmbV9zaWxlbnREZWxlZ2F0ZSkpOworICAgIGNoaWxkMiA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2ls
ZW50RGVsZWdhdGUpKTsKKyAgICBjaGlsZDMgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7CisgICAgZ3JhbmRD
aGlsZDEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVj
dG9yKCZtX3NpbGVudERlbGVnYXRlKSk7CisgICAgZ3JhbmRDaGlsZDIgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRl
KSk7CisgICAgZ3JhbmRDaGlsZDMgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0
cnVtZW50ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7CisKKyAgICAvLyBzZXQgdXAg
YSBzaW1wbGUgdHJlZS4KKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgcGFyZW50
LT5hZGRDaGlsZChjaGlsZDIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQzKTsKKyAgICBj
aGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQxKTsKKyAgICBjaGlsZDEtPmFkZENoaWxkKGdyYW5k
Q2hpbGQyKTsKKyAgICBjaGlsZDItPmFkZENoaWxkKGdyYW5kQ2hpbGQzKTsKKworICAgIC8vIENs
ZWFyIGFsbCB0aGUgY2hpbGRyZW4gUmVmUHRycyBoZXJlLiBCdXQgc2luY2UgdGhleSBhcmUgYXR0
YWNoZWQgdG8gdGhlIHRyZWUsIG5vIGRlc3RydWN0b3JzIHNob3VsZCBiZSBjYWxsZWQgeWV0Lgor
ICAgIGNoaWxkMS5jbGVhcigpOworICAgIGNoaWxkMi5jbGVhcigpOworICAgIGNoaWxkMy5jbGVh
cigpOworICAgIGdyYW5kQ2hpbGQxLmNsZWFyKCk7CisgICAgZ3JhbmRDaGlsZDIuY2xlYXIoKTsK
KyAgICBncmFuZENoaWxkMy5jbGVhcigpOworCisgICAgLy8gcmVsZWFzaW5nIHRoZSBwYXJlbnQg
c2hvdWxkIGNhdXNlIGFsbCBkZXN0cnVjdG9ycyB0byBiZSBpbnZva2VkLgorICAgIEFTU0VSVF9F
USgwLCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OmdldE51bUluc3Rh
bmNlc0Rlc3Ryb3llZCgpKTsKKyAgICBwYXJlbnQucmVsZWFzZSgpOworICAgIEFTU0VSVF9FUSg3
LCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3I6OmdldE51bUluc3RhbmNl
c0Rlc3Ryb3llZCgpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBpbnNlcnRDaGls
ZCkKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZTsKKyAgICBNb2NrTGF5
ZXJEZWxlZ2F0ZSBjaGlsZERlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPnBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmcGFyZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPmNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0
ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+Y2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCZjaGlsZERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT5jaGlsZDMgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJmNoaWxkRGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPmNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7CisK
KyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigp
LnNpemUoKSk7CisKKyAgICAvLyBUaGUgY2hpbGQgZGVsZWdhdGUgbm90aWZ5U3luUmVxdWlyZWQg
c2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hlbiBpbnNlcnRpbmcuCisgICAgRVhQRUNUX0NBTEwoY2hp
bGREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOworCisgICAgLy8gQ2Fz
ZSAxOiBpbnNlcnRpbmcgdG8gZW1wdHkgbGlzdC4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9U
SUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQo
Y2hpbGQzLCAwKSk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMSksIHBhcmVu
dC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDMsIHBhcmVudC0+Y2hp
bGRyZW4oKVswXSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQzLT5wYXJlbnQo
KSk7CisKKyAgICAvLyBDYXNlIDI6IGluc2VydGluZyB0byBiZWdpbm5pbmcgb2YgbGlzdAorICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwg
MSwgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDEsIDApKTsKKyAgICBBU1NFUlRfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigyKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQz
LCBwYXJlbnQtPmNoaWxkcmVuKClbMV0pOworICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNo
aWxkMS0+cGFyZW50KCkpOworCisgICAgLy8gQ2FzZSAzOiBpbnNlcnRpbmcgdG8gbWlkZGxlIG9m
IGxpc3QKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50
RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7CisgICAgQVNTRVJU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CisgICAgRVhQRUNU
X0VRKGNoaWxkMiwgcGFyZW50LT5jaGlsZHJlbigpWzFdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQz
LCBwYXJlbnQtPmNoaWxkcmVuKClbMl0pOworICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNo
aWxkMi0+cGFyZW50KCkpOworCisgICAgLy8gQ2FzZSA0OiBpbnNlcnRpbmcgdG8gZW5kIG9mIGxp
c3QKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVs
ZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQ0LCAzKSk7CisKKyAgICBBU1NFUlRf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKGNoaWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1Rf
RVEoY2hpbGQyLCBwYXJlbnQtPmNoaWxkcmVuKClbMV0pOworICAgIEVYUEVDVF9FUShjaGlsZDMs
IHBhcmVudC0+Y2hpbGRyZW4oKVsyXSk7CisgICAgRVhQRUNUX0VRKGNoaWxkNCwgcGFyZW50LT5j
aGlsZHJlbigpWzNdKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LmdldCgpLCBjaGlsZDQtPnBhcmVu
dCgpKTsKKworICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5U3lu
Y1JlcXVpcmVkIGFzIGl0IHJlbW92ZXMgaXRzIGNoaWxkcmVuLgorICAgIEVYUEVDVF9DQUxMKHBh
cmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7Cit9
CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0Q2hpbGRQYXN0RW5kT2ZMaXN0KQor
eworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVs
ZWdhdGUpOworCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHBhcmVudC0+
Y2hpbGRyZW4oKS5zaXplKCkpOworCisgICAgLy8gaW5zZXJ0IHRvIGFuIG91dC1vZi1ib3VuZHMg
aW5kZXgKKyAgICBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMSwgNTMpOworCisgICAgQVNTRVJU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMSksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CisKKyAgICAvLyBp
bnNlcnQgYW5vdGhlciBjaGlsZCB0byBvdXQtb2YtYm91bmRzLCB3aGVuIGxpc3QgaXMgbm90IGFs
cmVhZHkgZW1wdHkuCisgICAgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDIsIDI0NTkpOworCisg
ICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHBhcmVudC0+Y2hpbGRyZW4oKS5z
aXplKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7Cisg
ICAgRVhQRUNUX0VRKGNoaWxkMiwgcGFyZW50LT5jaGlsZHJlbigpWzFdKTsKK30KKworVEVTVF9G
KExheWVyQ2hyb21pdW1UZXN0LCBpbnNlcnRTYW1lQ2hpbGRUd2ljZSkKK3sKKyAgICBNb2NrTGF5
ZXJEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFy
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZwYXJlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnRE
ZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisKKyAgICBFWEVDVVRF
X0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVu
dC0+aW5zZXJ0Q2hpbGQoY2hpbGQxLCAwKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNo
aWxkMiwgMSkpOworCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHBhcmVu
dC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hp
bGRyZW4oKVswXSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMiwgcGFyZW50LT5jaGlsZHJlbigpWzFd
KTsKKworICAgIC8vIEluc2VydGluZyB0aGUgc2FtZSBjaGlsZCBhZ2FpbiBzaG91bGQgY2F1c2Ug
dGhlIGNoaWxkIHRvIGJlIHJlbW92ZWQgYW5kIHJlLWluc2VydGVkIGF0IHRoZSBuZXcgbG9jYXRp
b24uCisgICAgLy8gU28gdGhlIHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCB3b3VsZCBiZSBj
YWxsZWQgb25lIG9yIG1vcmUgdGltZXMuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBwYXJlbnQtPmluc2VydENo
aWxkKGNoaWxkMSwgMSkpOworCisgICAgLy8gY2hpbGQxIHNob3VsZCBub3cgYmUgYXQgdGhlIGVu
ZCBvZiB0aGUgbGlzdC4KKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcGFy
ZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMiwgcGFyZW50LT5j
aGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxkcmVuKClb
MV0pOworCisgICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5j
UmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBsZWZ0b3ZlciBjaGlsZHJlbgorICAgIEVYUEVDVF9DQUxM
KHBhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7
Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0Q2hpbGRUaGF0QWxyZWFkeUhh
ZFBhcmVudCkKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBvbGRQYXJlbnREZWxlZ2F0ZTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gb2xkUGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZvbGRQYXJlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVn
YXRlKTsKKworICAgIC8vIHNldCB1cCBhbmQgc2FuaXR5LWNoZWNrIGluaXRpYWwgdGVzdCBjb25k
aXRpb25zCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG9sZFBh
cmVudERlbGVnYXRlLCAxLCBvbGRQYXJlbnQtPmFkZENoaWxkKGNoaWxkKSk7CisgICAgQVNTRVJU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMSksIG9sZFBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkp
OworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQsIG9sZFBhcmVudC0+Y2hpbGRyZW4oKVsw
XSk7CisgICAgRVhQRUNUX0VRKG9sZFBhcmVudC5nZXQoKSwgY2hpbGQtPnBhcmVudCgpKTsKKwor
ICAgIC8vIEluc2VydGluZyB0byBuZXcgcGFyZW50IGNhdXNlcyBvbGQgcGFyZW50J3Mgbm90aWZ5
U3luY1JlcXVpcmVkIHRvIGJlIGNhbGxlZC4KKyAgICAvLyBOb3RlIHRoYXQgaXQgYWxzbyBjYXVz
ZXMgcGFyZW50J3Mgbm90aWZ5U3luY1JlcXVpcmVkIHRvIGJlIGNhbGxlZCwgYnV0IHRoYXQgaXMg
dGVzdGVkIGVsc2V3aGVyZS4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1Iob2xkUGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQsIDAp
KTsKKworICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBvbGRQYXJlbnQtPmNo
aWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwg
cGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkLCBwYXJlbnQt
PmNoaWxkcmVuKClbMF0pOworICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkLT5wYXJl
bnQoKSk7Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNoaWxkV2l0aE5l
d0NoaWxkKQoreworICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0
ZSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQ0LT5wYXJlbnQoKSk7CisKKyAgICBFWEVDVVRF
X0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobV9wYXJlbnREZWxlZ2F0ZSwgQXRMZWFz
dCgxKSwgbV9wYXJlbnQtPnJlcGxhY2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CisK
KyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgbV9wYXJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEobV9jaGlsZDEsIG1fcGFyZW50LT5jaGlsZHJlbigp
WzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQ0LCBtX3BhcmVudC0+Y2hpbGRyZW4oKVsxXSk7Cisg
ICAgRVhQRUNUX0VRKG1fY2hpbGQzLCBtX3BhcmVudC0+Y2hpbGRyZW4oKVsyXSk7CisgICAgRVhQ
RUNUX0VRKG1fcGFyZW50LmdldCgpLCBjaGlsZDQtPnBhcmVudCgpKTsKKworICAgIEVYUEVDVF9G
QUxTRShtX2NoaWxkMi0+cGFyZW50KCkpOworCisgICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3RvciB3
aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBsZWZ0b3ZlciBjaGls
ZHJlbgorICAgIEVYUEVDVF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJl
ZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBy
ZXBsYWNlQ2hpbGRXaXRoTmV3Q2hpbGRUaGF0SGFzT3RoZXJQYXJlbnQpCit7CisgICAgY3JlYXRl
U2ltcGxlVGVzdFRyZWUoKTsKKworICAgIC8vIGNyZWF0ZSBhbm90aGVyIHNpbXBsZSB0cmVlIHdp
dGggdGVzdExheWVyIGFuZCBjaGlsZDQuCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHRlc3RM
YXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxl
bnREZWxlZ2F0ZSk7CisgICAgdGVzdExheWVyLT5hZGRDaGlsZChjaGlsZDQpOworICAgIEFTU0VS
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCB0ZXN0TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQ0LCB0ZXN0TGF5ZXItPmNoaWxkcmVuKClbMF0pOworICAg
IEVYUEVDVF9FUSh0ZXN0TGF5ZXIuZ2V0KCksIGNoaWxkNC0+cGFyZW50KCkpOworCisgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUsIEF0
TGVhc3QoMSksIG1fcGFyZW50LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCksIGNoaWxkNCkp
OworCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIG1fcGFyZW50LT5jaGls
ZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLCBtX3BhcmVudC0+Y2hpbGRy
ZW4oKVswXSk7CisgICAgRVhQRUNUX0VRKGNoaWxkNCwgbV9wYXJlbnQtPmNoaWxkcmVuKClbMV0p
OworICAgIEVYUEVDVF9FUShtX2NoaWxkMywgbV9wYXJlbnQtPmNoaWxkcmVuKClbMl0pOworICAg
IEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgY2hpbGQ0LT5wYXJlbnQoKSk7CisKKyAgICAvLyB0
ZXN0TGF5ZXIgc2hvdWxkIG5vIGxvbmdlciBoYXZlIGNoaWxkNCwKKyAgICAvLyBhbmQgY2hpbGQy
IHNob3VsZCBubyBsb25nZXIgaGF2ZSBhIHBhcmVudC4KKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigwKSwgdGVzdExheWVyLT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKG1fY2hpbGQyLT5wYXJlbnQoKSk7CisKKyAgICAvLyBwYXJlbnQncyBkZXN0cnVjdG9y
IHdpbGwgaW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGxlZnRvdmVyIGNo
aWxkcmVuCisgICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVp
cmVkKCkpLlRpbWVzKEF0TGVhc3QoMSkpOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3Qs
IHJlcGxhY2VDaGlsZFdpdGhTYW1lQ2hpbGQpCit7CisgICAgY3JlYXRlU2ltcGxlVGVzdFRyZWUo
KTsKKworICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBiZWNh
dXNlIGl0cyB0aGUgc2FtZSBjaGlsZAorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtX3BhcmVudERlbGVnYXRlLCAwLCBtX3BhcmVudC0+cmVwbGFjZUNoaWxkKG1f
Y2hpbGQyLmdldCgpLCBtX2NoaWxkMikpOworCisgICAgdmVyaWZ5VGVzdFRyZWVJbml0aWFsU3Rh
dGUoKTsKKworICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5U3lu
Y1JlcXVpcmVkIGFzIGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRyZW4KKyAgICBFWFBFQ1RfQ0FM
TChtX3BhcmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgx
KSk7Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVtb3ZlQWxsQ2hpbGRyZW4pCit7
CisgICAgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKKworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtX3BhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBtX3BhcmVu
dC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigwKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
bV9jaGlsZDEtPnBhcmVudCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9jaGlsZDItPnBhcmVudCgp
KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9jaGlsZDMtPnBhcmVudCgpKTsKKworICAgIC8vIG5vdGlm
eVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiB0cnlpbmcgdG8gcmVtb3ZlQWxs
Q2hpbGRyZW4gd2hlbiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4uCisgICAgRVhFQ1VURV9BTkRfVkVS
SUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUsIDAsIG1fcGFyZW50LT5y
ZW1vdmVBbGxDaGlsZHJlbigpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBzZXRD
aGlsZHJlbikKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBuZXdQYXJlbnREZWxlZ2F0ZTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gb2xkUGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbmV3UGFyZW50
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZuZXdQYXJlbnREZWxlZ2F0ZSk7CisKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVu
dERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBuZXdDaGlsZHJlbjsKKyAgICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQx
KTsKKyAgICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQyKTsKKworICAgIC8vIFNldCB1cCBhbmQg
dmVyaWZ5IGluaXRpYWwgdGVzdCBjb25kaXRpb25zOiBjaGlsZDEgaGFzIGEgcGFyZW50LCBjaGls
ZDIgaGFzIG5vIHBhcmVudC4KKyAgICBvbGRQYXJlbnQtPmFkZENoaWxkKGNoaWxkMSk7CisgICAg
QVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIG5ld1BhcmVudC0+Y2hpbGRyZW4oKS5z
aXplKCkpOworICAgIEVYUEVDVF9FUShvbGRQYXJlbnQuZ2V0KCksIGNoaWxkMS0+cGFyZW50KCkp
OworICAgIEVYUEVDVF9GQUxTRShjaGlsZDItPnBhcmVudCgpKTsKKworICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihuZXdQYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgx
KSwgbmV3UGFyZW50LT5zZXRDaGlsZHJlbihuZXdDaGlsZHJlbikpOworCisgICAgQVNTRVJUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMiksIG5ld1BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUShuZXdQYXJlbnQuZ2V0KCksIGNoaWxkMS0+cGFyZW50KCkpOworICAgIEVY
UEVDVF9FUShuZXdQYXJlbnQuZ2V0KCksIGNoaWxkMi0+cGFyZW50KCkpOworCisgICAgLy8gcGFy
ZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVt
b3ZlcyBpdHMgY2hpbGRyZW4uCisgICAgRVhQRUNUX0NBTEwobmV3UGFyZW50RGVsZWdhdGUsIG5v
dGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVy
Q2hyb21pdW1UZXN0LCBnZXRSb290TGF5ZXJBZnRlclRyZWVNYW5pcHVsYXRpb25zKQoreworICAg
IGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxk
NCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisKKyAgICAvLyBJ
biB0aGlzIHRlc3QgY2FzZSwgd2UgZG9uJ3QgY2FyZSBhYm91dCBob3cgdGhlIHBhcmVudCdzIG5v
dGlmeVN5bmNSZXF1aXJlZCBpcyBjYWxsZWQuCisgICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxl
Z2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEFueU51bWJlcigpKTsKKworICAgIEVY
UEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9wYXJlbnQtPnJvb3RMYXllcigpKTsKKyAgICBFWFBF
Q1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQxLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNU
X0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMi0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9F
UShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDMtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEo
Y2hpbGQ0LmdldCgpLCAgIGNoaWxkNC0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3Bh
cmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMS0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUSht
X3BhcmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMi0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9F
UShtX3BhcmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cm9vdExheWVyKCkpOworCisgICAgbV9j
aGlsZDEtPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIC8vIGNoaWxkMSBhbmQgaXRzIGNoaWxk
cmVuLCBncmFuZENoaWxkMSBhbmQgZ3JhbmRDaGlsZDIgYXJlIG5vdyBvbiBhIHNlcGFyYXRlIHN1
YnRyZWUuCisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX3BhcmVudC0+cm9vdExheWVy
KCkpOworICAgIEVYUEVDVF9FUShtX2NoaWxkMS5nZXQoKSwgbV9jaGlsZDEtPnJvb3RMYXllcigp
KTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQyLT5yb290TGF5ZXIoKSk7
CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMy0+cm9vdExheWVyKCkpOwor
ICAgIEVYUEVDVF9FUShjaGlsZDQuZ2V0KCksIGNoaWxkNC0+cm9vdExheWVyKCkpOworICAgIEVY
UEVDVF9FUShtX2NoaWxkMS5nZXQoKSwgbV9ncmFuZENoaWxkMS0+cm9vdExheWVyKCkpOworICAg
IEVYUEVDVF9FUShtX2NoaWxkMS5nZXQoKSwgbV9ncmFuZENoaWxkMi0+cm9vdExheWVyKCkpOwor
ICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cm9vdExheWVyKCkp
OworCisgICAgbV9ncmFuZENoaWxkMy0+YWRkQ2hpbGQoY2hpbGQ0KTsKKworICAgIEVYUEVDVF9F
UShtX3BhcmVudC5nZXQoKSwgbV9wYXJlbnQtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEo
bV9jaGlsZDEuZ2V0KCksIG1fY2hpbGQxLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1f
cGFyZW50LmdldCgpLCBtX2NoaWxkMi0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3Bh
cmVudC5nZXQoKSwgbV9jaGlsZDMtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJl
bnQuZ2V0KCksIGNoaWxkNC0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX2NoaWxkMS5n
ZXQoKSwgbV9ncmFuZENoaWxkMS0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX2NoaWxk
MS5nZXQoKSwgbV9ncmFuZENoaWxkMi0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3Bh
cmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cm9vdExheWVyKCkpOworCisgICAgbV9jaGlsZDIt
PnJlcGxhY2VDaGlsZChtX2dyYW5kQ2hpbGQzLmdldCgpLCBtX2NoaWxkMSk7CisKKyAgICAvLyBn
cmFuZENoaWxkMyBnZXRzIG9ycGhhbmVkIGFuZCB0aGUgY2hpbGQxIHN1YnRyZWUgZ2V0cyBwbGFu
dGVkIGJhY2sgaW50byB0aGUgdHJlZSB1bmRlciBjaGlsZDIuCisgICAgRVhQRUNUX0VRKG1fcGFy
ZW50LmdldCgpLCBtX3BhcmVudC0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVu
dC5nZXQoKSwgbV9jaGlsZDEtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQu
Z2V0KCksIG1fY2hpbGQyLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50Lmdl
dCgpLCBtX2NoaWxkMy0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX2dyYW5kQ2hpbGQz
LmdldCgpLCBjaGlsZDQtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0
KCksIG1fZ3JhbmRDaGlsZDEtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQu
Z2V0KCksIG1fZ3JhbmRDaGlsZDItPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9ncmFu
ZENoaWxkMy5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cm9vdExheWVyKCkpOworfQorCisvLyBGSVhN
RTogbmVlZCB0byBhZGQgYSB0ZXN0IGZvciBnZXREZXNjZW5kYW50RHJhd3NDb250ZW50IGFmdGVy
IHJlc29sdmluZworLy8gICAgICAgIHNvbWUgaXNzdWVzIHdpdGggTGF5ZXJDaHJvbWl1bTo6ZGVz
Y2VuZGFudERyYXdzQ29udGVudCgpLgorLy8gICAgICAgIHNlZSBkaXNjdXNzaW9uIG9uIGlzc3Vl
IDY3NzUwCisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlD
YXVzZXNDb3JyZWN0QmVoYXZpb3IpCit7CisgICAgLy8gVGhlIHNlbWFudGljcyBmb3Igc2V0TmVl
ZHNEaXNwbGF5IHdoaWNoIGFyZSB0ZXN0ZWQgaGVyZToKKyAgICAvLyAgIDEuIGNyZWF0ZXMgYSB1
bmlvbmVkIGRpcnR5UmVjdCBhcHByb3ByaWF0ZWx5LgorICAgIC8vICAgMi4gaW5kaXJlY3RseSBj
YWxscyBub3RpZnlTeW5jUmVxdWlyZWQsIGV4YWN0bHkgb25jZSBmb3IgZWFjaCBjYWxsIHRvIHNl
dE5lZWRzRGlzcGxheS4KKworICAgIE1vY2tMYXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZtb2NrRGVsZWdhdGUpOworICAgIEludFNpemUgdGVzdEJvdW5kcyA9IEludFNpemUoNTAxLCA1
MDgpOworCisgICAgRmxvYXRSZWN0IGRpcnR5MSA9IEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEu
MGYsIDIuMGYpOworICAgIEZsb2F0UmVjdCBkaXJ0eTIgPSBGbG9hdFJlY3QoMjAuMGYsIDI1LjBm
LCAzLjBmLCA0LjBmKTsKKyAgICBGbG9hdFJlY3QgZW1wdHlEaXJ0eVJlY3QgPSBGbG9hdFJlY3Qo
NDAuMGYsIDQ1LjBmLCAwLCAwKTsKKyAgICBGbG9hdFJlY3Qgb3V0T2ZCb3VuZHNEaXJ0eVJlY3Qg
PSBGbG9hdFJlY3QoNDAwLjBmLCA0MDUuMGYsIDUwMC4wZiwgNTAyLjBmKTsKKworICAgIC8vIEJl
Zm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNob3VsZCBoYXZlIGFuIGVtcHR5IGRpcnR5IHJlY3Qu
CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworCisg
ICAgLy8gVGhpcyBpcyBqdXN0IGluaXRpYWxpemF0aW9uLCBidXQgbm90aWZ5U3luY1JlcXVpcmVk
IGJlaGF2aW9yIGlzIHZlcmlmaWVkIGFueXdheSB0byBhdm9pZCB3YXJuaW5ncy4KKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0
TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRz
RGlzcGxheSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1w
dHkoKSk7CisKKyAgICAvLyBUaGUgcmVhbCB0ZXN0IGJlZ2lucyBoZXJlLgorCisgICAgLy8gQ2Fz
ZSAxOiBiYXNpYworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MSkpOworICAg
IHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChkaXJ0eTEsIHRlc3RMYXllci0+ZGlydHlSZWN0
KCkpOworCisgICAgLy8gQ2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBiZSB1bmlv
bmVkIG9mIGRpcnR5MSBhbmQgZGlydHkyLgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5
KGRpcnR5MikpOworICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAu
MGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKworICAg
IC8vIENhc2UgMzogZGlydHkgcmVjdCBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVt
cHR5IGRpcnR5IHJlY3QuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0
eVJlY3QpKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBm
LCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisKKyAgICAv
LyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdv
IGJleW9uZCBpdHMgYm91bmRzCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkob3V0T2ZC
b3VuZHNEaXJ0eVJlY3QpKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRS
ZWN0KDEwLjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgp
KTsKKworICAgIC8vIENhc2UgNTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkg
cmVjdCBhcmcgc2hvdWxkIGNhdXNlIHRoZSBlbnRpcmUgYm91bmRzIHRvIGJlIGRpcnR5LAorICAg
IC8vICAgICAgICAgb3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgZGlydHkgcmVjdC4KKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0
TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1
YWwoRmxvYXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMud2lkdGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQo
KSksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworCisgICAgLy8gcmVzZXROZWVkc0Rpc3BsYXkg
c2hvdWxkIGVtcHR5IHRoZSBkaXJ0eSByZWN0LCBhbmQgTk9UIGNhbGwgbm90aWZ5U3luY1JlcXVp
cmVkLgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVs
ZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7CisgICAgRVhQRUNUX1RS
VUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworfQorCitURVNUX0YoTGF5ZXJD
aHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkKK3sKKyAg
ICAvLyBXaXRob3V0IGEgZGVsZWdhdGUsIHRoZSBsYXllciBzaG91bGQgc3RpbGwgbWFyayBpdHNl
bGYgZGlydHkgYXMgYXBwcm9wcmlhdGUsCisgICAgLy8gYW5kIGl0IHNob3VsZCBub3QgY3Jhc2gg
dHJ5aW5nIHRvIHVzZSBhIG5vbi1leGlzdGluZyBkZWxlZ2F0ZS4KKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIEludFNp
emUgdGVzdEJvdW5kcyA9IEludFNpemUoNTAxLCA1MDgpOworCisgICAgRmxvYXRSZWN0IGRpcnR5
ID0gRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMS4wZiwgMi4wZik7CisKKyAgICB0ZXN0TGF5ZXIt
PnNldEJvdW5kcyh0ZXN0Qm91bmRzKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwo
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUwMS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CisKKyAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgRVhQRUNU
X1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAgdGVzdExheWVy
LT5zZXROZWVkc0Rpc3BsYXkoZGlydHkpOworICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVh
bChkaXJ0eSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Cit9CisKK1RFU1RfRihMYXllckNocm9t
aXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKK3sKKyAg
ICBNb2NrTGF5ZXJEZWxlZ2F0ZSBpbml0aWFsRGVsZWdhdGU7CisgICAgTW9ja0xheWVyRGVsZWdh
dGUgbW9ja0RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJmluaXRpYWxEZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGR1bW15TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVs
ZWdhdGUpOyAvLyBqdXN0IGEgZHVtbXkgbGF5ZXIgZm9yIHRoaXMgdGVzdCBjYXNlLgorCisgICAg
Ly8gc2FuaXR5IGNoZWNrIG9mIGluaXRpYWwgdGVzdCBjb25kaXRpb24KKyAgICBFWFBFQ1RfVFJV
RSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUZXN0IHByb3Bl
cnRpZXMgdGhhdCBzaG91bGQgbm90IGNhbGwgbmVlZHNEaXNwbGF5IGFuZCBuZWVkc0NvbW1pdCB3
aGVuIGNoYW5nZWQuCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2Fs
bGVkLCBhbmQgdGhlIGRpcnR5UmVjdCBzaG91bGQgcmVtYWluIHN0aWxsIGVtcHR5LgorICAgIEVY
UEVDVF9DQUxMKGluaXRpYWxEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDAp
OyAvLyBvbGQgZGVsZWdhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gc2V0RGVsZWdhdGUgZ2l2
ZXMgYSBuZXcgZGVsZWdhdGUuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREZWxlZ2F0ZSgmbW9ja0RlbGVn
YXRlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tE
ZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpKTsKKyAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0
TGF5ZXItPnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRNYXNrTGF5
ZXIoZHVtbXlMYXllci5nZXQoKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dChJbnRSZWN0KDAsIDAsIDQwLCA1MCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFNjcm9sbFBvc2l0
aW9uKEludFBvaW50KDEwLCAxMCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFVzZXNMYXllclNjaXNz
b3IodHJ1ZSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVl
KSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMCwgdGVzdExheWVyLT5zZXRSZXBsaWNhTGF5ZXIoZHVtbXlMYXllci5nZXQoKSkpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUs
IDAsIHRlc3RMYXllci0+c2V0RHJhd09wYWNpdHkoMC41ZikpOworICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0
U2Npc3NvclJlY3QoSW50UmVjdCgzLCAzLCA4LCA4KSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZSgwKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3VHJhbnNmb3JtKFRy
YW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFNjcmVlblNwYWNlVHJh
bnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERyYXdh
YmxlQ29udGVudFJlY3QoSW50UmVjdCg0LCA1LCA2LCA3KSkpOworICAgIEVYUEVDVF9UUlVFKHRl
c3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIE5leHQsIHRlc3QgcHJv
cGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzQ29tbWl0IChidXQgbm90IHNldE5lZWRz
RGlzcGxheSkKKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBpbmRpcmVjdGx5IGNhbGwg
bm90aWZ5U3luY1JlcXVpcmVkLCBidXQgdGhlIGRpcnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2Uu
CisgICAgLy8gTm90ZSB0aGF0IGZvciBtYW55IG9mIHRoZXNlIHByb3BlcnRpZXMgaXQgaXMgaW1w
b3J0YW50IHRvIHRlc3Qgc2V0dGluZyB0aGUgcHJvcGVydHkgdG8gYSB2YWx1ZSB0aGF0CisgICAg
Ly8gaXMgZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgaXQg
dG8uCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMSwgdGVzdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDEuMjNmLCA0LjU2
ZikpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0Rl
bGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEFuY2hvclBvaW50WigwLjdmKSk7CisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExh
eWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMC40ZiwgMC40ZiwgMC40ZikpKTsKKyAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldE9wYWNpdHkoMC41ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0T3BhcXVlKGZh
bHNlKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tE
ZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDQuMGYsIDkuMGYp
KSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMSwgdGVzdExheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1v
Y2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2Nr
RGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0RG91YmxlU2lkZWQoZmFsc2UpKTsKKworICAgIC8v
IFRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgbm90IGhhdmUgY2F1c2VkIGEgbm9uLWVtcHR5IGRpcnR5
IHJlY3QuCisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkp
OworCisgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNEaXNw
bGF5CisgICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVk
IGFuZCBjaGFuZ2UgdGhlIGRpcnR5IHJlY3QuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHMoSW50
U2l6ZSg1LCAxMCkpKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0
KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAg
dGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFkZCBh
IHRlc3QgZm9yIHNldExheWVyVHJlZUhvc3Qgd2l0aCBhIG5vbi1udWxsIHN0dWJiZWQgQ0NMYXll
clRyZWVIb3N0LgorfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109386</attachid>
            <date>2011-09-30 17:58:10 -0700</date>
            <delta_ts>2011-09-30 19:11:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68572-20110930175809.patch</filename>
            <type>text/plain</type>
            <size>33884</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY0MjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NjA1ZjgzMzM0Y2I0NGIyYTI3ODZkNWIwNjkxYjExNzAwYzIxMTQ0Ny4uNDc1ZjUzZWQ3NzRhNWZk
ZDMzZWY4YzU1N2QyYzViZTZhZmExODM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMS0wOS0yNyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgdW5pdCB0ZXN0cyBmb3IgTGF5ZXJDaHJvbWl1bS4g
IEVtcGhhc2lzIG9uIHZlcmlmeWluZworICAgICAgICBiZWhhdmlvciBvZiBub3RpZnlTeW5jUmVx
dWlyZWQgY2FsbGJhY2sgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTcyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0
ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorCiAyMDExLTA5LTMwICBFbGxpb3Qg
UG9nZXIgIDxlcG9nZXJAZ29vZ2xlLmNvbT4KIAogICAgICAgICB3ZWJraXQtPmNocm9taXVtIERF
UFMgcm9sbCAxMDI5MTAtPjEwMzQ3MQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
NTI1YWZlNjk2Y2UzMDhiMjU4OTFhYjk3OTJiNDBjMDE0NGY4MTA2Yy4uODQ3YzM3MWQxYmRjYjlj
ZmIzMDFjZGE4MDM5NTY5Nzg1OTgyMzg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC02NCw2ICs2NCw3IEBACiAgICAgICAgICAgICAndGVzdHMvSW5uZXJHZXN0dXJlUmVjb2du
aXplclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0xheWVy
Q2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTW9ja0dyYXBoaWNzQ29udGV4
dDNEVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tXZWJHcmFwaGljc0NvbnRleHQz
RC5oJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDk4ZmEwZjYzMWQzMWRlYzVhNGFjZDQ2ZTdiZTEyNWJjMTQxZGQ1NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
CkBAIC0wLDAgKzEsNjY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNp
bmcgOjp0ZXN0aW5nOjpNb2NrOwordXNpbmcgOjp0ZXN0aW5nOjpfOwordXNpbmcgOjp0ZXN0aW5n
OjpBdExlYXN0OwordXNpbmcgOjp0ZXN0aW5nOjpBbnlOdW1iZXI7CisKKyNkZWZpbmUgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKGRlbGVnYXRlLCBudW1UaW1lc0V4cGVj
dGVkTm90aWZ5U3luYywgY29kZVRvVGVzdCkgXAorICAgIEVYUEVDVF9DQUxMKChkZWxlZ2F0ZSks
IG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygobnVtVGltZXNFeHBlY3RlZE5vdGlmeVN5bmMp
KTsgXAorICAgIGNvZGVUb1Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRp
b25zKCYoZGVsZWdhdGUpKQorCituYW1lc3BhY2UgeworCitjbGFzcyBNb2NrTGF5ZXJEZWxlZ2F0
ZSA6IHB1YmxpYyBDQ0xheWVyRGVsZWdhdGUgeworcHVibGljOgorICAgIE1PQ0tfQ09OU1RfTUVU
SE9EMChkcmF3c0NvbnRlbnQsIGJvb2woKSk7CisgICAgTU9DS19DT05TVF9NRVRIT0QwKHByZXNl
cnZlczNELCBib29sKCkpOworICAgIE1PQ0tfTUVUSE9EMihwYWludENvbnRlbnRzLCB2b2lkKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKSk7CisgICAgTU9DS19NRVRIT0QwKG5vdGlm
eVN5bmNSZXF1aXJlZCwgdm9pZCgpKTsKK307CisKK2NsYXNzIExheWVyQ2hyb21pdW1XaXRoSW5z
dHJ1bWVudGVkRGVzdHJ1Y3RvciA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoQ0NMYXll
ckRlbGVnYXRlKiBkZWxlZ2F0ZSkKKyAgICAgICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5MYXllckNocm9taXVtV2l0aEluc3RydW1lbnRl
ZERlc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc19udW1JbnN0YW5jZXNEZXN0cm95ZWQrKzsK
KyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldE51bUluc3RhbmNlc0Rlc3Ryb3llZCgpIHsgcmV0
dXJuIHNfbnVtSW5zdGFuY2VzRGVzdHJveWVkOyB9CisgICAgc3RhdGljIHZvaWQgcmVzZXROdW1J
bnN0YW5jZXNEZXN0cm95ZWQoKSB7IHNfbnVtSW5zdGFuY2VzRGVzdHJveWVkID0gMDsgfQorCitw
cml2YXRlOgorICAgIHN0YXRpYyBpbnQgc19udW1JbnN0YW5jZXNEZXN0cm95ZWQ7Cit9OworCitp
bnQgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpzX251bUluc3RhbmNl
c0Rlc3Ryb3llZCA9IDA7CisKK2NsYXNzIExheWVyQ2hyb21pdW1UZXN0IDogcHVibGljIHRlc3Rp
bmc6OlRlc3QgeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgewor
ICAgICAgICAvLyBtX3NpbGVudERlbGVnYXRlIGlzIGluaXRpYWxpemVkIHRvIGJlIGp1c3QgYSBz
dHViIGFuZCB3aWxsCisgICAgICAgIC8vIG5vdCBwcmludCBhbnkgd2FybmluZ3MuIEl0IGlzIHVz
ZWQgd2hlbiB3ZSBhcmUgbm90IHdvcnJpZWQKKyAgICAgICAgLy8gYWJvdXQgdGVzdGluZyBob3cg
dGhlIGRlbGVnYXRlIGlzIGNhbGxlZC4KKyAgICAgICAgRVhQRUNUX0NBTEwobV9zaWxlbnREZWxl
Z2F0ZSwgZHJhd3NDb250ZW50KCkpLlRpbWVzKEFueU51bWJlcigpKTsKKyAgICAgICAgRVhQRUNU
X0NBTEwobV9zaWxlbnREZWxlZ2F0ZSwgcHJlc2VydmVzM0QoKSkuVGltZXMoQW55TnVtYmVyKCkp
OworICAgICAgICBFWFBFQ1RfQ0FMTChtX3NpbGVudERlbGVnYXRlLCBwYWludENvbnRlbnRzKF8s
IF8pKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1fc2lsZW50RGVs
ZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcyhBbnlOdW1iZXIoKSk7CisKKyAgICAg
ICAgLy8gU3RhdGljIHZhcmlhYmxlcyBuZWVkIHRvIGJlIHJlc2V0IGZvciBldmVyeSBuZXcgdGVz
dCBjYXNlCisgICAgICAgIExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6
cmVzZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZlcmlmeVRl
c3RUcmVlSW5pdGlhbFN0YXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDMpLCBtX3BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVEobV9jaGlsZDEsIG1fcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICAgICAg
RVhQRUNUX0VRKG1fY2hpbGQyLCBtX3BhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CisgICAgICAgIEVY
UEVDVF9FUShtX2NoaWxkMywgbV9wYXJlbnQtPmNoaWxkcmVuKClbMl0pOworICAgICAgICBFWFBF
Q1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQxLT5wYXJlbnQoKSk7CisgICAgICAgIEVYUEVD
VF9FUShtX3BhcmVudC5nZXQoKSwgbV9jaGlsZDItPnBhcmVudCgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMy0+cGFyZW50KCkpOworCisgICAgICAgIEFTU0VS
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCBtX2NoaWxkMS0+Y2hpbGRyZW4oKS5zaXplKCkp
OworICAgICAgICBFWFBFQ1RfRVEobV9ncmFuZENoaWxkMSwgbV9jaGlsZDEtPmNoaWxkcmVuKClb
MF0pOworICAgICAgICBFWFBFQ1RfRVEobV9ncmFuZENoaWxkMiwgbV9jaGlsZDEtPmNoaWxkcmVu
KClbMV0pOworICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZDEuZ2V0KCksIG1fZ3JhbmRDaGlsZDEt
PnBhcmVudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGQxLmdldCgpLCBtX2dyYW5kQ2hp
bGQyLT5wYXJlbnQoKSk7CisKKyAgICAgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
MSksIG1fY2hpbGQyLT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShtX2dy
YW5kQ2hpbGQzLCBtX2NoaWxkMi0+Y2hpbGRyZW4oKVswXSk7CisgICAgICAgIEVYUEVDVF9FUSht
X2NoaWxkMi5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cGFyZW50KCkpOworCisgICAgICAgIEFTU0VS
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBtX2NoaWxkMy0+Y2hpbGRyZW4oKS5zaXplKCkp
OworICAgIH0KKworICAgIHZvaWQgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKQorICAgIHsKKyAgICAg
ICAgbV9wYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fcGFyZW50RGVsZWdhdGUpOwor
ICAgICAgICBtX2NoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0
ZSk7CisgICAgICAgIG1fY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERl
bGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZDMgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2ls
ZW50RGVsZWdhdGUpOworICAgICAgICBtX2dyYW5kQ2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKyAgICAgICAgbV9ncmFuZENoaWxkMiA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgICAgIG1fZ3JhbmRDaGlsZDMg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworCisgICAgICAgIEVY
UEVDVF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygz
KTsKKyAgICAgICAgbV9wYXJlbnQtPmFkZENoaWxkKG1fY2hpbGQxKTsKKyAgICAgICAgbV9wYXJl
bnQtPmFkZENoaWxkKG1fY2hpbGQyKTsKKyAgICAgICAgbV9wYXJlbnQtPmFkZENoaWxkKG1fY2hp
bGQzKTsKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fcGFyZW50
RGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkMS0+YWRkQ2hpbGQobV9ncmFuZENoaWxkMSk7Cisg
ICAgICAgIG1fY2hpbGQxLT5hZGRDaGlsZChtX2dyYW5kQ2hpbGQyKTsKKyAgICAgICAgbV9jaGls
ZDItPmFkZENoaWxkKG1fZ3JhbmRDaGlsZDMpOworCisgICAgICAgIHZlcmlmeVRlc3RUcmVlSW5p
dGlhbFN0YXRlKCk7CisgICAgfQorCisgICAgdm9pZCB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1
YWwoY29uc3QgRmxvYXRSZWN0JiBleHBlY3RlZCwgY29uc3QgRmxvYXRSZWN0JiBhY3R1YWwpIGNv
bnN0CisgICAgeworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQubG9jYXRpb24oKS54
KCksIGFjdHVhbC5sb2NhdGlvbigpLngoKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShleHBl
Y3RlZC5sb2NhdGlvbigpLnkoKSwgYWN0dWFsLmxvY2F0aW9uKCkueSgpKTsKKyAgICAgICAgRVhQ
RUNUX0ZMT0FUX0VRKGV4cGVjdGVkLnNpemUoKS53aWR0aCgpLCBhY3R1YWwuc2l6ZSgpLndpZHRo
KCkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZXhwZWN0ZWQuc2l6ZSgpLmhlaWdodCgpLCBh
Y3R1YWwuc2l6ZSgpLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBt
X3NpbGVudERlbGVnYXRlLCBtX3BhcmVudERlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBtX3BhcmVudCwgbV9jaGlsZDEsIG1fY2hpbGQyLCBtX2NoaWxkMywgbV9ncmFuZENoaWxk
MSwgbV9ncmFuZENoaWxkMiwgbV9ncmFuZENoaWxkMzsKK307CisKK1RFU1RfRihMYXllckNocm9t
aXVtVGVzdCwgYmFzaWNDcmVhdGVBbmREZXN0cm95KQoreworICAgIE1vY2tMYXllckRlbGVnYXRl
IG1vY2tEZWxlZ2F0ZTsKKworICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJl
IGNhbGxlZCBqdXN0IGJlY2F1c2UgdGhlIGxheWVyIGlzIGNyZWF0ZWQgb3IgZGVzdHJveWVkLgor
ICAgIEVYUEVDVF9DQUxMKG1vY2tEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVz
KDApOworCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rv
cj4gdGVzdExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVk
RGVzdHJ1Y3RvcigmbW9ja0RlbGVnYXRlKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdExheWVyLmdl
dCgpKTsKKworICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgYWxzbyBub3QgYmUgY2Fs
bGVkIG9uIHRoZSBkZXN0cnVjdG9yIHdoZW4gdGhlIGxheWVyIGhhcyBubyBjaGlsZHJlbi4KKyAg
ICAvLyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgZGVzdHJveWVkIGJlZm9y
ZSB0aGUgbW9jayBkZWxlZ2F0ZS4KKyAgICBBU1NFUlRfRVEoMCwgTGF5ZXJDaHJvbWl1bVdpdGhJ
bnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQoKSk7CisgICAg
dGVzdExheWVyLnJlbGVhc2UoKTsKKyAgICBBU1NFUlRfRVEoMSwgTGF5ZXJDaHJvbWl1bVdpdGhJ
bnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNEZXN0cm95ZWQoKSk7Cit9CisK
K1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgYWRkQW5kUmVtb3ZlQ2hpbGQpCit7CisgICAgTW9j
a0xheWVyRGVsZWdhdGUgcGFyZW50RGVsZWdhdGU7CisgICAgTW9ja0xheWVyRGVsZWdhdGUgY2hp
bGREZWxlZ2F0ZTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZwYXJlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKworICAgIC8v
IFVwb24gY3JlYXRpb24sIGxheWVycyBzaG91bGQgbm90IGhhdmUgY2hpbGRyZW4gb3IgcGFyZW50
LgorICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnBhcmVudCgpKTsKKworICAgIC8v
IFBhcmVudCBjYWxscyBub3RpZnlTeW5jUmVxdWlyZWQgZXhhY3RseSBvbmNlIHdoZW4gYWRkaW5n
IGNoaWxkLgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJl
bnREZWxlZ2F0ZSwgMSwgcGFyZW50LT5hZGRDaGlsZChjaGlsZCkpOworCisgICAgQVNTRVJUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMSksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAg
IEVYUEVDVF9FUShjaGlsZC5nZXQoKSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBF
Q1RfRVEocGFyZW50LmdldCgpLCBjaGlsZC0+cGFyZW50KCkpOworICAgIEVYUEVDVF9FUShwYXJl
bnQuZ2V0KCksIGNoaWxkLT5yb290TGF5ZXIoKSk7CisKKyAgICAvLyByZW1vdmVGcm9tUGFyZW50
IHNob3VsZCBjYXVzZSB0aGUgcGFyZW50J3Mgbm90aWZ5U3luY1JlcXVpcmVkIHRvIGJlIGNhbGxl
ZCBleGFjdGx5IG9uY2UuCisgICAgLy8gVGhlIGNoaWxkRGVsZWdhdGUgbm90aWZ5U3luY1JlcXVp
cmVkIHNob3VsZCByZW1haW4gdW4tdXNlZC4KKyAgICBFWFBFQ1RfQ0FMTChjaGlsZERlbGVnYXRl
LCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBjaGlsZC0+cmVtb3ZlRnJv
bVBhcmVudCgpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlEZXN0cnVj
dG9yU2VtYW50aWNzKQoreworICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOwor
ICAgIE1vY2tMYXllckRlbGVnYXRlIGNoaWxkRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcj4gcGFyZW50ID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigmcGFyZW50RGVsZWdhdGUpKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
JmNoaWxkRGVsZWdhdGUpOworCisgICAgLy8gU2V0IHVwIGluaXRpYWwgdGVzdCBjb25kaXRpb25z
CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKHBhcmVudERlbGVn
YXRlLCAxLCBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKSk7CisgICAgRVhQRUNUX1RSVUUoY2hpbGQt
PnBhcmVudCgpKTsKKworICAgIC8vIFdoZW4gYmVpbmcgZGVzdHJveWVkLCBub3RpZnlTeW5jUmVx
dWlyZWQgaXMgY2FsbGVkIG9uY2UgZm9yIHRoZSBwYXJlbnQsIGJlY2F1c2UgaXQgaGFzIG9uZSBj
aGlsZCwKKyAgICAvLyBidXQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIHRoZSBjaGlsZCB3aGlj
aCBoYXMgbm8gY2hpbGRyZW4uCisgICAgRVhQRUNUX0NBTEwocGFyZW50RGVsZWdhdGUsIG5vdGlm
eVN5bmNSZXF1aXJlZCgpKS5UaW1lcygxKTsKKyAgICBFWFBFQ1RfQ0FMTChjaGlsZERlbGVnYXRl
LCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7CisKKyAgICBBU1NFUlRfRVEoMCwgTGF5
ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNEZXN0
cm95ZWQoKSk7CisgICAgcGFyZW50LnJlbGVhc2UoKTsKKyAgICBBU1NFUlRfRVEoMSwgTGF5ZXJD
aHJvbWl1bVdpdGhJbnN0cnVtZW50ZWREZXN0cnVjdG9yOjpnZXROdW1JbnN0YW5jZXNEZXN0cm95
ZWQoKSk7CisKKyAgICAvLyBDaGlsZCBzaG91bGQgaGF2ZSBiZWVuIHVuLXBhcmVudGVkIGNvcnJl
Y3RseSwgYnV0IG5vdCB5ZXQgZGVzdHJveWVkIHNpbmNlIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8g
aXQuCisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkLT5wYXJlbnQoKSk7Cit9CisKK1RFU1RfRihMYXll
ckNocm9taXVtVGVzdCwgdmVyaWZ5RGVzdHJ1Y3RvckRvZXNOb3RMZWFrKQoreworICAgIC8vIElu
IHRoaXMgdGVzdCB3ZSBleHBsaWNpdGx5IGluc3RhbnRpYXRlIGEgc3BlY2lhbCBzdWJjbGFzcyBv
ZgorICAgIC8vIExheWVyQ2hyb21pdW0gc28gd2UgY2FuIHRyYWNrIHRoZSBudW1iZXIgb2YgZGVz
dHJ1Y3RvcnMgY2FsbGVkLgorCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVu
dGVkRGVzdHJ1Y3Rvcj4gcGFyZW50LCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzLCBncmFuZENoaWxk
MSwgZ3JhbmRDaGlsZDIsIGdyYW5kQ2hpbGQzOworICAgIHBhcmVudCA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUp
KTsKKyAgICBjaGlsZDEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhJbnN0cnVtZW50
ZWREZXN0cnVjdG9yKCZtX3NpbGVudERlbGVnYXRlKSk7CisgICAgY2hpbGQyID0gYWRvcHRSZWYo
bmV3IExheWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3RvcigmbV9zaWxlbnREZWxl
Z2F0ZSkpOworICAgIGNoaWxkMyA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3Ry
dW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKKyAgICBncmFuZENoaWxkMSA9
IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1f
c2lsZW50RGVsZWdhdGUpKTsKKyAgICBncmFuZENoaWxkMiA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEluc3RydW1lbnRlZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKKyAg
ICBncmFuZENoaWxkMyA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEluc3RydW1lbnRl
ZERlc3RydWN0b3IoJm1fc2lsZW50RGVsZWdhdGUpKTsKKworICAgIC8vIHNldCB1cCBhIHNpbXBs
ZSB0cmVlLgorICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICBwYXJlbnQtPmFkZENo
aWxkKGNoaWxkMik7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZDMpOworICAgIGNoaWxkMS0+
YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIp
OworICAgIGNoaWxkMi0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworCisgICAgLy8gQ2xlYXIgYWxs
IHRoZSBjaGlsZHJlbiBSZWZQdHJzIGhlcmUuIEJ1dCBzaW5jZSB0aGV5IGFyZSBhdHRhY2hlZCB0
byB0aGUgdHJlZSwgbm8gZGVzdHJ1Y3RvcnMgc2hvdWxkIGJlIGNhbGxlZCB5ZXQuCisgICAgY2hp
bGQxLmNsZWFyKCk7CisgICAgY2hpbGQyLmNsZWFyKCk7CisgICAgY2hpbGQzLmNsZWFyKCk7Cisg
ICAgZ3JhbmRDaGlsZDEuY2xlYXIoKTsKKyAgICBncmFuZENoaWxkMi5jbGVhcigpOworICAgIGdy
YW5kQ2hpbGQzLmNsZWFyKCk7CisKKyAgICAvLyByZWxlYXNpbmcgdGhlIHBhcmVudCBzaG91bGQg
Y2F1c2UgYWxsIGRlc3RydWN0b3JzIHRvIGJlIGludm9rZWQuCisgICAgQVNTRVJUX0VRKDAsIExh
eWVyQ2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVz
dHJveWVkKCkpOworICAgIHBhcmVudC5yZWxlYXNlKCk7CisgICAgQVNTRVJUX0VRKDcsIExheWVy
Q2hyb21pdW1XaXRoSW5zdHJ1bWVudGVkRGVzdHJ1Y3Rvcjo6Z2V0TnVtSW5zdGFuY2VzRGVzdHJv
eWVkKCkpOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGluc2VydENoaWxkKQorewor
ICAgIE1vY2tMYXllckRlbGVnYXRlIHBhcmVudERlbGVnYXRlOworICAgIE1vY2tMYXllckRlbGVn
YXRlIGNoaWxkRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+cGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCZwYXJlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+Y2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT5jaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJmNo
aWxkRGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPmNoaWxkMyA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgmY2hpbGREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
Y2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjaGlsZERlbGVnYXRlKTsKKworICAgIEFT
U0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgp
KTsKKworICAgIC8vIFRoZSBjaGlsZCBkZWxlZ2F0ZSBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxk
IG5vdCBiZSBjYWxsZWQgd2hlbiBpbnNlcnRpbmcuCisgICAgRVhQRUNUX0NBTEwoY2hpbGREZWxl
Z2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOworCisgICAgLy8gQ2FzZSAxOiBp
bnNlcnRpbmcgdG8gZW1wdHkgbGlzdC4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQz
LCAwKSk7CisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMSksIHBhcmVudC0+Y2hp
bGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDMsIHBhcmVudC0+Y2hpbGRyZW4o
KVswXSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC5nZXQoKSwgY2hpbGQzLT5wYXJlbnQoKSk7CisK
KyAgICAvLyBDYXNlIDI6IGluc2VydGluZyB0byBiZWdpbm5pbmcgb2YgbGlzdAorICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihwYXJlbnREZWxlZ2F0ZSwgMSwgcGFy
ZW50LT5pbnNlcnRDaGlsZChjaGlsZDEsIDApKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90PigyKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNo
aWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQzLCBwYXJl
bnQtPmNoaWxkcmVuKClbMV0pOworICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkMS0+
cGFyZW50KCkpOworCisgICAgLy8gQ2FzZSAzOiBpbnNlcnRpbmcgdG8gbWlkZGxlIG9mIGxpc3QK
KyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdh
dGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQyLCAxKSk7CisgICAgQVNTRVJUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oMyksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVY
UEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CisgICAgRVhQRUNUX0VRKGNo
aWxkMiwgcGFyZW50LT5jaGlsZHJlbigpWzFdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQzLCBwYXJl
bnQtPmNoaWxkcmVuKClbMl0pOworICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkMi0+
cGFyZW50KCkpOworCisgICAgLy8gQ2FzZSA0OiBpbnNlcnRpbmcgdG8gZW5kIG9mIGxpc3QKKyAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUs
IDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQ0LCAzKSk7CisKKyAgICBBU1NFUlRfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90Pig0KSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQ
RUNUX0VRKGNoaWxkMSwgcGFyZW50LT5jaGlsZHJlbigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hp
bGQyLCBwYXJlbnQtPmNoaWxkcmVuKClbMV0pOworICAgIEVYUEVDVF9FUShjaGlsZDMsIHBhcmVu
dC0+Y2hpbGRyZW4oKVsyXSk7CisgICAgRVhQRUNUX0VRKGNoaWxkNCwgcGFyZW50LT5jaGlsZHJl
bigpWzNdKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LmdldCgpLCBjaGlsZDQtPnBhcmVudCgpKTsK
KworICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5U3luY1JlcXVp
cmVkIGFzIGl0IHJlbW92ZXMgaXRzIGNoaWxkcmVuLgorICAgIEVYUEVDVF9DQUxMKHBhcmVudERl
bGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7Cit9CisKK1RF
U1RfRihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0Q2hpbGRQYXN0RW5kT2ZMaXN0KQoreworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1f
c2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUp
OworCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHBhcmVudC0+Y2hpbGRy
ZW4oKS5zaXplKCkpOworCisgICAgLy8gaW5zZXJ0IHRvIGFuIG91dC1vZi1ib3VuZHMgaW5kZXgK
KyAgICBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMSwgNTMpOworCisgICAgQVNTRVJUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oMSksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVY
UEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CisKKyAgICAvLyBpbnNlcnQg
YW5vdGhlciBjaGlsZCB0byBvdXQtb2YtYm91bmRzLCB3aGVuIGxpc3QgaXMgbm90IGFscmVhZHkg
ZW1wdHkuCisgICAgcGFyZW50LT5pbnNlcnRDaGlsZChjaGlsZDIsIDI0NTkpOworCisgICAgQVNT
RVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkp
OworICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4oKVswXSk7CisgICAgRVhQ
RUNUX0VRKGNoaWxkMiwgcGFyZW50LT5jaGlsZHJlbigpWzFdKTsKK30KKworVEVTVF9GKExheWVy
Q2hyb21pdW1UZXN0LCBpbnNlcnRTYW1lQ2hpbGRUd2ljZSkKK3sKKyAgICBNb2NrTGF5ZXJEZWxl
Z2F0ZSBwYXJlbnREZWxlZ2F0ZTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZwYXJlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0
ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigwKSwgcGFyZW50LT5jaGlsZHJlbigpLnNpemUoKSk7CisKKyAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IocGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5z
ZXJ0Q2hpbGQoY2hpbGQxLCAwKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKHBhcmVudERlbGVnYXRlLCAxLCBwYXJlbnQtPmluc2VydENoaWxkKGNoaWxkMiwg
MSkpOworCisgICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHBhcmVudC0+Y2hp
bGRyZW4oKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDEsIHBhcmVudC0+Y2hpbGRyZW4o
KVswXSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMiwgcGFyZW50LT5jaGlsZHJlbigpWzFdKTsKKwor
ICAgIC8vIEluc2VydGluZyB0aGUgc2FtZSBjaGlsZCBhZ2FpbiBzaG91bGQgY2F1c2UgdGhlIGNo
aWxkIHRvIGJlIHJlbW92ZWQgYW5kIHJlLWluc2VydGVkIGF0IHRoZSBuZXcgbG9jYXRpb24uCisg
ICAgLy8gU28gdGhlIHBhcmVudCdzIG5vdGlmeVN5bmNSZXF1aXJlZCB3b3VsZCBiZSBjYWxsZWQg
b25lIG9yIG1vcmUgdGltZXMuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKHBhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBwYXJlbnQtPmluc2VydENoaWxkKGNo
aWxkMSwgMSkpOworCisgICAgLy8gY2hpbGQxIHNob3VsZCBub3cgYmUgYXQgdGhlIGVuZCBvZiB0
aGUgbGlzdC4KKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcGFyZW50LT5j
aGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkMiwgcGFyZW50LT5jaGlsZHJl
bigpWzBdKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQxLCBwYXJlbnQtPmNoaWxkcmVuKClbMV0pOwor
CisgICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWly
ZWQgYXMgaXQgcmVtb3ZlcyBsZWZ0b3ZlciBjaGlsZHJlbgorICAgIEVYUEVDVF9DQUxMKHBhcmVu
dERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7Cit9CisK
K1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgaW5zZXJ0Q2hpbGRUaGF0QWxyZWFkeUhhZFBhcmVu
dCkKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBvbGRQYXJlbnREZWxlZ2F0ZTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gb2xkUGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZvbGRQ
YXJlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsK
KworICAgIC8vIHNldCB1cCBhbmQgc2FuaXR5LWNoZWNrIGluaXRpYWwgdGVzdCBjb25kaXRpb25z
CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG9sZFBhcmVudERl
bGVnYXRlLCAxLCBvbGRQYXJlbnQtPmFkZENoaWxkKGNoaWxkKSk7CisgICAgQVNTRVJUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oMSksIG9sZFBhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAg
IEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBwYXJlbnQtPmNoaWxkcmVuKCkuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQsIG9sZFBhcmVudC0+Y2hpbGRyZW4oKVswXSk7Cisg
ICAgRVhQRUNUX0VRKG9sZFBhcmVudC5nZXQoKSwgY2hpbGQtPnBhcmVudCgpKTsKKworICAgIC8v
IEluc2VydGluZyB0byBuZXcgcGFyZW50IGNhdXNlcyBvbGQgcGFyZW50J3Mgbm90aWZ5U3luY1Jl
cXVpcmVkIHRvIGJlIGNhbGxlZC4KKyAgICAvLyBOb3RlIHRoYXQgaXQgYWxzbyBjYXVzZXMgcGFy
ZW50J3Mgbm90aWZ5U3luY1JlcXVpcmVkIHRvIGJlIGNhbGxlZCwgYnV0IHRoYXQgaXMgdGVzdGVk
IGVsc2V3aGVyZS4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
b2xkUGFyZW50RGVsZWdhdGUsIDEsIHBhcmVudC0+aW5zZXJ0Q2hpbGQoY2hpbGQsIDApKTsKKwor
ICAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBvbGRQYXJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgcGFyZW50
LT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkLCBwYXJlbnQtPmNoaWxk
cmVuKClbMF0pOworICAgIEVYUEVDVF9FUShwYXJlbnQuZ2V0KCksIGNoaWxkLT5wYXJlbnQoKSk7
Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVwbGFjZUNoaWxkV2l0aE5ld0NoaWxk
KQoreworICAgIGNyZWF0ZVNpbXBsZVRlc3RUcmVlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisK
KyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQ0LT5wYXJlbnQoKSk7CisKKyAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobV9wYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgxKSwg
bV9wYXJlbnQtPnJlcGxhY2VDaGlsZChtX2NoaWxkMi5nZXQoKSwgY2hpbGQ0KSk7CisKKyAgICBB
U1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRVEobV9jaGlsZDEsIG1fcGFyZW50LT5jaGlsZHJlbigpWzBdKTsK
KyAgICBFWFBFQ1RfRVEoY2hpbGQ0LCBtX3BhcmVudC0+Y2hpbGRyZW4oKVsxXSk7CisgICAgRVhQ
RUNUX0VRKG1fY2hpbGQzLCBtX3BhcmVudC0+Y2hpbGRyZW4oKVsyXSk7CisgICAgRVhQRUNUX0VR
KG1fcGFyZW50LmdldCgpLCBjaGlsZDQtPnBhcmVudCgpKTsKKworICAgIEVYUEVDVF9GQUxTRSht
X2NoaWxkMi0+cGFyZW50KCkpOworCisgICAgLy8gcGFyZW50J3MgZGVzdHJ1Y3RvciB3aWxsIGlu
dm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBsZWZ0b3ZlciBjaGlsZHJlbgor
ICAgIEVYUEVDVF9DQUxMKG1fcGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5U
aW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCByZXBsYWNl
Q2hpbGRXaXRoTmV3Q2hpbGRUaGF0SGFzT3RoZXJQYXJlbnQpCit7CisgICAgY3JlYXRlU2ltcGxl
VGVzdFRyZWUoKTsKKworICAgIC8vIGNyZWF0ZSBhbm90aGVyIHNpbXBsZSB0cmVlIHdpdGggdGVz
dExheWVyIGFuZCBjaGlsZDQuCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHRlc3RMYXllciA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxl
Z2F0ZSk7CisgICAgdGVzdExheWVyLT5hZGRDaGlsZChjaGlsZDQpOworICAgIEFTU0VSVF9FUShz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpLCB0ZXN0TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoY2hpbGQ0LCB0ZXN0TGF5ZXItPmNoaWxkcmVuKClbMF0pOworICAgIEVYUEVD
VF9FUSh0ZXN0TGF5ZXIuZ2V0KCksIGNoaWxkNC0+cGFyZW50KCkpOworCisgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUsIEF0TGVhc3Qo
MSksIG1fcGFyZW50LT5yZXBsYWNlQ2hpbGQobV9jaGlsZDIuZ2V0KCksIGNoaWxkNCkpOworCisg
ICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIG1fcGFyZW50LT5jaGlsZHJlbigp
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKG1fY2hpbGQxLCBtX3BhcmVudC0+Y2hpbGRyZW4oKVsw
XSk7CisgICAgRVhQRUNUX0VRKGNoaWxkNCwgbV9wYXJlbnQtPmNoaWxkcmVuKClbMV0pOworICAg
IEVYUEVDVF9FUShtX2NoaWxkMywgbV9wYXJlbnQtPmNoaWxkcmVuKClbMl0pOworICAgIEVYUEVD
VF9FUShtX3BhcmVudC5nZXQoKSwgY2hpbGQ0LT5wYXJlbnQoKSk7CisKKyAgICAvLyB0ZXN0TGF5
ZXIgc2hvdWxkIG5vIGxvbmdlciBoYXZlIGNoaWxkNCwKKyAgICAvLyBhbmQgY2hpbGQyIHNob3Vs
ZCBubyBsb25nZXIgaGF2ZSBhIHBhcmVudC4KKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigwKSwgdGVzdExheWVyLT5jaGlsZHJlbigpLnNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KG1fY2hpbGQyLT5wYXJlbnQoKSk7CisKKyAgICAvLyBwYXJlbnQncyBkZXN0cnVjdG9yIHdpbGwg
aW52b2tlIG5vdGlmeVN5bmNSZXF1aXJlZCBhcyBpdCByZW1vdmVzIGxlZnRvdmVyIGNoaWxkcmVu
CisgICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkp
LlRpbWVzKEF0TGVhc3QoMSkpOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIHJlcGxh
Y2VDaGlsZFdpdGhTYW1lQ2hpbGQpCit7CisgICAgY3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKKwor
ICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBiZWNhdXNlIGl0
cyB0aGUgc2FtZSBjaGlsZAorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtX3BhcmVudERlbGVnYXRlLCAwLCBtX3BhcmVudC0+cmVwbGFjZUNoaWxkKG1fY2hpbGQy
LmdldCgpLCBtX2NoaWxkMikpOworCisgICAgdmVyaWZ5VGVzdFRyZWVJbml0aWFsU3RhdGUoKTsK
KworICAgIC8vIHBhcmVudCdzIGRlc3RydWN0b3Igd2lsbCBpbnZva2Ugbm90aWZ5U3luY1JlcXVp
cmVkIGFzIGl0IHJlbW92ZXMgbGVmdG92ZXIgY2hpbGRyZW4KKyAgICBFWFBFQ1RfQ0FMTChtX3Bh
cmVudERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoQXRMZWFzdCgxKSk7Cit9
CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgcmVtb3ZlQWxsQ2hpbGRyZW4pCit7CisgICAg
Y3JlYXRlU2ltcGxlVGVzdFRyZWUoKTsKKworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtX3BhcmVudERlbGVnYXRlLCBBdExlYXN0KDEpLCBtX3BhcmVudC0+cmVt
b3ZlQWxsQ2hpbGRyZW4oKSk7CisKKyAgICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigw
KSwgbV9wYXJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9jaGls
ZDEtPnBhcmVudCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9jaGlsZDItPnBhcmVudCgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UobV9jaGlsZDMtPnBhcmVudCgpKTsKKworICAgIC8vIG5vdGlmeVN5bmNS
ZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiB0cnlpbmcgdG8gcmVtb3ZlQWxsQ2hpbGRy
ZW4gd2hlbiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4uCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1fcGFyZW50RGVsZWdhdGUsIDAsIG1fcGFyZW50LT5yZW1vdmVB
bGxDaGlsZHJlbigpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBzZXRDaGlsZHJl
bikKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBuZXdQYXJlbnREZWxlZ2F0ZTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gb2xkUGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3Np
bGVudERlbGVnYXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbmV3UGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCZuZXdQYXJlbnREZWxlZ2F0ZSk7CisKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVn
YXRlKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiBuZXdDaGlsZHJlbjsKKyAgICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQxKTsKKyAg
ICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQyKTsKKworICAgIC8vIFNldCB1cCBhbmQgdmVyaWZ5
IGluaXRpYWwgdGVzdCBjb25kaXRpb25zOiBjaGlsZDEgaGFzIGEgcGFyZW50LCBjaGlsZDIgaGFz
IG5vIHBhcmVudC4KKyAgICBvbGRQYXJlbnQtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgQVNTRVJU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIG5ld1BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkp
OworICAgIEVYUEVDVF9FUShvbGRQYXJlbnQuZ2V0KCksIGNoaWxkMS0+cGFyZW50KCkpOworICAg
IEVYUEVDVF9GQUxTRShjaGlsZDItPnBhcmVudCgpKTsKKworICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihuZXdQYXJlbnREZWxlZ2F0ZSwgQXRMZWFzdCgxKSwgbmV3
UGFyZW50LT5zZXRDaGlsZHJlbihuZXdDaGlsZHJlbikpOworCisgICAgQVNTRVJUX0VRKHN0YXRp
Y19jYXN0PHNpemVfdD4oMiksIG5ld1BhcmVudC0+Y2hpbGRyZW4oKS5zaXplKCkpOworICAgIEVY
UEVDVF9FUShuZXdQYXJlbnQuZ2V0KCksIGNoaWxkMS0+cGFyZW50KCkpOworICAgIEVYUEVDVF9F
UShuZXdQYXJlbnQuZ2V0KCksIGNoaWxkMi0+cGFyZW50KCkpOworCisgICAgLy8gcGFyZW50J3Mg
ZGVzdHJ1Y3RvciB3aWxsIGludm9rZSBub3RpZnlTeW5jUmVxdWlyZWQgYXMgaXQgcmVtb3ZlcyBp
dHMgY2hpbGRyZW4uCisgICAgRVhQRUNUX0NBTEwobmV3UGFyZW50RGVsZWdhdGUsIG5vdGlmeVN5
bmNSZXF1aXJlZCgpKS5UaW1lcyhBdExlYXN0KDEpKTsKK30KKworVEVTVF9GKExheWVyQ2hyb21p
dW1UZXN0LCBnZXRSb290TGF5ZXJBZnRlclRyZWVNYW5pcHVsYXRpb25zKQoreworICAgIGNyZWF0
ZVNpbXBsZVRlc3RUcmVlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkNCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7CisKKyAgICAvLyBJbiB0aGlz
IHRlc3QgY2FzZSwgd2UgZG9uJ3QgY2FyZSBhYm91dCBob3cgdGhlIHBhcmVudCdzIG5vdGlmeVN5
bmNSZXF1aXJlZCBpcyBjYWxsZWQuCisgICAgRVhQRUNUX0NBTEwobV9wYXJlbnREZWxlZ2F0ZSwg
bm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKEFueU51bWJlcigpKTsKKworICAgIEVYUEVDVF9F
UShtX3BhcmVudC5nZXQoKSwgbV9wYXJlbnQtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEo
bV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQxLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1f
cGFyZW50LmdldCgpLCBtX2NoaWxkMi0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3Bh
cmVudC5nZXQoKSwgbV9jaGlsZDMtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQ0
LmdldCgpLCAgIGNoaWxkNC0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVudC5n
ZXQoKSwgbV9ncmFuZENoaWxkMS0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVu
dC5nZXQoKSwgbV9ncmFuZENoaWxkMi0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3Bh
cmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cm9vdExheWVyKCkpOworCisgICAgbV9jaGlsZDEt
PnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIC8vIGNoaWxkMSBhbmQgaXRzIGNoaWxkcmVuLCBn
cmFuZENoaWxkMSBhbmQgZ3JhbmRDaGlsZDIgYXJlIG5vdyBvbiBhIHNlcGFyYXRlIHN1YnRyZWUu
CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX3BhcmVudC0+cm9vdExheWVyKCkpOwor
ICAgIEVYUEVDVF9FUShtX2NoaWxkMS5nZXQoKSwgbV9jaGlsZDEtPnJvb3RMYXllcigpKTsKKyAg
ICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1fY2hpbGQyLT5yb290TGF5ZXIoKSk7CisgICAg
RVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkMy0+cm9vdExheWVyKCkpOworICAgIEVY
UEVDVF9FUShjaGlsZDQuZ2V0KCksIGNoaWxkNC0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9F
UShtX2NoaWxkMS5nZXQoKSwgbV9ncmFuZENoaWxkMS0+cm9vdExheWVyKCkpOworICAgIEVYUEVD
VF9FUShtX2NoaWxkMS5nZXQoKSwgbV9ncmFuZENoaWxkMi0+cm9vdExheWVyKCkpOworICAgIEVY
UEVDVF9FUShtX3BhcmVudC5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cm9vdExheWVyKCkpOworCisg
ICAgbV9ncmFuZENoaWxkMy0+YWRkQ2hpbGQoY2hpbGQ0KTsKKworICAgIEVYUEVDVF9FUShtX3Bh
cmVudC5nZXQoKSwgbV9wYXJlbnQtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9jaGls
ZDEuZ2V0KCksIG1fY2hpbGQxLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50
LmdldCgpLCBtX2NoaWxkMi0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVudC5n
ZXQoKSwgbV9jaGlsZDMtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0
KCksIGNoaWxkNC0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX2NoaWxkMS5nZXQoKSwg
bV9ncmFuZENoaWxkMS0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX2NoaWxkMS5nZXQo
KSwgbV9ncmFuZENoaWxkMi0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVudC5n
ZXQoKSwgbV9ncmFuZENoaWxkMy0+cm9vdExheWVyKCkpOworCisgICAgbV9jaGlsZDItPnJlcGxh
Y2VDaGlsZChtX2dyYW5kQ2hpbGQzLmdldCgpLCBtX2NoaWxkMSk7CisKKyAgICAvLyBncmFuZENo
aWxkMyBnZXRzIG9ycGhhbmVkIGFuZCB0aGUgY2hpbGQxIHN1YnRyZWUgZ2V0cyBwbGFudGVkIGJh
Y2sgaW50byB0aGUgdHJlZSB1bmRlciBjaGlsZDIuCisgICAgRVhQRUNUX0VRKG1fcGFyZW50Lmdl
dCgpLCBtX3BhcmVudC0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX3BhcmVudC5nZXQo
KSwgbV9jaGlsZDEtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCks
IG1fY2hpbGQyLT5yb290TGF5ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1fcGFyZW50LmdldCgpLCBt
X2NoaWxkMy0+cm9vdExheWVyKCkpOworICAgIEVYUEVDVF9FUShtX2dyYW5kQ2hpbGQzLmdldCgp
LCBjaGlsZDQtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCksIG1f
Z3JhbmRDaGlsZDEtPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9wYXJlbnQuZ2V0KCks
IG1fZ3JhbmRDaGlsZDItPnJvb3RMYXllcigpKTsKKyAgICBFWFBFQ1RfRVEobV9ncmFuZENoaWxk
My5nZXQoKSwgbV9ncmFuZENoaWxkMy0+cm9vdExheWVyKCkpOworfQorCisvLyBGSVhNRTogbmVl
ZCB0byBhZGQgYSB0ZXN0IGZvciBnZXREZXNjZW5kYW50RHJhd3NDb250ZW50IGFmdGVyIHJlc29s
dmluZworLy8gICAgICAgIHNvbWUgaXNzdWVzIHdpdGggTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFu
dERyYXdzQ29udGVudCgpLgorLy8gICAgICAgIHNlZSBkaXNjdXNzaW9uIG9uIGlzc3VlIDY3NzUw
CisKK1RFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXND
b3JyZWN0QmVoYXZpb3IpCit7CisgICAgLy8gVGhlIHNlbWFudGljcyBmb3Igc2V0TmVlZHNEaXNw
bGF5IHdoaWNoIGFyZSB0ZXN0ZWQgaGVyZToKKyAgICAvLyAgIDEuIGNyZWF0ZXMgYSB1bmlvbmVk
IGRpcnR5UmVjdCBhcHByb3ByaWF0ZWx5LgorICAgIC8vICAgMi4gaW5kaXJlY3RseSBjYWxscyBu
b3RpZnlTeW5jUmVxdWlyZWQsIGV4YWN0bHkgb25jZSBmb3IgZWFjaCBjYWxsIHRvIHNldE5lZWRz
RGlzcGxheS4KKworICAgIE1vY2tMYXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2Nr
RGVsZWdhdGUpOworICAgIEludFNpemUgdGVzdEJvdW5kcyA9IEludFNpemUoNTAxLCA1MDgpOwor
CisgICAgRmxvYXRSZWN0IGRpcnR5MSA9IEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEuMGYsIDIu
MGYpOworICAgIEZsb2F0UmVjdCBkaXJ0eTIgPSBGbG9hdFJlY3QoMjAuMGYsIDI1LjBmLCAzLjBm
LCA0LjBmKTsKKyAgICBGbG9hdFJlY3QgZW1wdHlEaXJ0eVJlY3QgPSBGbG9hdFJlY3QoNDAuMGYs
IDQ1LjBmLCAwLCAwKTsKKyAgICBGbG9hdFJlY3Qgb3V0T2ZCb3VuZHNEaXJ0eVJlY3QgPSBGbG9h
dFJlY3QoNDAwLjBmLCA0MDUuMGYsIDUwMC4wZiwgNTAyLjBmKTsKKworICAgIC8vIEJlZm9yZSBh
bnl0aGluZywgdGVzdExheWVyIHNob3VsZCBoYXZlIGFuIGVtcHR5IGRpcnR5IHJlY3QuCisgICAg
RVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAgLy8g
VGhpcyBpcyBqdXN0IGluaXRpYWxpemF0aW9uLCBidXQgbm90aWZ5U3luY1JlcXVpcmVkIGJlaGF2
aW9yIGlzIHZlcmlmaWVkIGFueXdheSB0byBhdm9pZCB3YXJuaW5ncy4KKyAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxh
eSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7
CisKKyAgICAvLyBUaGUgcmVhbCB0ZXN0IGJlZ2lucyBoZXJlLgorCisgICAgLy8gQ2FzZSAxOiBi
YXNpYworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVs
ZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MSkpOworICAgIHZlcmlm
eUZsb2F0UmVjdHNBbG1vc3RFcXVhbChkaXJ0eTEsIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwor
CisgICAgLy8gQ2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBiZSB1bmlvbmVkIG9m
IGRpcnR5MSBhbmQgZGlydHkyLgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5
MikpOworICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1
LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKworICAgIC8vIENh
c2UgMzogZGlydHkgcmVjdCBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRp
cnR5IHJlY3QuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1v
Y2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3Qp
KTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4w
ZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisKKyAgICAvLyBDYXNl
IDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdvIGJleW9u
ZCBpdHMgYm91bmRzCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkob3V0T2ZCb3VuZHNE
aXJ0eVJlY3QpKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEw
LjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKwor
ICAgIC8vIENhc2UgNTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBh
cmcgc2hvdWxkIGNhdXNlIHRoZSBlbnRpcmUgYm91bmRzIHRvIGJlIGRpcnR5LAorICAgIC8vICAg
ICAgICAgb3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgZGlydHkgcmVjdC4KKyAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldE5lZWRzRGlzcGxheSgpKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxv
YXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMud2lkdGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRl
c3RMYXllci0+ZGlydHlSZWN0KCkpOworCisgICAgLy8gcmVzZXROZWVkc0Rpc3BsYXkgc2hvdWxk
IGVtcHR5IHRoZSBkaXJ0eSByZWN0LCBhbmQgTk9UIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLgor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUs
IDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7CisgICAgRVhQRUNUX1RSVUUodGVz
dExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworfQorCitURVNUX0YoTGF5ZXJDaHJvbWl1
bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkKK3sKKyAgICAvLyBX
aXRob3V0IGEgZGVsZWdhdGUsIHRoZSBsYXllciBzaG91bGQgc3RpbGwgbWFyayBpdHNlbGYgZGly
dHkgYXMgYXBwcm9wcmlhdGUsCisgICAgLy8gYW5kIGl0IHNob3VsZCBub3QgY3Jhc2ggdHJ5aW5n
IHRvIHVzZSBhIG5vbi1leGlzdGluZyBkZWxlZ2F0ZS4KKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIEludFNpemUgdGVz
dEJvdW5kcyA9IEludFNpemUoNTAxLCA1MDgpOworCisgICAgRmxvYXRSZWN0IGRpcnR5ID0gRmxv
YXRSZWN0KDEwLjBmLCAxNS4wZiwgMS4wZiwgMi4wZik7CisKKyAgICB0ZXN0TGF5ZXItPnNldEJv
dW5kcyh0ZXN0Qm91bmRzKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIDUwMS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7
CisKKyAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgRVhQRUNUX1RSVUUo
dGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAgdGVzdExheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkoZGlydHkpOworICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChkaXJ0
eSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Cit9CisKK1RFU1RfRihMYXllckNocm9taXVtVGVz
dCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKK3sKKyAgICBNb2Nr
TGF5ZXJEZWxlZ2F0ZSBpbml0aWFsRGVsZWdhdGU7CisgICAgTW9ja0xheWVyRGVsZWdhdGUgbW9j
a0RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoJmluaXRpYWxEZWxlZ2F0ZSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGR1bW15TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUp
OyAvLyBqdXN0IGEgZHVtbXkgbGF5ZXIgZm9yIHRoaXMgdGVzdCBjYXNlLgorCisgICAgLy8gc2Fu
aXR5IGNoZWNrIG9mIGluaXRpYWwgdGVzdCBjb25kaXRpb24KKyAgICBFWFBFQ1RfVFJVRSh0ZXN0
TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUZXN0IHByb3BlcnRpZXMg
dGhhdCBzaG91bGQgbm90IGNhbGwgbmVlZHNEaXNwbGF5IGFuZCBuZWVkc0NvbW1pdCB3aGVuIGNo
YW5nZWQuCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVkLCBh
bmQgdGhlIGRpcnR5UmVjdCBzaG91bGQgcmVtYWluIHN0aWxsIGVtcHR5LgorICAgIEVYUEVDVF9D
QUxMKGluaXRpYWxEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOyAvLyBv
bGQgZGVsZWdhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gc2V0RGVsZWdhdGUgZ2l2ZXMgYSBu
ZXcgZGVsZWdhdGUuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREZWxlZ2F0ZSgmbW9ja0RlbGVnYXRlKSk7
CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMCwgdGVzdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpKTsKKyAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXIt
PnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRNYXNrTGF5ZXIoZHVt
bXlMYXllci5nZXQoKSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRS
ZWN0KDAsIDAsIDQwLCA1MCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKElu
dFBvaW50KDEwLCAxMCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IodHJ1
ZSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVs
ZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKSk7Cisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MCwgdGVzdExheWVyLT5zZXRSZXBsaWNhTGF5ZXIoZHVtbXlMYXllci5nZXQoKSkpOworICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRl
c3RMYXllci0+c2V0RHJhd09wYWNpdHkoMC41ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0U2Npc3Nv
clJlY3QoSW50UmVjdCgzLCAzLCA4LCA4KSkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0VGFyZ2V0UmVu
ZGVyU3VyZmFjZSgwKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3Jt
KFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERyYXdhYmxlQ29u
dGVudFJlY3QoSW50UmVjdCg0LCA1LCA2LCA3KSkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIE5leHQsIHRlc3QgcHJvcGVydGll
cyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzQ29tbWl0IChidXQgbm90IHNldE5lZWRzRGlzcGxh
eSkKKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5
U3luY1JlcXVpcmVkLCBidXQgdGhlIGRpcnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2UuCisgICAg
Ly8gTm90ZSB0aGF0IGZvciBtYW55IG9mIHRoZXNlIHByb3BlcnRpZXMgaXQgaXMgaW1wb3J0YW50
IHRvIHRlc3Qgc2V0dGluZyB0aGUgcHJvcGVydHkgdG8gYSB2YWx1ZSB0aGF0CisgICAgLy8gaXMg
ZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgaXQgdG8uCisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MSwgdGVzdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDEuMjNmLCA0LjU2ZikpKTsK
KyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAxLCB0ZXN0TGF5ZXItPnNldEFuY2hvclBvaW50WigwLjdmKSk7CisgICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5z
ZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMC40ZiwgMC40ZiwgMC40ZikpKTsKKyAgICBFWEVDVVRF
X0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5
ZXItPnNldE9wYWNpdHkoMC41ZikpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0T3BhcXVlKGZhbHNlKSk7
CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMSwgdGVzdExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDQuMGYsIDkuMGYpKSk7Cisg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MSwgdGVzdExheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
KSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMSwgdGVzdExheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkp
OworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDEsIHRlc3RMYXllci0+c2V0RG91YmxlU2lkZWQoZmFsc2UpKTsKKworICAgIC8vIFRoZSBh
Ym92ZSB0ZXN0cyBzaG91bGQgbm90IGhhdmUgY2F1c2VkIGEgbm9uLWVtcHR5IGRpcnR5IHJlY3Qu
CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworCisg
ICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNEaXNwbGF5Cisg
ICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkIGFuZCBj
aGFuZ2UgdGhlIGRpcnR5IHJlY3QuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1
LCAxMCkpKTsKKyAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAuMGYs
IDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgdGVzdExh
eWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGly
dHlSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFkZCBhIHRlc3Qg
Zm9yIHNldExheWVyVHJlZUhvc3Qgd2l0aCBhIG5vbi1udWxsIHN0dWJiZWQgQ0NMYXllclRyZWVI
b3N0LgorfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>