<?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>43783</bug_id>
          
          <creation_ts>2010-08-10 04:42:32 -0700</creation_ts>
          <short_desc>Make CSS Style Selector non-recursive</short_desc>
          <delta_ts>2013-01-06 20:43:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>48042</dependson>
          <blocked>42806</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>hyatt</cc>
    
    <cc>kenneth</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>262622</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-08-10 04:42:32 -0700</bug_when>
    <thetext>Please see the master bug for details.
https://bugs.webkit.org/show_bug.cgi?id=42806

We have to make CSSStyleSelector&apos;s code non-recursive one in order to avoid stack overflow when a long CSS selector is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262631</commentid>
    <comment_count>1</comment_count>
      <attachid>64003</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-08-10 05:34:52 -0700</bug_when>
    <thetext>Created attachment 64003
make-it-iterative</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262632</commentid>
    <comment_count>2</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-08-10 05:36:13 -0700</bug_when>
    <thetext>I&apos;d like to paste my comment from master bug:

---
I&apos;ve made CSSStyleSelector::SelectorChecker::checkSelector() iterative to avoid stack overflow.
To achieve it, I have to maintain CallStack manually.

Hi reviewers,

I am afraid the code became unintuitive. But I guess it is inevitable. If you have any ideas to make it clean and intuitive, please let me know.

I also have a concern about performance. Is there any standard way to make sure a performance degradation won&apos;t happen by this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262635</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-10 05:38:29 -0700</bug_when>
    <thetext>Attachment 64003 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/css/CSSStyleSelector.cpp:1999:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/css/CSSStyleSelector.cpp:2092:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 2 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262636</commentid>
    <comment_count>4</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-08-10 05:41:39 -0700</bug_when>
    <thetext>The style issues are expected ones. Maybe it should be filed as false positives.

(In reply to comment #3)
&gt; Attachment 64003 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
&gt; WebCore/css/CSSStyleSelector.cpp:1999:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
&gt; WebCore/css/CSSStyleSelector.cpp:2092:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
&gt; Total errors found: 2 in 3 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262739</commentid>
    <comment_count>5</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-08-10 10:09:49 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The style issues are expected ones. Maybe it should be filed as false positives.

I think it&apos;s a good chance to change the style of this code. It seems majority WebKit code is putting &apos;{&apos; just after &apos;:&apos; for case

% grep &apos;case.*: {&apos; */*.cpp | wc
    340    1365   21891
% grep -B 1 &apos;^ \+{&apos; */*.cpp | grep case | wc
    113     343    6935

Also, our style guideline says &quot;Other braces: place the open brace on the line preceding the code block; place the close brace on its own line.&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262987</commentid>
    <comment_count>6</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-08-10 21:31:38 -0700</bug_when>
    <thetext>Thank you for the comment.
I&apos;ll change the style of this code as you suggested.

I&apos;ll also fix styles in other parts of the same file to avoid inconsistency.
I am not sure it is encouraged to include style fixes which are not related to this change. But I&apos;ll do it.
If it should be avoided to include style fixes in other parts of same file, please let me know it.


(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; The style issues are expected ones. Maybe it should be filed as false positives.
&gt; 
&gt; I think it&apos;s a good chance to change the style of this code. It seems majority WebKit code is putting &apos;{&apos; just after &apos;:&apos; for case
&gt; 
&gt; % grep &apos;case.*: {&apos; */*.cpp | wc
&gt;     340    1365   21891
&gt; % grep -B 1 &apos;^ \+{&apos; */*.cpp | grep case | wc
&gt;     113     343    6935
&gt; 
&gt; Also, our style guideline says &quot;Other braces: place the open brace on the line preceding the code block; place the close brace on its own line.&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262988</commentid>
    <comment_count>7</comment_count>
      <attachid>64069</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-08-10 21:42:13 -0700</bug_when>
    <thetext>Created attachment 64069
make-it-iterative</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262989</commentid>
    <comment_count>8</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-08-10 21:45:06 -0700</bug_when>
    <thetext>I&apos;ve fixed the style issues in the previous patch, putting &apos;{&apos; just after &apos;:&apos; for case.

I&apos;ve not fixed style issues in other parts of the same file because there are a lot of style issues. It might be better to fix the these styles in another patch.

(In reply to comment #7)
&gt; Created an attachment (id=64069) [details]
&gt; make-it-iterative</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271179</commentid>
    <comment_count>9</comment_count>
      <attachid>64069</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 12:11:28 -0700</bug_when>
    <thetext>Comment on attachment 64069
make-it-iterative

This looks like a good idea. We need to measure if it makes things faster or slower. Also, can we construct a test case demonstrating that the old algorithm runs out of stack space if nested too deeply, or is that not practical?

&gt; +class CSSStyleSelector::SelectorChecker::CallState {

If this is going to have public data members, lets have it be a struct and not use the &quot;m_&quot; prefix. Or make the data members private.

&gt; +    State m_state;
&gt; +    CSSSelector* m_sel;

Lets spell it out: selector, not sel.

&gt; +    Element* m_e;

Lets spell it out: element, not e.

&gt; +    CallState(State state, CSSSelector* sel, Element* e, bool isSubSelector, bool encounteredLink, RenderStyle* elementStyle, RenderStyle* elementParentStyle)
&gt; +            : m_state(state)

Not sure why this is indented 8 spaces.

&gt; +    void push(CallState state)
&gt; +    {
&gt; +        m_stack.append(state);
&gt; +    }

Cuts down on copying if this takes a const CallState&amp;.

&gt; +private:
&gt; +    Vector&lt;CallState&gt; m_stack;

It may improve performance to use Vector&lt;CallState, 20&gt; here or some other number that&apos;s usually larger than the typical depth of the stack.

Is there a way to make this patch have a smaller diff, by doing enough of this to change the indentation level separately? All those lines of code marked different that are not different make the patch too hard to read.

Normally, we do not use &quot;const bool&quot;.

I&apos;m going to say review- for this patch, but it looks like a step in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272750</commentid>
    <comment_count>10</comment_count>
      <attachid>66201</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-09-01 04:58:46 -0700</bug_when>
    <thetext>Created attachment 66201
test-included</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272753</commentid>
    <comment_count>11</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-09-01 05:07:09 -0700</bug_when>
    <thetext>Thank you for the review!

(In reply to comment #9)
&gt; (From update of attachment 64069 [details])
&gt; This looks like a good idea. We need to measure if it makes things faster or slower. Also, can we construct a test case demonstrating that the old algorithm runs out of stack space if nested too deeply, or is that not practical?

I am glad to hear that this is a step in the right direction.

I&apos;ve tried i-Bench and run the performance tests against with-this-patch and without-this-patch.
But my impression about this benchmark is that the score of the performance test is unstable. So it looks difficult to me to judge this patch is good for the performance. Hmm. My understanding and/or usage of i-Bench might be wrong.

I&apos;ll attach the result of performance tests for reference.

As for a test case, I&apos;ve added a testcase in this patch. That test contains deeply nested HTML and long CSS selector. That should not happen in practical, I guess. If we increate a nest level in the test case, WebKit without this patch will crash.
The bad thing about this test case is that it takes too much time, over 1 minute (!), until the test runs out of stack space. So I am afraid that it is inappropriate to add this test to LayoutTest directory as is.


&gt; 
&gt; &gt; +class CSSStyleSelector::SelectorChecker::CallState {
&gt; 
&gt; If this is going to have public data members, lets have it be a struct and not use the &quot;m_&quot; prefix. Or make the data members private.

Thank you. I&apos;ve changed it to a struct and removed &apos;m_&apos; prefix from the member variables.
Note that I&apos;ve appended an underscore, &apos;_&apos;, to each formal parameter of the constructor to avoid naming conflicts with member variables. I am nor sure that that there is any established naming convention for formal parameters of such a constructor.


&gt; 
&gt; &gt; +    State m_state;
&gt; &gt; +    CSSSelector* m_sel;
&gt; 
&gt; Lets spell it out: selector, not sel.

Done.

&gt; 
&gt; &gt; +    Element* m_e;
&gt; 
&gt; Lets spell it out: element, not e.


Done.

&gt; 
&gt; &gt; +    CallState(State state, CSSSelector* sel, Element* e, bool isSubSelector, bool encounteredLink, RenderStyle* elementStyle, RenderStyle* elementParentStyle)
&gt; &gt; +            : m_state(state)
&gt; 
&gt; Not sure why this is indented 8 spaces.

Done. Thank you!

&gt; 
&gt; &gt; +    void push(CallState state)
&gt; &gt; +    {
&gt; &gt; +        m_stack.append(state);
&gt; &gt; +    }
&gt; 
&gt; Cuts down on copying if this takes a const CallState&amp;.

Done.

&gt; 
&gt; &gt; +private:
&gt; &gt; +    Vector&lt;CallState&gt; m_stack;
&gt; 
&gt; It may improve performance to use Vector&lt;CallState, 20&gt; here or some other number that&apos;s usually larger than the typical depth of the stack.

Done. I think so.

&gt; 
&gt; Is there a way to make this patch have a smaller diff, by doing enough of this to change the indentation level separately? All those lines of code marked different that are not different make the patch too hard to read.

I agree that this patch is hard to read. I am sorry for that. Though I am not sure that I understand your suggestion correctly, I don&apos;t have any good ideas to make this patch have a smaller diff. You mean that it might be okay to change indent level of lines, breaking code styles temporarily, for easy reviewing?
I&apos;d like to make this patch easy to read as possible as I can. Any comments are welcome.


&gt; 
&gt; Normally, we do not use &quot;const bool&quot;.

Done.

&gt; 
&gt; I&apos;m going to say review- for this patch, but it looks like a step in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272754</commentid>
    <comment_count>12</comment_count>
      <attachid>66202</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-09-01 05:09:30 -0700</bug_when>
    <thetext>Created attachment 66202
Result of i-Bench performance test for reference</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293861</commentid>
    <comment_count>13</comment_count>
      <attachid>66201</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-13 17:46:13 -0700</bug_when>
    <thetext>Comment on attachment 66201
test-included

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

&gt; WebCore/css/CSSStyleSelector.cpp:1922
&gt; +    CallState(State state_, CSSSelector* selector_, Element* element_, bool isSubSelector_, bool encounteredLink_, RenderStyle* elementStyle_, RenderStyle* elementParentStyle_)
&gt; +        : state(state_)
&gt; +        , selector(selector_)
&gt; +        , element(element_)
&gt; +        , isSubSelector(isSubSelector_)
&gt; +        , encounteredLink(encounteredLink_)
&gt; +        , elementStyle(elementStyle_)
&gt; +        , elementParentStyle(elementParentStyle_)
&gt; +    {
&gt; +    }

There is no reason for all those trailing underscores. The C++ language works fine with initializer arguments named the same as the data members, so there’s no reason to have this strangeness.

&gt; WebCore/css/CSSStyleSelector.cpp:1953
&gt; +    // Therefore we have to maintain a call stack by ourselves so that we can check selector iteratively.

This should say &quot;check selectors iteratively&quot;, with an &quot;s&quot;.

&gt; WebCore/css/CSSStyleSelector.cpp:2064
&gt; +            default:
&gt; +                return false;

It’s unfortunate we have a default case, because including it turns off gcc’s warning that is given when we forget to handle an enum value.

&gt; WebCore/css/CSSStyleSelector.cpp:2070
&gt; +            while (true) {
&gt; +                if (callStack.isEmpty())
&gt; +                    return false;

A more traditional way to write this is:

    while (!callStack.isEmpty()) {
        // loop body
    }
    return false;

That seems better than using an infinite loop.

&gt; WebCore/css/CSSStyleSelector.cpp:2107
&gt; +                default:
&gt; +                    ASSERT_NOT_REACHED();

It’s unfortunate we have a default case, because including it turns off gcc’s warning that is given when we forget to handle an enum value.

&gt; WebCore/css/CSSStyleSelector.h:234
&gt; +            struct CallState;
&gt; +            class CallStack;

I’m not sure these two need to be CSSStyleSelector members. I think it would be better if they were private to the implementation file and not mentioned in the header at all. We could give them slightly more specific names and do that. I guess either way is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294246</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-14 11:40:56 -0700</bug_when>
    <thetext>Hayato is not a committer.  This will need an updated patch unless darin is comfortable cq+ing this as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294516</commentid>
    <comment_count>15</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-10-14 18:24:19 -0700</bug_when>
    <thetext>Hi Eric,
thank you for your attention.

I became a WebKit committer recently. I am preparing an updated patch and will send that for the review soon after I confirm all tests passes.

(In reply to comment #14)
&gt; Hayato is not a committer.  This will need an updated patch unless darin is comfortable cq+ing this as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296061</commentid>
    <comment_count>16</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-10-19 02:01:22 -0700</bug_when>
    <thetext>Manually committed r70040: https://trac.webkit.org/changeset/70040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296066</commentid>
    <comment_count>17</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-10-19 02:08:51 -0700</bug_when>
    <thetext>I manually committed after merging HEAD and addressing Darin&apos;s comments.
Thank you for reviewing and r+!

(In reply to comment #16)
&gt; Manually committed r70040: https://trac.webkit.org/changeset/70040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297561</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-21 12:25:04 -0700</bug_when>
    <thetext>So now we should reopen this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297789</commentid>
    <comment_count>19</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-10-21 19:17:26 -0700</bug_when>
    <thetext>Yes. I&apos;ve reopened this.

https://trac.webkit.org/changeset/70040 was reverted in http://trac.webkit.org/changeset/70209.

r70040 caused a performance regression.
See http://code.google.com/p/chromium/issues/detail?id=59985 for more info.

We need a better implementation which does not cause a performance regression.


(In reply to comment #18)
&gt; So now we should reopen this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322273</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-14 15:15:55 -0800</bug_when>
    <thetext>Attachment 66201 was posted by a committer and has review+, assigning to Hayato Ito for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324042</commentid>
    <comment_count>21</comment_count>
      <attachid>66201</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-17 16:38:58 -0800</bug_when>
    <thetext>Comment on attachment 66201
test-included

Marking r- since this was reverted.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64003</attachid>
            <date>2010-08-10 05:34:52 -0700</date>
            <delta_ts>2010-08-10 21:42:08 -0700</delta_ts>
            <desc>make-it-iterative</desc>
            <filename>bug-43783-20100810213451.patch</filename>
            <type>text/plain</type>
            <size>19092</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTE4YzdmOGZhODhmMTFjMGFkNTcxNjFiMjA2NWQyMWZlOGRhNmNkMy4uYzkxMjdjZGIyY2RlYzA5
YzhmNDZmNjgzMjBiNTVjMDc4YzQ3NGI3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wOC0xMCAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBDU1Mgc3R5bGUgc2VsZWN0b3Igbm9uLXJlY3Vy
c2l2ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
NzgzCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgb25lIG9mIHRoZSByZXF1aXJlZCBjaGFuZ2Vz
IHRvIGZpeCB0aGUgZm9sbG93aW5nIG1hc3RlciBidWc6CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjgwNgorCisgICAgICAgIFRvIGF2b2lkIHJlY3Vy
c2lvbiwgd2UgcHJlcGFyZSBhIGNhbGwgc3RhY2sgYW5kIG1haW50YWluIGEgbGlzdCBvZgorICAg
ICAgICBmdW5jdGlvbiBjYWxsIHN0YXRlIGJ5IG91cnNlbHZlcyBhbmQgdHJ5IG1hdGNoaW5nIGl0
ZXJhdGl2ZWx5LgorCisgICAgICAgIE5vIHRlc3RzLiBObyBmdW5jdGlvbmFsaXR5IGNoYW5nZWQu
CisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OkNhbGxTdGF0ZTo6
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6
Q2FsbFN0YXRlOjpDYWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6U2VsZWN0b3JDaGVja2VyOjpDYWxsU3RhY2s6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpDYWxsU3RhY2s6OnB1c2gpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpDYWxs
U3RhY2s6OnBvcCk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKwogMjAxMC0w
OC0wOSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXgg
NTgxMGIwMDZkZWUxNmFkYTNkZDAxYTA4ZWE3MzkxMGU0YjdiZmM5OS4uMWY4ZTgxZjVjODJmMDk3
OGI0ZGE0ZDQ0NGE4ZmRlZmE0NGFjNDMwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAg
LTk0NSw3ICs5NDUsNyBAQCBFSW5zaWRlTGluayBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNo
ZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbgogYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwg
RWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0g
Tk9QU0VVRE87Ci0gICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50LCAwLCBkeW5h
bWljUHNldWRvLCBmYWxzZSwgZmFsc2UpID09IFNlbGVjdG9yTWF0Y2hlczsKKyAgICByZXR1cm4g
Y2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIDAsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxz
ZSk7CiB9CiAKICNpZmRlZiBTVFlMRV9TSEFSSU5HX1NUQVRTCkBAIC0xODkzLDggKzE4OTMsNyBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCkK
ICAgICBtX2R5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIAogICAgIC8vIENoZWNrIHRoZSBzZWxl
Y3RvcgotICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3Rvcihz
ZWwsIG1fZWxlbWVudCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCBmYWxzZSwg
ZmFsc2UsIHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIGlmIChtYXRjaCAhPSBTZWxlY3Rv
ck1hdGNoZXMpCisgICAgaWYgKCFtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWwsIG1fZWxlbWVu
dCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UsIHN0eWxl
KCksIG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9j
aGVja2VyLm1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLm1fcHNldWRvU3R5
bGUgIT0gbV9keW5hbWljUHNldWRvKQpAQCAtMTkwMywxMTQgKzE5MDIsMjI2IEBAIGJvb2wgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsKQogICAgIHJldHVy
biB0cnVlOwogfQogCi0vLyBSZWN1cnNpdmUgY2hlY2sgb2Ygc2VsZWN0b3JzIGFuZCBjb21iaW5h
dG9ycwotLy8gSXQgY2FuIHJldHVybiAzIGRpZmZlcmVudCB2YWx1ZXM6Ci0vLyAqIFNlbGVjdG9y
TWF0Y2hlcyAgICAgICAgIC0gdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQotLy8g
KiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVs
ZW1lbnQgZQotLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWls
cyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotQ1NTU3R5bGVTZWxlY3Rv
cjo6U2VsZWN0b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNr
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlz
U3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0
eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAorY2xhc3MgQ1NTU3R5
bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpDYWxsU3RhdGUgeworcHVibGljOgorICAgIGVu
dW0gU3RhdGUgeworICAgICAgICBTZWVraW5nRGVzY2VuZGFudCwgU2Vla2luZ0luZGlyZWN0QWRq
YWNlbnQsCisgICAgfTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgQ1NTU2VsZWN0b3IqIG1f
c2VsOworICAgIEVsZW1lbnQqIG1fZTsKKyAgICBib29sIG1faXNTdWJTZWxlY3RvcjsKKyAgICBi
b29sIG1fZW5jb3VudGVyZWRMaW5rOworICAgIFJlbmRlclN0eWxlKiBtX2VsZW1lbnRTdHlsZTsK
KyAgICBSZW5kZXJTdHlsZSogbV9lbGVtZW50UGFyZW50U3R5bGU7CisKKyAgICBDYWxsU3RhdGUo
U3RhdGUgc3RhdGUsIENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIGJvb2wgaXNTdWJTZWxl
Y3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJl
bmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpCisgICAgICAgICAgICA6IG1fc3RhdGUoc3Rh
dGUpCisgICAgICAgICAgICAsIG1fc2VsKHNlbCkKKyAgICAgICAgICAgICwgbV9lKGUpCisgICAg
ICAgICAgICAsIG1faXNTdWJTZWxlY3Rvcihpc1N1YlNlbGVjdG9yKQorICAgICAgICAgICAgLCBt
X2VuY291bnRlcmVkTGluayhlbmNvdW50ZXJlZExpbmspCisgICAgICAgICAgICAsIG1fZWxlbWVu
dFN0eWxlKGVsZW1lbnRTdHlsZSkKKyAgICAgICAgICAgICwgbV9lbGVtZW50UGFyZW50U3R5bGUo
ZWxlbWVudFBhcmVudFN0eWxlKQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OkNhbGxTdGFjayB7CitwdWJsaWM6CisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsK
KyAgICB9CisKKyAgICB2b2lkIHB1c2goQ2FsbFN0YXRlIHN0YXRlKQorICAgIHsKKyAgICAgICAg
bV9zdGFjay5hcHBlbmQoc3RhdGUpOworICAgIH0KKworICAgIENhbGxTdGF0ZSBwb3AoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOworICAgICAgICBDYWxsU3RhdGUgc3RhdGUg
PSBtX3N0YWNrLmxhc3QoKTsKKyAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAg
IHJldHVybiBzdGF0ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPENhbGxTdGF0ZT4g
bV9zdGFjazsKK307CisKKy8vIENoZWNrIHNlbGVjdG9ycyBhbmQgY29tYmluYXRvcnMuCitib29s
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsLCBFbGVtZW50KiBlLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogc2VsZWN0
b3JBdHRycywgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9v
bCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0eWxl
KiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0CiB7CisgICAgLy8gV2Ugc2hvdWxkIGF2b2lkIHJl
Y3Vyc2l2ZSBjYWxscywgd2hpY2ggbWlnaHQgY2F1c2Ugc3RhY2sgb3ZlcmZsb3cgaWYgdGhlIGNo
YWluIG9mIHNlbGVjdG9yIGlzIHZlcnkgbG9uZy4KKyAgICAvLyBUaGVyZWZvcmUgd2UgaGF2ZSB0
byBtYWludGFpbiBhIGNhbGwgc3RhY2sgYnkgb3Vyc2VsdmVzIHNvIHRoYXQgd2UgY2FuIGNoZWNr
IHNlbGVjdG9yIGl0ZXJhdGl2ZWx5LgorICAgIENhbGxTdGFjayBjYWxsU3RhY2s7CisgICAgd2hp
bGUgKHRydWUpIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgIC8vIFNwZWM6IENTUzIgc2VsZWN0b3Jz
IGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSAoY29uY2VwdHVhbGx5KSBjbG9uZWQgRE9NIHRyZWUK
LSAgICAvLyBiZWNhdXNlIGl0cyBjb250ZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIGZvcm1hbCBk
b2N1bWVudCBzdHJ1Y3R1cmUuCi0gICAgaWYgKGUtPmlzU1ZHRWxlbWVudCgpICYmIGUtPmlzU2hh
ZG93Tm9kZSgpKQotICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAg
ICAgIC8vIFNwZWM6IENTUzIgc2VsZWN0b3JzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSAoY29u
Y2VwdHVhbGx5KSBjbG9uZWQgRE9NIHRyZWUKKyAgICAgICAgLy8gYmVjYXVzZSBpdHMgY29udGVu
dHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgorICAgICAg
ICBpZiAoZS0+aXNTVkdFbGVtZW50KCkgJiYgZS0+aXNTaGFkb3dOb2RlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKKyAgICAgICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRv
IG1hdGNoCisgICAgICAgIGNvbnN0IGJvb2wgbWF0Y2hlZCA9IGNoZWNrT25lU2VsZWN0b3Ioc2Vs
LCBlLCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCBlbGVtZW50
U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgICAgIGJvb2wgbmVlZFVud2luZGluZyA9
ICFtYXRjaGVkOwogCi0gICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCi0gICAgaWYg
KCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZSwgc2VsZWN0b3JBdHRycywgZHluYW1pY1BzZXVkbywg
aXNTdWJTZWxlY3RvciwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQotICAgICAg
ICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0KLSAgICAvLyBUaGUgcmVzdCBvZiB0aGUg
c2VsZWN0b3JzIGhhcyB0byBtYXRjaAotICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlv
biA9IHNlbC0+cmVsYXRpb24oKTsKLQotICAgIC8vIFByZXBhcmUgbmV4dCBzZWwKLSAgICBzZWwg
PSBzZWwtPnRhZ0hpc3RvcnkoKTsKLSAgICBpZiAoIXNlbCkKLSAgICAgICAgcmV0dXJuIFNlbGVj
dG9yTWF0Y2hlczsKLQotICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0
b3IpCi0gICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBm
b3IgdGhlIHBzZXVkb1N0eWxlCi0gICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURP
ICYmIG1fcHNldWRvU3R5bGUgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLQotICAgIC8vIENoZWNrIGZvciBuZXN0ZWQgbGlua3Mu
Ci0gICAgaWYgKG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlzU3ViU2VsZWN0b3IpIHsK
LSAgICAgICAgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1l
bnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgIGlmIChjdXJyZW50U3R5bGUgJiYg
Y3VycmVudFN0eWxlLT5pbnNpZGVMaW5rKCkgJiYgZS0+aXNMaW5rKCkpIHsKLSAgICAgICAgICAg
IGlmIChlbmNvdW50ZXJlZExpbmspCi0gICAgICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzcyA9IGZhbHNlOyAvLyBUaGlzIGxpbmsgaXMgbm90IHJlbGV2YW50IHRvIHRoZSBzdHls
ZSBiZWluZyByZXNvbHZlZCwgc28gZGlzYWJsZSBtYXRjaGluZy4KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZExpbmsgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQorICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhl
IHNlbGVjdG9ycyBoYXMgdG8gbWF0Y2gKKyAgICAgICAgICAgIENTU1NlbGVjdG9yOjpSZWxhdGlv
biByZWxhdGlvbiA9IHNlbC0+cmVsYXRpb24oKTsKIAotICAgIHN3aXRjaCAocmVsYXRpb24pIHsK
LSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICAvLyBQcmVwYXJlIG5leHQgc2VsCisgICAgICAgICAgICBz
ZWwgPSBzZWwtPnRhZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIGlmICghc2VsKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yKQorICAgICAgICAgICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMg
c2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb1N0eWxlCisgICAgICAgICAgICAg
ICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBkeW5h
bWljUHNldWRvKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIC8vIENoZWNrIGZvciBuZXN0ZWQgbGlua3MuCisgICAgICAgICAgICBpZiAobV9tYXRjaFZp
c2l0ZWRQc2V1ZG9DbGFzcyAmJiAhaXNTdWJTZWxlY3RvcikgeworICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBl
LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3Vy
cmVudFN0eWxlLT5pbnNpZGVMaW5rKCkgJiYgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGVuY291bnRlcmVkTGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsgLy8gVGhpcyBsaW5rIGlzIG5vdCByZWxldmFu
dCB0byB0aGUgc3R5bGUgYmVpbmcgcmVzb2x2ZWQsIHNvIGRpc2FibGUgbWF0Y2hpbmcuCisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY291bnRlcmVk
TGluayA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpE
ZXNjZW5kYW50OgorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5w
YXJlbnROb2RlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBt
YXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNldWRv
LCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0g
U2VsZWN0b3JGYWlsc0xvY2FsbHkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsK
KyAgICAgICAgICAgICAgICBjYWxsU3RhY2sucHVzaChDYWxsU3RhdGUoQ2FsbFN0YXRlOjpTZWVr
aW5nRGVzY2VuZGFudCwgc2VsLCBlLCBpc1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGVs
ZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSk7CisgICAgICAgICAgICAgICAgaXNTdWJT
ZWxlY3RvciA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZSA9IDA7CisgICAg
ICAgICAgICAgICAgZWxlbWVudFBhcmVudFN0eWxlID0gMDsKKyAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpDaGlsZDoKLSAgICAgICAgewotICAgICAgICAgICAgTm9kZSogbiA9IGUtPnBhcmVu
dE5vZGUoKTsKLSAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAg
IGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tT
ZWxlY3RvcihzZWwsIGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNv
dW50ZXJlZExpbmspOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVj
dEFkamFjZW50OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25s
eSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkp
IHsKLSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5
bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICBw
YXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwor
ICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Cisg
ICAgICAgICAgICAgICAgaXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVs
ZW1lbnRTdHlsZSA9IDA7CisgICAgICAgICAgICAgICAgZWxlbWVudFBhcmVudFN0eWxlID0gMDsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUq
IG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5p
c0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygp
OwotICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzTG9jYWxseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0g
ICAgICAgICAgICBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7Ci0gICAgICAgICAg
ICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1
ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOyAKLSAgICAgICAgfQotICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgotICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RS
dWxlc09ubHkgJiYgZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50
Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxl
bWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJT
dHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAg
ICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFs
UnVsZXMoKTsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50Ogor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5ICYm
IGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewor
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5
bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1
bGVzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5w
cmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7
CisgICAgICAgICAgICAgICAgaWYgKCFuKSB7CisgICAgICAgICAgICAgICAgICAgIG5lZWRVbndp
bmRpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAg
ICAgICAgICAgICBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgaXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVsZW1lbnRTdHls
ZSA9IDA7CisgICAgICAgICAgICAgICAgZWxlbWVudFBhcmVudFN0eWxlID0gMDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBh
cmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBl
bGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVz
KCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2
aW91c1NpYmxpbmcoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50
Tm9kZSgpKQogICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0
b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAgICAgICAgaWYgKCFuKSB7CisgICAgICAgICAgICAg
ICAgICAgIG5lZWRVbndpbmRpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihuKTsKICAgICAgICAgICAgICAgICBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Io
c2VsLCBlLCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRM
aW5rKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6Ci0g
ICAgICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3Mg
YSBwc2V1ZG8tZWxlbWVudAotICAgICAgICAgICAgLy8gV2UgbWFrZSBhbiBleGNlcHRpb24gZm9y
IHNjcm9sbGJhciBwc2V1ZG8gZWxlbWVudHMgYW5kIGFsbG93IGEgc2V0IG9mIHBzZXVkbyBjbGFz
c2VzIChidXQgbm90aGluZyBlbHNlKQotICAgICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBwc2V1
ZG8gZWxlbWVudHMuCi0gICAgICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8fCBtX2NvbGxlY3RS
dWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgZHluYW1pY1BzZXVkbyAh
PSBTRUxFQ1RJT04gJiYKLSAgICAgICAgICAgICAgICAhKChSZW5kZXJTY3JvbGxiYXI6OnNjcm9s
bGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5F
UiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpICYmIHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MpKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxz
Q29tcGxldGVseTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2Vs
ZWN0b3JBdHRycywgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50
U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgICAgICAgICAgICAgY2FsbFN0YWNrLnB1
c2goQ2FsbFN0YXRlKENhbGxTdGF0ZTo6U2Vla2luZ0luZGlyZWN0QWRqYWNlbnQsIHNlbCwgZSwg
aXNTdWJTZWxlY3RvciwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJl
bnRTdHlsZSkpOworICAgICAgICAgICAgICAgIGlzU3ViU2VsZWN0b3IgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBlbGVtZW50U3R5bGUgPSAwOworICAgICAgICAgICAgICAgIGVsZW1lbnRQYXJl
bnRTdHlsZSA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjoKKyAgICAgICAgICAgICAgICAv
LyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxl
bWVudAorICAgICAgICAgICAgICAgIC8vIFdlIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBzY3JvbGxi
YXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBhIHNldCBvZiBwc2V1ZG8gY2xhc3NlcyAoYnV0
IG5vdGhpbmcgZWxzZSkKKyAgICAgICAgICAgICAgICAvLyB0byBmb2xsb3cgdGhlIHBzZXVkbyBl
bGVtZW50cy4KKyAgICAgICAgICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8fCBtX2NvbGxlY3RS
dWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgZHluYW1pY1BzZXVkbyAh
PSBTRUxFQ1RJT04KKyAgICAgICAgICAgICAgICAgICAgJiYgISgoUmVuZGVyU2Nyb2xsYmFyOjpz
Y3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9D
T1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSAmJiBzZWwtPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIGlzU3ViU2VsZWN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5lZWRVbndpbmRpbmcp
IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxT
dGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAvLyBVbndpbmRzIGNhbGwgc3RhY2suCisgICAgICAgICAgICAgICAgQ2FsbFN0
YXRlIGNhbGxTdGF0ZSA9IGNhbGxTdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICBzZWwgPSBj
YWxsU3RhdGUubV9zZWw7CisgICAgICAgICAgICAgICAgZSA9IGNhbGxTdGF0ZS5tX2U7CisgICAg
ICAgICAgICAgICAgaXNTdWJTZWxlY3RvciA9IGNhbGxTdGF0ZS5tX2lzU3ViU2VsZWN0b3I7Cisg
ICAgICAgICAgICAgICAgZW5jb3VudGVyZWRMaW5rID0gY2FsbFN0YXRlLm1fZW5jb3VudGVyZWRM
aW5rOworICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZSA9IGNhbGxTdGF0ZS5tX2VsZW1lbnRT
dHlsZTsKKyAgICAgICAgICAgICAgICBlbGVtZW50UGFyZW50U3R5bGUgPSBjYWxsU3RhdGUubV9l
bGVtZW50UGFyZW50U3R5bGU7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNhbGxTdGF0ZS5t
X3N0YXRlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDYWxsU3RhdGU6OlNlZWtpbmdEZXNjZW5k
YW50OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUt
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1l
bnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICAg
ICAgICAgIGNhbGxTdGFjay5wdXNoKENhbGxTdGF0ZShDYWxsU3RhdGU6OlNlZWtpbmdEZXNjZW5k
YW50LCBzZWwsIGUsIGlzU3ViU2VsZWN0b3IsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxl
LCBlbGVtZW50UGFyZW50U3R5bGUpKTsKKyAgICAgICAgICAgICAgICAgICAgaXNTdWJTZWxlY3Rv
ciA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUgPSAwOworICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBDYWxsU3Rh
dGU6OlNlZWtpbmdJbmRpcmVjdEFkamFjZW50OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIW4pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gQ29udGludWUgdG8g
bmV4dCB3aGlsZSBsb29wIHRvIHVud2luZCBjYWxsU3RhY2sgZnVydGhlci4KKyAgICAgICAgICAg
ICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBjYWxsU3RhY2sucHVzaChDYWxsU3RhdGUoQ2FsbFN0YXRlOjpTZWVraW5nSW5kaXJlY3RBZGph
Y2VudCwgc2VsLCBlLCBpc1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHls
ZSwgZWxlbWVudFBhcmVudFN0eWxlKSk7CisgICAgICAgICAgICAgICAgICAgIGlzU3ViU2VsZWN0
b3IgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudFBhcmVudFN0eWxlID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KLQotICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKIH0KIAogc3RhdGljIHZv
aWQgYWRkTG9jYWxOYW1lVG9TZXQoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIHNldCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmggYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggNmU0YTI2
YjZiZDlhMzE0ZGUwYzYyZDRmYTJkZmY4MWY5Yjc0YTQ4NS4uZGIxMWVhNmNjMTc0YjE1NTc1ZGZl
ZWY1YjY1ZWNlMzhhZDcxNTM0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5oCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtMTY3LDggKzE2
Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3JtT3BlcmF0
aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBT
ZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKLQogICAgICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBk
ZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4g
LWR3aAogICAgICAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHls
ZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAgICAgICAgIHZvaWQgY2hlY2tGb3Jab29t
Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKQEAgLTIxMiw3
ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQq
LCBib29sIHN0cmljdFBhcnNpbmcpOwogCiAgICAgICAgICAgICBib29sIGNoZWNrU2VsZWN0b3Io
Q1NTU2VsZWN0b3IqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgICAgICBTZWxlY3Rvck1hdGNo
IGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlz
U3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5k
ZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29uc3Q7CisgICAgICAgICAgICBib29s
IGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlz
U3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5k
ZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29uc3Q7CiAgICAgICAgICAgICBib29s
IGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29s
IGlzU3ViU2VsZWN0b3IsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRT
dHlsZSkgY29uc3Q7CiAgICAgICAgICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3Mo
Q1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7CiAKQEAgLTIyOCw2
ICsyMjYsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBib29sIG1fZG9jdW1lbnRJc0hUTUw7CiAg
ICAgICAgICAgICBtdXRhYmxlIGJvb2wgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKICAgICAg
ICAgICAgIG11dGFibGUgSGFzaFNldDxMaW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtzQ2hl
Y2tlZEZvclZpc2l0ZWRTdGF0ZTsKKworICAgICAgICAgICAgY2xhc3MgQ2FsbFN0YXRlOworICAg
ICAgICAgICAgY2xhc3MgQ2FsbFN0YWNrOwogICAgICAgICB9OwogCiAgICAgcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64069</attachid>
            <date>2010-08-10 21:42:13 -0700</date>
            <delta_ts>2010-09-01 04:58:41 -0700</delta_ts>
            <desc>make-it-iterative</desc>
            <filename>bug-43783-20100811134211.patch</filename>
            <type>text/plain</type>
            <size>19006</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTE4YzdmOGZhODhmMTFjMGFkNTcxNjFiMjA2NWQyMWZlOGRhNmNkMy4uYzkxMjdjZGIyY2RlYzA5
YzhmNDZmNjgzMjBiNTVjMDc4YzQ3NGI3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wOC0xMCAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBDU1Mgc3R5bGUgc2VsZWN0b3Igbm9uLXJlY3Vy
c2l2ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
NzgzCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgb25lIG9mIHRoZSByZXF1aXJlZCBjaGFuZ2Vz
IHRvIGZpeCB0aGUgZm9sbG93aW5nIG1hc3RlciBidWc6CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjgwNgorCisgICAgICAgIFRvIGF2b2lkIHJlY3Vy
c2lvbiwgd2UgcHJlcGFyZSBhIGNhbGwgc3RhY2sgYW5kIG1haW50YWluIGEgbGlzdCBvZgorICAg
ICAgICBmdW5jdGlvbiBjYWxsIHN0YXRlIGJ5IG91cnNlbHZlcyBhbmQgdHJ5IG1hdGNoaW5nIGl0
ZXJhdGl2ZWx5LgorCisgICAgICAgIE5vIHRlc3RzLiBObyBmdW5jdGlvbmFsaXR5IGNoYW5nZWQu
CisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OkNhbGxTdGF0ZTo6
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6
Q2FsbFN0YXRlOjpDYWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6U2VsZWN0b3JDaGVja2VyOjpDYWxsU3RhY2s6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpDYWxsU3RhY2s6OnB1c2gpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpDYWxs
U3RhY2s6OnBvcCk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKwogMjAxMC0w
OC0wOSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXgg
NTgxMGIwMDZkZWUxNmFkYTNkZDAxYTA4ZWE3MzkxMGU0YjdiZmM5OS4uNDFkNDViMTVhMzZiM2Rl
NWQ0NTk2Y2U2YWQ3NGRhMTYzZDFlMTc5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAg
LTk0NSw3ICs5NDUsNyBAQCBFSW5zaWRlTGluayBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNo
ZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbgogYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwg
RWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0g
Tk9QU0VVRE87Ci0gICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50LCAwLCBkeW5h
bWljUHNldWRvLCBmYWxzZSwgZmFsc2UpID09IFNlbGVjdG9yTWF0Y2hlczsKKyAgICByZXR1cm4g
Y2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIDAsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxz
ZSk7CiB9CiAKICNpZmRlZiBTVFlMRV9TSEFSSU5HX1NUQVRTCkBAIC0xODkzLDggKzE4OTMsNyBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCkK
ICAgICBtX2R5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIAogICAgIC8vIENoZWNrIHRoZSBzZWxl
Y3RvcgotICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3Rvcihz
ZWwsIG1fZWxlbWVudCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCBmYWxzZSwg
ZmFsc2UsIHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIGlmIChtYXRjaCAhPSBTZWxlY3Rv
ck1hdGNoZXMpCisgICAgaWYgKCFtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWwsIG1fZWxlbWVu
dCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UsIHN0eWxl
KCksIG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9j
aGVja2VyLm1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLm1fcHNldWRvU3R5
bGUgIT0gbV9keW5hbWljUHNldWRvKQpAQCAtMTkwMywxMTQgKzE5MDIsMjIwIEBAIGJvb2wgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsKQogICAgIHJldHVy
biB0cnVlOwogfQogCi0vLyBSZWN1cnNpdmUgY2hlY2sgb2Ygc2VsZWN0b3JzIGFuZCBjb21iaW5h
dG9ycwotLy8gSXQgY2FuIHJldHVybiAzIGRpZmZlcmVudCB2YWx1ZXM6Ci0vLyAqIFNlbGVjdG9y
TWF0Y2hlcyAgICAgICAgIC0gdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQotLy8g
KiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVs
ZW1lbnQgZQotLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWls
cyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotQ1NTU3R5bGVTZWxlY3Rv
cjo6U2VsZWN0b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNr
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlz
U3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0
eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAorY2xhc3MgQ1NTU3R5
bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpDYWxsU3RhdGUgeworcHVibGljOgorICAgIGVu
dW0gU3RhdGUgeworICAgICAgICBTZWVraW5nRGVzY2VuZGFudCwgU2Vla2luZ0luZGlyZWN0QWRq
YWNlbnQsCisgICAgfTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgQ1NTU2VsZWN0b3IqIG1f
c2VsOworICAgIEVsZW1lbnQqIG1fZTsKKyAgICBib29sIG1faXNTdWJTZWxlY3RvcjsKKyAgICBi
b29sIG1fZW5jb3VudGVyZWRMaW5rOworICAgIFJlbmRlclN0eWxlKiBtX2VsZW1lbnRTdHlsZTsK
KyAgICBSZW5kZXJTdHlsZSogbV9lbGVtZW50UGFyZW50U3R5bGU7CisKKyAgICBDYWxsU3RhdGUo
U3RhdGUgc3RhdGUsIENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIGJvb2wgaXNTdWJTZWxl
Y3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJl
bmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpCisgICAgICAgICAgICA6IG1fc3RhdGUoc3Rh
dGUpCisgICAgICAgICAgICAsIG1fc2VsKHNlbCkKKyAgICAgICAgICAgICwgbV9lKGUpCisgICAg
ICAgICAgICAsIG1faXNTdWJTZWxlY3Rvcihpc1N1YlNlbGVjdG9yKQorICAgICAgICAgICAgLCBt
X2VuY291bnRlcmVkTGluayhlbmNvdW50ZXJlZExpbmspCisgICAgICAgICAgICAsIG1fZWxlbWVu
dFN0eWxlKGVsZW1lbnRTdHlsZSkKKyAgICAgICAgICAgICwgbV9lbGVtZW50UGFyZW50U3R5bGUo
ZWxlbWVudFBhcmVudFN0eWxlKQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OkNhbGxTdGFjayB7CitwdWJsaWM6CisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsK
KyAgICB9CisKKyAgICB2b2lkIHB1c2goQ2FsbFN0YXRlIHN0YXRlKQorICAgIHsKKyAgICAgICAg
bV9zdGFjay5hcHBlbmQoc3RhdGUpOworICAgIH0KKworICAgIENhbGxTdGF0ZSBwb3AoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOworICAgICAgICBDYWxsU3RhdGUgc3RhdGUg
PSBtX3N0YWNrLmxhc3QoKTsKKyAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAg
IHJldHVybiBzdGF0ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPENhbGxTdGF0ZT4g
bV9zdGFjazsKK307CisKKy8vIENoZWNrIHNlbGVjdG9ycyBhbmQgY29tYmluYXRvcnMuCitib29s
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsLCBFbGVtZW50KiBlLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogc2VsZWN0
b3JBdHRycywgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9v
bCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0eWxl
KiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0CiB7CisgICAgLy8gV2Ugc2hvdWxkIGF2b2lkIHJl
Y3Vyc2l2ZSBjYWxscywgd2hpY2ggbWlnaHQgY2F1c2Ugc3RhY2sgb3ZlcmZsb3cgaWYgdGhlIGNo
YWluIG9mIHNlbGVjdG9yIGlzIHZlcnkgbG9uZy4KKyAgICAvLyBUaGVyZWZvcmUgd2UgaGF2ZSB0
byBtYWludGFpbiBhIGNhbGwgc3RhY2sgYnkgb3Vyc2VsdmVzIHNvIHRoYXQgd2UgY2FuIGNoZWNr
IHNlbGVjdG9yIGl0ZXJhdGl2ZWx5LgorICAgIENhbGxTdGFjayBjYWxsU3RhY2s7CisgICAgd2hp
bGUgKHRydWUpIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgIC8vIFNwZWM6IENTUzIgc2VsZWN0b3Jz
IGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSAoY29uY2VwdHVhbGx5KSBjbG9uZWQgRE9NIHRyZWUK
LSAgICAvLyBiZWNhdXNlIGl0cyBjb250ZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIGZvcm1hbCBk
b2N1bWVudCBzdHJ1Y3R1cmUuCi0gICAgaWYgKGUtPmlzU1ZHRWxlbWVudCgpICYmIGUtPmlzU2hh
ZG93Tm9kZSgpKQotICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAg
ICAgIC8vIFNwZWM6IENTUzIgc2VsZWN0b3JzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSAoY29u
Y2VwdHVhbGx5KSBjbG9uZWQgRE9NIHRyZWUKKyAgICAgICAgLy8gYmVjYXVzZSBpdHMgY29udGVu
dHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgorICAgICAg
ICBpZiAoZS0+aXNTVkdFbGVtZW50KCkgJiYgZS0+aXNTaGFkb3dOb2RlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKKyAgICAgICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRv
IG1hdGNoCisgICAgICAgIGNvbnN0IGJvb2wgbWF0Y2hlZCA9IGNoZWNrT25lU2VsZWN0b3Ioc2Vs
LCBlLCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCBlbGVtZW50
U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgICAgIGJvb2wgbmVlZFVud2luZGluZyA9
ICFtYXRjaGVkOwogCi0gICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCi0gICAgaWYg
KCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZSwgc2VsZWN0b3JBdHRycywgZHluYW1pY1BzZXVkbywg
aXNTdWJTZWxlY3RvciwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQotICAgICAg
ICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0KLSAgICAvLyBUaGUgcmVzdCBvZiB0aGUg
c2VsZWN0b3JzIGhhcyB0byBtYXRjaAotICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlv
biA9IHNlbC0+cmVsYXRpb24oKTsKLQotICAgIC8vIFByZXBhcmUgbmV4dCBzZWwKLSAgICBzZWwg
PSBzZWwtPnRhZ0hpc3RvcnkoKTsKLSAgICBpZiAoIXNlbCkKLSAgICAgICAgcmV0dXJuIFNlbGVj
dG9yTWF0Y2hlczsKLQotICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0
b3IpCi0gICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBm
b3IgdGhlIHBzZXVkb1N0eWxlCi0gICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURP
ICYmIG1fcHNldWRvU3R5bGUgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLQotICAgIC8vIENoZWNrIGZvciBuZXN0ZWQgbGlua3Mu
Ci0gICAgaWYgKG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlzU3ViU2VsZWN0b3IpIHsK
LSAgICAgICAgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1l
bnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgIGlmIChjdXJyZW50U3R5bGUgJiYg
Y3VycmVudFN0eWxlLT5pbnNpZGVMaW5rKCkgJiYgZS0+aXNMaW5rKCkpIHsKLSAgICAgICAgICAg
IGlmIChlbmNvdW50ZXJlZExpbmspCi0gICAgICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzcyA9IGZhbHNlOyAvLyBUaGlzIGxpbmsgaXMgbm90IHJlbGV2YW50IHRvIHRoZSBzdHls
ZSBiZWluZyByZXNvbHZlZCwgc28gZGlzYWJsZSBtYXRjaGluZy4KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZExpbmsgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQorICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhl
IHNlbGVjdG9ycyBoYXMgdG8gbWF0Y2gKKyAgICAgICAgICAgIENTU1NlbGVjdG9yOjpSZWxhdGlv
biByZWxhdGlvbiA9IHNlbC0+cmVsYXRpb24oKTsKIAotICAgIHN3aXRjaCAocmVsYXRpb24pIHsK
LSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICAvLyBQcmVwYXJlIG5leHQgc2VsCisgICAgICAgICAgICBz
ZWwgPSBzZWwtPnRhZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIGlmICghc2VsKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yKQorICAgICAgICAgICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMg
c2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb1N0eWxlCisgICAgICAgICAgICAg
ICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBkeW5h
bWljUHNldWRvKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIC8vIENoZWNrIGZvciBuZXN0ZWQgbGlua3MuCisgICAgICAgICAgICBpZiAobV9tYXRjaFZp
c2l0ZWRQc2V1ZG9DbGFzcyAmJiAhaXNTdWJTZWxlY3RvcikgeworICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBl
LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3Vy
cmVudFN0eWxlLT5pbnNpZGVMaW5rKCkgJiYgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGVuY291bnRlcmVkTGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsgLy8gVGhpcyBsaW5rIGlzIG5vdCByZWxldmFu
dCB0byB0aGUgc3R5bGUgYmVpbmcgcmVzb2x2ZWQsIHNvIGRpc2FibGUgbWF0Y2hpbmcuCisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY291bnRlcmVk
TGluayA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpE
ZXNjZW5kYW50OiB7CiAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihuKTsKLSAgICAgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tT
ZWxlY3RvcihzZWwsIGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNv
dW50ZXJlZExpbmspOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxz
TG9jYWxseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAg
ICAgIGNhbGxTdGFjay5wdXNoKENhbGxTdGF0ZShDYWxsU3RhdGU6OlNlZWtpbmdEZXNjZW5kYW50
LCBzZWwsIGUsIGlzU3ViU2VsZWN0b3IsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBl
bGVtZW50UGFyZW50U3R5bGUpKTsKKyAgICAgICAgICAgICAgICBpc1N1YlNlbGVjdG9yID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgICAgICAgICBl
bGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxk
OgotICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOwotICAg
ICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgZSA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwg
ZSwgc2VsZWN0b3JBdHRycywgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVu
dE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQ
YXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7CisgICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpDaGlsZDogeworICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5w
YXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2Rl
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBl
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOworICAgICAgICAgICAgICAgIGlzU3ViU2VsZWN0
b3IgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUgPSAwOworICAgICAgICAg
ICAgICAgIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7
Ci0gICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAg
ICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmICghbikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0gICAgICAgICAgICBl
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQ
c2V1ZG9DbGFzcyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2Vs
LCBlLCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5r
KTsgCi0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2Vu
dDoKLSAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUo
KSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRT
dHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBp
ZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGls
ZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDogeworICAgICAgICAgICAgICAgIGlmICghbV9j
b2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlz
RWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2Rl
KCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVk
QnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB3aGls
ZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBuID0gbi0+
cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFuKSB7CisgICAgICAgICAg
ICAgICAgICAgIG5lZWRVbndpbmRpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihuKTsKKyAgICAgICAgICAgICAgICBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgaXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIGVsZW1lbnRTdHlsZSA9IDA7CisgICAgICAgICAgICAgICAgZWxlbWVudFBhcmVudFN0
eWxlID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVj
dEFkamFjZW50OiB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkgJiYg
ZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHls
ZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFs
UnVsZXMoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUt
PnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0Vs
ZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmco
KTsKLSAgICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAgICBpZiAoIW4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgbmVlZFVud2luZGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG4pOwogICAgICAgICAgICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3Mg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxl
Y3RvcihzZWwsIGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50
ZXJlZExpbmspOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9j
YWxseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rv
cjoKLSAgICAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxpZCBpZiBzb21ldGhpbmcgZm9s
bG93cyBhIHBzZXVkby1lbGVtZW50Ci0gICAgICAgICAgICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlv
biBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQgb2YgcHNldWRv
IGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCi0gICAgICAgICAgICAvLyB0byBmb2xsb3cgdGhl
IHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgICAgIGlmICgoZWxlbWVudFN0eWxlIHx8IG1fY29s
bGVjdFJ1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBkeW5hbWljUHNl
dWRvICE9IFNFTEVDVElPTiAmJgotICAgICAgICAgICAgICAgICEoKFJlbmRlclNjcm9sbGJhcjo6
c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJf
Q09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgc2VsLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBl
LCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJlZExpbmssIGVs
ZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKTsKKyAgICAgICAgICAgICAgICBjYWxsU3Rh
Y2sucHVzaChDYWxsU3RhdGUoQ2FsbFN0YXRlOjpTZWVraW5nSW5kaXJlY3RBZGphY2VudCwgc2Vs
LCBlLCBpc1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVu
dFBhcmVudFN0eWxlKSk7CisgICAgICAgICAgICAgICAgaXNTdWJTZWxlY3RvciA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZSA9IDA7CisgICAgICAgICAgICAgICAgZWxlbWVu
dFBhcmVudFN0eWxlID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgorICAgICAgICAgICAg
ICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxpZCBpZiBzb21ldGhpbmcgZm9sbG93cyBhIHBzZXVk
by1lbGVtZW50CisgICAgICAgICAgICAgICAgLy8gV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIHNj
cm9sbGJhciBwc2V1ZG8gZWxlbWVudHMgYW5kIGFsbG93IGEgc2V0IG9mIHBzZXVkbyBjbGFzc2Vz
IChidXQgbm90aGluZyBlbHNlKQorICAgICAgICAgICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNl
dWRvIGVsZW1lbnRzLgorICAgICAgICAgICAgICAgIGlmICgoZWxlbWVudFN0eWxlIHx8IG1fY29s
bGVjdFJ1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBkeW5hbWljUHNl
dWRvICE9IFNFTEVDVElPTgorICAgICAgICAgICAgICAgICAgICAmJiAhKChSZW5kZXJTY3JvbGxi
YXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xM
QkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpICYmIHNlbC0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgaXNTdWJTZWxlY3RvciA9IHRydWU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobmVlZFVud2lu
ZGluZykgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y2FsbFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIC8vIFVud2luZHMgY2FsbCBzdGFjay4KKyAgICAgICAgICAgICAgICBD
YWxsU3RhdGUgY2FsbFN0YXRlID0gY2FsbFN0YWNrLnBvcCgpOworICAgICAgICAgICAgICAgIHNl
bCA9IGNhbGxTdGF0ZS5tX3NlbDsKKyAgICAgICAgICAgICAgICBlID0gY2FsbFN0YXRlLm1fZTsK
KyAgICAgICAgICAgICAgICBpc1N1YlNlbGVjdG9yID0gY2FsbFN0YXRlLm1faXNTdWJTZWxlY3Rv
cjsKKyAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZExpbmsgPSBjYWxsU3RhdGUubV9lbmNvdW50
ZXJlZExpbms7CisgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlID0gY2FsbFN0YXRlLm1fZWxl
bWVudFN0eWxlOworICAgICAgICAgICAgICAgIGVsZW1lbnRQYXJlbnRTdHlsZSA9IGNhbGxTdGF0
ZS5tX2VsZW1lbnRQYXJlbnRTdHlsZTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoY2FsbFN0
YXRlLm1fc3RhdGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENhbGxTdGF0ZTo6U2Vla2luZ0Rl
c2NlbmRhbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICAgICAgICAgIGNhbGxT
dGFjay5wdXNoKENhbGxTdGF0ZShDYWxsU3RhdGU6OlNlZWtpbmdEZXNjZW5kYW50LCBzZWwsIGUs
IGlzU3ViU2VsZWN0b3IsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFy
ZW50U3R5bGUpKTsKKyAgICAgICAgICAgICAgICAgICAgaXNTdWJTZWxlY3RvciA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUgPSAwOworICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBDYWxsU3RhdGU6OlNlZWtpbmdJ
bmRpcmVjdEFkamFjZW50OiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2
aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxl
bWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7IC8vIENvbnRpbnVlIHRvIG5leHQgd2hpbGUgbG9vcCB0byB1bndpbmQgY2Fs
bFN0YWNrIGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obik7CisgICAgICAgICAgICAgICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3Mg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbFN0YWNrLnB1c2goQ2FsbFN0YXRlKENh
bGxTdGF0ZTo6U2Vla2luZ0luZGlyZWN0QWRqYWNlbnQsIHNlbCwgZSwgaXNTdWJTZWxlY3Rvciwg
ZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpOworICAg
ICAgICAgICAgICAgICAgICBpc1N1YlNlbGVjdG9yID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRTdHlsZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRQYXJlbnRT
dHlsZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gU2VsZWN0b3JGYWls
c0NvbXBsZXRlbHk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZExvY2FsTmFtZVRvU2V0KEhhc2hTZXQ8
QXRvbWljU3RyaW5nSW1wbCo+KiBzZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIGIvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oCmluZGV4IDZlNGEyNmI2YmQ5YTMxNGRlMGM2MmQ0ZmEyZGZmODFmOWI3
NGE0ODUuLmRiMTFlYTZjYzE3NGIxNTU3NWRmZWVmNWI2NWVjZTM4YWQ3MTUzNGYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgKQEAgLTE2Nyw4ICsxNjcsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBib29sIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRl
clN0eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiBvdXRPcGVyYXRpb25zKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGVudW0gU2VsZWN0
b3JNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5IH07Ci0KICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0
aGUgZGVmYXVsdCBmb250IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVy
aWMgZm9udCBmYW1pbHkgaGFzIGNoYW5nZWQuIC1kd2gKICAgICAgICAgdm9pZCBjaGVja0Zvckdl
bmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
OwogICAgICAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSk7CkBAIC0yMTIsNyArMjEwLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiwgYm9vbCBzdHJpY3RQYXJzaW5nKTsKIAogICAg
ICAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCopIGNvbnN0
OwotICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwg
RWxlbWVudCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBzZWxlY3RvckF0dHJzLCBQc2V1
ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVk
TGluaywgUmVuZGVyU3R5bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSA9
IDApIGNvbnN0OworICAgICAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwg
RWxlbWVudCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBzZWxlY3RvckF0dHJzLCBQc2V1
ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVk
TGluaywgUmVuZGVyU3R5bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSA9
IDApIGNvbnN0OwogICAgICAgICAgICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9y
KiwgRWxlbWVudCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBzZWxlY3RvckF0dHJzLCBQ
c2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBSZW5kZXJTdHlsZSos
IFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0OwogICAgICAgICAgICAgYm9v
bCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiwgUHNldWRvSWQmIGR5bmFt
aWNQc2V1ZG8pIGNvbnN0OwogCkBAIC0yMjgsNiArMjI2LDkgQEAgcHVibGljOgogICAgICAgICAg
ICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwogICAgICAgICAgICAgbXV0YWJsZSBib29sIG1fbWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3M7CiAgICAgICAgICAgICBtdXRhYmxlIEhhc2hTZXQ8TGlua0hh
c2gsIExpbmtIYXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGU7CisKKyAgICAg
ICAgICAgIGNsYXNzIENhbGxTdGF0ZTsKKyAgICAgICAgICAgIGNsYXNzIENhbGxTdGFjazsKICAg
ICAgICAgfTsKIAogICAgIHByaXZhdGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66201</attachid>
            <date>2010-09-01 04:58:46 -0700</date>
            <delta_ts>2010-12-17 16:38:58 -0800</delta_ts>
            <desc>test-included</desc>
            <filename>bug-43783-20100901205844.patch</filename>
            <type>text/plain</type>
            <size>22596</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OTU3NTA3ZGE3NzZlMmE5YWFhZWIzYjc5N2M2M2E5Y2I3NDlmOWFmLi5hMmZjY2I1
OTljYWRmYzg3OWUyN2VjMTM2YjMzZGY0YjEzODZkYjQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDktMDEgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgQ1NTIHN0eWxlIHNl
bGVjdG9yIG5vbi1yZWN1cnNpdmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00Mzc4MworCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIG9uZSBvZiB0aGUg
cmVxdWlyZWQgY2hhbmdlcyB0byBmaXggdGhlIGZvbGxvd2luZyBtYXN0ZXIgYnVnOgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI4MDYKKworICAgICAg
ICBUbyBhdm9pZCByZWN1cnNpb24sIHdlIHByZXBhcmUgYSBjYWxsIHN0YWNrIGFuZCBtYWludGFp
biBhIGxpc3Qgb2YKKyAgICAgICAgZnVuY3Rpb24gY2FsbCBzdGF0ZSBieSBvdXJzZWx2ZXMgYW5k
IHRyeSBtYXRjaGluZyBpdGVyYXRpdmVseS4KKworICAgICAgICAqIGZhc3QvY3NzL2xvbmctY3Nz
LXNlbGVjdG9yLW1hdGNoZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nz
cy9sb25nLWNzcy1zZWxlY3Rvci1tYXRjaGVzLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA4LTI5ICBF
bnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRlbGUgUGV0ZXJzb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9sb25nLWNz
cy1zZWxlY3Rvci1tYXRjaGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL2xv
bmctY3NzLXNlbGVjdG9yLW1hdGNoZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExNjYxNmI4
MmJhNTg1NWFkMzlmODQ2ZGJhZTY2ZDMyMGY5ZDhlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9sb25nLWNzcy1zZWxlY3Rvci1tYXRjaGVzLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDQgQEAKK0hlbGxvIFdvcmxkCitUZXN0IGNhc2UgZm9yIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNzgzCisKK0lmIGJyb3dzZXIgZGlkbid0IGNyYXNo
LCB0aGUgdGVzdCBwYXNzZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9sb25n
LWNzcy1zZWxlY3Rvci1tYXRjaGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9sb25nLWNz
cy1zZWxlY3Rvci1tYXRjaGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY1OWJiODk0NzM1NTNjMTIwZDE1
YzA1MjE4ODc5NzQ2ODA0MTYyMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL2xvbmctY3NzLXNlbGVjdG9yLW1hdGNoZXMuaHRtbApAQCAtMCwwICsxLDQwIEBACis8aHRt
bD4KKzxoZWFkPjwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGdlbmVyYXRlX2Rl
ZXBseV9uZXN0ZWRfc2VsZWN0b3IobmVzdGxldmVsLCBjb2xvcikgeworICAgIHZhciBzZWxlY3Rv
ciA9IFtdCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXN0bGV2ZWw7ICsraSkgeworICAgICAg
ICBzZWxlY3Rvci5wdXNoKCcjaWQnICsgaSArICcgKyBcbicpOworICAgIH0KKyAgICBzZWxlY3Rv
ci5wdXNoKCcqIHtiYWNrZ3JvdW5kOicgKyBjb2xvciArICd9Jyk7CisKKyAgICB2YXIgc3R5bGUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOworICAgIHN0eWxlLnR5cGUgPSAndGV4
dC9jc3MnOworICAgIHN0eWxlLmlubmVySFRNTCA9IHNlbGVjdG9yLmpvaW4oJycpOworICAgIGRv
Y3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOworfQorCitmdW5jdGlvbiBnZW5lcmF0ZV9k
ZWVwbHlfbmVzdGVkX2VsZW1lbnRzKG5lc3RsZXZlbCkgeworICAgIHZhciB0ZXh0ID0gW107Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXN0bGV2ZWw7ICsraSkgeworICAgICAgICB0ZXh0LnB1
c2goJzxkaXYgaWQ9aWQnICsgaSArICc+PC9kaXY+XG4nKTsKKyAgICB9CisgICAgdGV4dC5wdXNo
KCc8ZGl2PkhlbGxvIFdvcmxkPC9kaXY+Jyk7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpCisgICAgZGl2LmlubmVySFRNTCA9IHRleHQuam9pbignJyk7CisgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworfQorCitnZW5lcmF0ZV9kZWVwbHlfbmVz
dGVkX3NlbGVjdG9yKDEwMDAwLCAncmVkJyk7CitnZW5lcmF0ZV9kZWVwbHlfbmVzdGVkX3NlbGVj
dG9yKDEwMDAwLCAnYmx1ZScpOworCitnZW5lcmF0ZV9kZWVwbHlfbmVzdGVkX2VsZW1lbnRzKDEw
MDAwKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KKzxwPlRlc3QgY2FzZSBmb3IgPGEg
aHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3ODMiPmh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNzgzPC9hPjwvcD4KKzxwPklmIGJy
b3dzZXIgZGlkbid0IGNyYXNoLCB0aGUgdGVzdCBwYXNzZWQuPC9wPgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA3Yjc0NDQyNDRhMGQzZDg5MDQwOGRmMDc5ZjgyMjBhNGViOGMxNGYzLi4yYjY4YmExZTdiN2E0
YjkwYzVkY2Q1YzQzNGI5Zjc2NmU4Y2YzMGQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEwLTA5LTAxICBI
YXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIENTUyBzdHlsZSBzZWxlY3RvciBub24tcmVj
dXJzaXZlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDM3ODMKKworICAgICAgICBUaGlzIGNoYW5nZSBpcyBvbmUgb2YgdGhlIHJlcXVpcmVkIGNoYW5n
ZXMgdG8gZml4IHRoZSBmb2xsb3dpbmcgbWFzdGVyIGJ1ZzoKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyODA2CisKKyAgICAgICAgVG8gYXZvaWQgcmVj
dXJzaW9uLCB3ZSBwcmVwYXJlIGEgY2FsbCBzdGFjayBhbmQgbWFpbnRhaW4gYSBsaXN0IG9mCisg
ICAgICAgIGZ1bmN0aW9uIGNhbGwgc3RhdGUgYnkgb3Vyc2VsdmVzIGFuZCB0cnkgbWF0Y2hpbmcg
aXRlcmF0aXZlbHkuCisKKyAgICAgICAgTm8gdGVzdHMuIE5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdl
ZC4KKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Q2FsbFN0YXRl
OjopOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2Vy
OjpDYWxsU3RhdGU6OkNhbGxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpTZWxlY3RvckNoZWNrZXI6OkNhbGxTdGFjazo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OkNhbGxTdGFjazo6cHVzaCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OkNh
bGxTdGFjazo6cG9wKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOgorCiAyMDEw
LTA4LTI5ICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IGEw
NzBjNjU4MmY5MTk0ZTk2ZmU0YTFhYjEyMDE1ZWFlYjUzZTUwYmQuLmZhZGJmMjg0YzU5N2VmNzk0
NzkwODhiZjM2ZWExNjg0YjA0NTM5ZjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC05
MzksNyArOTM5LDcgQEAgRUluc2lkZUxpbmsgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVj
a2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW4KIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5P
UFNFVURPOwotICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCwgMCwgZHluYW1p
Y1BzZXVkbywgZmFsc2UsIGZhbHNlKSA9PSBTZWxlY3Rvck1hdGNoZXM7CisgICAgcmV0dXJuIGNo
ZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50LCAwLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2Up
OwogfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7
CkBAIC0xODg4LDggKzE4ODgsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCkKICAgICBtX2R5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIAog
ICAgIC8vIENoZWNrIHRoZSBzZWxlY3RvcgotICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2No
ZWNrZXIuY2hlY2tTZWxlY3RvcihzZWwsIG1fZWxlbWVudCwgJm1fc2VsZWN0b3JBdHRycywgbV9k
eW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UsIHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAg
IGlmIChtYXRjaCAhPSBTZWxlY3Rvck1hdGNoZXMpCisgICAgaWYgKCFtX2NoZWNrZXIuY2hlY2tT
ZWxlY3RvcihzZWwsIG1fZWxlbWVudCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRv
LCBmYWxzZSwgZmFsc2UsIHN0eWxlKCksIG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAobV9jaGVja2VyLm1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYg
bV9jaGVja2VyLm1fcHNldWRvU3R5bGUgIT0gbV9keW5hbWljUHNldWRvKQpAQCAtMTg5OCwxMTQg
KzE4OTcsMjE5IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBSZWN1cnNpdmUgY2hlY2sgb2Yg
c2VsZWN0b3JzIGFuZCBjb21iaW5hdG9ycwotLy8gSXQgY2FuIHJldHVybiAzIGRpZmZlcmVudCB2
YWx1ZXM6Ci0vLyAqIFNlbGVjdG9yTWF0Y2hlcyAgICAgICAgIC0gdGhlIHNlbGVjdG9yIG1hdGNo
ZXMgdGhlIGVsZW1lbnQgZQotLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAtIHRoZSBzZWxl
Y3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQotLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVs
eSAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Ig
b2YgZQotQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9yOjpT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCog
ZSwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMsIFBzZXVkb0lkJiBk
eW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxl
KSBjb25zdAorc3RydWN0IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Q2FsbFN0
YXRlIHsKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgU2Vla2luZ0Rlc2NlbmRhbnQsIFNlZWtp
bmdJbmRpcmVjdEFkamFjZW50LAorICAgIH07CisKKyAgICBTdGF0ZSBzdGF0ZTsKKyAgICBDU1NT
ZWxlY3Rvciogc2VsZWN0b3I7CisgICAgRWxlbWVudCogZWxlbWVudDsKKyAgICBib29sIGlzU3Vi
U2VsZWN0b3I7CisgICAgYm9vbCBlbmNvdW50ZXJlZExpbms7CisgICAgUmVuZGVyU3R5bGUqIGVs
ZW1lbnRTdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlOworCisgICAg
Q2FsbFN0YXRlKFN0YXRlIHN0YXRlXywgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yXywgRWxlbWVudCog
ZWxlbWVudF8sIGJvb2wgaXNTdWJTZWxlY3Rvcl8sIGJvb2wgZW5jb3VudGVyZWRMaW5rXywgUmVu
ZGVyU3R5bGUqIGVsZW1lbnRTdHlsZV8sIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGVf
KQorICAgICAgICA6IHN0YXRlKHN0YXRlXykKKyAgICAgICAgLCBzZWxlY3RvcihzZWxlY3Rvcl8p
CisgICAgICAgICwgZWxlbWVudChlbGVtZW50XykKKyAgICAgICAgLCBpc1N1YlNlbGVjdG9yKGlz
U3ViU2VsZWN0b3JfKQorICAgICAgICAsIGVuY291bnRlcmVkTGluayhlbmNvdW50ZXJlZExpbmtf
KQorICAgICAgICAsIGVsZW1lbnRTdHlsZShlbGVtZW50U3R5bGVfKQorICAgICAgICAsIGVsZW1l
bnRQYXJlbnRTdHlsZShlbGVtZW50UGFyZW50U3R5bGVfKQorICAgIHsKKyAgICB9Cit9OworCitj
bGFzcyBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OkNhbGxTdGFjayB7CitwdWJs
aWM6CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0
YWNrLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goY29uc3QgQ2FsbFN0YXRlJiBz
dGF0ZSkKKyAgICB7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHN0YXRlKTsKKyAgICB9CisKKyAg
ICBDYWxsU3RhdGUgcG9wKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAg
ICAgICAgQ2FsbFN0YXRlIHN0YXRlID0gbV9zdGFjay5sYXN0KCk7CisgICAgICAgIG1fc3RhY2su
cmVtb3ZlTGFzdCgpOworICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFZlY3RvcjxDYWxsU3RhdGUsIDIwPiBtX3N0YWNrOworfTsKKworLy8gQ2hlY2sgc2VsZWN0
b3JzIGFuZCBjb21iaW5hdG9ycy4KK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVj
a2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVu
dCwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMsIFBzZXVkb0lkJiBk
eW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxl
KSBjb25zdAogeworICAgIC8vIFdlIHNob3VsZCBhdm9pZCByZWN1cnNpdmUgY2FsbHMsIHdoaWNo
IG1pZ2h0IGNhdXNlIHN0YWNrIG92ZXJmbG93IGlmIHRoZSBjaGFpbiBvZiBzZWxlY3RvciBpcyB2
ZXJ5IGxvbmcuCisgICAgLy8gVGhlcmVmb3JlIHdlIGhhdmUgdG8gbWFpbnRhaW4gYSBjYWxsIHN0
YWNrIGJ5IG91cnNlbHZlcyBzbyB0aGF0IHdlIGNhbiBjaGVjayBzZWxlY3RvciBpdGVyYXRpdmVs
eS4KKyAgICBDYWxsU3RhY2sgY2FsbFN0YWNrOworICAgIHdoaWxlICh0cnVlKSB7CiAjaWYgRU5B
QkxFKFNWRykKLSAgICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3QgYmUgYXBwbGllZCB0
byB0aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCi0gICAgLy8gYmVjYXVzZSBpdHMg
Y29udGVudHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgot
ICAgIGlmIChlLT5pc1NWR0VsZW1lbnQoKSAmJiBlLT5pc1NoYWRvd05vZGUoKSkKLSAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAvLyBTcGVjOiBDU1MyIHNl
bGVjdG9ycyBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVkIERP
TSB0cmVlCisgICAgICAgIC8vIGJlY2F1c2UgaXRzIGNvbnRlbnRzIGFyZSBub3QgcGFydCBvZiB0
aGUgZm9ybWFsIGRvY3VtZW50IHN0cnVjdHVyZS4KKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzU1ZH
RWxlbWVudCgpICYmIGVsZW1lbnQtPmlzU2hhZG93Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCisgICAgICAgIC8vIGZpcnN0IHNlbGVjdG9yIGhhcyB0byBtYXRjaAor
ICAgICAgICBib29sIG1hdGNoZWQgPSBjaGVja09uZVNlbGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50
LCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCBlbGVtZW50U3R5
bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgICAgIGJvb2wgbmVlZFVud2luZGluZyA9ICFt
YXRjaGVkOwogCi0gICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCi0gICAgaWYgKCFj
aGVja09uZVNlbGVjdG9yKHNlbCwgZSwgc2VsZWN0b3JBdHRycywgZHluYW1pY1BzZXVkbywgaXNT
dWJTZWxlY3RvciwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0KLSAgICAvLyBUaGUgcmVzdCBvZiB0aGUgc2Vs
ZWN0b3JzIGhhcyB0byBtYXRjaAotICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9
IHNlbC0+cmVsYXRpb24oKTsKLQotICAgIC8vIFByZXBhcmUgbmV4dCBzZWwKLSAgICBzZWwgPSBz
ZWwtPnRhZ0hpc3RvcnkoKTsKLSAgICBpZiAoIXNlbCkKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9y
TWF0Y2hlczsKLQotICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3Ip
Ci0gICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3Ig
dGhlIHBzZXVkb1N0eWxlCi0gICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPICYm
IG1fcHNldWRvU3R5bGUgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseTsKLQotICAgIC8vIENoZWNrIGZvciBuZXN0ZWQgbGlua3MuCi0g
ICAgaWYgKG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlzU3ViU2VsZWN0b3IpIHsKLSAg
ICAgICAgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRT
dHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3Vy
cmVudFN0eWxlLT5pbnNpZGVMaW5rKCkgJiYgZS0+aXNMaW5rKCkpIHsKLSAgICAgICAgICAgIGlm
IChlbmNvdW50ZXJlZExpbmspCi0gICAgICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9D
bGFzcyA9IGZhbHNlOyAvLyBUaGlzIGxpbmsgaXMgbm90IHJlbGV2YW50IHRvIHRoZSBzdHlsZSBi
ZWluZyByZXNvbHZlZCwgc28gZGlzYWJsZSBtYXRjaGluZy4KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbmNvdW50ZXJlZExpbmsgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQor
ICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHNl
bGVjdG9ycyBoYXMgdG8gbWF0Y2gKKyAgICAgICAgICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiBy
ZWxhdGlvbiA9IHNlbGVjdG9yLT5yZWxhdGlvbigpOwogCi0gICAgc3dpdGNoIChyZWxhdGlvbikg
ewotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpEZXNjZW5kYW50OgotICAgICAgICAgICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOwot
ICAgICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICAg
ICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgICAgICBTZWxlY3Rv
ck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFt
aWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOwotICAgICAgICAgICAgICAgIGlmICht
YXRjaCAhPSBTZWxlY3RvckZhaWxzTG9jYWxseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1hdGNoOworICAgICAgICAgICAgLy8gUHJlcGFyZSBuZXh0IHNlbAorICAgICAgICAgICAgc2Vs
ZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOworICAgICAgICAgICAgaWYgKCFzZWxlY3Rv
cikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKHJlbGF0
aW9uICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAgICAgICAgICAgICAvLyBCYWls
LW91dCBpZiB0aGlzIHNlbGVjdG9yIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBwc2V1ZG9TdHlsZQor
ICAgICAgICAgICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIG1fcHNldWRv
U3R5bGUgIT0gZHluYW1pY1BzZXVkbykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgbmVzdGVkIGxpbmtzLgorICAgICAgICAgICAg
aWYgKG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlzU3ViU2VsZWN0b3IpIHsKKyAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxl
bWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+aW5zaWRlTGluaygpICYmIGVsZW1lbnQtPmlz
TGluaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbmNvdW50ZXJlZExpbmspCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7IC8v
IFRoaXMgbGluayBpcyBub3QgcmVsZXZhbnQgdG8gdGhlIHN0eWxlIGJlaW5nIHJlc29sdmVkLCBz
byBkaXNhYmxlIG1hdGNoaW5nLgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbmNvdW50ZXJlZExpbmsgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpDaGlsZDoKLSAgICAgICAgewotICAgICAgICAgICAgTm9kZSogbiA9IGUtPnBhcmVudE5v
ZGUoKTsKLSAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxl
Y3RvcihzZWwsIGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50
ZXJlZExpbmspOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFk
amFjZW50OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSAm
JiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsK
LSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUg
PyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICBwYXJl
bnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOworCisg
ICAgICAgICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpEZXNjZW5kYW50OiB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQt
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxl
bWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgICAg
ICAgICAgY2FsbFN0YWNrLnB1c2goQ2FsbFN0YXRlKENhbGxTdGF0ZTo6U2Vla2luZ0Rlc2NlbmRh
bnQsIHNlbGVjdG9yLCBlbGVtZW50LCBpc1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGVs
ZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSk7CisgICAgICAgICAgICAgICAgaXNTdWJT
ZWxlY3RvciA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZSA9IDA7CisgICAg
ICAgICAgICAgICAgZWxlbWVudFBhcmVudFN0eWxlID0gMDsKKyAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxp
bmcoKTsKLSAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAg
ICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgaWYgKCFu
KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKLSAgICAgICAg
ICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBtX21hdGNoVmlz
aXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rv
cihzZWwsIGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJl
ZExpbmspOyAKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFk
amFjZW50OgotICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkgJiYgZS0+cGFyZW50
Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBh
cmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAg
ICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNl
dENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOiB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUgfHwgIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Cisg
ICAgICAgICAgICAgICAgaXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVs
ZW1lbnRTdHlsZSA9IDA7CisgICAgICAgICAgICAgICAgZWxlbWVudFBhcmVudFN0eWxlID0gMDsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygp
OwotICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxs
eTsKLSAgICAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOworICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6IHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSAmJiBlbGVtZW50LT5wYXJlbnROb2RlKCkgJiYgZWxl
bWVudC0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVu
dFN0eWxlIDogZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gZWxlbWVudC0+cHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICAgICAgICAgIGlmICghbm9kZSkgeworICAgICAgICAgICAgICAg
ICAgICBuZWVkVW53aW5kaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFz
cyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1Nl
bGVjdG9yKHNlbCwgZSwgc2VsZWN0b3JBdHRycywgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291
bnRlcmVkTGluayk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yRmFpbHNM
b2NhbGx5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgICAgICAgICB9
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVj
dG9yOgotICAgICAgICAgICAgLy8gYSBzZWxlY3RvciBpcyBpbnZhbGlkIGlmIHNvbWV0aGluZyBm
b2xsb3dzIGEgcHNldWRvLWVsZW1lbnQKLSAgICAgICAgICAgIC8vIFdlIG1ha2UgYW4gZXhjZXB0
aW9uIGZvciBzY3JvbGxiYXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBhIHNldCBvZiBwc2V1
ZG8gY2xhc3NlcyAoYnV0IG5vdGhpbmcgZWxzZSkKLSAgICAgICAgICAgIC8vIHRvIGZvbGxvdyB0
aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICAgICAgaWYgKChlbGVtZW50U3R5bGUgfHwgbV9j
b2xsZWN0UnVsZXNPbmx5KSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIGR5bmFtaWNQ
c2V1ZG8gIT0gU0VMRUNUSU9OICYmCi0gICAgICAgICAgICAgICAgISgoUmVuZGVyU2Nyb2xsYmFy
OjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJB
Ul9DT1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSAmJiBzZWwtPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWws
IGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywg
ZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpOworICAgICAgICAgICAgICAgIGlzU3Vi
U2VsZWN0b3IgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUgPSAwOworICAg
ICAgICAgICAgICAgIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDA7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVj
dEFkamFjZW50OiB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkgJiYg
ZWxlbWVudC0+cGFyZW50Tm9kZSgpICYmIGVsZW1lbnQtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50
Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGVsZW1lbnQtPnBhcmVudE5vZGUo
KS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRC
eUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAg
ICAgICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbmVlZFVud2luZGluZyA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgICAgICAg
ICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBjYWxsU3RhY2sucHVzaChDYWxsU3RhdGUoQ2FsbFN0YXRlOjpTZWVraW5nSW5kaXJlY3RBZGph
Y2VudCwgc2VsZWN0b3IsIGVsZW1lbnQsIGlzU3ViU2VsZWN0b3IsIGVuY291bnRlcmVkTGluaywg
ZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKTsKKyAgICAgICAgICAgICAgICBpc1N1
YlNlbGVjdG9yID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlID0gMDsKKyAg
ICAgICAgICAgICAgICBlbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2Vs
ZWN0b3I6CisgICAgICAgICAgICAgICAgLy8gYSBzZWxlY3RvciBpcyBpbnZhbGlkIGlmIHNvbWV0
aGluZyBmb2xsb3dzIGEgcHNldWRvLWVsZW1lbnQKKyAgICAgICAgICAgICAgICAvLyBXZSBtYWtl
IGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBz
ZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCisgICAgICAgICAgICAgICAg
Ly8gdG8gZm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCisgICAgICAgICAgICAgICAgaWYgKChl
bGVtZW50U3R5bGUgfHwgbV9jb2xsZWN0UnVsZXNPbmx5KSAmJiBkeW5hbWljUHNldWRvICE9IE5P
UFNFVURPICYmIGR5bmFtaWNQc2V1ZG8gIT0gU0VMRUNUSU9OCisgICAgICAgICAgICAgICAgICAg
ICYmICEoKFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHlu
YW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpF
UikgJiYgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlzU3ViU2Vs
ZWN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG5lZWRVbndpbmRpbmcpIHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBVbndpbmRzIGNhbGwg
c3RhY2suCisgICAgICAgICAgICAgICAgQ2FsbFN0YXRlIGNhbGxTdGF0ZSA9IGNhbGxTdGFjay5w
b3AoKTsKKyAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGNhbGxTdGF0ZS5zZWxlY3RvcjsKKyAg
ICAgICAgICAgICAgICBlbGVtZW50ID0gY2FsbFN0YXRlLmVsZW1lbnQ7CisgICAgICAgICAgICAg
ICAgaXNTdWJTZWxlY3RvciA9IGNhbGxTdGF0ZS5pc1N1YlNlbGVjdG9yOworICAgICAgICAgICAg
ICAgIGVuY291bnRlcmVkTGluayA9IGNhbGxTdGF0ZS5lbmNvdW50ZXJlZExpbms7CisgICAgICAg
ICAgICAgICAgZWxlbWVudFN0eWxlID0gY2FsbFN0YXRlLmVsZW1lbnRTdHlsZTsKKyAgICAgICAg
ICAgICAgICBlbGVtZW50UGFyZW50U3R5bGUgPSBjYWxsU3RhdGUuZWxlbWVudFBhcmVudFN0eWxl
OworCisgICAgICAgICAgICAgICAgc3dpdGNoIChjYWxsU3RhdGUuc3RhdGUpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIENhbGxTdGF0ZTo6U2Vla2luZ0Rlc2NlbmRhbnQ6IHsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxT
dGFjay5wdXNoKENhbGxTdGF0ZShDYWxsU3RhdGU6OlNlZWtpbmdEZXNjZW5kYW50LCBzZWxlY3Rv
ciwgZWxlbWVudCwgaXNTdWJTZWxlY3RvciwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUs
IGVsZW1lbnRQYXJlbnRTdHlsZSkpOworICAgICAgICAgICAgICAgICAgICBpc1N1YlNlbGVjdG9y
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZSA9IDA7CisgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIENhbGxTdGF0
ZTo6U2Vla2luZ0luZGlyZWN0QWRqYWNlbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGVsZW1lbnQtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3
aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gQ29udGlu
dWUgdG8gbmV4dCB3aGlsZSBsb29wIHRvIHVud2luZCBjYWxsU3RhY2sgZnVydGhlci4KKyAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBjYWxsU3RhY2sucHVzaChDYWxsU3RhdGUoQ2FsbFN0YXRlOjpTZWVr
aW5nSW5kaXJlY3RBZGphY2VudCwgc2VsZWN0b3IsIGVsZW1lbnQsIGlzU3ViU2VsZWN0b3IsIGVu
Y291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50U3R5bGUgPSAwOworICAgICAgICAgICAgICAgICAgICBlbGVtZW50UGFyZW50U3R5
bGUgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIFNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5OwogfQogCiBzdGF0aWMgdm9pZCBhZGRMb2NhbE5hbWVUb1NldChIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiogc2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAppbmRleCAyOGQ0NDg4YmM0ZDg0M2IzNTE3MjA2MmQwYjA3YTY3MjM1YmFm
NDg5Li5iYTc2MjYwMzE3YmEwNmRjZDAxMTY3MmVlZDU2ZjEzNDE0NDY1N2VjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCkBAIC0xNzAsOCArMTcwLDYgQEAgcHVibGljOgogICAgICAgICBzdGF0aWMg
Ym9vbCBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJT
dHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9u
cyYgb3V0T3BlcmF0aW9ucyk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBlbnVtIFNlbGVjdG9y
TWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZh
aWxzQ29tcGxldGVseSB9OwotCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhl
IGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmlj
IGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCiAgICAgICAgIHZvaWQgY2hlY2tGb3JHZW5l
cmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsK
ICAgICAgICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpOwpAQCAtMjE1LDcgKzIxMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCosIGJvb2wgc3RyaWN0UGFyc2luZyk7CiAKICAgICAg
ICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqKSBjb25zdDsK
LSAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVs
ZW1lbnQqLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogc2VsZWN0b3JBdHRycywgUHNldWRv
SWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExp
bmssIFJlbmRlclN0eWxlKiA9IDAsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUgPSAw
KSBjb25zdDsKKyAgICAgICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVs
ZW1lbnQqLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogc2VsZWN0b3JBdHRycywgUHNldWRv
SWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExp
bmssIFJlbmRlclN0eWxlKiA9IDAsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUgPSAw
KSBjb25zdDsKICAgICAgICAgICAgIGJvb2wgY2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvcios
IEVsZW1lbnQqLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogc2VsZWN0b3JBdHRycywgUHNl
dWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgUmVuZGVyU3R5bGUqLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdDsKICAgICAgICAgICAgIGJvb2wg
Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3RvciosIFBzZXVkb0lkJiBkeW5hbWlj
UHNldWRvKSBjb25zdDsKIApAQCAtMjMxLDYgKzIyOSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IGJvb2wgbV9kb2N1bWVudElzSFRNTDsKICAgICAgICAgICAgIG11dGFibGUgYm9vbCBtX21hdGNo
VmlzaXRlZFBzZXVkb0NsYXNzOwogICAgICAgICAgICAgbXV0YWJsZSBIYXNoU2V0PExpbmtIYXNo
LCBMaW5rSGFzaEhhc2g+IG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlOworCisgICAgICAg
ICAgICBzdHJ1Y3QgQ2FsbFN0YXRlOworICAgICAgICAgICAgY2xhc3MgQ2FsbFN0YWNrOwogICAg
ICAgICB9OwogCiAgICAgcHJpdmF0ZToK
</data>
<flag name="review"
          id="55140"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>66202</attachid>
            <date>2010-09-01 05:09:30 -0700</date>
            <delta_ts>2010-09-01 05:09:30 -0700</delta_ts>
            <desc>Result of i-Bench performance test for reference</desc>
            <filename>ibench.txt</filename>
            <type>text/plain</type>
            <size>3317</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">SGVyZSBpcyB0aGUgcmVzdWx0IG9mIGktQmVhbmNoIHBlcmZvcm1hbmNlIHRlc3RzLiBJIHJhbiBh
IHRlc3QgNCB0aW1lcyBmb3IgZWFjaC4KCgoKV2l0aCB0aGlzIHBhdGNoLgo9PT09PT09PT09PT09
PT09CgoKTG9hZCBQYWdlcwogICBIVE1MCUVsYXBzZWQgdGltZSAocykJTm90ZXMuCSAgCiBIVE1M
IExvYWQgU3BlZWQgICAJICAJICAJICAKICAgQWxsIGl0ZXJhdGlvbnMJICA0Mi40NgkgIAkgIAog
ICBGaXJzdCBpdGVyYXRpb24gKGRvd25sb2FkZWQpCSAgNC45CSAgCSAgCiAgIFN1YnNlcXVlbnQg
aXRlcmF0aW9uIChjYWNoZWQpCSAgNS4zNwkgIAkgIAogICBYTUwJRWxhcHNlZCB0aW1lIChzKQlO
b3Rlcy4JICAKIFhNTCAvIENTUyBMb2FkIFNwZWVkICAgCSAgCSAgCSAgCiAgIEFsbCBpdGVyYXRp
b25zCSAgNTUuNDcJICAJICAKICAgRmlyc3QgaXRlcmF0aW9uIChkb3dubG9hZGVkKQkgIDguNzgJ
ICAJICAKICAgU3Vic2VxdWVudCBpdGVyYXRpb24gKGNhY2hlZCkJICA5LjM0CSAgCSAgCgoKTG9h
ZCBQYWdlcwogICBIVE1MCUVsYXBzZWQgdGltZSAocykJTm90ZXMuCSAgCiBIVE1MIExvYWQgU3Bl
ZWQgICAJICAJICAJICAKICAgQWxsIGl0ZXJhdGlvbnMJICA0My4wNwkgIAkgIAogICBGaXJzdCBp
dGVyYXRpb24gKGRvd25sb2FkZWQpCSAgNS4zOAkgIAkgIAogICBTdWJzZXF1ZW50IGl0ZXJhdGlv
biAoY2FjaGVkKQkgIDUuMzkJICAJICAKICAgWE1MCUVsYXBzZWQgdGltZSAocykJTm90ZXMuCSAg
CiBYTUwgLyBDU1MgTG9hZCBTcGVlZCAgIAkgIAkgIAkgIAogICBBbGwgaXRlcmF0aW9ucwkgIDU2
LjIJICAJICAKICAgRmlyc3QgaXRlcmF0aW9uIChkb3dubG9hZGVkKQkgIDkuMjgJICAJICAKICAg
U3Vic2VxdWVudCBpdGVyYXRpb24gKGNhY2hlZCkJICA5LjM5CSAgCSAgCgpMb2FkIFBhZ2VzCiAg
IEhUTUwJRWxhcHNlZCB0aW1lIChzKQlOb3Rlcy4JICAKIEhUTUwgTG9hZCBTcGVlZCAgIAkgIAkg
IAkgIAogICBBbGwgaXRlcmF0aW9ucwkgIDQyLjYzCSAgCSAgCiAgIEZpcnN0IGl0ZXJhdGlvbiAo
ZG93bmxvYWRlZCkJICA0Ljg0CSAgCSAgCiAgIFN1YnNlcXVlbnQgaXRlcmF0aW9uIChjYWNoZWQp
CSAgNS40CSAgCSAgCiAgIFhNTAlFbGFwc2VkIHRpbWUgKHMpCU5vdGVzLgkgIAogWE1MIC8gQ1NT
IExvYWQgU3BlZWQgICAJICAJICAJICAKICAgQWxsIGl0ZXJhdGlvbnMJICA1NS4wMQkgIAkgIAog
ICBGaXJzdCBpdGVyYXRpb24gKGRvd25sb2FkZWQpCSAgOC43NQkgIAkgIAogICBTdWJzZXF1ZW50
IGl0ZXJhdGlvbiAoY2FjaGVkKQkgIDkuMjUJICAJICAKICAKIExvYWQgUGFnZXMKICAgSFRNTAlF
bGFwc2VkIHRpbWUgKHMpCU5vdGVzLgkgIAogSFRNTCBMb2FkIFNwZWVkICAgCSAgCSAgCSAgCiAg
IEFsbCBpdGVyYXRpb25zCSAgNDIuMTYJICAJICAKICAgRmlyc3QgaXRlcmF0aW9uIChkb3dubG9h
ZGVkKQkgIDQuOTQJICAJICAKICAgU3Vic2VxdWVudCBpdGVyYXRpb24gKGNhY2hlZCkJICA1LjMy
CSAgCSAgCiAgIFhNTAlFbGFwc2VkIHRpbWUgKHMpCU5vdGVzLgkgIAogWE1MIC8gQ1NTIExvYWQg
U3BlZWQgICAJICAJICAJICAKICAgQWxsIGl0ZXJhdGlvbnMJICA1NS41MQkgIAkgIAogICBGaXJz
dCBpdGVyYXRpb24gKGRvd25sb2FkZWQpCSAgOC43OQkgIAkgIAogICBTdWJzZXF1ZW50IGl0ZXJh
dGlvbiAoY2FjaGVkKQkgIDkuMzQJICAJICAKICAgQWRvYmUgQWNyb2JhdAlFbGFwc2VkIHRpbWUg
KHMpCSAgCSAgCgoKCgpXaXRob3V0IHRoaXMgcGF0Y2guCj09PT09PT09PT09PT09PT0KCiBMb2Fk
IFBhZ2VzCiAgIEhUTUwJRWxhcHNlZCB0aW1lIChzKQlOb3Rlcy4JICAKIEhUTUwgTG9hZCBTcGVl
ZCAgIAkgIAkgIAkgIAogICBBbGwgaXRlcmF0aW9ucwkgIDQ0LjU2CSAgCSAgCiAgIEZpcnN0IGl0
ZXJhdGlvbiAoZG93bmxvYWRlZCkJICA2LjA3CSAgCSAgCiAgIFN1YnNlcXVlbnQgaXRlcmF0aW9u
IChjYWNoZWQpCSAgNS41CSAgCSAgCiAgIFhNTAlFbGFwc2VkIHRpbWUgKHMpCU5vdGVzLgkgIAog
WE1MIC8gQ1NTIExvYWQgU3BlZWQgICAJICAJICAJICAKICAgQWxsIGl0ZXJhdGlvbnMJICA1NC4z
OQkgIAkgIAogICBGaXJzdCBpdGVyYXRpb24gKGRvd25sb2FkZWQpCSAgOS4xNQkgIAkgIAogICBT
dWJzZXF1ZW50IGl0ZXJhdGlvbiAoY2FjaGVkKQkgIDkuMDUKCgogTG9hZCBQYWdlcwogICBIVE1M
CUVsYXBzZWQgdGltZSAocykJTm90ZXMuCSAgCiBIVE1MIExvYWQgU3BlZWQgICAJICAJICAJICAK
ICAgQWxsIGl0ZXJhdGlvbnMJICA0Mi41MgkgIAkgIAogICBGaXJzdCBpdGVyYXRpb24gKGRvd25s
b2FkZWQpCSAgNS4xOQkgIAkgIAogICBTdWJzZXF1ZW50IGl0ZXJhdGlvbiAoY2FjaGVkKQkgIDUu
MzMJICAJICAKICAgWE1MCUVsYXBzZWQgdGltZSAocykJTm90ZXMuCSAgCiBYTUwgLyBDU1MgTG9h
ZCBTcGVlZCAgIAkgIAkgIAkgIAogICBBbGwgaXRlcmF0aW9ucwkgIDU1LjA5CSAgCSAgCiAgIEZp
cnN0IGl0ZXJhdGlvbiAoZG93bmxvYWRlZCkJICA4LjcxCSAgCSAgCiAgIFN1YnNlcXVlbnQgaXRl
cmF0aW9uIChjYWNoZWQpCSAgOS4yOAkgIAkgIAoKCkxvYWQgUGFnZXMKICAgSFRNTAlFbGFwc2Vk
IHRpbWUgKHMpCU5vdGVzLgkgIAogSFRNTCBMb2FkIFNwZWVkICAgCSAgCSAgCSAgCiAgIEFsbCBp
dGVyYXRpb25zCSAgNDEuOTYJICAJICAKICAgRmlyc3QgaXRlcmF0aW9uIChkb3dubG9hZGVkKQkg
IDQuOTcJICAJICAKICAgU3Vic2VxdWVudCBpdGVyYXRpb24gKGNhY2hlZCkJICA1LjI4CSAgCSAg
CiAgIFhNTAlFbGFwc2VkIHRpbWUgKHMpCU5vdGVzLgkgIAogWE1MIC8gQ1NTIExvYWQgU3BlZWQg
ICAJICAJICAJICAKICAgQWxsIGl0ZXJhdGlvbnMJICA1NS4wNwkgIAkgIAogICBGaXJzdCBpdGVy
YXRpb24gKGRvd25sb2FkZWQpCSAgOC42NgkgIAkgIAogICBTdWJzZXF1ZW50IGl0ZXJhdGlvbiAo
Y2FjaGVkKQkgIDkuMjgJICAJICAKCkxvYWQgUGFnZXMKICAgSFRNTAlFbGFwc2VkIHRpbWUgKHMp
CU5vdGVzLgkgIAogSFRNTCBMb2FkIFNwZWVkICAgCSAgCSAgCSAgCiAgIEFsbCBpdGVyYXRpb25z
CSAgNDIuMTcJICAJICAKICAgRmlyc3QgaXRlcmF0aW9uIChkb3dubG9hZGVkKQkgIDQuOTUJICAJ
ICAKICAgU3Vic2VxdWVudCBpdGVyYXRpb24gKGNhY2hlZCkJICA1LjMyCSAgCSAgCiAgIFhNTAlF
bGFwc2VkIHRpbWUgKHMpCU5vdGVzLgkgIAogWE1MIC8gQ1NTIExvYWQgU3BlZWQgICAJICAJICAJ
ICAKICAgQWxsIGl0ZXJhdGlvbnMJICA1NS4yNQkgIAkgIAogICBGaXJzdCBpdGVyYXRpb24gKGRv
d25sb2FkZWQpCSAgOC43MwkgIAkgIAogICBTdWJzZXF1ZW50IGl0ZXJhdGlvbiAoY2FjaGVkKQkg
IDkuMwkgIAkgIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>