<?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>46624</bug_id>
          
          <creation_ts>2010-09-27 08:32:55 -0700</creation_ts>
          <short_desc>Web Inspector: implement pausing on event listeners (back-end part)</short_desc>
          <delta_ts>2014-08-20 12:12:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>285474</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-09-27 08:32:55 -0700</bug_when>
    <thetext>Web Inspector: implement pausing on event listeners (back-end part)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285493</commentid>
    <comment_count>1</comment_count>
      <attachid>68917</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-09-27 09:18:45 -0700</bug_when>
    <thetext>Created attachment 68917
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285509</commentid>
    <comment_count>2</comment_count>
      <attachid>68917</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-09-27 09:42:08 -0700</bug_when>
    <thetext>Comment on attachment 68917
Proposed patch.

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

&gt; WebCore/bindings/js/ScriptDebugServer.cpp:@
&gt;  void ScriptDebugServer::pause()

Lets be verbose here and call it &quot;setPauseOnNextStatement&quot;.

&gt; WebCore/dom/Node.cpp:2619
&gt; +    InspectorController::instrumentWillDispatchEvent(document(), *event);

Could you move timeline agent call below into instrumentWillDispatch?

&gt; WebCore/dom/Node.cpp:2712
&gt; +    InspectorController::instrumentDidDispatchEvent(document());

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285512</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-09-27 09:50:35 -0700</bug_when>
    <thetext>Just &quot;pauseOnNextStatement&quot; would be better I think. A &quot;set&quot; prefix implies an argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285523</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-09-27 10:06:32 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Just &quot;pauseOnNextStatement&quot; would be better I think. A &quot;set&quot; prefix implies an argument.

I meant to say &quot;combine pause and cancelPause into one setter, with argument&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287552</commentid>
    <comment_count>5</comment_count>
      <attachid>69336</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-09-30 08:16:32 -0700</bug_when>
    <thetext>Created attachment 69336
Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287576</commentid>
    <comment_count>6</comment_count>
      <attachid>69336</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-09-30 09:10:42 -0700</bug_when>
    <thetext>Comment on attachment 69336
Comments addressed.

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

&gt; WebCore/inspector/InspectorDebuggerAgent.cpp:-319
&gt; -    if (!s_debuggerAgentOnBreakpoint)

Why are you deleting this code?

&gt; WebCore/inspector/InspectorDebuggerAgent.h:70
&gt; +    void schedulePauseOnNextStatement(DebuggerEventType type, PassRefPtr&lt;InspectorValue&gt; data);

setPauseOnNextStatement?

&gt; WebCore/inspector/InspectorInstrumentation.cpp:159
&gt; +    timelineAgentsStack().append(std::make_pair(s_callDepth, 0));

Looks like too much code... Will we need to do it for every will/did pair?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287595</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-09-30 09:40:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 69336 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69336&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorDebuggerAgent.cpp:-319
&gt; &gt; -    if (!s_debuggerAgentOnBreakpoint)
&gt; 
&gt; Why are you deleting this code?
This code was used to prevent accessing InspectorDebuggerAgent fields if the object was deleted. I&apos;ve moved the code to didContinue method which is called only if InspectorDebuggerAgent was not deleted.

&gt; 
&gt; &gt; WebCore/inspector/InspectorDebuggerAgent.h:70
&gt; &gt; +    void schedulePauseOnNextStatement(DebuggerEventType type, PassRefPtr&lt;InspectorValue&gt; data);
&gt; 
&gt; setPauseOnNextStatement?
schedulePauseOnNextStatement and cancelPauseOnNextStatement have different signatures, so we can&apos;t make a single method. And schedulePauseOnNextStatement alone doesn&apos;t look like a setter.

&gt; 
&gt; &gt; WebCore/inspector/InspectorInstrumentation.cpp:159
&gt; &gt; +    timelineAgentsStack().append(std::make_pair(s_callDepth, 0));
&gt; 
&gt; Looks like too much code... Will we need to do it for every will/did pair?
Yep, we don&apos;t actually need this code here. I&apos;ll move it below the frontend and timelineAgent checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287619</commentid>
    <comment_count>8</comment_count>
      <attachid>69343</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-09-30 10:14:38 -0700</bug_when>
    <thetext>Created attachment 69343
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287639</commentid>
    <comment_count>9</comment_count>
      <attachid>69343</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-09-30 10:36:59 -0700</bug_when>
    <thetext>Comment on attachment 69343
Patch.

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

&gt; WebCore/inspector/InspectorController.cpp:2140
&gt; +void InspectorController::instrumentWillDispatchEvent(const Event&amp; event)
&gt; +{
&gt; +#if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; +    if (m_debuggerAgent) {
&gt; +        if (!m_eventNamesMap.contains(event.type()))
&gt; +            return;
&gt; +        RefPtr&lt;InspectorObject&gt; eventData = InspectorObject::create();
&gt; +        eventData-&gt;setString(&quot;type&quot;, &quot;EventListener&quot;);
&gt; +        eventData-&gt;setString(&quot;eventName&quot;, event.type());
&gt; +        m_debuggerAgent-&gt;schedulePauseOnNextStatement(NativeBreakpointDebuggerEventType, eventData);
&gt; +    }
&gt; +#endif
&gt; +}

It should be a method of debugger agent and you should call it directly from InspectorInstrumentation.

&gt; WebCore/inspector/InspectorController.cpp:2148
&gt; +
&gt; +void InspectorController::instrumentDidDispatchEvent()
&gt; +{
&gt; +#if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; +    if (m_debuggerAgent)
&gt; +        m_debuggerAgent-&gt;cancelPauseOnNextStatement();
&gt; +#endif
&gt; +}

ditto

&gt; WebCore/inspector/InspectorController.h:398
&gt; +    HashMap&lt;unsigned int, String&gt; m_nativeBreakpoints;
&gt; +    HashMap&lt;unsigned int, String&gt; m_eventListenerBreakpoints;
&gt; +    HashMap&lt;String, unsigned int&gt; m_eventNamesMap;

Probably these maps also should be moved to debuggerAgent

&gt; WebCore/inspector/InspectorDebuggerAgent.cpp:161
&gt; +    schedulePauseOnNextStatement(JavaScriptPauseEventType, InspectorObject::create());

It&apos;d be better directly call ScriptDebugServer::shared().setPauseOnNextStatement(true);

&gt; WebCore/inspector/InspectorInstrumentation.cpp:162
&gt; +    inspectorController-&gt;instrumentWillDispatchEvent(event);

see comments about this method in InspectorController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287646</commentid>
    <comment_count>10</comment_count>
      <attachid>69343</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-09-30 10:43:21 -0700</bug_when>
    <thetext>Comment on attachment 69343
Patch.

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

&gt;&gt; WebCore/inspector/InspectorDebuggerAgent.cpp:161
&gt;&gt; +    schedulePauseOnNextStatement(JavaScriptPauseEventType, InspectorObject::create());
&gt; 
&gt; It&apos;d be better directly call ScriptDebugServer::shared().setPauseOnNextStatement(true);

Please just skip this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287653</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-30 10:51:32 -0700</bug_when>
    <thetext>Attachment 69343 did not build on chromium:
Build output: http://queues.webkit.org/results/4202028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288226</commentid>
    <comment_count>12</comment_count>
      <attachid>69343</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-01 06:41:19 -0700</bug_when>
    <thetext>Comment on attachment 69343
Patch.

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

&gt;&gt; WebCore/inspector/InspectorInstrumentation.cpp:162
&gt;&gt; +    inspectorController-&gt;instrumentWillDispatchEvent(event);
&gt; 
&gt; see comments about this method in InspectorController

Could you rename this method so that it would better reflect the nature of the call?

&gt; WebCore/inspector/InspectorInstrumentation.cpp:180
&gt; +    TimelineAgentsStack&amp; stack = timelineAgentsStack();

Extract method please. Also this is very, very complex. Could we return Page* from all *::will methods and call ::did with it?

&gt; WebCore/inspector/InspectorInstrumentation.cpp:184
&gt; +        stack.removeLast();

You should check depth before this call. Also, please add assertions here with depth expectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288316</commentid>
    <comment_count>13</comment_count>
      <attachid>69479</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-01 10:10:03 -0700</bug_when>
    <thetext>Created attachment 69479
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288356</commentid>
    <comment_count>14</comment_count>
      <attachid>69479</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-10-01 11:17:35 -0700</bug_when>
    <thetext>Comment on attachment 69479
Patch.

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

&gt; WebCore/inspector/InspectorController.cpp:1689
&gt; +        m_nativeBreakpoints.set(*breakpointId, &quot;XHR&quot;);

Please extract this into a constant.

&gt; WebCore/inspector/InspectorController.h:396
&gt; +    HashMap&lt;String, unsigned int&gt; m_eventNamesMap;

The map name should reflect what is stored in it. Now it&apos;s unclear what the values in this map are. Please rename.

&gt; WebCore/inspector/InspectorInstrumentation.cpp:78
&gt; +    while (!stack.isEmpty() &amp;&amp; stack.last() &gt;= s_minCallDepth)

I really don&apos;t like this mess with stack of callstack depths and s_minCallDepth. The alternative approach we discussed offline may be better.

&gt; WebCore/inspector/InspectorInstrumentation.cpp:231
&gt; +    if (!inspectorController-&gt;shouldBreakOnXMLHttpRequest(url))

The logic is getting spread over both InspectorInstrumentation and InspectorController without a clear border. I still think that we should reconsider the role of InspectorInstrumentation and make it a thin interface to IC used by the rest of WebCore.

&gt; WebCore/inspector/InspectorTimelineAgent.h:80
&gt; +    int id() { return m_id; }

This is not used, please remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288408</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-01 12:20:22 -0700</bug_when>
    <thetext>Attachment 69479 did not build on chromium:
Build output: http://queues.webkit.org/results/4142042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288677</commentid>
    <comment_count>16</comment_count>
      <attachid>68917</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-02 05:29:47 -0700</bug_when>
    <thetext>Comment on attachment 68917
Proposed patch.

Cleared Pavel Feldman&apos;s review+ from obsolete attachment 68917 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288893</commentid>
    <comment_count>17</comment_count>
      <attachid>69622</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-04 05:58:17 -0700</bug_when>
    <thetext>Created attachment 69622
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288897</commentid>
    <comment_count>18</comment_count>
      <attachid>69622</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-10-04 06:12:56 -0700</bug_when>
    <thetext>Comment on attachment 69622
Patch.

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

&gt; WebCore/inspector/InspectorTimelineAgent.h:80
&gt; +    int id() { return m_id; }

Not all comments were addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288908</commentid>
    <comment_count>19</comment_count>
      <attachid>69622</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-04 06:37:27 -0700</bug_when>
    <thetext>Comment on attachment 69622
Patch.

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

&gt; WebCore/inspector/InspectorInstrumentation.cpp:180
&gt; +    if (InspectorDebuggerAgent* debuggerAgent = inspectorController-&gt;m_debuggerAgent.get())
&gt; +        debuggerAgent-&gt;cancelPauseOnNextStatement();

what happens if we get two events, one inside the other?

&gt;&gt; WebCore/inspector/InspectorTimelineAgent.h:80
&gt;&gt; +    int id() { return m_id; }
&gt; 
&gt; Not all comments were addressed.

const?

&gt; WebCore/inspector/InspectorTimelineAgent.h:162
&gt; +    int m_id;

const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288921</commentid>
    <comment_count>20</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-04 07:12:29 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 69622 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69622&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorTimelineAgent.h:80
&gt; &gt; +    int id() { return m_id; }
&gt; 
&gt; Not all comments were addressed.

id is used as a cookie to prevent calling didXXX method of wrong timeline agent instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288922</commentid>
    <comment_count>21</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-04 07:13:56 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 69622 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69622&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorInstrumentation.cpp:180
&gt; &gt; +    if (InspectorDebuggerAgent* debuggerAgent = inspectorController-&gt;m_debuggerAgent.get())
&gt; &gt; +        debuggerAgent-&gt;cancelPauseOnNextStatement();
&gt; 
&gt; what happens if we get two events, one inside the other?

Could you please suggest an example?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288931</commentid>
    <comment_count>22</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-04 07:53:09 -0700</bug_when>
    <thetext>Committed r69014: &lt;http://trac.webkit.org/changeset/69014&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68917</attachid>
            <date>2010-09-27 09:18:45 -0700</date>
            <delta_ts>2010-10-02 05:29:47 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>12385</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzQxOTYzNC4uMGMxOTNmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wOS0yNyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgcGF1c2luZyBv
biBldmVudCBsaXN0ZW5lcnMgKGJhY2stZW5kIHBhcnQpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjYyNAorCisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OmNhbmNlbFBhdXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpjYW5jZWxQYXVzZSk6CisgICAgICAgICog
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaXNwYXRjaEdlbmVyaWNFdmVudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXROYXRpdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zdHJ1bWVudFdpbGxEaXNwYXRjaEV2
ZW50SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnN0cnVt
ZW50RGlkRGlzcGF0Y2hFdmVudEltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnN0
cnVtZW50V2lsbERpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQ29udHJvbGxlckZvclNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVj
dG9yQ29udHJvbGxlckZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6aW5zcGVjdG9yQ29udHJvbGxlckZvckRvY3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaDoKKwogMjAxMC0wOS0yNCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9k
aXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggMWRlY2Vm
YS4uYzAzNjM4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAK
QEAgLTIwNSw2ICsyMDUsMTEgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2UoKQogICAg
IG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwogfQogCit2b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpjYW5jZWxQYXVzZSgpCit7CisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNl
OworfQorCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpicmVha1Byb2dyYW0oKQogewogICAgIC8v
IEZJWE1FKFdLNDMzMzIpOiBpbXBsZW1lbnQgdGhpcy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
RGVidWdTZXJ2ZXIuaAppbmRleCA0MzJmZTlhLi41OWRiZDFkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC03OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7CiAKICAg
ICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCBjYW5jZWxQYXVzZSgpOwogICAgIHZvaWQgYnJlYWtQ
cm9ncmFtKCk7CiAgICAgdm9pZCBjb250aW51ZVByb2dyYW0oKTsKICAgICB2b2lkIHN0ZXBJbnRv
U3RhdGVtZW50KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVn
U2VydmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmlu
ZGV4IDNmMWEwYzUuLjg2NzhhODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCkBAIC0yMzEsNiArMjMxLDEyIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBh
dXNlKCkKICAgICAgICAgdjg6OkRlYnVnOjpEZWJ1Z0JyZWFrKCk7CiB9CiAKK3ZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OmNhbmNlbFBhdXNlKCkKK3sKKyAgICBpZiAoIW1fcGF1c2VkUGFnZSkKKyAg
ICAgICAgdjg6OkRlYnVnOjpDYW5jZWxEZWJ1Z0JyZWFrKCk7Cit9CisKIHZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmJyZWFrUHJvZ3JhbSgpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTCh2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4sIGNhbGxiYWNrVGVtcGxhdGUsICgpKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCBkMWZkNzFmLi5lNTg1
ODlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC03MSw2ICs3
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKIAogICAgIHZvaWQgcGF1
c2UoKTsKKyAgICB2b2lkIGNhbmNlbFBhdXNlKCk7CiAgICAgdm9pZCBicmVha1Byb2dyYW0oKTsK
ICAgICB2b2lkIGNvbnRpbnVlUHJvZ3JhbSgpOwogICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQo
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvV2ViQ29yZS9kb20vTm9kZS5j
cHAKaW5kZXggNTQ3ZmQwNC4uNGQwY2U0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZS5j
cHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JU
aW1lbGluZUFnZW50LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxh
YmVsc05vZGVMaXN0LmgiCkBAIC0yNjE1LDYgKzI2MTYsOCBAQCBib29sIE5vZGU6OmRpc3BhdGNo
R2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgICAgICAgICAgdGFy
Z2V0Rm9yV2luZG93RXZlbnRzID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPih0b3BMZXZlbENvbnRh
aW5lciktPmRvbVdpbmRvdygpOwogICAgIH0KIAorICAgIEluc3BlY3RvckNvbnRyb2xsZXI6Omlu
c3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudChkb2N1bWVudCgpLCAqZXZlbnQpOworCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKICAgICBQYWdlKiBpbnNwZWN0ZWRQYWdlID0gSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6aW5zdGFuY2VDb3VudCgpID8gZG9jdW1lbnQoKS0+cGFnZSgpIDogMDsKICAgICBp
ZiAoaW5zcGVjdGVkUGFnZSkgewpAQCAtMjcwNSw2ICsyNzA4LDkgQEAgZG9uZURpc3BhdGNoaW5n
OgogICAgIH0KIAogZG9uZVdpdGhEZWZhdWx0OgorCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6
aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnQoZG9jdW1lbnQoKSk7CisKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogICAgIGlmIChpbnNwZWN0ZWRQYWdlKQogICAgICAgICBpZiAoSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3BlY3RlZFBhZ2UtPmluc3BlY3RvclRpbWVs
aW5lQWdlbnQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5k
ZXggM2Y3YWE5OC4uOTAyOTgyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKQEAgLTc4OCwxMyArNzg4LDIyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogCiAgICAgICAgIG1fdGltZXMu
Y2xlYXIoKTsKICAgICAgICAgbV9jb3VudHMuY2xlYXIoKTsKKwogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogICAgICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQogICAgICAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5jbGVhckZvclBhZ2VOYXZpZ2F0aW9uKCk7CisKKyAgICAgICAgbV9u
YXRpdmVCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3Bv
aW50cy5jbGVhcigpOworICAgICAgICBtX2V2ZW50TmFtZXNNYXAuY2xlYXIoKTsKKyAgICAgICAg
bV9YSFJCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2xhc3RCcmVha3BvaW50SWQgPSAw
OwogI2VuZGlmCisKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykK
ICAgICAgICAgbV9wcm9maWxlckFnZW50LT5yZXNldFN0YXRlKCk7CiAjZW5kaWYKKwogICAgICAg
ICAvLyB1bmJpbmRBbGxSZXNvdXJjZXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgZGF0YWJhc2Ug
YW5kIERPTSBzdG9yYWdlCiAgICAgICAgIC8vIHJlc291cmNlcyBhcmUgY2xlYXJlZCBzbyB0aGF0
IGl0IGhhcyBhIGNoYW5jZSB0byB1bmJpbmQgdGhlbS4KICAgICAgICAgdW5iaW5kQWxsUmVzb3Vy
Y2VzKCk7CkBAIC0xNjc5LDIxICsxNjg4LDQzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0TmF0aXZlQnJlYWtwb2ludChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwCiAg
ICAgU3RyaW5nIHR5cGU7CiAgICAgaWYgKCFicmVha3BvaW50LT5nZXRTdHJpbmcoInR5cGUiLCAm
dHlwZSkpCiAgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb25k
aXRpb24gPSBicmVha3BvaW50LT5nZXRPYmplY3QoImNvbmRpdGlvbiIpOworICAgIGlmICghY29u
ZGl0aW9uKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKHR5cGUgPT0gIlhIUiIpIHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29uZGl0aW9uID0gYnJlYWtwb2ludC0+Z2V0T2Jq
ZWN0KCJjb25kaXRpb24iKTsKLSAgICAgICAgaWYgKCFjb25kaXRpb24pCi0gICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIFN0cmluZyB1cmw7CiAgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRT
dHJpbmcoInVybCIsICZ1cmwpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAqYnJlYWtw
b2ludElkID0gKyttX2xhc3RCcmVha3BvaW50SWQ7CisgICAgICAgIG1fbmF0aXZlQnJlYWtwb2lu
dHMuc2V0KCpicmVha3BvaW50SWQsICJYSFIiKTsKICAgICAgICAgbV9YSFJCcmVha3BvaW50cy5z
ZXQoKmJyZWFrcG9pbnRJZCwgdXJsKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIkV2ZW50TGlz
dGVuZXIiKSB7CisgICAgICAgIFN0cmluZyBldmVudE5hbWU7CisgICAgICAgIGlmICghY29uZGl0
aW9uLT5nZXRTdHJpbmcoImV2ZW50TmFtZSIsICZldmVudE5hbWUpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAqYnJlYWtwb2ludElkID0gKyttX2xhc3RCcmVha3BvaW50SWQ7CisgICAg
ICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50SWQsICJFdmVudExpc3RlbmVy
Iik7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLnNldCgqYnJlYWtwb2ludElk
LCBldmVudE5hbWUpOworICAgICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQgaW50Pjo6aXRl
cmF0b3IgaXQgPSBtX2V2ZW50TmFtZXNNYXAuZmluZChldmVudE5hbWUpOworICAgICAgICBpZiAo
aXQgPT0gbV9ldmVudE5hbWVzTWFwLmVuZCgpKQorICAgICAgICAgICAgbV9ldmVudE5hbWVzTWFw
LnNldChldmVudE5hbWUsIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdC0+c2Vjb25k
ICs9IDE7CiAgICAgfQogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZU5hdGl2
ZUJyZWFrcG9pbnQodW5zaWduZWQgaW50IGJyZWFrcG9pbnRJZCkKIHsKLSAgICBtX1hIUkJyZWFr
cG9pbnRzLnJlbW92ZShicmVha3BvaW50SWQpOworICAgIFN0cmluZyB0eXBlID0gbV9uYXRpdmVC
cmVha3BvaW50cy50YWtlKGJyZWFrcG9pbnRJZCk7CisgICAgaWYgKHR5cGUgPT0gIlhIUiIpCisg
ICAgICAgIG1fWEhSQnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnRJZCk7CisgICAgZWxzZSBp
ZiAodHlwZSA9PSAiRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgICAgU3RyaW5nIGV2ZW50TmFtZSA9
IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLnRha2UoYnJlYWtwb2ludElkKTsKKyAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ldmVudE5hbWVz
TWFwLmZpbmQoZXZlbnROYW1lKTsKKyAgICAgICAgaXQtPnNlY29uZCAtPSAxOworICAgICAgICBp
ZiAoIWl0LT5zZWNvbmQpCisgICAgICAgICAgICBtX2V2ZW50TmFtZXNNYXAucmVtb3ZlKGl0KTsK
KyAgICB9CiB9CiAKICNlbmRpZgpAQCAtMjE2MSw2ICsyMTkyLDI1IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkSW1wbChDaGFyYWN0ZXJEYXRhKiBjaGFy
YWN0ZXJEYXRhCiAgICAgICAgIG1fZG9tQWdlbnQtPmNoYXJhY3RlckRhdGFNb2RpZmllZChjaGFy
YWN0ZXJEYXRhKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnN0cnVtZW50V2ls
bERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0IEV2ZW50JiBldmVudCkKK3sKKyNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKKyAgICBpZiAobV9kZWJ1Z2dlckFnZW50KSB7CisgICAgICAgIGlm
ICghbV9ldmVudE5hbWVzTWFwLmNvbnRhaW5zKGV2ZW50LnR5cGUoKSkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cGF1c2UoKTsKKyAgICB9CisjZW5kaWYK
K30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnN0cnVtZW50RGlkRGlzcGF0Y2hFdmVu
dEltcGwoKQoreworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmIChtX2Rl
YnVnZ2VyQWdlbnQpCisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Y2FuY2VsUGF1c2UoKTsKKyNl
bmRpZgorfQorCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3RydW1lbnRXaWxsU2VuZFhN
TEh0dHBSZXF1ZXN0SW1wbChjb25zdCBLVVJMJiB1cmwpCiB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXgg
OWU2M2YwMS4uYzIxZjA3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aApAQCAtMjA1LDYgKzIwNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaWRNb2RpZnlE
T01BdHRyKEVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWQo
Q2hhcmFjdGVyRGF0YSopOwogCisgICAgc3RhdGljIHZvaWQgaW5zdHJ1bWVudFdpbGxEaXNwYXRj
aEV2ZW50KERvY3VtZW50KiwgY29uc3QgRXZlbnQmKTsKKyAgICBzdGF0aWMgdm9pZCBpbnN0cnVt
ZW50RGlkRGlzcGF0Y2hFdmVudChEb2N1bWVudCopOwogICAgIHN0YXRpYyB2b2lkIGluc3RydW1l
bnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBL
VVJMJik7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKQEAgLTM1MSw2ICszNTMsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgZGlkTW9kaWZ5RE9NQXR0ckltcGwoRWxlbWVudCopOwogICAgIHZvaWQgY2hh
cmFjdGVyRGF0YU1vZGlmaWVkSW1wbChDaGFyYWN0ZXJEYXRhKik7CiAKKyAgICB2b2lkIGluc3Ry
dW1lbnRXaWxsRGlzcGF0Y2hFdmVudEltcGwoY29uc3QgRXZlbnQmKTsKKyAgICB2b2lkIGluc3Ry
dW1lbnREaWREaXNwYXRjaEV2ZW50SW1wbCgpOwogICAgIHZvaWQgaW5zdHJ1bWVudFdpbGxTZW5k
WE1MSHR0cFJlcXVlc3RJbXBsKGNvbnN0IEtVUkwmKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQpAQCAtNDE2LDYgKzQyMCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2F0dGFj
aERlYnVnZ2VyV2hlblNob3duOwogICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBt
X2RlYnVnZ2VyQWdlbnQ7CiAKKyAgICBIYXNoTWFwPHVuc2lnbmVkIGludCwgU3RyaW5nPiBtX25h
dGl2ZUJyZWFrcG9pbnRzOworICAgIEhhc2hNYXA8dW5zaWduZWQgaW50LCBTdHJpbmc+IG1fZXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnRzOworICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZCBpbnQ+
IG1fZXZlbnROYW1lc01hcDsKICAgICBIYXNoTWFwPHVuc2lnbmVkIGludCwgU3RyaW5nPiBtX1hI
UkJyZWFrcG9pbnRzOwogICAgIHVuc2lnbmVkIGludCBtX2xhc3RCcmVha3BvaW50SWQ7CiAKQEAg
LTQ3OCw2ICs0ODUsMjIgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2hhcmFj
dGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRhdGEqIGNoYXJhY3RlckQKICNlbmRpZgogfQogCitp
bmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnN0cnVtZW50V2lsbERpc3BhdGNoRXZl
bnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFdmVudCYgZXZlbnQpCit7CisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAg
IGluc3BlY3RvckNvbnRyb2xsZXItPmluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudEltcGwoZXZl
bnQpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3Ry
dW1lbnREaWREaXNwYXRjaEV2ZW50KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICAgICAg
aW5zcGVjdG9yQ29udHJvbGxlci0+aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnRJbXBsKCk7Cisj
ZW5kaWYKK30KKwogaW5saW5lIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zdHJ1bWVudFdp
bGxTZW5kWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCYgdXJsKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC00ODgsMjEgKzUxMSwy
MSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnN0cnVtZW50V2lsbFNlbmRY
TUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpbwogCiBpbmxpbmUgSW5zcGVjdG9yQ29udHJvbGxl
ciogSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQ29udHJvbGxlckZvclNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAo
IXNfaW5zcGVjdG9yQ29udHJvbGxlckNvdW50IHx8ICFjb250ZXh0IHx8ICFjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpCisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc0RvY3VtZW50KCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBpbnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1l
bnQoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSk7CiB9CiAKIGlubGluZSBJbnNwZWN0
b3JDb250cm9sbGVyKiBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JDb250cm9sbGVyRm9y
Tm9kZShOb2RlKiBub2RlKQogewotICAgIGlmICghc19pbnNwZWN0b3JDb250cm9sbGVyQ291bnQp
Ci0gICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBpbnNwZWN0b3JDb250cm9sbGVyRm9yRG9j
dW1lbnQobm9kZS0+ZG9jdW1lbnQoKSk7CiB9CiAKIGlubGluZSBJbnNwZWN0b3JDb250cm9sbGVy
KiBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KQogewogICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgaWYgKCFzX2lu
c3BlY3RvckNvbnRyb2xsZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgUGFnZSogcGFn
ZSA9IGRvY3VtZW50LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gMDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggOTI3
NTk2MS4uODRiNzI3MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5jcHAKQEAgLTE1Miw2ICsxNTIsMTEgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpwYXVzZSgpCiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnBhdXNlKCk7CiB9CiAK
K3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2UoKQoreworICAgIFNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5jYW5jZWxQYXVzZSgpOworfQorCiB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZSgpCiB7CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJl
ZCgpLmNvbnRpbnVlUHJvZ3JhbSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oCmluZGV4IGY1YmFhYmMuLjg0MmUyNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZ2V0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0
U291cmNlKTsKIAogICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIGNhbmNlbFBhdXNlKCk7CiAg
ICAgdm9pZCBicmVha1Byb2dyYW0oRGVidWdnZXJFdmVudFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gZGF0YSk7CiAgICAgdm9pZCByZXN1bWUoKTsKICAgICB2b2lkIHN0ZXBP
dmVyU3RhdGVtZW50KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69336</attachid>
            <date>2010-09-30 08:16:32 -0700</date>
            <delta_ts>2010-09-30 10:14:38 -0700</delta_ts>
            <desc>Comments addressed.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>23738</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjMzMTgzMi4uMzNmYTVlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0wOS0zMCAgcG9kaXZpbG92QGNo
cm9taXVtLm9yZyAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW1wbGVtZW50IHBh
dXNpbmcgb24gZXZlbnQgbGlzdGVuZXJzIChiYWNrLWVuZCBwYXJ0KQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY2MjQKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpzZXRQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1
Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1
c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
ZGlzcGF0Y2hHZW5lcmljRXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENv
bW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0TmF0
aXZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZW1vdmVOYXRpdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6Omluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjppbnN0cnVtZW50RGlkRGlzcGF0Y2hFdmVudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlT25O
ZXh0U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENv
bnRpbnVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFr
UHJvZ3JhbSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmV2ZW50SGFzTGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnRpbWVs
aW5lQWdlbnRzU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjppbnN0cnVtZW50V2lsbERpc3BhdGNoRXZlbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnRJbXBs
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRXaWxsRGlz
cGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
Omluc3RydW1lbnREaWREaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpJbnNwZWN0b3JUaW1lbGluZUFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6aWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lk
ZWJhclBhbmUuanM6CisKIDIwMTAtMDktMzAgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCAxZGVjZWZhLi5hNDQwYjgxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtMjAwLDkgKzIw
MCw5IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUo
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZSkKICAgICBtX3BhdXNlT25FeGNlcHRpb25zU3Rh
dGUgPSBwYXVzZTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2UoKQordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9vbCBwYXVzZSkKIHsK
LSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICBtX3BhdXNlT25OZXh0U3Rh
dGVtZW50ID0gcGF1c2U7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmJyZWFrUHJvZ3Jh
bSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggNDMyZmU5YS4u
MzE3MmM2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtNzgs
NyArNzgsNyBAQCBwdWJsaWM6CiAgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9
CiAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUpOwogCi0gICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgc2V0UGF1c2VPbk5leHRTdGF0ZW1l
bnQoYm9vbCBwYXVzZSk7CiAgICAgdm9pZCBicmVha1Byb2dyYW0oKTsKICAgICB2b2lkIGNvbnRp
bnVlUHJvZ3JhbSgpOwogICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggM2YxYTBjNS4uN2E4ZGJmNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTIyNSwxMCArMjI1
LDE0IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUo
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uCiAgICAgc2V0UGF1c2VPbkV4Y2VwdGlvbnNG
dW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLCAxLCBhcmd2KTsKIH0KIAotdm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2UoKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9vbCBwYXVzZSkKIHsKLSAgICBpZiAoIW1fcGF1c2VkUGFn
ZSkKKyAgICBpZiAobV9wYXVzZWRQYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHBhdXNl
KQogICAgICAgICB2ODo6RGVidWc6OkRlYnVnQnJlYWsoKTsKKyAgICBlbHNlCisgICAgICAgIHY4
OjpEZWJ1Zzo6Q2FuY2VsRGVidWdCcmVhaygpOwogfQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpicmVha1Byb2dyYW0oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCmlu
ZGV4IGQxZmQ3MWYuLjVjNWQ2YzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmgKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpOwogICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUpOwog
Ci0gICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9v
bCBwYXVzZSk7CiAgICAgdm9pZCBicmVha1Byb2dyYW0oKTsKICAgICB2b2lkIGNvbnRpbnVlUHJv
Z3JhbSgpOwogICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL05vZGUuY3BwIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNTMzOTVhOC4uMjRj
ZWIyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
ICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTGFiZWxzTm9kZUxpc3QuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC0yNTc3LDIzICsyNTc3LDYgQEAgYm9vbCBOb2RlOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIHJldHVybiBkaXNw
YXRjaEdlbmVyaWNFdmVudChldmVudC5yZWxlYXNlKCkpOwogfQogCi1zdGF0aWMgYm9vbCBldmVu
dEhhc0xpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRE9NV2luZG93KiB3
aW5kb3csIE5vZGUqIG5vZGUsIFZlY3RvcjxSZWZQdHI8Q29udGFpbmVyTm9kZT4gPiYgYW5jZXN0
b3JzKQotewotICAgIGlmICh3aW5kb3cgJiYgd2luZG93LT5oYXNFdmVudExpc3RlbmVycyhldmVu
dFR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChub2RlLT5oYXNFdmVudExp
c3RlbmVycyhldmVudFR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYW5jZXN0b3JzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIENvbnRhaW5l
ck5vZGUqIGFuY2VzdG9yID0gYW5jZXN0b3JzW2ldLmdldCgpOwotICAgICAgICBpZiAoYW5jZXN0
b3ItPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgIHJldHVybiBmYWxzZTsgICAgCi19Ci0KIGJvb2wgTm9kZTo6ZGlzcGF0
Y2hHZW5lcmljRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiB7CiAgICAgUmVmUHRy
PEV2ZW50PiBldmVudChwcnBFdmVudCk7CkBAIC0yNjE5LDE1ICsyNjAyLDcgQEAgYm9vbCBOb2Rl
OjpkaXNwYXRjaEdlbmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICAg
ICAgICAgIHRhcmdldEZvcldpbmRvd0V2ZW50cyA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4odG9w
TGV2ZWxDb250YWluZXIpLT5kb21XaW5kb3coKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2UgPSBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpp
bnN0YW5jZUNvdW50KCkgPyBkb2N1bWVudCgpLT5wYWdlKCkgOiAwOwotICAgIGlmIChpbnNwZWN0
ZWRQYWdlKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFn
ZW50ID0gZXZlbnRIYXNMaXN0ZW5lcnMoZXZlbnQtPnR5cGUoKSwgdGFyZ2V0Rm9yV2luZG93RXZl
bnRzLCB0aGlzLCBhbmNlc3RvcnMpID8gaW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yVGltZWxpbmVB
Z2VudCgpIDogMCkKLSAgICAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxEaXNwYXRjaEV2ZW50
KCpldmVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluc3BlY3RlZFBhZ2UgPSAwOwot
ICAgIH0KLSNlbmRpZgorICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudFdp
bGxEaXNwYXRjaEV2ZW50KGRvY3VtZW50KCksICpldmVudCwgdGFyZ2V0Rm9yV2luZG93RXZlbnRz
LCB0aGlzLCBhbmNlc3RvcnMpOwogCiAgICAgLy8gR2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFu
Y2UgdG8gZG8gc29tZSB3b3JrIGJlZm9yZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2su
CiAgICAgdm9pZCogZGF0YSA9IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsK
QEAgLTI3MDksMTEgKzI2ODQsOCBAQCBkb25lRGlzcGF0Y2hpbmc6CiAgICAgfQogCiBkb25lV2l0
aERlZmF1bHQ6Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoaW5zcGVjdGVkUGFnZSkK
LSAgICAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnNw
ZWN0ZWRQYWdlLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCi0gICAgICAgICAgICB0aW1lbGlu
ZUFnZW50LT5kaWREaXNwYXRjaEV2ZW50KCk7Ci0jZW5kaWYKKworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnQoZG9jdW1lbnQoKSk7CiAKICAg
ICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDVjYzc3NDQuLmRiODBkNTkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC03NzgsMTUgKzc3OCwyMiBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIq
IGxvYWRlcikKIAogICAgICAgICBtX3RpbWVzLmNsZWFyKCk7CiAgICAgICAgIG1fY291bnRzLmNs
ZWFyKCk7CisKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAgICAgaWYgKG1f
ZGVidWdnZXJBZ2VudCkKICAgICAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQYWdl
TmF2aWdhdGlvbigpOwogCisgICAgICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuY2xlYXIoKTsKKyAg
ICAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuY2xlYXIoKTsKKyAgICAgICAgbV9ldmVu
dE5hbWVzTWFwLmNsZWFyKCk7CiAgICAgICAgIG1fWEhSQnJlYWtwb2ludHMuY2xlYXIoKTsKKyAg
ICAgICAgbV9sYXN0QnJlYWtwb2ludElkID0gMDsKICNlbmRpZgorCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCiAgICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+cmVz
ZXRTdGF0ZSgpOwogI2VuZGlmCisKICAgICAgICAgLy8gdW5iaW5kQWxsUmVzb3VyY2VzIHNob3Vs
ZCBiZSBjYWxsZWQgYmVmb3JlIGRhdGFiYXNlIGFuZCBET00gc3RvcmFnZQogICAgICAgICAvLyBy
ZXNvdXJjZXMgYXJlIGNsZWFyZWQgc28gdGhhdCBpdCBoYXMgYSBjaGFuY2UgdG8gdW5iaW5kIHRo
ZW0uCiAgICAgICAgIHVuYmluZEFsbFJlc291cmNlcygpOwpAQCAtMTY3MSwyMSArMTY3OCw0MyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldE5hdGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcAogICAgIFN0cmluZyB0eXBlOwogICAgIGlmICghYnJl
YWtwb2ludC0+Z2V0U3RyaW5nKCJ0eXBlIiwgJnR5cGUpKQogICAgICAgICByZXR1cm47CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29uZGl0aW9uID0gYnJlYWtwb2ludC0+Z2V0T2JqZWN0
KCJjb25kaXRpb24iKTsKKyAgICBpZiAoIWNvbmRpdGlvbikKKyAgICAgICAgcmV0dXJuOwogICAg
IGlmICh0eXBlID09ICJYSFIiKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNv
bmRpdGlvbiA9IGJyZWFrcG9pbnQtPmdldE9iamVjdCgiY29uZGl0aW9uIik7Ci0gICAgICAgIGlm
ICghY29uZGl0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBTdHJpbmcgdXJsOwog
ICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJ1cmwiLCAmdXJsKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgKmJyZWFrcG9pbnRJZCA9ICsrbV9sYXN0QnJlYWtwb2ludElk
OworICAgICAgICBtX25hdGl2ZUJyZWFrcG9pbnRzLnNldCgqYnJlYWtwb2ludElkLCAiWEhSIik7
CiAgICAgICAgIG1fWEhSQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50SWQsIHVybCk7CisgICAg
fSBlbHNlIGlmICh0eXBlID09ICJFdmVudExpc3RlbmVyIikgeworICAgICAgICBTdHJpbmcgZXZl
bnROYW1lOworICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJldmVudE5hbWUiLCAm
ZXZlbnROYW1lKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgKmJyZWFrcG9pbnRJZCA9
ICsrbV9sYXN0QnJlYWtwb2ludElkOworICAgICAgICBtX25hdGl2ZUJyZWFrcG9pbnRzLnNldCgq
YnJlYWtwb2ludElkLCAiRXZlbnRMaXN0ZW5lciIpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJC
cmVha3BvaW50cy5zZXQoKmJyZWFrcG9pbnRJZCwgZXZlbnROYW1lKTsKKyAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIHVuc2lnbmVkIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ldmVudE5hbWVzTWFwLmZp
bmQoZXZlbnROYW1lKTsKKyAgICAgICAgaWYgKGl0ID09IG1fZXZlbnROYW1lc01hcC5lbmQoKSkK
KyAgICAgICAgICAgIG1fZXZlbnROYW1lc01hcC5zZXQoZXZlbnROYW1lLCAxKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaXQtPnNlY29uZCArPSAxOwogICAgIH0KIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZW1vdmVOYXRpdmVCcmVha3BvaW50KHVuc2lnbmVkIGludCBicmVh
a3BvaW50SWQpCiB7Ci0gICAgbV9YSFJCcmVha3BvaW50cy5yZW1vdmUoYnJlYWtwb2ludElkKTsK
KyAgICBTdHJpbmcgdHlwZSA9IG1fbmF0aXZlQnJlYWtwb2ludHMudGFrZShicmVha3BvaW50SWQp
OworICAgIGlmICh0eXBlID09ICJYSFIiKQorICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnJlbW92
ZShicmVha3BvaW50SWQpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gIkV2ZW50TGlzdGVuZXIiKSB7
CisgICAgICAgIFN0cmluZyBldmVudE5hbWUgPSBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy50
YWtlKGJyZWFrcG9pbnRJZCk7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZCBpbnQ+
OjppdGVyYXRvciBpdCA9IG1fZXZlbnROYW1lc01hcC5maW5kKGV2ZW50TmFtZSk7CisgICAgICAg
IGl0LT5zZWNvbmQgLT0gMTsKKyAgICAgICAgaWYgKCFpdC0+c2Vjb25kKQorICAgICAgICAgICAg
bV9ldmVudE5hbWVzTWFwLnJlbW92ZShpdCk7CisgICAgfQogfQogCiAjZW5kaWYKQEAgLTIwOTYs
NiArMjEyNSwyOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbG9hZFBhZ2UoKQogICAg
IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVk
dWxlUmVmcmVzaCh0cnVlKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnN0cnVt
ZW50V2lsbERpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQmIGV2ZW50KQoreworI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpIHsKKyAgICAgICAg
aWYgKCFtX2V2ZW50TmFtZXNNYXAuY29udGFpbnMoZXZlbnQudHlwZSgpKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoInR5
cGUiLCAiRXZlbnRMaXN0ZW5lciIpOworICAgICAgICBldmVudERhdGEtPnNldFN0cmluZygiZXZl
bnROYW1lIiwgZXZlbnQudHlwZSgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zY2hlZHVs
ZVBhdXNlT25OZXh0U3RhdGVtZW50KE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwg
ZXZlbnREYXRhKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjppbnN0cnVtZW50RGlkRGlzcGF0Y2hFdmVudCgpCit7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCisgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKKyAgICAgICAgbV9kZWJ1Z2dlckFn
ZW50LT5jYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOworI2VuZGlmCit9CisKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6aW5zdHJ1bWVudFdpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3Qg
S1VSTCYgdXJsKQogewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDU2MTZlMDIuLjk0OWYzMmYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI2MSw3ICsyNjEsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldE5hdGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGludCogYnJlYWtwb2ludElkKTsKICAgICB2
b2lkIHJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQodW5zaWduZWQgaW50IGJyZWFrcG9pbnRJZCk7Ci0K
ICNlbmRpZgogCiAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgdGVzdENh
bGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpOwpAQCAtMzI5LDYgKzMyOCw4IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYganNvblJlc3VsdCk7CiAKKyAgICB2b2lkIGluc3RydW1lbnRXaWxsRGlzcGF0
Y2hFdmVudChjb25zdCBFdmVudCYpOworICAgIHZvaWQgaW5zdHJ1bWVudERpZERpc3BhdGNoRXZl
bnQoKTsKICAgICB2b2lkIGluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IEtV
UkwmKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMzkyLDYgKzM5Myw5
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwogICAgIE93
blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBtX2RlYnVnZ2VyQWdlbnQ7CiAKKyAgICBIYXNo
TWFwPHVuc2lnbmVkIGludCwgU3RyaW5nPiBtX25hdGl2ZUJyZWFrcG9pbnRzOworICAgIEhhc2hN
YXA8dW5zaWduZWQgaW50LCBTdHJpbmc+IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzOworICAg
IEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZCBpbnQ+IG1fZXZlbnROYW1lc01hcDsKICAgICBIYXNo
TWFwPHVuc2lnbmVkIGludCwgU3RyaW5nPiBtX1hIUkJyZWFrcG9pbnRzOwogICAgIHVuc2lnbmVk
IGludCBtX2xhc3RCcmVha3BvaW50SWQ7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAKaW5kZXggNDk2NGMwOS4uOTg2ZTljMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTU3LDggKzU3LDYgQEAgUGFz
c093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
cmVhdGUoSW5zcGVjdG9yQ29udHIKICAgICByZXR1cm4gYWdlbnQucmVsZWFzZSgpOwogfQogCi1J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzX2RlYnVnZ2Vy
QWdlbnRPbkJyZWFrcG9pbnQgPSAwOwotCiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIs
IEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxl
cihpbnNwZWN0b3JDb250cm9sbGVyKQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKQEAgLTcx
LDkgKzY5LDYgQEAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdl
bnQoKQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVMaXN0ZW5lcih0
aGlzLCBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKSk7CiAgICAgbV9wYXVz
ZWRTY3JpcHRTdGF0ZSA9IDA7Ci0KLSAgICBpZiAodGhpcyA9PSBzX2RlYnVnZ2VyQWdlbnRPbkJy
ZWFrcG9pbnQpCi0gICAgICAgIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7CiB9CiAK
IGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aXNEZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKQpA
QCAtMTQ3LDkgKzE0MiwyMyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlw
dFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcgogICAgICpzY3JpcHRT
b3VyY2UgPSBtX3NjcmlwdElEVG9Db250ZW50LmdldChzb3VyY2VJRCk7CiB9CiAKK3ZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChEZWJ1Z2dl
ckV2ZW50VHlwZSB0eXBlLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkYXRhKQoreworICAg
IG1fYnJlYWtQcm9ncmFtRGV0YWlscyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9icmVha1Byb2dyYW1EZXRhaWxzLT5zZXROdW1iZXIoImV2ZW50VHlwZSIsIHR5cGUpOworICAg
IG1fYnJlYWtQcm9ncmFtRGV0YWlscy0+c2V0VmFsdWUoImV2ZW50RGF0YSIsIGRhdGEpOworICAg
IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRQYXVzZU9uTmV4dFN0YXRlbWVudCh0cnVl
KTsKK30KKwordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0
YXRlbWVudCgpCit7CisgICAgbV9icmVha1Byb2dyYW1EZXRhaWxzID0gMDsKKyAgICBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpOworfQor
CiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKCkKIHsKLSAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2UoKTsKKyAgICBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVt
ZW50KEphdmFTY3JpcHRQYXVzZUV2ZW50VHlwZSwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdW1lKCkKQEAgLTMwNSw2ICsz
MTQsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSkKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUo
KQogewogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSAwOworICAgIG1fYnJlYWtQcm9ncmFtRGV0
YWlscyA9IDA7CiAgICAgbV9mcm9udGVuZC0+cmVzdW1lZFNjcmlwdCgpOwogfQogCkBAIC0zMTMs
MTQgKzMyMyw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKERl
YnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zCiAgICAgbV9icmVha1Byb2dyYW1E
ZXRhaWxzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2JyZWFrUHJvZ3JhbURl
dGFpbHMtPnNldE51bWJlcigiZXZlbnRUeXBlIiwgdHlwZSk7CiAgICAgbV9icmVha1Byb2dyYW1E
ZXRhaWxzLT5zZXRWYWx1ZSgiZXZlbnREYXRhIiwgZGF0YSk7Ci0gICAgc19kZWJ1Z2dlckFnZW50
T25CcmVha3BvaW50ID0gdGhpczsKLQogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5i
cmVha1Byb2dyYW0oKTsKLSAgICBpZiAoIXNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0gMDsKLSAg
ICBtX2JyZWFrUHJvZ3JhbURldGFpbHMgPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggOGE1Mzc5
ZC4uNTIzMGI4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0
b3JWYWx1ZTsKIAogZW51bSBEZWJ1Z2dlckV2ZW50VHlwZSB7CisgICAgSmF2YVNjcmlwdFBhdXNl
RXZlbnRUeXBlLAogICAgIERPTUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwKICAgICBOYXRp
dmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUKIH07CkBAIC02Niw4ICs2NywxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBlZGl0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNv
bnN0IFN0cmluZyYgbmV3Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIG5ld0NhbGxGcmFtZXMpOwogICAgIHZvaWQgZ2V0U2NyaXB0
U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKIAot
ICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQo
RGVidWdnZXJFdmVudFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZGF0YSk7
CisgICAgdm9pZCBjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOwogICAgIHZvaWQgYnJlYWtQ
cm9ncmFtKERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGRhdGEpOworICAgIHZvaWQgcGF1c2UoKTsKICAgICB2b2lkIHJlc3VtZSgpOwogICAgIHZvaWQg
c3RlcE92ZXJTdGF0ZW1lbnQoKTsKICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBmYmJj
Y2U0Li4xYzQ1Yzk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKQEAgLTMzLDEzICszMyw0MyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
IAorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRp
bWVsaW5lQWdlbnQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAordHlwZWRlZiBWZWN0b3I8cGFpcjxpbnQsIGludD4gPiBUaW1lbGluZUFnZW50c1N0
YWNrOworCiBpbnQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzX2Zyb250ZW5kQ291bnRlciA9
IDA7CitpbnQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzX2NhbGxEZXB0aCA9IDA7CisKK3N0
YXRpYyBib29sIGV2ZW50SGFzTGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxDb250
YWluZXJOb2RlPiA+JiBhbmNlc3RvcnMpCit7CisgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPmhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaV0uZ2V0KCk7
CisgICAgICAgIGlmIChhbmNlc3Rvci0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIFRpbWVsaW5lQWdlbnRzU3RhY2smIHRpbWVsaW5lQWdlbnRzU3RhY2soKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoVGltZWxpbmVBZ2VudHNTdGFjaywgc3RhY2ssICgpKTsKKyAg
ICByZXR1cm4gc3RhY2s7Cit9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
SW5zZXJ0RE9NTm9kZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciwgTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KQogewpAQCAtMTI0LDYgKzE1NCw1MiBAQCB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkSW1wbChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbgogICAgICAgICBkb21BZ2VudC0+Y2hhcmFjdGVyRGF0YU1vZGlm
aWVkKGNoYXJhY3RlckRhdGEpOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
aW5zdHJ1bWVudFdpbGxEaXNwYXRjaEV2ZW50SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyLCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBO
b2RlKiBub2RlLCBjb25zdCBWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+ID4mIGFuY2VzdG9y
cykKK3sKKyAgICB0aW1lbGluZUFnZW50c1N0YWNrKCkuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHNf
Y2FsbERlcHRoLCAwKSk7CisKKyAgICBpZiAoIWluc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmluc3Ry
dW1lbnRXaWxsRGlzcGF0Y2hFdmVudChldmVudCk7CisKKyAgICBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50KiB0aW1lbGluZUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV90aW1lbGluZUFnZW50
LmdldCgpOworICAgIGlmICghdGltZWxpbmVBZ2VudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghZXZlbnRIYXNMaXN0ZW5lcnMoZXZlbnQudHlwZSgpLCB3aW5kb3csIG5vZGUsIGFuY2VzdG9y
cykpCisgICAgICAgIHJldHVybjsKKyAgICB0aW1lbGluZUFnZW50c1N0YWNrKCkubGFzdCgpLnNl
Y29uZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CisgICAgdGltZWxpbmVBZ2VudC0+d2lsbERpc3Bh
dGNoRXZlbnQoZXZlbnQpOworfQorCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5z
dHJ1bWVudERpZERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIpCit7CisgICAgVGltZWxpbmVBZ2VudHNTdGFjayYgc3RhY2sgPSB0aW1lbGlu
ZUFnZW50c1N0YWNrKCk7CisgICAgaW50IHByZXZpb3VzVGltZWxpbmVBZ2VudElkID0gMDsKKyAg
ICB3aGlsZSAoIXN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBpbnQgZGVwdGggPSBzdGFjay5s
YXN0KCkuZmlyc3QsIGlkID0gc3RhY2subGFzdCgpLnNlY29uZDsKKyAgICAgICAgc3RhY2sucmVt
b3ZlTGFzdCgpOworICAgICAgICBpZiAoZGVwdGggPiBzX2NhbGxEZXB0aCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZiAoZGVwdGggPT0gc19jYWxsRGVwdGgpCisgICAgICAgICAg
ICBwcmV2aW91c1RpbWVsaW5lQWdlbnRJZCA9IGlkOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBpZiAoIWluc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmluc3RydW1lbnREaWREaXNwYXRjaEV2
ZW50KCk7CisKKyAgICBpZiAoIXByZXZpb3VzVGltZWxpbmVBZ2VudElkKQorICAgICAgICByZXR1
cm47CisKKyAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zcGVj
dG9yQ29udHJvbGxlci0+bV90aW1lbGluZUFnZW50LmdldCgpOworICAgIGlmICghdGltZWxpbmVB
Z2VudCB8fCB0aW1lbGluZUFnZW50LT5pZCgpICE9IHByZXZpb3VzVGltZWxpbmVBZ2VudElkKQor
ICAgICAgICByZXR1cm47CisgICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hFdmVudCgpOwor
fQorCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudFdpbGxTZW5kWE1M
SHR0cFJlcXVlc3RJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIs
IGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAoIWluc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zy
b250ZW5kKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
CmluZGV4IDRkODA0Y2QuLjI1ZTU0YWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oCkBAIC01Miw2ICs1Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBkaWRNb2RpZnlET01BdHRyKERvY3VtZW50KiwgRWxlbWVudCopOwogICAgIHN0YXRpYyB2
b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChEb2N1bWVudCosIENoYXJhY3RlckRhdGEqKTsKIAor
ICAgIHN0YXRpYyB2b2lkIGluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudChEb2N1bWVudCosIGNv
bnN0IEV2ZW50JiwgRE9NV2luZG93KiwgTm9kZSosIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q29udGFp
bmVyTm9kZT4gPiYgYW5jZXN0b3JzKTsKKyAgICBzdGF0aWMgdm9pZCBpbnN0cnVtZW50RGlkRGlz
cGF0Y2hFdmVudChEb2N1bWVudCopOworCiAgICAgc3RhdGljIHZvaWQgaW5zdHJ1bWVudFdpbGxT
ZW5kWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IEtVUkwmKTsK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC03MCw2ICs3Myw5IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIHZvaWQgZGlkTW9kaWZ5RE9NQXR0ckltcGwoSW5zcGVjdG9yQ29udHJvbGxlciosIEVs
ZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKEluc3Bl
Y3RvckNvbnRyb2xsZXIqLCBDaGFyYWN0ZXJEYXRhKik7CiAKKyAgICBzdGF0aWMgdm9pZCBpbnN0
cnVtZW50V2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBjb25zdCBF
dmVudCYsIERPTVdpbmRvdyosIE5vZGUqLCBjb25zdCBWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5v
ZGU+ID4mIGFuY2VzdG9ycyk7CisgICAgc3RhdGljIHZvaWQgaW5zdHJ1bWVudERpZERpc3BhdGNo
RXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqKTsKKwogICAgIHN0YXRpYyB2b2lkIGluc3Ry
dW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgY29u
c3QgS1VSTCYpOwogCiAgICAgc3RhdGljIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXJGb3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
KTsKQEAgLTc3LDYgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlckZvclBhZ2UoUGFnZSopOwogCiAgICAgc3RhdGljIGlu
dCBzX2Zyb250ZW5kQ291bnRlcjsKKyAgICBzdGF0aWMgaW50IHNfY2FsbERlcHRoOwogI2VuZGlm
CiB9OwogCkBAIC0xMzAsNiArMTM3LDI0IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKERvY3VtZW50KiBkb2N1bWVudCwKICNlbmRp
ZgogfQogCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRX
aWxsRGlzcGF0Y2hFdmVudChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEV2ZW50JiBldmVudCwg
RE9NV2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q29udGFp
bmVyTm9kZT4gPiYgYW5jZXN0b3JzKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgc19j
YWxsRGVwdGggKz0gMTsKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAg
ICAgIGluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudEltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwg
ZXZlbnQsIHdpbmRvdywgbm9kZSwgYW5jZXN0b3JzKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnREaWREaXNwYXRjaEV2ZW50KERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxl
ckZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICAgICAgaW5zdHJ1bWVudERpZERpc3BhdGNoRXZl
bnRJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIpOworICAgIHNfY2FsbERlcHRoIC09IDE7CisjZW5k
aWYKK30KKwogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50
V2lsbFNlbmRYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBLVVJMJiB1cmwpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXggZmJiMTdjNC4uNTUwYmQ5NSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKQEAgLTQ1
LDkgKzQ1LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGludCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzX2luc3RhbmNlQ291bnQgPSAwOworaW50IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OnNfaWQgPSAwOwogCiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpJbnNwZWN0b3JUaW1lbGluZUFn
ZW50KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICA6IG1fZnJvbnRlbmQoZnJvbnRl
bmQpCisgICAgLCBtX2lkKCsrc19pZCkKIHsKICAgICArK3NfaW5zdGFuY2VDb3VudDsKICAgICBT
Y3JpcHRHQ0V2ZW50OjphZGRFdmVudExpc3RlbmVyKHRoaXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IDZiMzMyNGIuLjY3ZDMxMGQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKQEAgLTc3LDYgKzc3LDggQEAg
cHVibGljOgogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zcGVjdG9yRnJvbnRlbmQqIGZy
b250ZW5kKTsKICAgICB+SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOwogCisgICAgaW50IGlkKCkg
eyByZXR1cm4gbV9pZDsgfQorCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgcmVzZXRGcm9u
dGVuZFByb3h5T2JqZWN0KEluc3BlY3RvckZyb250ZW5kKik7CiAKQEAgLTE1Niw2ICsxNTgsOCBA
QCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFRpbWVsaW5lUmVjb3JkRW50cnk+IG1fcmVjb3JkU3Rh
Y2s7CiAgICAgc3RhdGljIGludCBzX2luc3RhbmNlQ291bnQ7CisgICAgc3RhdGljIGludCBzX2lk
OworICAgIGludCBtX2lkOwogICAgIHN0cnVjdCBHQ0V2ZW50IHsKICAgICAgICAgR0NFdmVudChk
b3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZW5kVGltZSwgc2l6ZV90IGNvbGxlY3RlZEJ5dGVzKQog
ICAgICAgICAgICAgOiBzdGFydFRpbWUoc3RhcnRUaW1lKSwgZW5kVGltZShlbmRUaW1lKSwgY29s
bGVjdGVkQnl0ZXMoY29sbGVjdGVkQnl0ZXMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMKaW5kZXggNjIxMmVhMS4uYTBlNWUzYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQ
YW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFy
UGFuZS5qcwpAQCAtMjksOCArMjksOSBAQCBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBh
bmUgPSBmdW5jdGlvbigpCiB9CiAKIFdlYkluc3BlY3Rvci5DYWxsU3RhY2tTaWRlYmFyUGFuZS5E
ZWJ1Z2dlckV2ZW50VHlwZSA9IHsKLSAgICBET01CcmVha3BvaW50OiAwLAotICAgIE5hdGl2ZUJy
ZWFrcG9pbnQ6IDEKKyAgICBKYXZhU2NyaXB0UGF1c2U6IDAsCisgICAgRE9NQnJlYWtwb2ludDog
MSwKKyAgICBOYXRpdmVCcmVha3BvaW50OiAyCiB9OwogCiBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNr
U2lkZWJhclBhbmUucHJvdG90eXBlID0gewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69343</attachid>
            <date>2010-09-30 10:14:38 -0700</date>
            <delta_ts>2010-10-01 10:10:03 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>23690</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjMzMTgzMi4uMzNmYTVlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0wOS0zMCAgcG9kaXZpbG92QGNo
cm9taXVtLm9yZyAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW1wbGVtZW50IHBh
dXNpbmcgb24gZXZlbnQgbGlzdGVuZXJzIChiYWNrLWVuZCBwYXJ0KQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY2MjQKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpzZXRQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1
Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1
c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
ZGlzcGF0Y2hHZW5lcmljRXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENv
bW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0TmF0
aXZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZW1vdmVOYXRpdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6Omluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjppbnN0cnVtZW50RGlkRGlzcGF0Y2hFdmVudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlT25O
ZXh0U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENv
bnRpbnVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFr
UHJvZ3JhbSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmV2ZW50SGFzTGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnRpbWVs
aW5lQWdlbnRzU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjppbnN0cnVtZW50V2lsbERpc3BhdGNoRXZlbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnRJbXBs
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRXaWxsRGlz
cGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
Omluc3RydW1lbnREaWREaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpJbnNwZWN0b3JUaW1lbGluZUFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6aWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lk
ZWJhclBhbmUuanM6CisKIDIwMTAtMDktMzAgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCAxZGVjZWZhLi5hNDQwYjgxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtMjAwLDkgKzIw
MCw5IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUo
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZSkKICAgICBtX3BhdXNlT25FeGNlcHRpb25zU3Rh
dGUgPSBwYXVzZTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2UoKQordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9vbCBwYXVzZSkKIHsK
LSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICBtX3BhdXNlT25OZXh0U3Rh
dGVtZW50ID0gcGF1c2U7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmJyZWFrUHJvZ3Jh
bSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggNDMyZmU5YS4u
MzE3MmM2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtNzgs
NyArNzgsNyBAQCBwdWJsaWM6CiAgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9
CiAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUpOwogCi0gICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgc2V0UGF1c2VPbk5leHRTdGF0ZW1l
bnQoYm9vbCBwYXVzZSk7CiAgICAgdm9pZCBicmVha1Byb2dyYW0oKTsKICAgICB2b2lkIGNvbnRp
bnVlUHJvZ3JhbSgpOwogICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggM2YxYTBjNS4uN2E4ZGJmNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTIyNSwxMCArMjI1
LDE0IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUo
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uCiAgICAgc2V0UGF1c2VPbkV4Y2VwdGlvbnNG
dW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLCAxLCBhcmd2KTsKIH0KIAotdm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2UoKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9vbCBwYXVzZSkKIHsKLSAgICBpZiAoIW1fcGF1c2VkUGFn
ZSkKKyAgICBpZiAobV9wYXVzZWRQYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHBhdXNl
KQogICAgICAgICB2ODo6RGVidWc6OkRlYnVnQnJlYWsoKTsKKyAgICBlbHNlCisgICAgICAgIHY4
OjpEZWJ1Zzo6Q2FuY2VsRGVidWdCcmVhaygpOwogfQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpicmVha1Byb2dyYW0oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCmlu
ZGV4IGQxZmQ3MWYuLjVjNWQ2YzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmgKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpOwogICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUpOwog
Ci0gICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9v
bCBwYXVzZSk7CiAgICAgdm9pZCBicmVha1Byb2dyYW0oKTsKICAgICB2b2lkIGNvbnRpbnVlUHJv
Z3JhbSgpOwogICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL05vZGUuY3BwIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNTMzOTVhOC4uMjRj
ZWIyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
ICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTGFiZWxzTm9kZUxpc3QuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC0yNTc3LDIzICsyNTc3LDYgQEAgYm9vbCBOb2RlOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIHJldHVybiBkaXNw
YXRjaEdlbmVyaWNFdmVudChldmVudC5yZWxlYXNlKCkpOwogfQogCi1zdGF0aWMgYm9vbCBldmVu
dEhhc0xpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRE9NV2luZG93KiB3
aW5kb3csIE5vZGUqIG5vZGUsIFZlY3RvcjxSZWZQdHI8Q29udGFpbmVyTm9kZT4gPiYgYW5jZXN0
b3JzKQotewotICAgIGlmICh3aW5kb3cgJiYgd2luZG93LT5oYXNFdmVudExpc3RlbmVycyhldmVu
dFR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChub2RlLT5oYXNFdmVudExp
c3RlbmVycyhldmVudFR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYW5jZXN0b3JzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIENvbnRhaW5l
ck5vZGUqIGFuY2VzdG9yID0gYW5jZXN0b3JzW2ldLmdldCgpOwotICAgICAgICBpZiAoYW5jZXN0
b3ItPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgIHJldHVybiBmYWxzZTsgICAgCi19Ci0KIGJvb2wgTm9kZTo6ZGlzcGF0
Y2hHZW5lcmljRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiB7CiAgICAgUmVmUHRy
PEV2ZW50PiBldmVudChwcnBFdmVudCk7CkBAIC0yNjE5LDE1ICsyNjAyLDcgQEAgYm9vbCBOb2Rl
OjpkaXNwYXRjaEdlbmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICAg
ICAgICAgIHRhcmdldEZvcldpbmRvd0V2ZW50cyA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4odG9w
TGV2ZWxDb250YWluZXIpLT5kb21XaW5kb3coKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2UgPSBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpp
bnN0YW5jZUNvdW50KCkgPyBkb2N1bWVudCgpLT5wYWdlKCkgOiAwOwotICAgIGlmIChpbnNwZWN0
ZWRQYWdlKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFn
ZW50ID0gZXZlbnRIYXNMaXN0ZW5lcnMoZXZlbnQtPnR5cGUoKSwgdGFyZ2V0Rm9yV2luZG93RXZl
bnRzLCB0aGlzLCBhbmNlc3RvcnMpID8gaW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yVGltZWxpbmVB
Z2VudCgpIDogMCkKLSAgICAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxEaXNwYXRjaEV2ZW50
KCpldmVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluc3BlY3RlZFBhZ2UgPSAwOwot
ICAgIH0KLSNlbmRpZgorICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudFdp
bGxEaXNwYXRjaEV2ZW50KGRvY3VtZW50KCksICpldmVudCwgdGFyZ2V0Rm9yV2luZG93RXZlbnRz
LCB0aGlzLCBhbmNlc3RvcnMpOwogCiAgICAgLy8gR2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFu
Y2UgdG8gZG8gc29tZSB3b3JrIGJlZm9yZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2su
CiAgICAgdm9pZCogZGF0YSA9IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsK
QEAgLTI3MDksMTEgKzI2ODQsOCBAQCBkb25lRGlzcGF0Y2hpbmc6CiAgICAgfQogCiBkb25lV2l0
aERlZmF1bHQ6Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoaW5zcGVjdGVkUGFnZSkK
LSAgICAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnNw
ZWN0ZWRQYWdlLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCi0gICAgICAgICAgICB0aW1lbGlu
ZUFnZW50LT5kaWREaXNwYXRjaEV2ZW50KCk7Ci0jZW5kaWYKKworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnQoZG9jdW1lbnQoKSk7CiAKICAg
ICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDVjYzc3NDQuLmRiODBkNTkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC03NzgsMTUgKzc3OCwyMiBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIq
IGxvYWRlcikKIAogICAgICAgICBtX3RpbWVzLmNsZWFyKCk7CiAgICAgICAgIG1fY291bnRzLmNs
ZWFyKCk7CisKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAgICAgaWYgKG1f
ZGVidWdnZXJBZ2VudCkKICAgICAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQYWdl
TmF2aWdhdGlvbigpOwogCisgICAgICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuY2xlYXIoKTsKKyAg
ICAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuY2xlYXIoKTsKKyAgICAgICAgbV9ldmVu
dE5hbWVzTWFwLmNsZWFyKCk7CiAgICAgICAgIG1fWEhSQnJlYWtwb2ludHMuY2xlYXIoKTsKKyAg
ICAgICAgbV9sYXN0QnJlYWtwb2ludElkID0gMDsKICNlbmRpZgorCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCiAgICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+cmVz
ZXRTdGF0ZSgpOwogI2VuZGlmCisKICAgICAgICAgLy8gdW5iaW5kQWxsUmVzb3VyY2VzIHNob3Vs
ZCBiZSBjYWxsZWQgYmVmb3JlIGRhdGFiYXNlIGFuZCBET00gc3RvcmFnZQogICAgICAgICAvLyBy
ZXNvdXJjZXMgYXJlIGNsZWFyZWQgc28gdGhhdCBpdCBoYXMgYSBjaGFuY2UgdG8gdW5iaW5kIHRo
ZW0uCiAgICAgICAgIHVuYmluZEFsbFJlc291cmNlcygpOwpAQCAtMTY3MSwyMSArMTY3OCw0MyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldE5hdGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcAogICAgIFN0cmluZyB0eXBlOwogICAgIGlmICghYnJl
YWtwb2ludC0+Z2V0U3RyaW5nKCJ0eXBlIiwgJnR5cGUpKQogICAgICAgICByZXR1cm47CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29uZGl0aW9uID0gYnJlYWtwb2ludC0+Z2V0T2JqZWN0
KCJjb25kaXRpb24iKTsKKyAgICBpZiAoIWNvbmRpdGlvbikKKyAgICAgICAgcmV0dXJuOwogICAg
IGlmICh0eXBlID09ICJYSFIiKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNv
bmRpdGlvbiA9IGJyZWFrcG9pbnQtPmdldE9iamVjdCgiY29uZGl0aW9uIik7Ci0gICAgICAgIGlm
ICghY29uZGl0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBTdHJpbmcgdXJsOwog
ICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJ1cmwiLCAmdXJsKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgKmJyZWFrcG9pbnRJZCA9ICsrbV9sYXN0QnJlYWtwb2ludElk
OworICAgICAgICBtX25hdGl2ZUJyZWFrcG9pbnRzLnNldCgqYnJlYWtwb2ludElkLCAiWEhSIik7
CiAgICAgICAgIG1fWEhSQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50SWQsIHVybCk7CisgICAg
fSBlbHNlIGlmICh0eXBlID09ICJFdmVudExpc3RlbmVyIikgeworICAgICAgICBTdHJpbmcgZXZl
bnROYW1lOworICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJldmVudE5hbWUiLCAm
ZXZlbnROYW1lKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgKmJyZWFrcG9pbnRJZCA9
ICsrbV9sYXN0QnJlYWtwb2ludElkOworICAgICAgICBtX25hdGl2ZUJyZWFrcG9pbnRzLnNldCgq
YnJlYWtwb2ludElkLCAiRXZlbnRMaXN0ZW5lciIpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJC
cmVha3BvaW50cy5zZXQoKmJyZWFrcG9pbnRJZCwgZXZlbnROYW1lKTsKKyAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIHVuc2lnbmVkIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ldmVudE5hbWVzTWFwLmZp
bmQoZXZlbnROYW1lKTsKKyAgICAgICAgaWYgKGl0ID09IG1fZXZlbnROYW1lc01hcC5lbmQoKSkK
KyAgICAgICAgICAgIG1fZXZlbnROYW1lc01hcC5zZXQoZXZlbnROYW1lLCAxKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaXQtPnNlY29uZCArPSAxOwogICAgIH0KIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZW1vdmVOYXRpdmVCcmVha3BvaW50KHVuc2lnbmVkIGludCBicmVh
a3BvaW50SWQpCiB7Ci0gICAgbV9YSFJCcmVha3BvaW50cy5yZW1vdmUoYnJlYWtwb2ludElkKTsK
KyAgICBTdHJpbmcgdHlwZSA9IG1fbmF0aXZlQnJlYWtwb2ludHMudGFrZShicmVha3BvaW50SWQp
OworICAgIGlmICh0eXBlID09ICJYSFIiKQorICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnJlbW92
ZShicmVha3BvaW50SWQpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gIkV2ZW50TGlzdGVuZXIiKSB7
CisgICAgICAgIFN0cmluZyBldmVudE5hbWUgPSBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy50
YWtlKGJyZWFrcG9pbnRJZCk7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZCBpbnQ+
OjppdGVyYXRvciBpdCA9IG1fZXZlbnROYW1lc01hcC5maW5kKGV2ZW50TmFtZSk7CisgICAgICAg
IGl0LT5zZWNvbmQgLT0gMTsKKyAgICAgICAgaWYgKCFpdC0+c2Vjb25kKQorICAgICAgICAgICAg
bV9ldmVudE5hbWVzTWFwLnJlbW92ZShpdCk7CisgICAgfQogfQogCiAjZW5kaWYKQEAgLTIwOTYs
NiArMjEyNSwyOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbG9hZFBhZ2UoKQogICAg
IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVk
dWxlUmVmcmVzaCh0cnVlKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnN0cnVt
ZW50V2lsbERpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQmIGV2ZW50KQoreworI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpIHsKKyAgICAgICAg
aWYgKCFtX2V2ZW50TmFtZXNNYXAuY29udGFpbnMoZXZlbnQudHlwZSgpKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoInR5
cGUiLCAiRXZlbnRMaXN0ZW5lciIpOworICAgICAgICBldmVudERhdGEtPnNldFN0cmluZygiZXZl
bnROYW1lIiwgZXZlbnQudHlwZSgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zY2hlZHVs
ZVBhdXNlT25OZXh0U3RhdGVtZW50KE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwg
ZXZlbnREYXRhKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjppbnN0cnVtZW50RGlkRGlzcGF0Y2hFdmVudCgpCit7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCisgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKKyAgICAgICAgbV9kZWJ1Z2dlckFn
ZW50LT5jYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOworI2VuZGlmCit9CisKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6aW5zdHJ1bWVudFdpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3Qg
S1VSTCYgdXJsKQogewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDU2MTZlMDIuLjk0OWYzMmYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI2MSw3ICsyNjEsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldE5hdGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGludCogYnJlYWtwb2ludElkKTsKICAgICB2
b2lkIHJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQodW5zaWduZWQgaW50IGJyZWFrcG9pbnRJZCk7Ci0K
ICNlbmRpZgogCiAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgdGVzdENh
bGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpOwpAQCAtMzI5LDYgKzMyOCw4IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYganNvblJlc3VsdCk7CiAKKyAgICB2b2lkIGluc3RydW1lbnRXaWxsRGlzcGF0
Y2hFdmVudChjb25zdCBFdmVudCYpOworICAgIHZvaWQgaW5zdHJ1bWVudERpZERpc3BhdGNoRXZl
bnQoKTsKICAgICB2b2lkIGluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IEtV
UkwmKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMzkyLDYgKzM5Myw5
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwogICAgIE93
blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBtX2RlYnVnZ2VyQWdlbnQ7CiAKKyAgICBIYXNo
TWFwPHVuc2lnbmVkIGludCwgU3RyaW5nPiBtX25hdGl2ZUJyZWFrcG9pbnRzOworICAgIEhhc2hN
YXA8dW5zaWduZWQgaW50LCBTdHJpbmc+IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzOworICAg
IEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZCBpbnQ+IG1fZXZlbnROYW1lc01hcDsKICAgICBIYXNo
TWFwPHVuc2lnbmVkIGludCwgU3RyaW5nPiBtX1hIUkJyZWFrcG9pbnRzOwogICAgIHVuc2lnbmVk
IGludCBtX2xhc3RCcmVha3BvaW50SWQ7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAKaW5kZXggNDk2NGMwOS4uOTg2ZTljMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTU3LDggKzU3LDYgQEAgUGFz
c093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
cmVhdGUoSW5zcGVjdG9yQ29udHIKICAgICByZXR1cm4gYWdlbnQucmVsZWFzZSgpOwogfQogCi1J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzX2RlYnVnZ2Vy
QWdlbnRPbkJyZWFrcG9pbnQgPSAwOwotCiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIs
IEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxl
cihpbnNwZWN0b3JDb250cm9sbGVyKQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKQEAgLTcx
LDkgKzY5LDYgQEAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdl
bnQoKQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVMaXN0ZW5lcih0
aGlzLCBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKSk7CiAgICAgbV9wYXVz
ZWRTY3JpcHRTdGF0ZSA9IDA7Ci0KLSAgICBpZiAodGhpcyA9PSBzX2RlYnVnZ2VyQWdlbnRPbkJy
ZWFrcG9pbnQpCi0gICAgICAgIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7CiB9CiAK
IGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aXNEZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKQpA
QCAtMTQ3LDkgKzE0MiwyMyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlw
dFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcgogICAgICpzY3JpcHRT
b3VyY2UgPSBtX3NjcmlwdElEVG9Db250ZW50LmdldChzb3VyY2VJRCk7CiB9CiAKK3ZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChEZWJ1Z2dl
ckV2ZW50VHlwZSB0eXBlLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkYXRhKQoreworICAg
IG1fYnJlYWtQcm9ncmFtRGV0YWlscyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9icmVha1Byb2dyYW1EZXRhaWxzLT5zZXROdW1iZXIoImV2ZW50VHlwZSIsIHR5cGUpOworICAg
IG1fYnJlYWtQcm9ncmFtRGV0YWlscy0+c2V0VmFsdWUoImV2ZW50RGF0YSIsIGRhdGEpOworICAg
IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRQYXVzZU9uTmV4dFN0YXRlbWVudCh0cnVl
KTsKK30KKwordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0
YXRlbWVudCgpCit7CisgICAgbV9icmVha1Byb2dyYW1EZXRhaWxzID0gMDsKKyAgICBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpOworfQor
CiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKCkKIHsKLSAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2UoKTsKKyAgICBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVt
ZW50KEphdmFTY3JpcHRQYXVzZUV2ZW50VHlwZSwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdW1lKCkKQEAgLTMwNSw2ICsz
MTQsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSkKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUo
KQogewogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSAwOworICAgIG1fYnJlYWtQcm9ncmFtRGV0
YWlscyA9IDA7CiAgICAgbV9mcm9udGVuZC0+cmVzdW1lZFNjcmlwdCgpOwogfQogCkBAIC0zMTMs
MTQgKzMyMyw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKERl
YnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zCiAgICAgbV9icmVha1Byb2dyYW1E
ZXRhaWxzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2JyZWFrUHJvZ3JhbURl
dGFpbHMtPnNldE51bWJlcigiZXZlbnRUeXBlIiwgdHlwZSk7CiAgICAgbV9icmVha1Byb2dyYW1E
ZXRhaWxzLT5zZXRWYWx1ZSgiZXZlbnREYXRhIiwgZGF0YSk7Ci0gICAgc19kZWJ1Z2dlckFnZW50
T25CcmVha3BvaW50ID0gdGhpczsKLQogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5i
cmVha1Byb2dyYW0oKTsKLSAgICBpZiAoIXNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0gMDsKLSAg
ICBtX2JyZWFrUHJvZ3JhbURldGFpbHMgPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggOGE1Mzc5
ZC4uNTIzMGI4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0
b3JWYWx1ZTsKIAogZW51bSBEZWJ1Z2dlckV2ZW50VHlwZSB7CisgICAgSmF2YVNjcmlwdFBhdXNl
RXZlbnRUeXBlLAogICAgIERPTUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwKICAgICBOYXRp
dmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUKIH07CkBAIC02Niw4ICs2NywxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBlZGl0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNv
bnN0IFN0cmluZyYgbmV3Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIG5ld0NhbGxGcmFtZXMpOwogICAgIHZvaWQgZ2V0U2NyaXB0
U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKIAot
ICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQo
RGVidWdnZXJFdmVudFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZGF0YSk7
CisgICAgdm9pZCBjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOwogICAgIHZvaWQgYnJlYWtQ
cm9ncmFtKERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGRhdGEpOworICAgIHZvaWQgcGF1c2UoKTsKICAgICB2b2lkIHJlc3VtZSgpOwogICAgIHZvaWQg
c3RlcE92ZXJTdGF0ZW1lbnQoKTsKICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBmYmJj
Y2U0Li41YjY0ZWFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKQEAgLTMzLDEzICszMyw0MyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
IAorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRp
bWVsaW5lQWdlbnQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAordHlwZWRlZiBWZWN0b3I8cGFpcjxpbnQsIGludD4gPiBUaW1lbGluZUFnZW50c1N0
YWNrOworCiBpbnQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzX2Zyb250ZW5kQ291bnRlciA9
IDA7CitpbnQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzX2NhbGxEZXB0aCA9IDA7CisKK3N0
YXRpYyBib29sIGV2ZW50SGFzTGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxDb250
YWluZXJOb2RlPiA+JiBhbmNlc3RvcnMpCit7CisgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPmhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaV0uZ2V0KCk7
CisgICAgICAgIGlmIChhbmNlc3Rvci0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIFRpbWVsaW5lQWdlbnRzU3RhY2smIHRpbWVsaW5lQWdlbnRzU3RhY2soKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoVGltZWxpbmVBZ2VudHNTdGFjaywgc3RhY2ssICgpKTsKKyAg
ICByZXR1cm4gc3RhY2s7Cit9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
SW5zZXJ0RE9NTm9kZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciwgTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KQogewpAQCAtMTI0LDYgKzE1NCw1MCBAQCB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkSW1wbChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbgogICAgICAgICBkb21BZ2VudC0+Y2hhcmFjdGVyRGF0YU1vZGlm
aWVkKGNoYXJhY3RlckRhdGEpOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
aW5zdHJ1bWVudFdpbGxEaXNwYXRjaEV2ZW50SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyLCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBO
b2RlKiBub2RlLCBjb25zdCBWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+ID4mIGFuY2VzdG9y
cykKK3sKKyAgICBpZiAoIWluc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmluc3RydW1lbnRXaWxsRGlz
cGF0Y2hFdmVudChldmVudCk7CisKKyAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGlu
ZUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV90aW1lbGluZUFnZW50LmdldCgpOworICAg
IGlmICghdGltZWxpbmVBZ2VudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZXZlbnRIYXNM
aXN0ZW5lcnMoZXZlbnQudHlwZSgpLCB3aW5kb3csIG5vZGUsIGFuY2VzdG9ycykpCisgICAgICAg
IHJldHVybjsKKyAgICB0aW1lbGluZUFnZW50c1N0YWNrKCkuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KHNfY2FsbERlcHRoLCB0aW1lbGluZUFnZW50LT5pZCgpKSk7CisgICAgdGltZWxpbmVBZ2VudC0+
d2lsbERpc3BhdGNoRXZlbnQoZXZlbnQpOworfQorCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIpCit7CisgICAgaWYgKCFpbnNwZWN0b3JDb250cm9sbGVyLT5o
YXNGcm9udGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNwZWN0b3JDb250cm9sbGVy
LT5pbnN0cnVtZW50RGlkRGlzcGF0Y2hFdmVudCgpOworCisgICAgVGltZWxpbmVBZ2VudHNTdGFj
ayYgc3RhY2sgPSB0aW1lbGluZUFnZW50c1N0YWNrKCk7CisgICAgaW50IHByZXZpb3VzVGltZWxp
bmVBZ2VudElkID0gMDsKKyAgICB3aGlsZSAoIXN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBp
bnQgZGVwdGggPSBzdGFjay5sYXN0KCkuZmlyc3QsIGlkID0gc3RhY2subGFzdCgpLnNlY29uZDsK
KyAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBpZiAoZGVwdGggPiBzX2NhbGxE
ZXB0aCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZGVwdGggPT0gc19jYWxs
RGVwdGgpCisgICAgICAgICAgICBwcmV2aW91c1RpbWVsaW5lQWdlbnRJZCA9IGlkOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXByZXZpb3VzVGltZWxpbmVBZ2VudElkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV90aW1lbGluZUFnZW50LmdldCgpOworICAgIGlmICgh
dGltZWxpbmVBZ2VudCB8fCB0aW1lbGluZUFnZW50LT5pZCgpICE9IHByZXZpb3VzVGltZWxpbmVB
Z2VudElkKQorICAgICAgICByZXR1cm47CisgICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hF
dmVudCgpOworfQorCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudFdp
bGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAoIWluc3BlY3RvckNvbnRyb2xs
ZXItPmhhc0Zyb250ZW5kKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oCmluZGV4IDRkODA0Y2QuLjI1ZTU0YWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC01Miw2ICs1Miw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBkaWRNb2RpZnlET01BdHRyKERvY3VtZW50KiwgRWxlbWVudCopOwogICAg
IHN0YXRpYyB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChEb2N1bWVudCosIENoYXJhY3RlckRh
dGEqKTsKIAorICAgIHN0YXRpYyB2b2lkIGluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudChEb2N1
bWVudCosIGNvbnN0IEV2ZW50JiwgRE9NV2luZG93KiwgTm9kZSosIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gPiYgYW5jZXN0b3JzKTsKKyAgICBzdGF0aWMgdm9pZCBpbnN0cnVt
ZW50RGlkRGlzcGF0Y2hFdmVudChEb2N1bWVudCopOworCiAgICAgc3RhdGljIHZvaWQgaW5zdHJ1
bWVudFdpbGxTZW5kWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IEtVUkwmKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC03MCw2ICs3Myw5IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgZGlkTW9kaWZ5RE9NQXR0ckltcGwoSW5zcGVjdG9yQ29udHJv
bGxlciosIEVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJ
bXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBDaGFyYWN0ZXJEYXRhKik7CiAKKyAgICBzdGF0aWMg
dm9pZCBpbnN0cnVtZW50V2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIq
LCBjb25zdCBFdmVudCYsIERPTVdpbmRvdyosIE5vZGUqLCBjb25zdCBWZWN0b3I8UmVmUHRyPENv
bnRhaW5lck5vZGU+ID4mIGFuY2VzdG9ycyk7CisgICAgc3RhdGljIHZvaWQgaW5zdHJ1bWVudERp
ZERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqKTsKKwogICAgIHN0YXRpYyB2
b2lkIGluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250cm9s
bGVyKiwgY29uc3QgS1VSTCYpOwogCiAgICAgc3RhdGljIEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXJGb3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqKTsKQEAgLTc3LDYgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlckZvclBhZ2UoUGFnZSopOwogCiAgICAg
c3RhdGljIGludCBzX2Zyb250ZW5kQ291bnRlcjsKKyAgICBzdGF0aWMgaW50IHNfY2FsbERlcHRo
OwogI2VuZGlmCiB9OwogCkBAIC0xMzAsNiArMTM3LDI0IEBAIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKERvY3VtZW50KiBkb2N1bWVu
dCwKICNlbmRpZgogfQogCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omlu
c3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEV2ZW50
JiBldmVudCwgRE9NV2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gPiYgYW5jZXN0b3JzKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgc19jYWxsRGVwdGggKz0gMTsKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JEb2N1bWVudChkb2N1bWVu
dCkpCisgICAgICAgIGluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudEltcGwoaW5zcGVjdG9yQ29u
dHJvbGxlciwgZXZlbnQsIHdpbmRvdywgbm9kZSwgYW5jZXN0b3JzKTsKKyNlbmRpZgorfQorCitp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnREaWREaXNwYXRj
aEV2ZW50KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAg
IGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9y
Q29udHJvbGxlckZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICAgICAgaW5zdHJ1bWVudERpZERp
c3BhdGNoRXZlbnRJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIpOworICAgIHNfY2FsbERlcHRoIC09
IDE7CisjZW5kaWYKK30KKwogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
bnN0cnVtZW50V2lsbFNlbmRYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBjb25zdCBLVVJMJiB1cmwpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXggZmJiMTdjNC4u
NTUwYmQ5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5j
cHAKQEAgLTQ1LDkgKzQ1LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGludCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzX2luc3RhbmNlQ291bnQgPSAwOworaW50IEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OnNfaWQgPSAwOwogCiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpJbnNwZWN0b3JU
aW1lbGluZUFnZW50KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICA6IG1fZnJvbnRl
bmQoZnJvbnRlbmQpCisgICAgLCBtX2lkKCsrc19pZCkKIHsKICAgICArK3NfaW5zdGFuY2VDb3Vu
dDsKICAgICBTY3JpcHRHQ0V2ZW50OjphZGRFdmVudExpc3RlbmVyKHRoaXMpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IDZiMzMyNGIuLjY3ZDMxMGQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKQEAgLTc3LDYg
Kzc3LDggQEAgcHVibGljOgogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kKTsKICAgICB+SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOwogCisgICAg
aW50IGlkKCkgeyByZXR1cm4gbV9pZDsgfQorCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQg
cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KEluc3BlY3RvckZyb250ZW5kKik7CiAKQEAgLTE1Niw2
ICsxNTgsOCBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFRpbWVsaW5lUmVjb3JkRW50cnk+IG1f
cmVjb3JkU3RhY2s7CiAgICAgc3RhdGljIGludCBzX2luc3RhbmNlQ291bnQ7CisgICAgc3RhdGlj
IGludCBzX2lkOworICAgIGludCBtX2lkOwogICAgIHN0cnVjdCBHQ0V2ZW50IHsKICAgICAgICAg
R0NFdmVudChkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZW5kVGltZSwgc2l6ZV90IGNvbGxlY3Rl
ZEJ5dGVzKQogICAgICAgICAgICAgOiBzdGFydFRpbWUoc3RhcnRUaW1lKSwgZW5kVGltZShlbmRU
aW1lKSwgY29sbGVjdGVkQnl0ZXMoY29sbGVjdGVkQnl0ZXMpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMKaW5kZXggNjIxMmVhMS4u
YTBlNWUzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFj
a1NpZGViYXJQYW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3Rh
Y2tTaWRlYmFyUGFuZS5qcwpAQCAtMjksOCArMjksOSBAQCBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNr
U2lkZWJhclBhbmUgPSBmdW5jdGlvbigpCiB9CiAKIFdlYkluc3BlY3Rvci5DYWxsU3RhY2tTaWRl
YmFyUGFuZS5EZWJ1Z2dlckV2ZW50VHlwZSA9IHsKLSAgICBET01CcmVha3BvaW50OiAwLAotICAg
IE5hdGl2ZUJyZWFrcG9pbnQ6IDEKKyAgICBKYXZhU2NyaXB0UGF1c2U6IDAsCisgICAgRE9NQnJl
YWtwb2ludDogMSwKKyAgICBOYXRpdmVCcmVha3BvaW50OiAyCiB9OwogCiBXZWJJbnNwZWN0b3Iu
Q2FsbFN0YWNrU2lkZWJhclBhbmUucHJvdG90eXBlID0gewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69479</attachid>
            <date>2010-10-01 10:10:03 -0700</date>
            <delta_ts>2010-10-04 06:18:54 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27555</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjMzMTgzMi4uNDQ4NjYyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMC0xMC0wMSAgcG9kaXZpbG92QGNo
cm9taXVtLm9yZyAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW1wbGVtZW50IHBh
dXNpbmcgb24gZXZlbnQgbGlzdGVuZXJzIChiYWNrLWVuZCBwYXJ0KQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY2MjQKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpzZXRQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1
Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1
c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
ZGlzcGF0Y2hHZW5lcmljRXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENv
bW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0TmF0
aXZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZW1vdmVOYXRpdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3VsZEJyZWFrT25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzaG91bGRCcmVha09uWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0YXRl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0p
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpldmVudEhhc0xpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjp0aW1lbGluZUFnZW50
c1N0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Tm90aWZ5VGltZWxpbmVBZ2VudEJlZm9yZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxkTm90aWZ5VGltZWxpbmVBZ2VudEFmdGVyRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50
V2lsbERpc3BhdGNoRXZlbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnRJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudFdpbGxTZW5kWE1MSHR0
cFJlcXVlc3RJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3Ry
dW1lbnRXaWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omluc3RydW1lbnREaWREaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudFdpbGxTZW5kWE1MSHR0cFJl
cXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Okluc3BlY3RvclRpbWVs
aW5lQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjppZCk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qczoKKwogMjAxMC0w
OS0zMCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCmluZGV4IDFkZWNlZmEuLmE0NDBiODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0yMDAsOSArMjAwLDkgQEAgdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
IHBhdXNlKQogICAgIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IHBhdXNlOwogfQogCi12b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZSgpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQ
YXVzZU9uTmV4dFN0YXRlbWVudChib29sIHBhdXNlKQogewotICAgIG1fcGF1c2VPbk5leHRTdGF0
ZW1lbnQgPSB0cnVlOworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBwYXVzZTsKIH0KIAog
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YnJlYWtQcm9ncmFtKCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCA0MzJmZTlhLi4zMTcyYzY1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAg
ICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7IH0KICAgICB2b2lkIHNldFBhdXNlT25F
eGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7CiAKLSAgICB2b2lkIHBhdXNl
KCk7CisgICAgdm9pZCBzZXRQYXVzZU9uTmV4dFN0YXRlbWVudChib29sIHBhdXNlKTsKICAgICB2
b2lkIGJyZWFrUHJvZ3JhbSgpOwogICAgIHZvaWQgY29udGludWVQcm9ncmFtKCk7CiAgICAgdm9p
ZCBzdGVwSW50b1N0YXRlbWVudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAppbmRleCAzZjFhMGM1Li43YThkYmY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdERlYnVnU2VydmVyLmNwcApAQCAtMjI1LDEwICsyMjUsMTQgQEAgdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
IHBhdXNlT24KICAgICBzZXRQYXVzZU9uRXhjZXB0aW9uc0Z1bmN0aW9uLT5DYWxsKG1fZGVidWdn
ZXJTY3JpcHQuZ2V0KCksIDEsIGFyZ3YpOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpw
YXVzZSgpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uTmV4dFN0YXRlbWVudChi
b29sIHBhdXNlKQogewotICAgIGlmICghbV9wYXVzZWRQYWdlKQorICAgIGlmIChtX3BhdXNlZFBh
Z2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocGF1c2UpCiAgICAgICAgIHY4OjpEZWJ1Zzo6
RGVidWdCcmVhaygpOworICAgIGVsc2UKKyAgICAgICAgdjg6OkRlYnVnOjpDYW5jZWxEZWJ1Z0Jy
ZWFrKCk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmJyZWFrUHJvZ3JhbSgpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggZDFmZDcxZi4uNWM1ZDZjNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtNzAsNyArNzAsNyBA
QCBwdWJsaWM6CiAgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKCk7CiAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRp
b25zU3RhdGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7CiAKLSAgICB2b2lkIHBhdXNlKCk7Cisg
ICAgdm9pZCBzZXRQYXVzZU9uTmV4dFN0YXRlbWVudChib29sIHBhdXNlKTsKICAgICB2b2lkIGJy
ZWFrUHJvZ3JhbSgpOwogICAgIHZvaWQgY29udGludWVQcm9ncmFtKCk7CiAgICAgdm9pZCBzdGVw
SW50b1N0YXRlbWVudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAppbmRleCA1MzM5NWE4Li4yNGNlYjI2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtNTMsNyArNTMs
NyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgorI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKICNpbmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
QEAgLTI1NzcsMjMgKzI1NzcsNiBAQCBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4gcHJwRXZlbnQpCiAgICAgcmV0dXJuIGRpc3BhdGNoR2VuZXJpY0V2ZW50KGV2ZW50
LnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRpYyBib29sIGV2ZW50SGFzTGlzdGVuZXJzKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgVmVj
dG9yPFJlZlB0cjxDb250YWluZXJOb2RlPiA+JiBhbmNlc3RvcnMpCi17Ci0gICAgaWYgKHdpbmRv
dyAmJiB3aW5kb3ctPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmNlc3Rv
cnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBhbmNl
c3RvcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChhbmNlc3Rvci0+aGFzRXZlbnRMaXN0ZW5lcnMo
ZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgcmV0dXJu
IGZhbHNlOyAgICAKLX0KLQogYm9vbCBOb2RlOjpkaXNwYXRjaEdlbmVyaWNFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBwcnBFdmVudCkKIHsKICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50KHBycEV2ZW50
KTsKQEAgLTI2MTksMTUgKzI2MDIsNyBAQCBib29sIE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgICAgICAgICAgdGFyZ2V0Rm9yV2luZG93
RXZlbnRzID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPih0b3BMZXZlbENvbnRhaW5lciktPmRvbVdp
bmRvdygpOwogICAgIH0KIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgUGFnZSogaW5zcGVj
dGVkUGFnZSA9IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Omluc3RhbmNlQ291bnQoKSA/IGRvY3Vt
ZW50KCktPnBhZ2UoKSA6IDA7Ci0gICAgaWYgKGluc3BlY3RlZFBhZ2UpIHsKLSAgICAgICAgaWYg
KEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBldmVudEhhc0xpc3RlbmVy
cyhldmVudC0+dHlwZSgpLCB0YXJnZXRGb3JXaW5kb3dFdmVudHMsIHRoaXMsIGFuY2VzdG9ycykg
PyBpbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkgOiAwKQotICAgICAgICAg
ICAgdGltZWxpbmVBZ2VudC0+d2lsbERpc3BhdGNoRXZlbnQoKmV2ZW50KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgaW5zcGVjdGVkUGFnZSA9IDA7Ci0gICAgfQotI2VuZGlmCisgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50V2lsbERpc3BhdGNoRXZlbnQoZG9jdW1l
bnQoKSwgKmV2ZW50LCB0YXJnZXRGb3JXaW5kb3dFdmVudHMsIHRoaXMsIGFuY2VzdG9ycyk7CiAK
ICAgICAvLyBHaXZlIHRoZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgYmVm
b3JlIERPTSBldmVudCBoYW5kbGVycyBnZXQgYSBjcmFjay4KICAgICB2b2lkKiBkYXRhID0gcHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwpAQCAtMjcwOSwxMSArMjY4NCw4IEBA
IGRvbmVEaXNwYXRjaGluZzoKICAgICB9CiAKIGRvbmVXaXRoRGVmYXVsdDoKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKQotICAgIGlmIChpbnNwZWN0ZWRQYWdlKQotICAgICAgICBpZiAoSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3BlY3RlZFBhZ2UtPmluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKSkKLSAgICAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZERpc3BhdGNoRXZl
bnQoKTsKLSNlbmRpZgorCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50
RGlkRGlzcGF0Y2hFdmVudChkb2N1bWVudCgpKTsKIAogICAgIHJldHVybiAhZXZlbnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKaW5kZXggNWNjNzc0NC4uNGFkYzgzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKQEAgLTc3OCwxNSArNzc4LDIyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogCiAgICAgICAgIG1f
dGltZXMuY2xlYXIoKTsKICAgICAgICAgbV9jb3VudHMuY2xlYXIoKTsKKwogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQogICAgICAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5jbGVhckZvclBhZ2VOYXZpZ2F0aW9uKCk7CiAKKyAgICAg
ICAgbV9uYXRpdmVCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJC
cmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2V2ZW50TmFtZXNNYXAuY2xlYXIoKTsKICAg
ICAgICAgbV9YSFJCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2xhc3RCcmVha3BvaW50
SWQgPSAwOwogI2VuZGlmCisKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNF
KEpTQykKICAgICAgICAgbV9wcm9maWxlckFnZW50LT5yZXNldFN0YXRlKCk7CiAjZW5kaWYKKwog
ICAgICAgICAvLyB1bmJpbmRBbGxSZXNvdXJjZXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgZGF0
YWJhc2UgYW5kIERPTSBzdG9yYWdlCiAgICAgICAgIC8vIHJlc291cmNlcyBhcmUgY2xlYXJlZCBz
byB0aGF0IGl0IGhhcyBhIGNoYW5jZSB0byB1bmJpbmQgdGhlbS4KICAgICAgICAgdW5iaW5kQWxs
UmVzb3VyY2VzKCk7CkBAIC0xNjcxLDIxICsxNjc4LDU3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0TmF0aXZlQnJlYWtwb2ludChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJl
YWtwCiAgICAgU3RyaW5nIHR5cGU7CiAgICAgaWYgKCFicmVha3BvaW50LT5nZXRTdHJpbmcoInR5
cGUiLCAmdHlwZSkpCiAgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBjb25kaXRpb24gPSBicmVha3BvaW50LT5nZXRPYmplY3QoImNvbmRpdGlvbiIpOworICAgIGlm
ICghY29uZGl0aW9uKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKHR5cGUgPT0gIlhIUiIpIHsK
LSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29uZGl0aW9uID0gYnJlYWtwb2ludC0+
Z2V0T2JqZWN0KCJjb25kaXRpb24iKTsKLSAgICAgICAgaWYgKCFjb25kaXRpb24pCi0gICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIFN0cmluZyB1cmw7CiAgICAgICAgIGlmICghY29uZGl0aW9u
LT5nZXRTdHJpbmcoInVybCIsICZ1cmwpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAq
YnJlYWtwb2ludElkID0gKyttX2xhc3RCcmVha3BvaW50SWQ7CisgICAgICAgIG1fbmF0aXZlQnJl
YWtwb2ludHMuc2V0KCpicmVha3BvaW50SWQsICJYSFIiKTsKICAgICAgICAgbV9YSFJCcmVha3Bv
aW50cy5zZXQoKmJyZWFrcG9pbnRJZCwgdXJsKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIkV2
ZW50TGlzdGVuZXIiKSB7CisgICAgICAgIFN0cmluZyBldmVudE5hbWU7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uLT5nZXRTdHJpbmcoImV2ZW50TmFtZSIsICZldmVudE5hbWUpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAqYnJlYWtwb2ludElkID0gKyttX2xhc3RCcmVha3BvaW50SWQ7
CisgICAgICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50SWQsICJFdmVudExp
c3RlbmVyIik7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLnNldCgqYnJlYWtw
b2ludElkLCBldmVudE5hbWUpOworICAgICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQgaW50
Pjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50TmFtZXNNYXAuZmluZChldmVudE5hbWUpOworICAgICAg
ICBpZiAoaXQgPT0gbV9ldmVudE5hbWVzTWFwLmVuZCgpKQorICAgICAgICAgICAgbV9ldmVudE5h
bWVzTWFwLnNldChldmVudE5hbWUsIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdC0+
c2Vjb25kICs9IDE7CiAgICAgfQogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92
ZU5hdGl2ZUJyZWFrcG9pbnQodW5zaWduZWQgaW50IGJyZWFrcG9pbnRJZCkKIHsKLSAgICBtX1hI
UkJyZWFrcG9pbnRzLnJlbW92ZShicmVha3BvaW50SWQpOworICAgIFN0cmluZyB0eXBlID0gbV9u
YXRpdmVCcmVha3BvaW50cy50YWtlKGJyZWFrcG9pbnRJZCk7CisgICAgaWYgKHR5cGUgPT0gIlhI
UiIpCisgICAgICAgIG1fWEhSQnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnRJZCk7CisgICAg
ZWxzZSBpZiAodHlwZSA9PSAiRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgICAgU3RyaW5nIGV2ZW50
TmFtZSA9IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLnRha2UoYnJlYWtwb2ludElkKTsKKyAg
ICAgICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ldmVu
dE5hbWVzTWFwLmZpbmQoZXZlbnROYW1lKTsKKyAgICAgICAgaXQtPnNlY29uZCAtPSAxOworICAg
ICAgICBpZiAoIWl0LT5zZWNvbmQpCisgICAgICAgICAgICBtX2V2ZW50TmFtZXNNYXAucmVtb3Zl
KGl0KTsKKyAgICB9Cit9CisKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdWxkQnJlYWtP
bkV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQoreworICAgIHJldHVybiBtX2V2ZW50TmFt
ZXNNYXAuY29udGFpbnMoZXZlbnROYW1lKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzaG91bGRCcmVha09uWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAg
Zm9yIChIYXNoTWFwPHVuc2lnbmVkIGludCwgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX1hIUkJy
ZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9IG1fWEhSQnJlYWtwb2ludHMuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+c2Vjb25kKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKICNlbmRpZgpAQCAtMjA5Niwy
NiArMjEzOSw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsb2FkUGFnZSgpCiAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1
bGVSZWZyZXNoKHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3RydW1l
bnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IEtVUkwmIHVybCkKLXsKLSNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBpZiAobV9kZWJ1Z2dlckFnZW50KSB7Ci0gICAgICAg
IGlmICghbV9YSFJCcmVha3BvaW50cy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9Y
SFJCcmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBtX1hIUkJyZWFrcG9pbnRzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgICAgICBpZiAoIXVybC5zdHJpbmcoKS5jb250YWlucyhpdC0+c2Vjb25kKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAg
ICBldmVudERhdGEtPnNldFN0cmluZygidHlwZSIsICJYSFIiKTsKLSAgICAgICAgICAgIGV2ZW50
RGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwotICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERh
dGEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDU2MTZlMDIuLjJmZWNk
OTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI2MSw3ICsy
NjEsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5hdGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGludCogYnJlYWtwb2ludElk
KTsKICAgICB2b2lkIHJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQodW5zaWduZWQgaW50IGJyZWFrcG9p
bnRJZCk7Ci0KICNlbmRpZgogCiAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxv
bmcgdGVzdENhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpOwpAQCAtMjk4LDkgKzI5NywxMSBA
QCBwcml2YXRlOgogICAgIHZvaWQgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotCiAgICAgdm9pZCB0b2dnbGVSZWNvcmRC
dXR0b24oYm9vbCk7CiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChib29sIGFs
d2F5cyk7CisKKyAgICBib29sIHNob3VsZEJyZWFrT25FdmVudChjb25zdCBTdHJpbmcmIGV2ZW50
TmFtZSk7CisgICAgYm9vbCBzaG91bGRCcmVha09uWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5n
Jik7CiAjZW5kaWYKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgdm9pZCBzZWxlY3REYXRhYmFz
ZShEYXRhYmFzZSogZGF0YWJhc2UpOwpAQCAtMzI5LDggKzMzMCw2IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYganNvblJlc3VsdCk7CiAKLSAgICB2b2lkIGluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBS
ZXF1ZXN0KGNvbnN0IEtVUkwmKTsKLQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQog
ICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogICAgIFN0cmluZyBicmVh
a3BvaW50c1NldHRpbmdLZXkoKTsKQEAgLTM5Miw2ICszOTEsOSBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjsKICAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudD4gbV9kZWJ1Z2dlckFnZW50OwogCisgICAgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFN0
cmluZz4gbV9uYXRpdmVCcmVha3BvaW50czsKKyAgICBIYXNoTWFwPHVuc2lnbmVkIGludCwgU3Ry
aW5nPiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50czsKKyAgICBIYXNoTWFwPFN0cmluZywgdW5z
aWduZWQgaW50PiBtX2V2ZW50TmFtZXNNYXA7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFN0
cmluZz4gbV9YSFJCcmVha3BvaW50czsKICAgICB1bnNpZ25lZCBpbnQgbV9sYXN0QnJlYWtwb2lu
dElkOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmlu
ZGV4IDQ5NjRjMDkuLjk4NmU5YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCkBAIC01Nyw4ICs1Nyw2IEBAIFBhc3NPd25QdHI8SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3BlY3RvckNvbnRy
CiAgICAgcmV0dXJuIGFnZW50LnJlbGVhc2UoKTsKIH0KIAotSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dCogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0g
MDsKLQogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQpCiAgICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxl
cikKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCkBAIC03MSw5ICs2OSw2IEBAIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkKIHsKICAgICBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlTGlzdGVuZXIodGhpcywgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCkpOwogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSAwOwot
Ci0gICAgaWYgKHRoaXMgPT0gc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50KQotICAgICAgICBz
X2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwogfQogCiBib29sIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmlzRGVidWdnZXJBbHdheXNFbmFibGVkKCkKQEAgLTE0Nyw5ICsxNDIsMjMgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCwgU3RyaW5nKiBzY3IKICAgICAqc2NyaXB0U291cmNlID0gbV9zY3JpcHRJRFRv
Q29udGVudC5nZXQoc291cmNlSUQpOwogfQogCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoRGVidWdnZXJFdmVudFR5cGUgdHlwZSwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZGF0YSkKK3sKKyAgICBtX2JyZWFrUHJvZ3JhbURldGFp
bHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYnJlYWtQcm9ncmFtRGV0YWls
cy0+c2V0TnVtYmVyKCJldmVudFR5cGUiLCB0eXBlKTsKKyAgICBtX2JyZWFrUHJvZ3JhbURldGFp
bHMtPnNldFZhbHVlKCJldmVudERhdGEiLCBkYXRhKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2hhcmVkKCkuc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQodHJ1ZSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKQoreworICAgIG1f
YnJlYWtQcm9ncmFtRGV0YWlscyA9IDA7CisgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgp
LnNldFBhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKTsKK30KKwogdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpwYXVzZSgpCiB7Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnBh
dXNlKCk7CisgICAgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChKYXZhU2NyaXB0UGF1c2VF
dmVudFR5cGUsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZSgpCkBAIC0zMDUsNiArMzE0LDcgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKIHsKICAgICBtX3BhdXNlZFNj
cmlwdFN0YXRlID0gMDsKKyAgICBtX2JyZWFrUHJvZ3JhbURldGFpbHMgPSAwOwogICAgIG1fZnJv
bnRlbmQtPnJlc3VtZWRTY3JpcHQoKTsKIH0KIApAQCAtMzEzLDE0ICszMjMsNyBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShEZWJ1Z2dlckV2ZW50VHlwZSB0eXBl
LCBQYXNzUmVmUHRyPElucwogICAgIG1fYnJlYWtQcm9ncmFtRGV0YWlscyA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgbV9icmVha1Byb2dyYW1EZXRhaWxzLT5zZXROdW1iZXIoImV2
ZW50VHlwZSIsIHR5cGUpOwogICAgIG1fYnJlYWtQcm9ncmFtRGV0YWlscy0+c2V0VmFsdWUoImV2
ZW50RGF0YSIsIGRhdGEpOwotICAgIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IHRoaXM7
Ci0KICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYnJlYWtQcm9ncmFtKCk7Ci0gICAg
aWYgKCFzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7Ci0gICAgbV9icmVha1Byb2dyYW1EZXRh
aWxzID0gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDhhNTM3OWQuLjUyMzBiODggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQ3LDYgKzQ3LDcgQEAg
Y2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiAKIGVudW0gRGVi
dWdnZXJFdmVudFR5cGUgeworICAgIEphdmFTY3JpcHRQYXVzZUV2ZW50VHlwZSwKICAgICBET01C
cmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsCiAgICAgTmF0aXZlQnJlYWtwb2ludERlYnVnZ2Vy
RXZlbnRUeXBlCiB9OwpAQCAtNjYsOCArNjcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZWRpdFNj
cmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIG5ld0NvbnRl
bnQsIGJvb2wqIHN1Y2Nlc3MsIFN0cmluZyogcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiBuZXdDYWxsRnJhbWVzKTsKICAgICB2b2lkIGdldFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSk7CiAKLSAgICB2b2lkIHBhdXNlKCk7Cisg
ICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KERlYnVnZ2VyRXZlbnRUeXBlIHR5
cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRhdGEpOworICAgIHZvaWQgY2FuY2VsUGF1
c2VPbk5leHRTdGF0ZW1lbnQoKTsKICAgICB2b2lkIGJyZWFrUHJvZ3JhbShEZWJ1Z2dlckV2ZW50
VHlwZSB0eXBlLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkYXRhKTsKKyAgICB2b2lkIHBh
dXNlKCk7CiAgICAgdm9pZCByZXN1bWUoKTsKICAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50KCk7
CiAgICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggZmJiY2NlNC4uZTQ4MGJjMSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC0zMywx
MyArMzMsNjkgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNsdWRlICJET01XaW5k
b3cuaCIKKyNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGludCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnNfZnJvbnRlbmRDb3VudGVyID0gMDsKK2ludCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnNfY2FsbERlcHRoID0gMDsKK2ludCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNfbWluQ2FsbERlcHRoID0gMDsKKworc3RhdGljIGJvb2wgZXZlbnRIYXNMaXN0ZW5l
cnMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERPTVdpbmRvdyogd2luZG93LCBOb2Rl
KiBub2RlLCBjb25zdCBWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+ID4mIGFuY2VzdG9ycykK
K3sKKyAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBl
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobm9kZS0+aGFzRXZlbnRMaXN0ZW5l
cnMoZXZlbnRUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFuY2VzdG9ycy5zaXplKCk7IGkrKykgeworICAgICAgICBDb250YWluZXJOb2Rl
KiBhbmNlc3RvciA9IGFuY2VzdG9yc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGFuY2VzdG9yLT5o
YXNFdmVudExpc3RlbmVycyhldmVudFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0eXBlZGVmIFZlY3RvcjxpbnQ+IFRpbWVs
aW5lQWdlbnRzU3RhY2s7CisKK3N0YXRpYyBUaW1lbGluZUFnZW50c1N0YWNrJiB0aW1lbGluZUFn
ZW50c1N0YWNrKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRpbWVsaW5lQWdlbnRzU3Rh
Y2ssIHN0YWNrLCAoKSk7CisgICAgcmV0dXJuIHN0YWNrOworfQorCit2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkTm90aWZ5VGltZWxpbmVBZ2VudEJlZm9yZUV2ZW50KCkKK3sKKyAg
ICBUaW1lbGluZUFnZW50c1N0YWNrJiBzdGFjayA9IHRpbWVsaW5lQWdlbnRzU3RhY2soKTsKKyAg
ICB3aGlsZSAoIXN0YWNrLmlzRW1wdHkoKSAmJiBzdGFjay5sYXN0KCkgPj0gc19taW5DYWxsRGVw
dGgpCisgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICB0aW1lbGluZUFnZW50c1N0YWNr
KCkuYXBwZW5kKHNfY2FsbERlcHRoKTsKKyAgICBzX21pbkNhbGxEZXB0aCA9IHNfY2FsbERlcHRo
OworfQorCitib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxkTm90aWZ5VGltZWxp
bmVBZ2VudEFmdGVyRXZlbnQoKQoreworICAgIGlmIChzX2NhbGxEZXB0aCA+IHNfbWluQ2FsbERl
cHRoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgVGltZWxpbmVBZ2VudHNTdGFjayYgc3Rh
Y2sgPSB0aW1lbGluZUFnZW50c1N0YWNrKCk7CisgICAgd2hpbGUgKCFzdGFjay5pc0VtcHR5KCkp
IHsKKyAgICAgICAgaW50IGNhbGxEZXB0aCA9IHN0YWNrLmxhc3QoKTsKKyAgICAgICAgaWYgKGNh
bGxEZXB0aCA8IHNfY2FsbERlcHRoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBzdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIGlmIChjYWxsRGVwdGggPT0gc19jYWxsRGVw
dGgpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGVJbXBs
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIE5vZGUqIG5vZGUsIE5v
ZGUqIHBhcmVudCkKIHsKQEAgLTEyNCwxMSArMTgwLDYyIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluCiAgICAgICAgIGRvbUFnZW50LT5jaGFyYWN0ZXJEYXRhTW9kaWZpZWQoY2hhcmFjdGVyRGF0
YSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50V2lsbFNl
bmRYTUxIdHRwUmVxdWVzdEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlciwgY29uc3QgS1VSTCYgdXJsKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omlu
c3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlciwgY29uc3QgRXZlbnQmIGV2ZW50LCBET01XaW5kb3cqIHdpbmRvdywgTm9k
ZSogbm9kZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxDb250YWluZXJOb2RlPiA+JiBhbmNlc3RvcnMp
CiB7CiAgICAgaWYgKCFpbnNwZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgaW5zcGVjdG9yQ29udHJvbGxlci0+aW5zdHJ1bWVudFdpbGxTZW5kWE1M
SHR0cFJlcXVlc3QodXJsKTsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAg
IGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQ29u
dHJvbGxlci0+bV9kZWJ1Z2dlckFnZW50LmdldCgpKSB7CisgICAgICAgIGlmIChpbnNwZWN0b3JD
b250cm9sbGVyLT5zaG91bGRCcmVha09uRXZlbnQoZXZlbnQudHlwZSgpKSkgeworICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJ0eXBlIiwgIkV2ZW50
TGlzdGVuZXIiKTsKKyAgICAgICAgICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJldmVudE5hbWUi
LCBldmVudC50eXBlKCkpOworICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+c2NoZWR1bGVQYXVz
ZU9uTmV4dFN0YXRlbWVudChOYXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50
RGF0YSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX3RpbWVsaW5lQWdl
bnQuZ2V0KCk7CisgICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYgZXZlbnRIYXNMaXN0ZW5lcnMoZXZl
bnQudHlwZSgpLCB3aW5kb3csIG5vZGUsIGFuY2VzdG9ycykpIHsKKyAgICAgICAgdGltZWxpbmVB
Z2VudC0+d2lsbERpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgICAgICBkaWROb3RpZnlUaW1lbGlu
ZUFnZW50QmVmb3JlRXZlbnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjppbnN0cnVtZW50RGlkRGlzcGF0Y2hFdmVudEltcGwoSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlcikKK3sKKyAgICBpZiAoIWluc3BlY3RvckNvbnRyb2xsZXIt
Pmhhc0Zyb250ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQorICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50
ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kZWJ1Z2dlckFnZW50LmdldCgpKQorICAgICAgICBk
ZWJ1Z2dlckFnZW50LT5jYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOworI2VuZGlmCisKKyAg
ICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zcGVjdG9yQ29udHJv
bGxlci0+bV90aW1lbGluZUFnZW50LmdldCgpOworICAgIGlmICh0aW1lbGluZUFnZW50ICYmIHNo
b3VsZE5vdGlmeVRpbWVsaW5lQWdlbnRBZnRlckV2ZW50KCkpCisgICAgICAgIHRpbWVsaW5lQWdl
bnQtPmRpZERpc3BhdGNoRXZlbnQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246Omluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBjb25zdCBTdHJpbmcmIHVybCkKK3sKKyNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBpZiAoIWluc3BlY3RvckNvbnRyb2xsZXItPmhh
c0Zyb250ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQu
Z2V0KCk7CisgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIWluc3BlY3RvckNvbnRyb2xsZXItPnNob3VsZEJyZWFrT25YTUxIdHRwUmVxdWVzdCh1cmwp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5n
KCJ0eXBlIiwgIlhIUiIpOworICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwor
ICAgIGRlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShOYXRpdmVCcmVha3BvaW50RGVidWdnZXJF
dmVudFR5cGUsIGV2ZW50RGF0YSk7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCA0
ZDgwNGNkLi5lZjAxOTVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaApAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBD
aGFyYWN0ZXJEYXRhOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7
Ci1jbGFzcyBLVVJMOwogY2xhc3MgTm9kZTsKIAogY2xhc3MgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uIHsKQEAgLTUyLDcgKzUxLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaWRNb2Rp
ZnlET01BdHRyKERvY3VtZW50KiwgRWxlbWVudCopOwogICAgIHN0YXRpYyB2b2lkIGNoYXJhY3Rl
ckRhdGFNb2RpZmllZChEb2N1bWVudCosIENoYXJhY3RlckRhdGEqKTsKIAotICAgIHN0YXRpYyB2
b2lkIGluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBLVVJMJik7CisgICAgc3RhdGljIHZvaWQgaW5zdHJ1bWVudFdpbGxEaXNwYXRj
aEV2ZW50KERvY3VtZW50KiwgY29uc3QgRXZlbnQmLCBET01XaW5kb3cqLCBOb2RlKiwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxDb250YWluZXJOb2RlPiA+JiBhbmNlc3RvcnMpOworICAgIHN0YXRpYyB2
b2lkIGluc3RydW1lbnREaWREaXNwYXRjaEV2ZW50KERvY3VtZW50Kik7CisKKyAgICBzdGF0aWMg
dm9pZCBpbnN0cnVtZW50V2lsbFNlbmRYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJik7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIHN0YXRp
YyB2b2lkIGZyb250ZW5kQ3JlYXRlZCgpIHsgc19mcm9udGVuZENvdW50ZXIgKz0gMTsgfQpAQCAt
NjIsNiArNjQsOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KyAgICBzdGF0aWMgdm9pZCBkaWROb3RpZnlUaW1lbGluZUFnZW50QmVmb3JlRXZlbnQoKTsKKyAg
ICBzdGF0aWMgYm9vbCBzaG91bGROb3RpZnlUaW1lbGluZUFnZW50QWZ0ZXJFdmVudCgpOworCiAg
ICAgc3RhdGljIHZvaWQgd2lsbEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIq
LCBOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpOwogICAgIHN0YXRpYyB2b2lkIGRpZEluc2VydERP
TU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBOb2RlKik7CiAgICAgc3RhdGljIHZvaWQg
d2lsbFJlbW92ZURPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBOb2RlKik7CkBAIC03
MCwxMyArNzUsMTggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRNb2RpZnlET01BdHRy
SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgRWxlbWVudCopOwogICAgIHN0YXRpYyB2b2lkIGNo
YXJhY3RlckRhdGFNb2RpZmllZEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciosIENoYXJhY3RlckRh
dGEqKTsKIAotICAgIHN0YXRpYyB2b2lkIGluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0
SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgY29uc3QgS1VSTCYpOworICAgIHN0YXRpYyB2b2lk
IGluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciosIGNv
bnN0IEV2ZW50JiwgRE9NV2luZG93KiwgTm9kZSosIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q29udGFp
bmVyTm9kZT4gPiYgYW5jZXN0b3JzKTsKKyAgICBzdGF0aWMgdm9pZCBpbnN0cnVtZW50RGlkRGlz
cGF0Y2hFdmVudEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciopOworCisgICAgc3RhdGljIHZvaWQg
aW5zdHJ1bWVudFdpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIq
LCBjb25zdCBTdHJpbmcmKTsKIAogICAgIHN0YXRpYyBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyRm9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CiAgICAgc3RhdGljIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2xsZXJGb3JEb2N1bWVudChEb2N1bWVudCopOwogICAgIHN0YXRpYyBJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyRm9yUGFnZShQYWdlKik7CiAKICAgICBzdGF0aWMgaW50
IHNfZnJvbnRlbmRDb3VudGVyOworICAgIHN0YXRpYyBpbnQgc19jYWxsRGVwdGg7CisgICAgc3Rh
dGljIGludCBzX21pbkNhbGxEZXB0aDsKICNlbmRpZgogfTsKIApAQCAtMTMwLDcgKzE0MCwyNyBA
QCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNoYXJhY3RlckRhdGFNb2Rp
ZmllZChEb2N1bWVudCogZG9jdW1lbnQsCiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50V2lsbFNlbmRYTUxIdHRwUmVxdWVzdChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwpCitpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudChE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93KiB3aW5kb3cs
IE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q29udGFpbmVyTm9kZT4gPiYgYW5jZXN0
b3JzKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgc19jYWxsRGVwdGggKz0gMTsKKyAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3Rv
ckNvbnRyb2xsZXJGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIGluc3RydW1lbnRXaWxs
RGlzcGF0Y2hFdmVudEltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwgZXZlbnQsIHdpbmRvdywgbm9k
ZSwgYW5jZXN0b3JzKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246Omluc3RydW1lbnREaWREaXNwYXRjaEV2ZW50KERvY3VtZW50KiBkb2N1bWVudCkK
K3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckRvY3VtZW50KGRvY3Vt
ZW50KSkKKyAgICAgICAgaW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnRJbXBsKGluc3BlY3RvckNv
bnRyb2xsZXIpOworICAgIHNfY2FsbERlcHRoIC09IDE7CisgICAgaWYgKHNfY2FsbERlcHRoIDwg
c19taW5DYWxsRGVwdGgpCisgICAgICAgIHNfbWluQ2FsbERlcHRoID0gc19jYWxsRGVwdGg7Cisj
ZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVt
ZW50V2lsbFNlbmRYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJv
bGxlckZvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCmluZGV4IGZiYjE3YzQuLjU1MGJkOTUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCkBAIC00NSw5
ICs0NSwxMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBpbnQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6c19pbnN0YW5jZUNvdW50ID0gMDsKK2ludCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpz
X2lkID0gMDsKIAogSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6SW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBtX2Zyb250ZW5kKGZyb250ZW5k
KQorICAgICwgbV9pZCgrK3NfaWQpCiB7CiAgICAgKytzX2luc3RhbmNlQ291bnQ7CiAgICAgU2Ny
aXB0R0NFdmVudDo6YWRkRXZlbnRMaXN0ZW5lcih0aGlzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaAppbmRleCA2YjMzMjRiLi42N2QzMTBkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1
YmxpYzoKICAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KEluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCk7CiAgICAgfkluc3BlY3RvclRpbWVsaW5lQWdlbnQoKTsKIAorICAgIGludCBpZCgpIHsg
cmV0dXJuIG1faWQ7IH0KKwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIHJlc2V0RnJvbnRl
bmRQcm94eU9iamVjdChJbnNwZWN0b3JGcm9udGVuZCopOwogCkBAIC0xNTYsNiArMTU4LDggQEAg
cHJpdmF0ZToKIAogICAgIFZlY3RvcjxUaW1lbGluZVJlY29yZEVudHJ5PiBtX3JlY29yZFN0YWNr
OwogICAgIHN0YXRpYyBpbnQgc19pbnN0YW5jZUNvdW50OworICAgIHN0YXRpYyBpbnQgc19pZDsK
KyAgICBpbnQgbV9pZDsKICAgICBzdHJ1Y3QgR0NFdmVudCB7CiAgICAgICAgIEdDRXZlbnQoZG91
YmxlIHN0YXJ0VGltZSwgZG91YmxlIGVuZFRpbWUsIHNpemVfdCBjb2xsZWN0ZWRCeXRlcykKICAg
ICAgICAgICAgIDogc3RhcnRUaW1lKHN0YXJ0VGltZSksIGVuZFRpbWUoZW5kVGltZSksIGNvbGxl
Y3RlZEJ5dGVzKGNvbGxlY3RlZEJ5dGVzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzCmluZGV4IDYyMTJlYTEuLmEwZTVlM2IgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFu
ZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBh
bmUuanMKQEAgLTI5LDggKzI5LDkgQEAgV2ViSW5zcGVjdG9yLkNhbGxTdGFja1NpZGViYXJQYW5l
ID0gZnVuY3Rpb24oKQogfQogCiBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUuRGVi
dWdnZXJFdmVudFR5cGUgPSB7Ci0gICAgRE9NQnJlYWtwb2ludDogMCwKLSAgICBOYXRpdmVCcmVh
a3BvaW50OiAxCisgICAgSmF2YVNjcmlwdFBhdXNlOiAwLAorICAgIERPTUJyZWFrcG9pbnQ6IDEs
CisgICAgTmF0aXZlQnJlYWtwb2ludDogMgogfTsKIAogV2ViSW5zcGVjdG9yLkNhbGxTdGFja1Np
ZGViYXJQYW5lLnByb3RvdHlwZSA9IHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69622</attachid>
            <date>2010-10-04 05:58:17 -0700</date>
            <delta_ts>2014-08-20 12:12:45 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>26657</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDk2MDJkYS4uZTM0Mjg4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0xMC0wNCAgcG9kaXZpbG92QGNo
cm9taXVtLm9yZyAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW1wbGVtZW50IHBh
dXNpbmcgb24gZXZlbnQgbGlzdGVuZXJzIChiYWNrLWVuZCBwYXJ0KQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY2MjQKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpzZXRQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1
Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1
c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
ZGlzcGF0Y2hHZW5lcmljRXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENv
bW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0TmF0
aXZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZW1vdmVOYXRpdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3VsZEJyZWFrT25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzaG91bGRCcmVha09uWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0YXRl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0p
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpldmVudEhhc0xpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omluc3RydW1lbnRXaWxsRGlzcGF0Y2hFdmVudEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50RGlkRGlzcGF0Y2hF
dmVudEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
bnN0cnVtZW50V2lsbFNlbmRYTUxIdHRwUmVxdWVzdEltcGwpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudFdpbGxEaXNwYXRjaEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudERpZERpc3BhdGNo
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0
cnVtZW50V2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OmlkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1Np
ZGViYXJQYW5lLmpzOgorCiAyMDEwLTEwLTAzICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXggZm9yIHI2ODk5Ni4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggMWRlY2VmYS4uYTQ0MGI4
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTIwMCw5
ICsyMDAsOSBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2UpCiAgICAgbV9wYXVzZU9uRXhjZXB0aW9u
c1N0YXRlID0gcGF1c2U7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlKCkKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25OZXh0U3RhdGVtZW50KGJvb2wgcGF1c2Up
CiB7Ci0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CisgICAgbV9wYXVzZU9uTmV4
dFN0YXRlbWVudCA9IHBhdXNlOwogfQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpicmVha1By
b2dyYW0oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCmluZGV4IDQzMmZl
OWEuLjMxNzJjNjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKQEAg
LTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZTsgfQogICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKTsKIAotICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIHNldFBhdXNlT25OZXh0U3Rh
dGVtZW50KGJvb2wgcGF1c2UpOwogICAgIHZvaWQgYnJlYWtQcm9ncmFtKCk7CiAgICAgdm9pZCBj
b250aW51ZVByb2dyYW0oKTsKICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDNmMWEwYzUuLjdhOGRiZjcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0yMjUsMTAg
KzIyNSwxNCBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2VPbgogICAgIHNldFBhdXNlT25FeGNlcHRp
b25zRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7CiB9CiAK
LXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlKCkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNldFBhdXNlT25OZXh0U3RhdGVtZW50KGJvb2wgcGF1c2UpCiB7Ci0gICAgaWYgKCFtX3BhdXNl
ZFBhZ2UpCisgICAgaWYgKG1fcGF1c2VkUGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChw
YXVzZSkKICAgICAgICAgdjg6OkRlYnVnOjpEZWJ1Z0JyZWFrKCk7CisgICAgZWxzZQorICAgICAg
ICB2ODo6RGVidWc6OkNhbmNlbERlYnVnQnJlYWsoKTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6YnJlYWtQcm9ncmFtKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
aAppbmRleCBkMWZkNzFmLi41YzVkNmM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1
Z1NlcnZlci5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKTsKICAgICB2b2lkIHNldFBhdXNlT25FeGNl
cHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KTsKIAotICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIHNldFBhdXNlT25OZXh0U3RhdGVtZW50
KGJvb2wgcGF1c2UpOwogICAgIHZvaWQgYnJlYWtQcm9ncmFtKCk7CiAgICAgdm9pZCBjb250aW51
ZVByb2dyYW0oKTsKICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDUzMzk1YTgu
LjY4NjY2YTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCkBAIC01Myw3ICs1Myw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxhYmVsc05vZGVMaXN0
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtMjU3NywyMyArMjU3Nyw2IEBAIGJvb2wgTm9k
ZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICByZXR1cm4g
ZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKIH0KIAotc3RhdGljIGJvb2wg
ZXZlbnRIYXNMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERPTVdpbmRv
dyogd2luZG93LCBOb2RlKiBub2RlLCBWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+ID4mIGFu
Y2VzdG9ycykKLXsKLSAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzRXZlbnRMaXN0ZW5lcnMo
ZXZlbnRUeXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAobm9kZS0+aGFzRXZl
bnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFuY2VzdG9ycy5zaXplKCk7IGkrKykgewotICAgICAgICBDb250
YWluZXJOb2RlKiBhbmNlc3RvciA9IGFuY2VzdG9yc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKGFu
Y2VzdG9yLT5oYXNFdmVudExpc3RlbmVycyhldmVudFR5cGUpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICByZXR1cm4gZmFsc2U7ICAgIAotfQotCiBib29sIE5vZGU6OmRp
c3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogewogICAgIFJl
ZlB0cjxFdmVudD4gZXZlbnQocHJwRXZlbnQpOwpAQCAtMjYxOSwxNSArMjYwMiw3IEBAIGJvb2wg
Tm9kZTo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAg
ICAgICAgICAgICB0YXJnZXRGb3JXaW5kb3dFdmVudHMgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHRvcExldmVsQ29udGFpbmVyKS0+ZG9tV2luZG93KCk7CiAgICAgfQogCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUikKLSAgICBQYWdlKiBpbnNwZWN0ZWRQYWdlID0gSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6aW5zdGFuY2VDb3VudCgpID8gZG9jdW1lbnQoKS0+cGFnZSgpIDogMDsKLSAgICBpZiAoaW5z
cGVjdGVkUGFnZSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxp
bmVBZ2VudCA9IGV2ZW50SGFzTGlzdGVuZXJzKGV2ZW50LT50eXBlKCksIHRhcmdldEZvcldpbmRv
d0V2ZW50cywgdGhpcywgYW5jZXN0b3JzKSA/IGluc3BlY3RlZFBhZ2UtPmluc3BlY3RvclRpbWVs
aW5lQWdlbnQoKSA6IDApCi0gICAgICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsRGlzcGF0Y2hF
dmVudCgqZXZlbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbnNwZWN0ZWRQYWdlID0g
MDsKLSAgICB9Ci0jZW5kaWYKKyAgICBpbnQgaW5zdHJ1bWVudGF0aW9uQ29va2llID0gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50V2lsbERpc3BhdGNoRXZlbnQoZG9jdW1lbnQo
KSwgKmV2ZW50LCB0YXJnZXRGb3JXaW5kb3dFdmVudHMsIHRoaXMsIGFuY2VzdG9ycyk7CiAKICAg
ICAvLyBHaXZlIHRoZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgYmVmb3Jl
IERPTSBldmVudCBoYW5kbGVycyBnZXQgYSBjcmFjay4KICAgICB2b2lkKiBkYXRhID0gcHJlRGlz
cGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwpAQCAtMjcwOSwxMSArMjY4NCw4IEBAIGRv
bmVEaXNwYXRjaGluZzoKICAgICB9CiAKIGRvbmVXaXRoRGVmYXVsdDoKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIGlmIChpbnNwZWN0ZWRQYWdlKQotICAgICAgICBpZiAoSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3BlY3RlZFBhZ2UtPmluc3BlY3RvclRpbWVs
aW5lQWdlbnQoKSkKLSAgICAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZERpc3BhdGNoRXZlbnQo
KTsKLSNlbmRpZgorCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50RGlk
RGlzcGF0Y2hFdmVudChkb2N1bWVudCgpLCBpbnN0cnVtZW50YXRpb25Db29raWUpOwogCiAgICAg
cmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBiNWNmZjhkLi5mMjljMGRlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTMyLDYgKzEzMiw5IEBAIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlU3RhdGVOYW1lID0g
InBhdXNlT25FeGNlcHRpb25zU3RhCiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0
b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwogCitzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiWEhSIjsKK3N0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUg
PSAiRXZlbnRMaXN0ZW5lciI7CisKIGNvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xs
ZXI6OkVsZW1lbnRzUGFuZWwgPSAiZWxlbWVudHMiOwogY29uc3QgY2hhciogY29uc3QgSW5zcGVj
dG9yQ29udHJvbGxlcjo6Q29uc29sZVBhbmVsID0gImNvbnNvbGUiOwogY29uc3QgY2hhciogY29u
c3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2NyaXB0c1BhbmVsID0gInNjcmlwdHMiOwpAQCAtNzc4
LDE1ICs3ODEsMjIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIpCiAKICAgICAgICAgbV90aW1lcy5jbGVhcigpOwogICAgICAg
ICBtX2NvdW50cy5jbGVhcigpOworCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnQt
PmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsKIAorICAgICAgICBtX25hdGl2ZUJyZWFrcG9pbnRz
LmNsZWFyKCk7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyKCk7Cisg
ICAgICAgIG1fZXZlbnROYW1lVG9CcmVha3BvaW50Q291bnQuY2xlYXIoKTsKICAgICAgICAgbV9Y
SFJCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2xhc3RCcmVha3BvaW50SWQgPSAwOwog
I2VuZGlmCisKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKICAg
ICAgICAgbV9wcm9maWxlckFnZW50LT5yZXNldFN0YXRlKCk7CiAjZW5kaWYKKwogICAgICAgICAv
LyB1bmJpbmRBbGxSZXNvdXJjZXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgZGF0YWJhc2UgYW5k
IERPTSBzdG9yYWdlCiAgICAgICAgIC8vIHJlc291cmNlcyBhcmUgY2xlYXJlZCBzbyB0aGF0IGl0
IGhhcyBhIGNoYW5jZSB0byB1bmJpbmQgdGhlbS4KICAgICAgICAgdW5iaW5kQWxsUmVzb3VyY2Vz
KCk7CkBAIC0xNjc1LDIxICsxNjg1LDU3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
TmF0aXZlQnJlYWtwb2ludChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwCiAgICAg
U3RyaW5nIHR5cGU7CiAgICAgaWYgKCFicmVha3BvaW50LT5nZXRTdHJpbmcoInR5cGUiLCAmdHlw
ZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAodHlwZSA9PSAiWEhSIikgewotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb25kaXRpb24gPSBicmVha3BvaW50LT5nZXRPYmplY3Qo
ImNvbmRpdGlvbiIpOwotICAgICAgICBpZiAoIWNvbmRpdGlvbikKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb25kaXRpb24gPSBicmVha3BvaW50LT5n
ZXRPYmplY3QoImNvbmRpdGlvbiIpOworICAgIGlmICghY29uZGl0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKHR5cGUgPT0geGhyTmF0aXZlQnJlYWtwb2ludFR5cGUpIHsKICAgICAgICAg
U3RyaW5nIHVybDsKICAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldFN0cmluZygidXJsIiwgJnVy
bCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICpicmVha3BvaW50SWQgPSArK21fbGFz
dEJyZWFrcG9pbnRJZDsKKyAgICAgICAgbV9uYXRpdmVCcmVha3BvaW50cy5zZXQoKmJyZWFrcG9p
bnRJZCwgIlhIUiIpOwogICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnNldCgqYnJlYWtwb2ludElk
LCB1cmwpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtw
b2ludFR5cGUpIHsKKyAgICAgICAgU3RyaW5nIGV2ZW50TmFtZTsKKyAgICAgICAgaWYgKCFjb25k
aXRpb24tPmdldFN0cmluZygiZXZlbnROYW1lIiwgJmV2ZW50TmFtZSkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICpicmVha3BvaW50SWQgPSArK21fbGFzdEJyZWFrcG9pbnRJZDsKKyAg
ICAgICAgbV9uYXRpdmVCcmVha3BvaW50cy5zZXQoKmJyZWFrcG9pbnRJZCwgIkV2ZW50TGlzdGVu
ZXIiKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50
SWQsIGV2ZW50TmFtZSk7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZCBpbnQ+Ojpp
dGVyYXRvciBpdCA9IG1fZXZlbnROYW1lVG9CcmVha3BvaW50Q291bnQuZmluZChldmVudE5hbWUp
OworICAgICAgICBpZiAoaXQgPT0gbV9ldmVudE5hbWVUb0JyZWFrcG9pbnRDb3VudC5lbmQoKSkK
KyAgICAgICAgICAgIG1fZXZlbnROYW1lVG9CcmVha3BvaW50Q291bnQuc2V0KGV2ZW50TmFtZSwg
MSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl0LT5zZWNvbmQgKz0gMTsKICAgICB9CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlTmF0aXZlQnJlYWtwb2ludCh1bnNp
Z25lZCBpbnQgYnJlYWtwb2ludElkKQogewotICAgIG1fWEhSQnJlYWtwb2ludHMucmVtb3ZlKGJy
ZWFrcG9pbnRJZCk7CisgICAgU3RyaW5nIHR5cGUgPSBtX25hdGl2ZUJyZWFrcG9pbnRzLnRha2Uo
YnJlYWtwb2ludElkKTsKKyAgICBpZiAodHlwZSA9PSB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSkK
KyAgICAgICAgbV9YSFJCcmVha3BvaW50cy5yZW1vdmUoYnJlYWtwb2ludElkKTsKKyAgICBlbHNl
IGlmICh0eXBlID09IGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSkgeworICAgICAg
ICBTdHJpbmcgZXZlbnROYW1lID0gbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMudGFrZShicmVh
a3BvaW50SWQpOworICAgICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQgaW50Pjo6aXRlcmF0
b3IgaXQgPSBtX2V2ZW50TmFtZVRvQnJlYWtwb2ludENvdW50LmZpbmQoZXZlbnROYW1lKTsKKyAg
ICAgICAgaXQtPnNlY29uZCAtPSAxOworICAgICAgICBpZiAoIWl0LT5zZWNvbmQpCisgICAgICAg
ICAgICBtX2V2ZW50TmFtZVRvQnJlYWtwb2ludENvdW50LnJlbW92ZShpdCk7CisgICAgfQorfQor
Citib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3VsZEJyZWFrT25FdmVudChjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSkKK3sKKyAgICByZXR1cm4gbV9ldmVudE5hbWVUb0JyZWFrcG9pbnRDb3Vu
dC5jb250YWlucyhldmVudE5hbWUpOworfQorCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnNo
b3VsZEJyZWFrT25YTUxIdHRwUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBmb3Ig
KEhhc2hNYXA8dW5zaWduZWQgaW50LCBTdHJpbmc+OjppdGVyYXRvciBpdCA9IG1fWEhSQnJlYWtw
b2ludHMuYmVnaW4oKTsgaXQgIT0gbV9YSFJCcmVha3BvaW50cy5lbmQoKTsgKytpdCkgeworICAg
ICAgICBpZiAodXJsLmNvbnRhaW5zKGl0LT5zZWNvbmQpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogI2VuZGlmCkBAIC0yMTAwLDI2ICsy
MTQ2LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxvYWRQYWdlKCkKICAgICBtX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZVJl
ZnJlc2godHJ1ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zdHJ1bWVudFdp
bGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgS1VSTCYgdXJsKQotewotI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQotICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpIHsKLSAgICAgICAgaWYg
KCFtX1hIUkJyZWFrcG9pbnRzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Zm9yIChIYXNoTWFwPHVuc2lnbmVkIGludCwgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX1hIUkJy
ZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9IG1fWEhSQnJlYWtwb2ludHMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgICAgIGlmICghdXJsLnN0cmluZygpLmNvbnRhaW5zKGl0LT5zZWNvbmQpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGV2
ZW50RGF0YS0+c2V0U3RyaW5nKCJ0eXBlIiwgIlhIUiIpOwotICAgICAgICAgICAgZXZlbnREYXRh
LT5zZXRTdHJpbmcoInVybCIsIHVybCk7Ci0gICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJy
ZWFrUHJvZ3JhbShOYXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0YSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNTYxNmUwMi4uNDFhMDMwYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMjYxLDcgKzI2MSw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TmF0aXZlQnJlYWtwb2ludChQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCwgdW5zaWduZWQgaW50KiBicmVha3BvaW50SWQpOwog
ICAgIHZvaWQgcmVtb3ZlTmF0aXZlQnJlYWtwb2ludCh1bnNpZ25lZCBpbnQgYnJlYWtwb2ludElk
KTsKLQogI2VuZGlmCiAKICAgICB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyB0
ZXN0Q2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7CkBAIC0yOTgsOSArMjk3LDExIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogCiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0KICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRv
bihib29sKTsKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlz
KTsKKworICAgIGJvb2wgc2hvdWxkQnJlYWtPbkV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1l
KTsKKyAgICBib29sIHNob3VsZEJyZWFrT25YTUxIdHRwUmVxdWVzdChjb25zdCBTdHJpbmcmKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICB2b2lkIHNlbGVjdERhdGFiYXNlKERh
dGFiYXNlKiBkYXRhYmFzZSk7CkBAIC0zMjksOCArMzMwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBqc29uUmVzdWx0KTsKIAotICAgIHZvaWQgaW5zdHJ1bWVudFdpbGxTZW5kWE1MSHR0cFJlcXVl
c3QoY29uc3QgS1VSTCYpOwotCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAg
ZnJpZW5kIGNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiAgICAgU3RyaW5nIGJyZWFrcG9p
bnRzU2V0dGluZ0tleSgpOwpAQCAtMzkyLDYgKzM5MSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwogICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50PiBtX2RlYnVnZ2VyQWdlbnQ7CiAKKyAgICBIYXNoTWFwPHVuc2lnbmVkIGludCwgU3RyaW5n
PiBtX25hdGl2ZUJyZWFrcG9pbnRzOworICAgIEhhc2hNYXA8dW5zaWduZWQgaW50LCBTdHJpbmc+
IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzOworICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25l
ZCBpbnQ+IG1fZXZlbnROYW1lVG9CcmVha3BvaW50Q291bnQ7CiAgICAgSGFzaE1hcDx1bnNpZ25l
ZCBpbnQsIFN0cmluZz4gbV9YSFJCcmVha3BvaW50czsKICAgICB1bnNpZ25lZCBpbnQgbV9sYXN0
QnJlYWtwb2ludElkOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDQ5NjRjMDkuLjk4NmU5YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC01Nyw4ICs1Nyw2IEBAIFBhc3NPd25QdHI8SW5z
cGVjdG9yRGVidWdnZXJBZ2VudD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3Bl
Y3RvckNvbnRyCiAgICAgcmV0dXJuIGFnZW50LnJlbGVhc2UoKTsKIH0KIAotSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c19kZWJ1Z2dlckFnZW50T25CcmVh
a3BvaW50ID0gMDsKLQogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JG
cm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9y
Q29udHJvbGxlcikKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCkBAIC03MSw5ICs2OSw2IEBA
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkKIHsKICAg
ICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlTGlzdGVuZXIodGhpcywgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCkpOwogICAgIG1fcGF1c2VkU2NyaXB0U3Rh
dGUgPSAwOwotCi0gICAgaWYgKHRoaXMgPT0gc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50KQot
ICAgICAgICBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwogfQogCiBib29sIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmlzRGVidWdnZXJBbHdheXNFbmFibGVkKCkKQEAgLTE0Nyw5ICsx
NDIsMjMgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3IKICAgICAqc2NyaXB0U291cmNlID0gbV9z
Y3JpcHRJRFRvQ29udGVudC5nZXQoc291cmNlSUQpOwogfQogCit2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoRGVidWdnZXJFdmVudFR5cGUg
dHlwZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZGF0YSkKK3sKKyAgICBtX2JyZWFrUHJv
Z3JhbURldGFpbHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYnJlYWtQcm9n
cmFtRGV0YWlscy0+c2V0TnVtYmVyKCJldmVudFR5cGUiLCB0eXBlKTsKKyAgICBtX2JyZWFrUHJv
Z3JhbURldGFpbHMtPnNldFZhbHVlKCJldmVudERhdGEiLCBkYXRhKTsKKyAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQodHJ1ZSk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKQor
eworICAgIG1fYnJlYWtQcm9ncmFtRGV0YWlscyA9IDA7CisgICAgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLnNldFBhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKTsKK30KKwogdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZSgpCiB7Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNo
YXJlZCgpLnBhdXNlKCk7CisgICAgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChKYXZhU2Ny
aXB0UGF1c2VFdmVudFR5cGUsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogfQogCiB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZSgpCkBAIC0zMDUsNiArMzE0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUpCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKIHsKICAgICBt
X3BhdXNlZFNjcmlwdFN0YXRlID0gMDsKKyAgICBtX2JyZWFrUHJvZ3JhbURldGFpbHMgPSAwOwog
ICAgIG1fZnJvbnRlbmQtPnJlc3VtZWRTY3JpcHQoKTsKIH0KIApAQCAtMzEzLDE0ICszMjMsNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShEZWJ1Z2dlckV2ZW50
VHlwZSB0eXBlLCBQYXNzUmVmUHRyPElucwogICAgIG1fYnJlYWtQcm9ncmFtRGV0YWlscyA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9icmVha1Byb2dyYW1EZXRhaWxzLT5zZXRO
dW1iZXIoImV2ZW50VHlwZSIsIHR5cGUpOwogICAgIG1fYnJlYWtQcm9ncmFtRGV0YWlscy0+c2V0
VmFsdWUoImV2ZW50RGF0YSIsIGRhdGEpOwotICAgIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2lu
dCA9IHRoaXM7Ci0KICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYnJlYWtQcm9ncmFt
KCk7Ci0gICAgaWYgKCFzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7Ci0gICAgbV9icmVha1By
b2dyYW1EZXRhaWxzID0gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDhhNTM3OWQuLjUyMzBiODgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQ3LDYg
KzQ3LDcgQEAgY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiAK
IGVudW0gRGVidWdnZXJFdmVudFR5cGUgeworICAgIEphdmFTY3JpcHRQYXVzZUV2ZW50VHlwZSwK
ICAgICBET01CcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsCiAgICAgTmF0aXZlQnJlYWtwb2lu
dERlYnVnZ2VyRXZlbnRUeXBlCiB9OwpAQCAtNjYsOCArNjcsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgZWRpdFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcm
IG5ld0NvbnRlbnQsIGJvb2wqIHN1Y2Nlc3MsIFN0cmluZyogcmVzdWx0LCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBuZXdDYWxsRnJhbWVzKTsKICAgICB2b2lkIGdldFNjcmlwdFNvdXJjZShjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSk7CiAKLSAgICB2b2lkIHBh
dXNlKCk7CisgICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KERlYnVnZ2VyRXZl
bnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRhdGEpOworICAgIHZvaWQg
Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKICAgICB2b2lkIGJyZWFrUHJvZ3JhbShEZWJ1
Z2dlckV2ZW50VHlwZSB0eXBlLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkYXRhKTsKKyAg
ICB2b2lkIHBhdXNlKCk7CiAgICAgdm9pZCByZXN1bWUoKTsKICAgICB2b2lkIHN0ZXBPdmVyU3Rh
dGVtZW50KCk7CiAgICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudCgpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggZmJiY2NlNC4uZmI1NzY4
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3Bw
CkBAIC0zMywxNCArMzMsMzQgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW50IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c19mcm9udGVuZENvdW50ZXIgPSAwOwogCitzdGF0aWMgYm9vbCBldmVudEhhc0xpc3RlbmVy
cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRE9NV2luZG93KiB3aW5kb3csIE5vZGUq
IG5vZGUsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q29udGFpbmVyTm9kZT4gPiYgYW5jZXN0b3JzKQor
eworICAgIGlmICh3aW5kb3cgJiYgd2luZG93LT5oYXNFdmVudExpc3RlbmVycyhldmVudFR5cGUp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVy
cyhldmVudFR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYW5jZXN0b3JzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIENvbnRhaW5lck5vZGUq
IGFuY2VzdG9yID0gYW5jZXN0b3JzW2ldLmdldCgpOworICAgICAgICBpZiAoYW5jZXN0b3ItPmhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlciwgTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KQogewogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQpAQCAtMTI0LDExICsxNDQsNjUgQEAgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwoSW5zcGVjdG9yQ29udHJvbGxl
ciogaW4KICAgICAgICAgZG9tQWdlbnQtPmNoYXJhY3RlckRhdGFNb2RpZmllZChjaGFyYWN0ZXJE
YXRhKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRXaWxs
U2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250
cm9sbGVyLCBjb25zdCBLVVJMJiB1cmwpCitpbnQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
bnN0cnVtZW50V2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvckNvbnRyb2xsZXIsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93KiB3aW5kb3csIE5v
ZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q29udGFpbmVyTm9kZT4gPiYgYW5jZXN0b3Jz
KQoreworICAgIGludCBpbnN0cnVtZW50YXRpb25Db29raWUgPSAwOworCisgICAgaWYgKCFpbnNw
ZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKQorICAgICAgICByZXR1cm4gaW5zdHJ1bWVu
dGF0aW9uQ29va2llOworCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYg
KEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9s
bGVyLT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCkpIHsKKyAgICAgICAgaWYgKGluc3BlY3RvckNvbnRy
b2xsZXItPnNob3VsZEJyZWFrT25FdmVudChldmVudC50eXBlKCkpKSB7CisgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoInR5cGUiLCAiRXZlbnRMaXN0
ZW5lciIpOworICAgICAgICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImV2ZW50TmFtZSIsIGV2
ZW50LnR5cGUoKSk7CisgICAgICAgICAgICBkZWJ1Z2dlckFnZW50LT5zY2hlZHVsZVBhdXNlT25O
ZXh0U3RhdGVtZW50KE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwgZXZlbnREYXRh
KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fdGltZWxpbmVBZ2VudC5n
ZXQoKTsKKyAgICBpZiAodGltZWxpbmVBZ2VudCAmJiBldmVudEhhc0xpc3RlbmVycyhldmVudC50
eXBlKCksIHdpbmRvdywgbm9kZSwgYW5jZXN0b3JzKSkgeworICAgICAgICB0aW1lbGluZUFnZW50
LT53aWxsRGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgICAgIGluc3RydW1lbnRhdGlvbkNvb2tp
ZSA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CisgICAgfQorICAgIHJldHVybiBpbnN0cnVtZW50YXRp
b25Db29raWU7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50
RGlkRGlzcGF0Y2hFdmVudEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlciwgaW50IGluc3RydW1lbnRhdGlvbkNvb2tpZSkKIHsKICAgICBpZiAoIWluc3BlY3RvckNv
bnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnNwZWN0b3JD
b250cm9sbGVyLT5pbnN0cnVtZW50V2lsbFNlbmRYTUxIdHRwUmVxdWVzdCh1cmwpOworCisjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQu
Z2V0KCkpCisgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50
KCk7CisjZW5kaWYKKworICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQg
PSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX3RpbWVsaW5lQWdlbnQuZ2V0KCk7CisgICAgaWYgKHRp
bWVsaW5lQWdlbnQgJiYgdGltZWxpbmVBZ2VudC0+aWQoKSA9PSBpbnN0cnVtZW50YXRpb25Db29r
aWUpCisgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZERpc3BhdGNoRXZlbnQoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1
ZXN0SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBjb25zdCBT
dHJpbmcmIHVybCkKK3sKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBpZiAo
IWluc3BlY3RvckNvbnRyb2xsZXItPmhhc0Zyb250ZW5kKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250
cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCk7CisgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWluc3BlY3RvckNvbnRyb2xsZXItPnNob3VsZEJy
ZWFrT25YTUxIdHRwUmVxdWVzdCh1cmwpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJ0eXBlIiwgIlhIUiIpOworICAgIGV2ZW50RGF0YS0+
c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOworICAgIGRlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShO
YXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0YSk7CisjZW5kaWYKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaAppbmRleCA0ZDgwNGNkLi41YjY2YTJlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtNDAsNyArNDAsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDaGFyYWN0ZXJEYXRhOwogY2xhc3MgRWxlbWVudDsKIGNs
YXNzIEluc3BlY3RvckNvbnRyb2xsZXI7Ci1jbGFzcyBLVVJMOwogY2xhc3MgTm9kZTsKIAogY2xh
c3MgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIHsKQEAgLTUyLDcgKzUxLDEwIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBkaWRNb2RpZnlET01BdHRyKERvY3VtZW50KiwgRWxlbWVudCopOwog
ICAgIHN0YXRpYyB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChEb2N1bWVudCosIENoYXJhY3Rl
ckRhdGEqKTsKIAotICAgIHN0YXRpYyB2b2lkIGluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1
ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJik7CisgICAgc3RhdGljIGlu
dCBpbnN0cnVtZW50V2lsbERpc3BhdGNoRXZlbnQoRG9jdW1lbnQqLCBjb25zdCBFdmVudCYsIERP
TVdpbmRvdyosIE5vZGUqLCBjb25zdCBWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+ID4mIGFu
Y2VzdG9ycyk7CisgICAgc3RhdGljIHZvaWQgaW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnQoRG9j
dW1lbnQqLCBpbnQgaW5zdHJ1bWVudGF0aW9uQ29va2llKTsKKworICAgIHN0YXRpYyB2b2lkIGlu
c3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgc3RhdGljIHZvaWQg
ZnJvbnRlbmRDcmVhdGVkKCkgeyBzX2Zyb250ZW5kQ291bnRlciArPSAxOyB9CkBAIC03MCw3ICs3
MiwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRpZE1vZGlmeURPTUF0dHJJbXBsKElu
c3BlY3RvckNvbnRyb2xsZXIqLCBFbGVtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgY2hhcmFjdGVy
RGF0YU1vZGlmaWVkSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgQ2hhcmFjdGVyRGF0YSopOwog
Ci0gICAgc3RhdGljIHZvaWQgaW5zdHJ1bWVudFdpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKElu
c3BlY3RvckNvbnRyb2xsZXIqLCBjb25zdCBLVVJMJik7CisgICAgc3RhdGljIGludCBpbnN0cnVt
ZW50V2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBjb25zdCBFdmVu
dCYsIERPTVdpbmRvdyosIE5vZGUqLCBjb25zdCBWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+
ID4mIGFuY2VzdG9ycyk7CisgICAgc3RhdGljIHZvaWQgaW5zdHJ1bWVudERpZERpc3BhdGNoRXZl
bnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBpbnQgaW5zdHJ1bWVudGF0aW9uQ29va2llKTsK
KworICAgIHN0YXRpYyB2b2lkIGluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChJ
bnNwZWN0b3JDb250cm9sbGVyKiwgY29uc3QgU3RyaW5nJik7CiAKICAgICBzdGF0aWMgSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlckZvclNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHN0YXRpYyBJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKQEAgLTEzMCw3
ICsxMzUsMjQgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0
ZXJEYXRhTW9kaWZpZWQoRG9jdW1lbnQqIGRvY3VtZW50LAogI2VuZGlmCiB9CiAKLWlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudFdpbGxTZW5kWE1MSHR0cFJl
cXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsKQor
aW5saW5lIGludCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRXaWxsRGlzcGF0
Y2hFdmVudChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93
KiB3aW5kb3csIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q29udGFpbmVyTm9kZT4g
PiYgYW5jZXN0b3JzKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKEluc3BlY3Rv
ckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9y
RG9jdW1lbnQoZG9jdW1lbnQpKQorICAgICAgICByZXR1cm4gaW5zdHJ1bWVudFdpbGxEaXNwYXRj
aEV2ZW50SW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBldmVudCwgd2luZG93LCBub2RlLCBhbmNl
c3RvcnMpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudERpZERpc3BhdGNoRXZlbnQoRG9jdW1lbnQqIGRv
Y3VtZW50LCBpbnQgaW5zdHJ1bWVudGF0aW9uQ29va2llKQoreworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBp
bnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgICAgICBpbnN0cnVt
ZW50RGlkRGlzcGF0Y2hFdmVudEltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwgaW5zdHJ1bWVudGF0
aW9uQ29va2llKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omluc3RydW1lbnRXaWxsU2VuZFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsKQogewogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBp
bnNwZWN0b3JDb250cm9sbGVyRm9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXggNjU2ZjJm
My4uMWRkODZhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5jcHAKQEAgLTQ1LDkgKzQ1LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGludCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpzX2luc3RhbmNlQ291bnQgPSAwOworaW50IEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OnNfaWQgPSAwOwogCiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpJbnNwZWN0
b3JUaW1lbGluZUFnZW50KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICA6IG1fZnJv
bnRlbmQoZnJvbnRlbmQpCisgICAgLCBtX2lkKCsrc19pZCkKIHsKICAgICArK3NfaW5zdGFuY2VD
b3VudDsKICAgICBTY3JpcHRHQ0V2ZW50OjphZGRFdmVudExpc3RlbmVyKHRoaXMpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IDI2MWFlM2EuLjlmZmQ5
YzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKQEAgLTc3
LDYgKzc3LDggQEAgcHVibGljOgogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zcGVjdG9y
RnJvbnRlbmQqIGZyb250ZW5kKTsKICAgICB+SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOwogCisg
ICAgaW50IGlkKCkgeyByZXR1cm4gbV9pZDsgfQorCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZv
aWQgcmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KEluc3BlY3RvckZyb250ZW5kKik7CiAKQEAgLTE1
Niw2ICsxNTgsOCBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPFRpbWVsaW5lUmVjb3JkRW50cnk+
IG1fcmVjb3JkU3RhY2s7CiAgICAgc3RhdGljIGludCBzX2luc3RhbmNlQ291bnQ7CisgICAgc3Rh
dGljIGludCBzX2lkOworICAgIGludCBtX2lkOwogICAgIHN0cnVjdCBHQ0V2ZW50IHsKICAgICAg
ICAgR0NFdmVudChkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZW5kVGltZSwgc2l6ZV90IGNvbGxl
Y3RlZEJ5dGVzKQogICAgICAgICAgICAgOiBzdGFydFRpbWUoc3RhcnRUaW1lKSwgZW5kVGltZShl
bmRUaW1lKSwgY29sbGVjdGVkQnl0ZXMoY29sbGVjdGVkQnl0ZXMpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMKaW5kZXggNjIxMmVh
MS4uYTBlNWUzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxT
dGFja1NpZGViYXJQYW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxs
U3RhY2tTaWRlYmFyUGFuZS5qcwpAQCAtMjksOCArMjksOSBAQCBXZWJJbnNwZWN0b3IuQ2FsbFN0
YWNrU2lkZWJhclBhbmUgPSBmdW5jdGlvbigpCiB9CiAKIFdlYkluc3BlY3Rvci5DYWxsU3RhY2tT
aWRlYmFyUGFuZS5EZWJ1Z2dlckV2ZW50VHlwZSA9IHsKLSAgICBET01CcmVha3BvaW50OiAwLAot
ICAgIE5hdGl2ZUJyZWFrcG9pbnQ6IDEKKyAgICBKYXZhU2NyaXB0UGF1c2U6IDAsCisgICAgRE9N
QnJlYWtwb2ludDogMSwKKyAgICBOYXRpdmVCcmVha3BvaW50OiAyCiB9OwogCiBXZWJJbnNwZWN0
b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUucHJvdG90eXBlID0gewo=
</data>
<flag name="review"
          id="59335"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>