<?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>78586</bug_id>
          
          <creation_ts>2012-02-14 01:12:23 -0800</creation_ts>
          <short_desc>Event dispatching should use the composed shadow DOM tree instead of original DOM tree.</short_desc>
          <delta_ts>2012-06-18 16:00:37 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>59805</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>morrita</cc>
    
    <cc>shinyak</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556080</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-02-14 01:12:23 -0800</bug_when>
    <thetext>The spec is here:
https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#event-dispatch

We should update the event dispatch so that it reflects the composite tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617492</commentid>
    <comment_count>1</comment_count>
      <attachid>140505</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-07 03:53:16 -0700</bug_when>
    <thetext>Created attachment 140505
WIP. concept of new spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617494</commentid>
    <comment_count>2</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-07 03:57:13 -0700</bug_when>
    <thetext>As we explained in 2012 WebKit contributors meeting, this is a concept of new implementation of event dispatching.

The spec is not updated yet.

The document we used in the meeting is here:
https://docs.google.com/document/d/1PY7KkTRI-doU9Hew3Mud9JBgjj5xtVqH8sY0Ui305nw/edit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618220</commentid>
    <comment_count>3</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-07 19:11:22 -0700</bug_when>
    <thetext>Hi Dimitri and Shadow DOM guys,

Could you take a look at WIP patch? I won&apos;t land this patch as is. It&apos;s just a implementation of new algorithm. A final patch should have equivalent results of this WIP patch.

I hope this patch would help Dimitri to update the Event Dispatching spec in Shadow DOM.

Although I&apos;ll continue improve this patch, especially the performance, if you have any comments or find any significant fault in the approach, please let me know it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618268</commentid>
    <comment_count>4</comment_count>
      <attachid>140505</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-07 20:57:29 -0700</bug_when>
    <thetext>Comment on attachment 140505
WIP. concept of new spec.

I think the general approach is good. I am sad to see EventContext grow, but it&apos;s not something we can avoid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618327</commentid>
    <comment_count>5</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-07 22:53:28 -0700</bug_when>
    <thetext>*** Bug 85854 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618381</commentid>
    <comment_count>6</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-08 00:31:01 -0700</bug_when>
    <thetext>Hi Dimitri,

Okay. Let me proceed using the current approach. Before trying to improve the performance seriously, I&apos;d like to have some benchmark to compare the performance.

AFAIR, you&apos;ve told me that you used a micro benchmark when you tried to modify event dispatching before. Could you give me the used benchmark if you still had it? I think a micro benchmark is enough for now and it is not difficult to write such a benchmark. But I&apos;d be happy if you gave me that :)

(In reply to comment #4)
&gt; (From update of attachment 140505 [details])
&gt; I think the general approach is good. I am sad to see EventContext grow, but it&apos;s not something we can avoid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618562</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-08 09:24:27 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Hi Dimitri,
&gt; 
&gt; Okay. Let me proceed using the current approach. Before trying to improve the performance seriously, I&apos;d like to have some benchmark to compare the performance.
&gt; 
&gt; AFAIR, you&apos;ve told me that you used a micro benchmark when you tried to modify event dispatching before. Could you give me the used benchmark if you still had it? I think a micro benchmark is enough for now and it is not difficult to write such a benchmark. But I&apos;d be happy if you gave me that :)
&gt; 
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 140505 [details] [details])
&gt; &gt; I think the general approach is good. I am sad to see EventContext grow, but it&apos;s not something we can avoid.

I think it&apos;s somewhere in a bug under this tree: https://bugs.webkit.org/showdependencytree.cgi?id=48698, but I couldn&apos;t locate it easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618900</commentid>
    <comment_count>8</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-08 15:53:45 -0700</bug_when>
    <thetext>Thank you! Let me find it.

(In reply to comment #7)
&gt; I think it&apos;s somewhere in a bug under this tree: https://bugs.webkit.org/showdependencytree.cgi?id=48698, but I couldn&apos;t locate it easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620172</commentid>
    <comment_count>9</comment_count>
      <attachid>141073</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-09 19:25:16 -0700</bug_when>
    <thetext>Created attachment 141073
WIP. Fix an underlining bug. Every existing test should pass now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620191</commentid>
    <comment_count>10</comment_count>
      <attachid>141073</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-09 20:16:09 -0700</bug_when>
    <thetext>Comment on attachment 141073
WIP. Fix an underlining bug. Every existing test should pass now.

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

&gt; Source/WebCore/dom/EventContext.h:57
&gt; +    bool m_shouldDispatch;

Isn&apos;t this overkill? Once we see an ancestor on which we shouldn&apos;t dispatch an event, we can just exit early. Do we really need to store an extra member on the context?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620201</commentid>
    <comment_count>11</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-09 20:40:15 -0700</bug_when>
    <thetext>Welcome to the complex world. I thought the same thing at first. But we can create an example where we should continue to climb up ancestors even if nodes in the middle should not be dispatched.

Thats&apos; exactly the case2 in the https://docs.google.com/document/d/1PY7KkTRI-doU9Hew3Mud9JBgjj5xtVqH8sY0Ui305nw/edit.

Event should not be dispatched on G, but should be dispatched on A and B.


(In reply to comment #10)
&gt; (From update of attachment 141073 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141073&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/EventContext.h:57
&gt; &gt; +    bool m_shouldDispatch;
&gt; 
&gt; Isn&apos;t this overkill? Once we see an ancestor on which we shouldn&apos;t dispatch an event, we can just exit early. Do we really need to store an extra member on the context?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620209</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-09 20:56:49 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Welcome to the complex world. I thought the same thing at first. But we can create an example where we should continue to climb up ancestors even if nodes in the middle should not be dispatched.
&gt; 
&gt; Thats&apos; exactly the case2 in the https://docs.google.com/document/d/1PY7KkTRI-doU9Hew3Mud9JBgjj5xtVqH8sY0Ui305nw/edit.
&gt; 
&gt; Event should not be dispatched on G, but should be dispatched on A and B.
&gt; 
&gt; 
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 141073 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141073&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/EventContext.h:57
&gt; &gt; &gt; +    bool m_shouldDispatch;
&gt; &gt; 
&gt; &gt; Isn&apos;t this overkill? Once we see an ancestor on which we shouldn&apos;t dispatch an event, we can just exit early. Do we really need to store an extra member on the context?

But that diagram is incorrect. G is never an adjusted target in that subtree. H is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620210</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-09 20:57:28 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; But that diagram is incorrect. G is never an adjusted target in that subtree. H is.

Sorry, it&apos;s K.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620213</commentid>
    <comment_count>14</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-09 20:58:20 -0700</bug_when>
    <thetext>Can you look over stuff I wrote here: https://www.w3.org/Bugs/Public/show_bug.cgi?id=16176#c10 and see if you can poke holes in that thinking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620218</commentid>
    <comment_count>15</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-09 21:05:57 -0700</bug_when>
    <thetext>Yeah, I am now taking a look at that. Let me address your comment soon.

In current WIP patch, insertionPoint and ShadowRoot can receive events, but I&apos;ve not written tests for that.
The doc might be out-of-date and doesn&apos;t reflect recent code. The doc should have insertionPoint (and ShadowRoot) in the picture and table. Let me update that too.

(In reply to comment #14)
&gt; Can you look over stuff I wrote here: https://www.w3.org/Bugs/Public/show_bug.cgi?id=16176#c10 and see if you can poke holes in that thinking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620265</commentid>
    <comment_count>16</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-09 23:04:51 -0700</bug_when>
    <thetext>I&apos;ve added a comment to https://www.w3.org/Bugs/Public/show_bug.cgi?id=16176.
Now I am sure I understand your ideas. Let me reflect your ideas in a following patch.

(In reply to comment #15)
&gt; Yeah, I am now taking a look at that. Let me address your comment soon.
&gt; 
&gt; In current WIP patch, insertionPoint and ShadowRoot can receive events, but I&apos;ve not written tests for that.
&gt; The doc might be out-of-date and doesn&apos;t reflect recent code. The doc should have insertionPoint (and ShadowRoot) in the picture and table. Let me update that too.
&gt; 
&gt; (In reply to comment #14)
&gt; &gt; Can you look over stuff I wrote here: https://www.w3.org/Bugs/Public/show_bug.cgi?id=16176#c10 and see if you can poke holes in that thinking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620282</commentid>
    <comment_count>17</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-09 23:26:29 -0700</bug_when>
    <thetext>Let me note what should be modified:

 - Update adjusting target algorithm so that it can handle InsertionPoint correctly.
 - We don&apos;t need lowest common boundary any more.
 - For each scope of target ancestors, calculate a related target.
 - If target == relatedTarget, stop event dispatching.
 - Remove m_shouldBeDispatched from EventContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620377</commentid>
    <comment_count>18</comment_count>
      <attachid>141109</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-10 01:35:28 -0700</bug_when>
    <thetext>Created attachment 141109
WIP. Fix the calculation of adjusted target. Now it considers InsertionPoints correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620414</commentid>
    <comment_count>19</comment_count>
      <attachid>141123</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-10 02:55:17 -0700</bug_when>
    <thetext>Created attachment 141123
WIP. New ajusting relatedTarget algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620449</commentid>
    <comment_count>20</comment_count>
      <attachid>141138</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-10 04:06:38 -0700</bug_when>
    <thetext>Created attachment 141138
WIP. Now event dispatching is stopped where target == relatedTarget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620452</commentid>
    <comment_count>21</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-10 04:08:57 -0700</bug_when>
    <thetext>Most of them are done.

We should define what should be set as relatedTarget if there is no ancestor of relatedTarget in the current scope.

(In reply to comment #17)
&gt; Let me note what should be modified:
&gt; 
&gt;  - Update adjusting target algorithm so that it can handle InsertionPoint correctly.
&gt;  - We don&apos;t need lowest common boundary any more.
&gt;  - For each scope of target ancestors, calculate a related target.
&gt;  - If target == relatedTarget, stop event dispatching.
&gt;  - Remove m_shouldBeDispatched from EventContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620474</commentid>
    <comment_count>22</comment_count>
      <attachid>141146</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-10 04:58:53 -0700</bug_when>
    <thetext>Created attachment 141146
WIP. Find an available relatedTarget from ancestor scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620476</commentid>
    <comment_count>23</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-10 05:00:31 -0700</bug_when>
    <thetext>Now event dispatcher can find a relatedTarget from parent tree scope, recursively.

(In reply to comment #21)
&gt; Most of them are done.
&gt; 
&gt; We should define what should be set as relatedTarget if there is no ancestor of relatedTarget in the current scope.
&gt; 
&gt; (In reply to comment #17)
&gt; &gt; Let me note what should be modified:
&gt; &gt; 
&gt; &gt;  - Update adjusting target algorithm so that it can handle InsertionPoint correctly.
&gt; &gt;  - We don&apos;t need lowest common boundary any more.
&gt; &gt;  - For each scope of target ancestors, calculate a related target.
&gt; &gt;  - If target == relatedTarget, stop event dispatching.
&gt; &gt;  - Remove m_shouldBeDispatched from EventContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620872</commentid>
    <comment_count>24</comment_count>
      <attachid>141146</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-10 12:42:17 -0700</bug_when>
    <thetext>Comment on attachment 141146
WIP. Find an available relatedTarget from ancestor scope.

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

This looks very encouraging. Does it pass all tests? :)

We should probably approach this in pieces, to minimize regressions. Chunk ideas:
1) update ensureEventAncestors logic. I can easily see that the stack + logic structure could be a nice self-contained class.
2) land the logic for calculating relative relatedTarget -- maybe even not use it for the moment
3) switch implementation to use the new relatedTarget logic.

WDYT?

&gt; Source/WebCore/dom/EventDispatcher.cpp:139
&gt; +    EventTarget* relatedTarget = findRelatedTarget(scope-&gt;parentTreeScope(), relatedTargetMap);

This is neat, I haven&apos;t thought of this! Though I wold rather avoid recursion here. This logic + data + transient state seem like a good candidate for a helper class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621204</commentid>
    <comment_count>25</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-10 19:20:19 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 141146 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141146&amp;action=review
&gt; 
&gt; This looks very encouraging. Does it pass all tests? :)

Yes, it passed all existing tests.

&gt; 
&gt; We should probably approach this in pieces, to minimize regressions. Chunk ideas:
&gt; 1) update ensureEventAncestors logic. I can easily see that the stack + logic structure could be a nice self-contained class.
&gt; 2) land the logic for calculating relative relatedTarget -- maybe even not use it for the moment
&gt; 3) switch implementation to use the new relatedTarget logic.
&gt; 
&gt; WDYT?

I agree. I&apos;d like to proceed in incremental way. Let me think how we should divide this patch into smaller pieces further.

&gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:139
&gt; &gt; +    EventTarget* relatedTarget = findRelatedTarget(scope-&gt;parentTreeScope(), relatedTargetMap);
&gt; 
&gt; This is neat, I haven&apos;t thought of this! Though I wold rather avoid recursion here. This logic + data + transient state seem like a good candidate for a helper class.

This, trying to find a related target in upper tree scope, is just one idea. I&apos;ve not decided what should be done if there is no available related target ancestor in the current scope.
At first attempt, I just set relatedTarget to &apos;null&apos; if there is no related target in the current scope. That is another idea.

I am not sure what is better or not.

If we try to find a relatedTarget from upper scopes,  I agree we should avoid recursion. Let me rethink implementation again.
I am also afraid that using HashMap might be bad here from the view of performance. Since the number of TreeScope is small in general, it might be faster that using some other linear search.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621251</commentid>
    <comment_count>26</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-10 21:38:24 -0700</bug_when>
    <thetext>(In reply to comment #25)

&gt; 
&gt; I am not sure what is better or not.
&gt; 
I will spec this for you tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621278</commentid>
    <comment_count>27</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-10 22:48:24 -0700</bug_when>
    <thetext>I am afraid that if we land 1) without 2), we might leak nodes through a relatedTarget.
We should proceed carefully...

(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (From update of attachment 141146 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141146&amp;action=review
&gt; &gt; 
&gt; &gt; This looks very encouraging. Does it pass all tests? :)
&gt; 
&gt; Yes, it passed all existing tests.
&gt; 
&gt; &gt; 
&gt; &gt; We should probably approach this in pieces, to minimize regressions. Chunk ideas:
&gt; &gt; 1) update ensureEventAncestors logic. I can easily see that the stack + logic structure could be a nice self-contained class.
&gt; &gt; 2) land the logic for calculating relative relatedTarget -- maybe even not use it for the moment
&gt; &gt; 3) switch implementation to use the new relatedTarget logic.
&gt; &gt; 
&gt; &gt; WDYT?
&gt; 
&gt; I agree. I&apos;d like to proceed in incremental way. Let me think how we should divide this patch into smaller pieces further.
&gt; 
&gt; &gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:139
&gt; &gt; &gt; +    EventTarget* relatedTarget = findRelatedTarget(scope-&gt;parentTreeScope(), relatedTargetMap);
&gt; &gt; 
&gt; &gt; This is neat, I haven&apos;t thought of this! Though I wold rather avoid recursion here. This logic + data + transient state seem like a good candidate for a helper class.
&gt; 
&gt; This, trying to find a related target in upper tree scope, is just one idea. I&apos;ve not decided what should be done if there is no available related target ancestor in the current scope.
&gt; At first attempt, I just set relatedTarget to &apos;null&apos; if there is no related target in the current scope. That is another idea.
&gt; 
&gt; I am not sure what is better or not.
&gt; 
&gt; If we try to find a relatedTarget from upper scopes,  I agree we should avoid recursion. Let me rethink implementation again.
&gt; I am also afraid that using HashMap might be bad here from the view of performance. Since the number of TreeScope is small in general, it might be faster that using some other linear search.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621284</commentid>
    <comment_count>28</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-10 22:52:26 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; I am afraid that if we land 1) without 2), we might leak nodes through a relatedTarget.

The reason is that current algorithm of calculating relatedTarget does not consider InsertionPoint, by which we can cross lower boundaries.
I am afraid that I have to land that at once. Hmm...

&gt; We should proceed carefully...
&gt; 
&gt; (In reply to comment #25)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; (From update of attachment 141146 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141146&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; This looks very encouraging. Does it pass all tests? :)
&gt; &gt; 
&gt; &gt; Yes, it passed all existing tests.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; We should probably approach this in pieces, to minimize regressions. Chunk ideas:
&gt; &gt; &gt; 1) update ensureEventAncestors logic. I can easily see that the stack + logic structure could be a nice self-contained class.
&gt; &gt; &gt; 2) land the logic for calculating relative relatedTarget -- maybe even not use it for the moment
&gt; &gt; &gt; 3) switch implementation to use the new relatedTarget logic.
&gt; &gt; &gt; 
&gt; &gt; &gt; WDYT?
&gt; &gt; 
&gt; &gt; I agree. I&apos;d like to proceed in incremental way. Let me think how we should divide this patch into smaller pieces further.
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:139
&gt; &gt; &gt; &gt; +    EventTarget* relatedTarget = findRelatedTarget(scope-&gt;parentTreeScope(), relatedTargetMap);
&gt; &gt; &gt; 
&gt; &gt; &gt; This is neat, I haven&apos;t thought of this! Though I wold rather avoid recursion here. This logic + data + transient state seem like a good candidate for a helper class.
&gt; &gt; 
&gt; &gt; This, trying to find a related target in upper tree scope, is just one idea. I&apos;ve not decided what should be done if there is no available related target ancestor in the current scope.
&gt; &gt; At first attempt, I just set relatedTarget to &apos;null&apos; if there is no related target in the current scope. That is another idea.
&gt; &gt; 
&gt; &gt; I am not sure what is better or not.
&gt; &gt; 
&gt; &gt; If we try to find a relatedTarget from upper scopes,  I agree we should avoid recursion. Let me rethink implementation again.
&gt; &gt; I am also afraid that using HashMap might be bad here from the view of performance. Since the number of TreeScope is small in general, it might be faster that using some other linear search.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621391</commentid>
    <comment_count>29</comment_count>
      <attachid>141355</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-11 01:44:41 -0700</bug_when>
    <thetext>Created attachment 141355
WIP. Introduce an EventAncestors class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621399</commentid>
    <comment_count>30</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-11 01:51:25 -0700</bug_when>
    <thetext>I&apos;ve started to introduce EventAncestors class, which encapsulates all operations and data which are related to ancestors of an event target.

But it turned out that it was not so worth as I expected. That causes redundant indirection at least.

WDYT? To go or not to go?

(In reply to comment #29)
&gt; Created an attachment (id=141355) [details]
&gt; WIP. Introduce an EventAncestors class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621768</commentid>
    <comment_count>31</comment_count>
      <attachid>141355</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-11 10:29:11 -0700</bug_when>
    <thetext>Comment on attachment 141355
WIP. Introduce an EventAncestors class.

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

Yes, this is getting unwieldy. I think the problem here is that you treat EventAncestors as a data+function encapsulation primitive, but it really just acts as a function encapsulation primitive. What about something like EventAncestorsBuilder class, which only exists to create eventAncestors  list. Similarly, the RelatedTargetAdjuster class will only operate on the eventAncestors to adjust the list according to relatedTarget data?

&gt; Source/WebCore/dom/EventDispatcher.cpp:142
&gt; +    // Per XBL 2.0 spec, mutation events should never cross shadow DOM boundary:
&gt; +    // http://dev.w3.org/2006/xbl2/#event-flow-and-targeting-across-shadow-s
&gt; +    if (event-&gt;hasInterface(eventNames().interfaceForMutationEvent))
&gt; +        return StayInsideShadowDOM;

We don&apos;t fire mutation events inside of the shadow DOM subtrees anymore, so this is not needed.

&gt; Source/WebCore/dom/EventDispatcher.cpp:153
&gt; +void EventAncestors::adjustByRelatedTarget(Event* event, PassRefPtr&lt;EventTarget&gt; prpRelatedTarget)

This looks outside of EventsAncestor helper.

&gt; Source/WebCore/dom/EventDispatcher.h:57
&gt; +    void adjustByRelatedTarget(Event*, PassRefPtr&lt;EventTarget&gt; prpRelatedTarget);

I don&apos;t like the addition of &quot;By&quot; here. It doesn&apos;t clarify the name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622655</commentid>
    <comment_count>32</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-13 22:29:11 -0700</bug_when>
    <thetext>Thank you for the review.

(In reply to comment #31)
&gt; (From update of attachment 141355 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141355&amp;action=review
&gt; 
&gt; Yes, this is getting unwieldy. I think the problem here is that you treat EventAncestors as a data+function encapsulation primitive, but it really just acts as a function encapsulation primitive. What about something like EventAncestorsBuilder class, which only exists to create eventAncestors  list. Similarly, the RelatedTargetAdjuster class will only operate on the eventAncestors to adjust the list according to relatedTarget data?

That sounds nice, but I am not sure whether it is worth or not to separe these functions into separate classes since these functions are not so long now (about 20 lines). But if separating makes our intention clear, we should do it. Let me try it.

&gt; 
&gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:142
&gt; &gt; +    // Per XBL 2.0 spec, mutation events should never cross shadow DOM boundary:
&gt; &gt; +    // http://dev.w3.org/2006/xbl2/#event-flow-and-targeting-across-shadow-s
&gt; &gt; +    if (event-&gt;hasInterface(eventNames().interfaceForMutationEvent))
&gt; &gt; +        return StayInsideShadowDOM;
&gt; 
&gt; We don&apos;t fire mutation events inside of the shadow DOM subtrees anymore, so this is not needed.
&gt; 

Thank you. Let me remove it from the next patch.

&gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:153
&gt; &gt; +void EventAncestors::adjustByRelatedTarget(Event* event, PassRefPtr&lt;EventTarget&gt; prpRelatedTarget)
&gt; 
&gt; This looks outside of EventsAncestor helper.
&gt; 
&gt; &gt; Source/WebCore/dom/EventDispatcher.h:57
&gt; &gt; +    void adjustByRelatedTarget(Event*, PassRefPtr&lt;EventTarget&gt; prpRelatedTarget);
&gt; 
&gt; I don&apos;t like the addition of &quot;By&quot; here. It doesn&apos;t clarify the name.

Let me remove &apos;By&apos; and name it simply &apos;adjustRelatedTarget&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622927</commentid>
    <comment_count>33</comment_count>
      <attachid>141719</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-14 06:43:45 -0700</bug_when>
    <thetext>Created attachment 141719
WIP. Introduce an EventRelatedTargetAdjuster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622928</commentid>
    <comment_count>34</comment_count>
      <attachid>141720</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-14 06:46:40 -0700</bug_when>
    <thetext>Created attachment 141720
Benchmark for event-dispatching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622943</commentid>
    <comment_count>35</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-14 07:04:19 -0700</bug_when>
    <thetext>I updated the patch. The differences are:

- Reverted the previous attempt which introduced EventAncestors class.
- Introduce an EventRelatedTargetAdjuster
- Optimize the performance of calculating adjusted related target. We now skip looking up relatedTarget if treeScope does not change.

And I&apos;ve just done very rough benchmark. I&apos;ve attached the benchmark here:
https://bugs.webkit.org/attachment.cgi?id=141720

The benchmark measures overall performance of event dispatching.
I&apos;ve not isolated the part of calculating event ancestors and adjusting related-target yet. That requires C++ code change.

The results of benchmark looks same before/after this patch. Let me paste the results in the bottom.
I am afraid that I could not isolate the effect of this patch. Let me think more sophisticated benchmark later if required. 



--- Before this patch ----

Benchmark for event dispatching.

Shadow-Free Tree (height=10)
 Took 9.3 ms.  (93/10)
Teee with ShadowHost (height=10)
 Took 8.9 ms.  (89/10)
Shadow-Free Tree (height=20)
 Took 16.6 ms.  (166/10)
Teee with ShadowHost (height=20)
 Took 14.3 ms.  (143/10)
Shadow-Free Tree (height=30)
 Took 28.3 ms.  (283/10)
Teee with ShadowHost (height=30)
 Took 26.2 ms.  (262/10)
Shadow-Free Tree (height=50)
 Took 58.6 ms.  (586/10)
Teee with ShadowHost (height=50)
 Took 57.6 ms.  (576/10)
Shadow-Free Tree (height=100)
 Took 230.6 ms.  (2306/10)
Teee with ShadowHost (height=100)
 Took 212.3 ms.  (2123/10)
Shadow-Free Tree (height=200)
 Took 885.9 ms.  (8859/10)
Teee with ShadowHost (height=200)
 Took 806.8 ms.  (8068/10)
Shadow-Free Tree (height=300)
 Took 2028 ms.  (20280/10)
Teee with ShadowHost (height=300)
 Took 1721.7 ms.  (17217/10)

#EOF



--- After this patch ----

Benchmark for event dispatching.

Shadow-Free Tree (height=10)
 Took 9.9 ms.  (99/10)
Teee with ShadowHost (height=10)
 Took 9.7 ms.  (97/10)
Shadow-Free Tree (height=20)
 Took 17.7 ms.  (177/10)
Teee with ShadowHost (height=20)
 Took 15.6 ms.  (156/10)
Shadow-Free Tree (height=30)
 Took 29.5 ms.  (295/10)
Teee with ShadowHost (height=30)
 Took 28.1 ms.  (281/10)
Shadow-Free Tree (height=50)
 Took 61.7 ms.  (617/10)
Teee with ShadowHost (height=50)
 Took 61.9 ms.  (619/10)
Shadow-Free Tree (height=100)
 Took 248.9 ms.  (2489/10)
Teee with ShadowHost (height=100)
 Took 219.3 ms.  (2193/10)
Shadow-Free Tree (height=200)
 Took 925.6 ms.  (9256/10)
Teee with ShadowHost (height=200)
 Took 818.4 ms.  (8184/10)
Shadow-Free Tree (height=300)
 Took 2092 ms.  (20920/10)
Teee with ShadowHost (height=300)
 Took 1770.8 ms.  (17708/10)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623040</commentid>
    <comment_count>36</comment_count>
      <attachid>141719</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-14 09:27:02 -0700</bug_when>
    <thetext>Comment on attachment 141719
WIP. Introduce an EventRelatedTargetAdjuster.

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

I really like the way this patch is heading....

However, I apologize for trying to force my design ideas upon you. This is your work and I trust your design sense to come up with the optimal solution. Please feel free to discard the notion of helper classes. I will not be upset :)

&gt; Source/WebCore/dom/EventDispatcher.h:53
&gt; +    void build(Node*, Vector&lt;EventContext&gt;&amp;);

Should probably contain the stack and the walker as members.

&gt; Source/WebCore/dom/EventDispatcher.h:58
&gt; +    void adjust(Vector&lt;EventContext&gt;&amp;, Node* relatedTarget);

Looks like relatedTarget could be a constructor argument. This way, you could initialized the walker as part of the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623049</commentid>
    <comment_count>37</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-14 09:52:00 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; Let me think more sophisticated benchmark later if required. 

Sure. FWIW, the benchmark code looks like it&apos;s doing what it&apos;s supposed to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623942</commentid>
    <comment_count>38</comment_count>
      <attachid>141936</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-15 05:43:15 -0700</bug_when>
    <thetext>Created attachment 141936
WIP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623944</commentid>
    <comment_count>39</comment_count>
      <attachid>141937</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-15 05:46:06 -0700</bug_when>
    <thetext>Created attachment 141937
modify EventDispatcher for benchmark</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623953</commentid>
    <comment_count>40</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-15 05:57:22 -0700</bug_when>
    <thetext>Thank you for the review.

(In reply to comment #36)
&gt; (From update of attachment 141719 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141719&amp;action=review
&gt; 
&gt; I really like the way this patch is heading....
&gt; 
&gt; However, I apologize for trying to force my design ideas upon you. This is your work and I trust your design sense to come up with the optimal solution. Please feel free to discard the notion of helper classes. I will not be upset :)

Don&apos;t worry. I won&apos;t extract EventDispatcher::ensureEventAncestors into a separate class. It&apos;s gone.

&gt; 
&gt; &gt; Source/WebCore/dom/EventDispatcher.h:53
&gt; &gt; +    void build(Node*, Vector&lt;EventContext&gt;&amp;);
&gt; 
&gt; Should probably contain the stack and the walker as members.
&gt; 
&gt; &gt; Source/WebCore/dom/EventDispatcher.h:58
&gt; &gt; +    void adjust(Vector&lt;EventContext&gt;&amp;, Node* relatedTarget);
&gt; 
&gt; Looks like relatedTarget could be a constructor argument. This way, you could initialized the walker as part of the constructor.

Done.
As for the walker, I&apos;d like to use the walker as a local variable in EventRelatedTargetAdjuster::adjust() since walker has internal state and I don&apos;t want to make walkers&apos; lifecycle survive beyond the function.


I have one more thing. I&apos;ve done another benchmark in C++. To isolate the effect of WIP patch, I&apos;ve inserted code to EventDispatcher::adjustRelatedTarget(..) so that we can measure how much time this function takes. The diff is here: https://bugs.webkit.org/attachment.cgi?id=141937
I&apos;ve also inserted the similar benchmark for ToT so that we compare the results.

As a result, it turned out that this function occupies most time of event dispatching in both cases.
Let me paste the results, including my comments to explain the results.

Good news:
The results looks almost same before/after applying WIP patch in every cases. I think the WIP patch has already enough competitive performance so that we can land this.

Bad news:
Nothing so far as long as I did a correct benchmark.

We are very close to goal finally. Let me clean up the patch for the review. I&apos;ll add a detailed ChangeLog entry in next patch, including the benchmark results.



--------------------------------
Before applying WIP patch.

# The following are how much time EventDispatcher::adjustRelatedTarget(..) takes in each case. (Measured in C++).

 Took 18.821045 ms 
 Took 17.198975 ms 
 Took 33.204102 ms 
 Took 28.000977 ms 
 Took 54.199951 ms 
 Took 52.866943 ms 
 Took 117.178955 ms 
 Took 114.033447 ms 
 Took 461.781982 ms 
 Took 420.091064 ms 
 Took 1761.498047 ms 
 Took 1577.511230 ms 
 Took 3835.390137 ms 
 Took 3359.852051 ms 


# The followings are how much time whole event dispatching takes in each case. (Measured from JavaScript using event-benchmark.html).

Shadow-Free Tree (height=10)
 Took 22 ms. 
Teee with ShadowHost (height=10)
 Took 18 ms. 
Shadow-Free Tree (height=20)
 Took 34 ms. 
Teee with ShadowHost (height=20)
 Took 28 ms. 
Shadow-Free Tree (height=30)
 Took 55 ms. 
Teee with ShadowHost (height=30)
 Took 54 ms. 
Shadow-Free Tree (height=50)
 Took 119 ms. 
Teee with ShadowHost (height=50)
 Took 115 ms. 
Shadow-Free Tree (height=100)
 Took 467 ms. 
Teee with ShadowHost (height=100)
 Took 425 ms. 
Shadow-Free Tree (height=200)
 Took 1780 ms. 
Teee with ShadowHost (height=200)
 Took 1596 ms. 
Shadow-Free Tree (height=300)
 Took 3875 ms. 
Teee with ShadowHost (height=300)
 Took 3401 ms. 

#EOF


--------------------------------
After applying WIP patch.


 Took 20.304199 ms 
 Took 19.757080 ms 
 Took 33.982910 ms 
 Took 30.224854 ms 
 Took 55.161865 ms 
 Took 55.628906 ms 
 Took 117.801758 ms 
 Took 119.816895 ms 
 Took 462.904053 ms 
 Took 423.419189 ms 
 Took 1721.790039 ms 
 Took 1581.446777 ms 
 Took 3957.707275 ms 
 Took 3439.345947 ms 


Shadow-Free Tree (height=10)
 Took 23 ms. 
Teee with ShadowHost (height=10)
 Took 20 ms. 
Shadow-Free Tree (height=20)
 Took 35 ms. 
Teee with ShadowHost (height=20)
 Took 31 ms. 
Shadow-Free Tree (height=30)
 Took 56 ms. 
Teee with ShadowHost (height=30)
 Took 57 ms. 
Shadow-Free Tree (height=50)
 Took 120 ms. 
Teee with ShadowHost (height=50)
 Took 122 ms. 
Shadow-Free Tree (height=100)
 Took 468 ms. 
Teee with ShadowHost (height=100)
 Took 429 ms. 
Shadow-Free Tree (height=200)
 Took 1741 ms. 
Teee with ShadowHost (height=200)
 Took 1599 ms. 
Shadow-Free Tree (height=300)
 Took 3999 ms. 
Teee with ShadowHost (height=300)
 Took 3483 ms. 

#EOF</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625179</commentid>
    <comment_count>41</comment_count>
      <attachid>142203</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-16 02:25:37 -0700</bug_when>
    <thetext>Created attachment 142203
ready for reviews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625258</commentid>
    <comment_count>42</comment_count>
      <attachid>142219</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-16 04:23:43 -0700</bug_when>
    <thetext>Created attachment 142219
ready for reviews. Refine a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625528</commentid>
    <comment_count>43</comment_count>
      <attachid>142219</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-16 09:14:01 -0700</bug_when>
    <thetext>Comment on attachment 142219
ready for reviews. Refine a changelog.

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

Maybe it&apos;s because I spent a lot of time on this part of the spec, but the new code reads _a lot_ better than the old one to me. Good work! A few nits -- up to you to fix before or after landing.

&gt; Source/WebCore/ChangeLog:90
&gt; +        I&apos;ve also conducted a micro benchmark using both
&gt; +        Shadow-Free-DOM-Tree and DOM-Tree-With-Shadow-Host.
&gt; +        See https://bugs.webkit.org/show_bug.cgi?id=78586#c40 for the results.
&gt; +        It seems that the new implementation has more capabilities, but
&gt; +        doesn&apos;t sacrifice a performance of event dispatching in either cases.

You really didn&apos;t pull any punches on this ChangeLog, did you :)

&gt; Source/WebCore/dom/ComposedShadowTreeWalker.cpp:212
&gt; +    if (node-&gt;isShadowRoot()) {
&gt; +        const ShadowRoot* shadowRoot = toShadowRoot(node);

This would probably look a bit better as early return.

&gt; Source/WebCore/dom/EventContext.cpp:50
&gt; +static MouseEvent* toMouseEvent(Event* event)
&gt; +{
&gt; +    ASSERT(event &amp;&amp; event-&gt;isMouseEvent());
&gt; +    return static_cast&lt;MouseEvent*&gt;(event);
&gt; +}

This seems like it belongs in MouseEvent.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626192</commentid>
    <comment_count>44</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-16 20:25:04 -0700</bug_when>
    <thetext>Thank you for the review. Let me land this patch after fixing what you commented and updating Skipped files on some platforms.

(In reply to comment #43)
&gt; (From update of attachment 142219 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=142219&amp;action=review
&gt; 
&gt; Maybe it&apos;s because I spent a lot of time on this part of the spec, but the new code reads _a lot_ better than the old one to me. Good work! A few nits -- up to you to fix before or after landing.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:90
&gt; &gt; +        I&apos;ve also conducted a micro benchmark using both
&gt; &gt; +        Shadow-Free-DOM-Tree and DOM-Tree-With-Shadow-Host.
&gt; &gt; +        See https://bugs.webkit.org/show_bug.cgi?id=78586#c40 for the results.
&gt; &gt; +        It seems that the new implementation has more capabilities, but
&gt; &gt; +        doesn&apos;t sacrifice a performance of event dispatching in either cases.
&gt; 
&gt; You really didn&apos;t pull any punches on this ChangeLog, did you :)

I&apos;ve learned the expression of &apos;pull any punches&apos;. :)

&gt; 
&gt; &gt; Source/WebCore/dom/ComposedShadowTreeWalker.cpp:212
&gt; &gt; +    if (node-&gt;isShadowRoot()) {
&gt; &gt; +        const ShadowRoot* shadowRoot = toShadowRoot(node);
&gt; 
&gt; This would probably look a bit better as early return.

Thank you. I&apos;ll fix it.

&gt; 
&gt; &gt; Source/WebCore/dom/EventContext.cpp:50
&gt; &gt; +static MouseEvent* toMouseEvent(Event* event)
&gt; &gt; +{
&gt; &gt; +    ASSERT(event &amp;&amp; event-&gt;isMouseEvent());
&gt; &gt; +    return static_cast&lt;MouseEvent*&gt;(event);
&gt; &gt; +}
&gt; 
&gt; This seems like it belongs in MouseEvent.h?

Yeah, that should be. I&apos;ll move it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626202</commentid>
    <comment_count>45</comment_count>
      <attachid>142403</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-16 20:38:00 -0700</bug_when>
    <thetext>Created attachment 142403
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626204</commentid>
    <comment_count>46</comment_count>
      <attachid>142404</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-05-16 20:40:51 -0700</bug_when>
    <thetext>Created attachment 142404
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626235</commentid>
    <comment_count>47</comment_count>
      <attachid>142404</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-16 21:37:03 -0700</bug_when>
    <thetext>Comment on attachment 142404
Patch for landing

Clearing flags on attachment: 142404

Committed r117394: &lt;http://trac.webkit.org/changeset/117394&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626236</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-16 21:37:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140505</attachid>
            <date>2012-05-07 03:53:16 -0700</date>
            <delta_ts>2012-05-09 19:25:10 -0700</delta_ts>
            <desc>WIP. concept of new spec.</desc>
            <filename>bug-78586-20120507195314.patch</filename>
            <type>text/plain</type>
            <size>39062</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTg0NjQzNzllMmU4Mjdj
YjExNzE1MGViOWEwMjQwZGMyODI2MGI2Yi4uOGMyODRiMDgyNjNhZDNmYTE3YWRkMTMzOTlkMTc4
MjIzMjRiZmIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgdHJlZSBpbnN0ZWFkIG9m
IG9yZGluYWwgRE9NIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdp
dGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OmFkanVzdGVkUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZUFkanVzdGVkUGFyZW50KToKKyAg
ICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg6CisgICAgICAgIChDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyOjpjYW5Dcm9zc1VwcGVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjpjYW5Dcm9zc0xvd2VyQm91bmRhcnkpOgorICAgICAgICAqIGRv
bS9FdmVudENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVu
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dG9Nb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50
cyk6CisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoRXZlbnRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2hvdWxkRGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFNob3Vs
ZERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhp
c3RzSW5TYW1lU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjph
bmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0
Q29tbW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5o
OgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChOb2RlKToKKwog
MjAxMi0wNS0wNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIEF0
dGVtcHQgdG8gZml4IHRoZSAhRU5BQkxFKElOU1BFQ1RPUikgYnVpbGQgYnkgbWFraW5nIEluc3Bl
Y3RvclZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyLmNwcAppbmRleCA5ZmRjYjlmODllMGQyMTFlMDI3ZDY3ZGU0MWViMWJkNmIxMjBkOWRmLi4w
ZWI0MmIxOGY3MTcwMWI5MTM3ZjRkZmRiMTdkMDZiM2E1MDMyNzVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcApAQCAtMjAxLDYgKzIwMSwz
MiBAQCB2b2lkIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6cGFyZW50KCkKICAgICBhc3NlcnRQ
b3N0Y29uZGl0aW9uKCk7CiB9CiAKK3ZvaWQgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjphZGp1
c3RlZFBhcmVudCgpCit7CisgICAgQVNTRVJUKG1fbm9kZSk7CisgICAgbV9ub2RlID0gdHJhdmVy
c2VBZGp1c3RlZFBhcmVudChtX25vZGUpOworfQorCitOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVX
YWxrZXI6OnRyYXZlcnNlQWRqdXN0ZWRQYXJlbnQoY29uc3QgTm9kZSogbm9kZSkgY29uc3QKK3sK
KyAgICBpZiAoY2FuQ3Jvc3NMb3dlckJvdW5kYXJ5KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Ry
ZWUqIHNoYWRvd1RyZWUgPSBzaGFkb3dUcmVlT2ZQYXJlbnQobm9kZSkpIHsKKyAgICAgICAgICAg
IGlmIChIVE1MQ29udGVudFNlbGVjdGlvbiogc2VsZWN0aW9uID0gc2hhZG93VHJlZS0+c2VsZWN0
aW9uRm9yKG5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24tPmluc2VydGlv
blBvaW50KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5vZGUtPmlzU2hhZG93Um9vdCgp
KSB7CisgICAgICAgIGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0b1NoYWRvd1Jvb3Qo
bm9kZSk7CisgICAgICAgIGlmIChzaGFkb3dSb290LT5pc1lvdW5nZXN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gY2FuQ3Jvc3NMb3dlckJvdW5kYXJ5KCkgPyBzaGFkb3dSb290LT5ob3N0KCkgOiAw
OworICAgICAgICBJbnNlcnRpb25Qb2ludCogYXNzaWduZWRJbnNlcnRpb25Qb2ludCA9IHNoYWRv
d1Jvb3QtPmFzc2lnbmVkVG8oKTsKKyAgICAgICAgQVNTRVJUKGFzc2lnbmVkSW5zZXJ0aW9uUG9p
bnQpOworICAgICAgICByZXR1cm4gYXNzaWduZWRJbnNlcnRpb25Qb2ludDsKKyAgICB9CisgICAg
cmV0dXJuIG5vZGUtPnBhcmVudE5vZGUoKTsKK30KKworCiBOb2RlKiBDb21wb3NlZFNoYWRvd1Ry
ZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAg
aWYgKCFjYW5Dcm9zc1VwcGVyQm91bmRhcnkoKSAmJiBub2RlLT5pc1NoYWRvd1Jvb3QoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oCmluZGV4IDk3
NjZjMWEzNjUwMTkwMDg4Yjk0ZGEyYTQ0MGMyMDYyNmQwZDRhOTIuLjBmOGFmOTFjYWIxMzU3NmIw
OTUzZGYxODcyZDYzMDlhMWFhOWZhODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyLmgKQEAgLTM5LDE1ICszOSwxNiBAQCBjbGFzcyBTaGFkb3dSb290
OwogY2xhc3MgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyIHsKIHB1YmxpYzoKICAgICBlbnVtIFBv
bGljeSB7Ci0gICAgICAgIENyb3NzVXBwZXJCb3VuZGFyeSwKKyAgICAgICAgQ3Jvc3NCb3VuZGFy
eSwKICAgICAgICAgRG9Ob3RDcm9zc1VwcGVyQm91bmRhcnksCisgICAgICAgIERvTm90Q3Jvc3NM
b3dlckJvdW5kYXJ5LAogICAgIH07CiAKLSAgICBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIoY29u
c3QgTm9kZSosIFBvbGljeSA9IENyb3NzVXBwZXJCb3VuZGFyeSk7CisgICAgQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyKGNvbnN0IE5vZGUqLCBQb2xpY3kgPSBDcm9zc0JvdW5kYXJ5KTsKIAogICAg
IC8vIEZvciBhIGNvbW1vbiB1c2UgY2FzZSBzdWNoIGFzOgogICAgIC8vIGZvciAoQ29tcG9zZWRT
aGFkb3dUcmVlV2Fsa2VyIHdhbGtlciA9IENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6ZnJvbUZp
cnN0Q2hpbGQobm9kZSk7IHdhbGtlci5nZXQoKTsgd2Fsa2VyLm5leHRTaWJsaW5nKCkpCi0gICAg
c3RhdGljIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlciBmcm9tRmlyc3RDaGlsZChjb25zdCBOb2Rl
KiwgUG9saWN5ID0gQ3Jvc3NVcHBlckJvdW5kYXJ5KTsKKyAgICBzdGF0aWMgQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyIGZyb21GaXJzdENoaWxkKGNvbnN0IE5vZGUqLCBQb2xpY3kgPSBDcm9zc0Jv
dW5kYXJ5KTsKIAogICAgIE5vZGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Tm9k
ZSo+KG1fbm9kZSk7IH0KIApAQCAtNTgsNiArNTksMTEgQEAgcHVibGljOgogICAgIHZvaWQgcHJl
dmlvdXNTaWJsaW5nKCk7CiAKICAgICB2b2lkIHBhcmVudCgpOworICAgIC8vIEZJWE1FOiBBbiAn
YWRqdXN0ZWQnIGlzIG5vdCBnb29kIG5hbWUgZm9yIGdlbmVyYWwgdXNlIGNhc2UuIFJlbmFtZSB0
aGlzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjAy
MgorICAgIC8vIFRoaXMgbWF5IHJldHVybiBTaGFkb3dSb290IG9yIEluc2VydGlvblBvaW50Lgor
ICAgIHZvaWQgYWRqdXN0ZWRQYXJlbnQoKTsKKwogCiAgICAgdm9pZCBuZXh0KCk7CiAgICAgdm9p
ZCBwcmV2aW91cygpOwpAQCAtNjgsNyArNzQsOCBAQCBwcml2YXRlOgogICAgICAgICBUcmF2ZXJz
YWxEaXJlY3Rpb25CYWNrd2FyZAogICAgIH07CiAKLSAgICBib29sIGNhbkNyb3NzVXBwZXJCb3Vu
ZGFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9saWN5ID09IENyb3NzVXBwZXJCb3VuZGFyeTsgfQor
ICAgIGJvb2wgY2FuQ3Jvc3NVcHBlckJvdW5kYXJ5KCkgY29uc3QgeyByZXR1cm4gbV9wb2xpY3kg
IT0gRG9Ob3RDcm9zc1VwcGVyQm91bmRhcnk7IH0KKyAgICBib29sIGNhbkNyb3NzTG93ZXJCb3Vu
ZGFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9saWN5ICE9IERvTm90Q3Jvc3NMb3dlckJvdW5kYXJ5
OyB9CiAKICAgICB2b2lkIGFzc2VydFByZWNvbmRpdGlvbigpIGNvbnN0CiAgICAgewpAQCAtOTks
NiArMTA2LDcgQEAgcHJpdmF0ZToKICAgICBOb2RlKiB0cmF2ZXJzZUxhc3RDaGlsZChjb25zdCBO
b2RlKikgY29uc3Q7CiAgICAgTm9kZSogdHJhdmVyc2VDaGlsZChjb25zdCBOb2RlKiwgVHJhdmVy
c2FsRGlyZWN0aW9uKSBjb25zdDsKICAgICBOb2RlKiB0cmF2ZXJzZVBhcmVudChjb25zdCBOb2Rl
KikgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VBZGp1c3RlZFBhcmVudChjb25zdCBOb2RlKikg
Y29uc3Q7CiAKICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2Rl
Kik7CiAgICAgc3RhdGljIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggMmE1YzUyMTBhYWVmNmI5NDFi
YmRlNWRlMjk1Y2JhMzM5ZDE0MmRmNS4uZGY4YzhkNzY2NjA5M2FjN2IxNjU1ZGNkN2JkMWI2YTBk
MGRkMTliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMgKzM5LDI3IEBAIEV2ZW50Q29udGV4dDo6
RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gY3VycmVuCiAgICAgOiBtX25vZGUobm9kZSkKICAgICAsIG1fY3VycmVudFRhcmdldChjdXJy
ZW50VGFyZ2V0KQogICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9yZWxhdGVkVGFyZ2V0
KDApCisgICAgLCBtX3Nob3VsZERpc3BhdGNoKHRydWUpCiB7CiB9CiAKK3N0YXRpYyBNb3VzZUV2
ZW50KiB0b01vdXNlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChldmVudCAmJiBl
dmVudC0+aXNNb3VzZUV2ZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50
Kj4oZXZlbnQpOworfQorCiB2b2lkIEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZl
bnQqIGV2ZW50KSBjb25zdAogeworICAgIGlmICghbV9zaG91bGREaXNwYXRjaCkKKyAgICAgICAg
cmV0dXJuOwogICAgIGV2ZW50LT5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50
LT5zZXRDdXJyZW50VGFyZ2V0KG1fY3VycmVudFRhcmdldC5nZXQoKSk7CisgICAgLy8gRklYTUU6
IE5lZWRzIGEgcm9idXN0IGFuZCB0eXBlLXNhZmUgYXBwcm9hY2guIFRoaXMgaXMgdWdseSBoYWNr
LgorICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgp
KQorICAgICAgICB0b01vdXNlRXZlbnQoZXZlbnQpLT5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRl
ZFRhcmdldC5nZXQoKSk7CisgICAgCiAgICAgbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVu
dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAppbmRleCA1ZTczMTdmNDVjZjU0ODU2
YTMyNDlkODdkZDI3YTA4MTY2MmQ2NzQ4Li5jMzhjMTE3OTE1ODc0MGFiNGFiNmU5N2VkMmE0ODI4
MmU5YmRlZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCkBAIC00MiwxMyArNDIsMjAg
QEAgcHVibGljOgogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogICAgIEV2ZW50VGFyZ2V0KiB0
YXJnZXQoKSBjb25zdDsKKyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCgpIGNvbnN0Owog
ICAgIGJvb2wgY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpIGNvbnN0OwogICAgIHZvaWQgaGFu
ZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBjb25zdDsKKyAgICB2b2lkIHNldFNob3VsZERpc3BhdGNo
KGJvb2wpOworICAgIHZvaWQgc2V0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0
Pik7CisgICAgYm9vbCBzaG91bGREaXNwYXRjaCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFJl
ZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX2N1cnJlbnRUYXJn
ZXQ7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsKKyAgICBSZWZQdHI8RXZlbnRU
YXJnZXQ+IG1fcmVsYXRlZFRhcmdldDsKKyAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gZW51
bS4KKyAgICBib29sIG1fc2hvdWxkRGlzcGF0Y2g7CiB9OwogCiBpbmxpbmUgTm9kZSogRXZlbnRD
b250ZXh0Ojpub2RlKCkgY29uc3QKQEAgLTY2LDYgKzczLDI2IEBAIGlubGluZSBib29sIEV2ZW50
Q29udGV4dDo6Y3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
Y3VycmVudFRhcmdldC5nZXQoKSA9PSBtX3RhcmdldC5nZXQoKTsKIH0KIAoraW5saW5lIGJvb2wg
RXZlbnRDb250ZXh0OjpzaG91bGREaXNwYXRjaCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hv
dWxkRGlzcGF0Y2g7Cit9CisKK2lubGluZSB2b2lkIEV2ZW50Q29udGV4dDo6c2V0U2hvdWxkRGlz
cGF0Y2goYm9vbCBzaG91bGREaXNwYXRjaCkKK3sKKyAgICBtX3Nob3VsZERpc3BhdGNoID0gc2hv
dWxkRGlzcGF0Y2g7Cit9CisKK2lubGluZSBFdmVudFRhcmdldCogRXZlbnRDb250ZXh0OjpyZWxh
dGVkVGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0LmdldCgpOwor
fQorCitpbmxpbmUgdm9pZCBFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0
cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCkKK3sKKyAgICBtX3JlbGF0ZWRUYXJnZXQgPSBy
ZWxhdGVkVGFyZ2V0OworfQorCiB9CiAKICNlbmRpZiAvLyBFdmVudENvbnRleHRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCA1ODY2ZTYwNjhkNmY1OWJhNjIxZDMy
MWM1NDRmNGYyODM2M2JjZWI5Li5lMGU5YzkyMjE4ZmQ0OGYwYzJlZjA2NzQyYzNlZmNlOGYwMWQw
N2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgog
CisjaW5jbHVkZSAiQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgiCiAjaW5jbHVkZSAiRXZlbnRD
b250ZXh0LmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaE1lZGlhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjb3BlZEV2
ZW50UXVldWUuaCIKKyNpbmNsdWRlICJTaGFkb3dUcmVlLmgiCiAjaW5jbHVkZSAiV2luZG93RXZl
bnRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgpAQCAtNDUsNiArNDcsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitz
dGF0aWMgYm9vbCBleGlzdHNJblNhbWVTY29wZShOb2RlKiBub2RlMSwgTm9kZSogbm9kZTIpCit7
CisgICAgcmV0dXJuIG5vZGUxLT50cmVlU2NvcGUoKSA9PSBub2RlMi0+dHJlZVNjb3BlKCk7Cit9
CisKIHN0YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlj
a3MgPSAwOwogCiBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBub2Rl
LCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gbWVkaWF0b3IpCkBAIC0xMjEsMTA0
ICsxMjgsMTI4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NoYWRvd0hvc3QoTm9kZSogbm9kZSkK
ICAgICByZXR1cm4gbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aGFz
U2hhZG93Um9vdCgpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNo
ZXI6OmFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJn
ZXQsIGNvbnN0IFZlY3RvcjxOb2RlKj4gcmVsYXRlZFRhcmdldEFuY2VzdG9ycykKLXsKLSAgICBW
ZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkg
PSBtX2FuY2VzdG9ycy5lbmQoKTsKLSAgICAvLyBBc3N1bWUgZGl2ZXJnZW50IGJvdW5kYXJ5IGlz
IHRoZSByZWxhdGVkVGFyZ2V0IGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIHJlbGF0ZWQgdGFyZ2V0
IGFuY2VzdG9yIGNoYWluIGRvZXMgbm90IGNyb3NzIGFueSBzaGFkb3cgRE9NIGJvdW5kYXJpZXMp
LgotICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGZpcnN0RGl2ZXJnZW50Qm91bmRh
cnkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7Ci0KLSAgICBWZWN0b3I8RXZlbnRD
b250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgdGFyZ2V0QW5jZXN0b3IgPSBtX2FuY2VzdG9ycy5lbmQo
KTsKLSAgICAvLyBXYWxrIGRvd24gZnJvbSB0aGUgdG9wLCBsb29raW5nIGZvciBsb3dlc3QgY29t
bW9uIGFuY2VzdG9yLCBhbHNvIG1vbml0b3Jpbmcgc2hhZG93IERPTSBib3VuZGFyaWVzLgotICAg
IGJvb2wgZGl2ZXJnZWQgPSBmYWxzZTsKLSAgICBmb3IgKFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0
ZXJhdG9yIGkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmVuZCgpIC0gMTsgaSA+PSByZWxhdGVk
VGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7IC0taSkgewotICAgICAgICBpZiAoZGl2ZXJnZWQpIHsK
LSAgICAgICAgICAgIGlmICgoKmkpLT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAg
IGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgPSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHRhcmdldEFuY2VzdG9yID09IG1fYW5jZXN0b3JzLmJlZ2luKCkpIHsKLSAgICAgICAg
ICAgIGRpdmVyZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgdGFyZ2V0QW5jZXN0b3ItLTsKKy8vIHN0YXRpYyB2b2lkIHByaW50QW5jZXN0b3Jz
KGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBhbmNlc3RvcnMpCisvLyB7CisvLyAgICAgZm9y
IChWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgaSA9IGFuY2VzdG9ycy5lbmQo
KSAtIDE7IGkgPj0gYW5jZXN0b3JzLmJlZ2luKCk7IC0taSkKKy8vICAgICAgICAgaS0+bm9kZSgp
LT5zaG93Tm9kZSgpOworLy8gfQorCisvLyBzdGF0aWMgdm9pZCBwcmludEFuY2VzdG9ycyhjb25z
dCBWZWN0b3I8Tm9kZSo+JiBhbmNlc3RvcnMpCisvLyB7CisvLyAgICAgZm9yIChWZWN0b3I8Tm9k
ZSo+Ojpjb25zdF9pdGVyYXRvciBpID0gYW5jZXN0b3JzLmVuZCgpIC0gMTsgaSA+PSBhbmNlc3Rv
cnMuYmVnaW4oKTsgLS1pKQorLy8gICAgICAgICAoKmkpLT5zaG93Tm9kZSgpOworLy8gfQorCisv
LyBzdGF0aWMgYm9vbCBzaG91bGREdW1wKGNvbnN0IE5vZGUqIG5vZGUpCisvLyB7CisvLyAjaWZk
ZWYgTkRFQlVHCisvLyAgICAgcmV0dXJuIGZhbHNlOworLy8gI2Vsc2UKKy8vICAgICByZXR1cm4g
bm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6dGl0bGVBdHRyKSA9PSAiZHVtcCI7CisvLyAjZW5kaWYKKy8vIH0KIAotICAgICAg
ICBpZiAoKCppKS0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAgICBsb3dlc3RDb21tb25Cb3Vu
ZGFyeSA9IHRhcmdldEFuY2VzdG9yOworaW5saW5lIHN0YXRpYyBib29sIGFuY2VzdG9yc0Nyb3Nz
U2hhZG93Qm91bmRhcmllcyhjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQor
eworICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGFuY2VzdG9ycy5maXJzdCgpLm5v
ZGUoKSA9PSBhbmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKK30KIAotICAgICAgICBpZiAoKCppKSAh
PSAoKnRhcmdldEFuY2VzdG9yKS5ub2RlKCkpCi0gICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7
CitzdGF0aWMgVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2VzdENvbW1v
bkJvdW5kYXJ5KFZlY3RvcjxFdmVudENvbnRleHQ+JiB0YXJnZXRBbmNlc3RvcnMsIFZlY3RvcjxO
b2RlKj4mIHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpCit7CisgICAgVmVjdG9yPEV2ZW50Q29udGV4
dD46OmNvbnN0X2l0ZXJhdG9yIHRhcmdldEl0ZXJhdG9yID0gdGFyZ2V0QW5jZXN0b3JzLmVuZCgp
IC0gMTsKKyAgICBWZWN0b3I8Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciByZWxhdGVkVGFyZ2V0SXRl
cmF0b3IgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmVuZCgpIC0gMTsKKyAgICBWZWN0b3I8RXZl
bnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSB0YXJnZXRB
bmNlc3RvcnMuZW5kKCk7CisgICAgd2hpbGUgKHRhcmdldEl0ZXJhdG9yID49IHRhcmdldEFuY2Vz
dG9ycy5iZWdpbigpICYmIHJlbGF0ZWRUYXJnZXRJdGVyYXRvciA+PSByZWxhdGVkVGFyZ2V0QW5j
ZXN0b3JzLmJlZ2luKCkpIHsKKyAgICAgICAgaWYgKHRhcmdldEl0ZXJhdG9yLT5ub2RlKCkgIT0g
KnJlbGF0ZWRUYXJnZXRJdGVyYXRvcikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAo
dGFyZ2V0SXRlcmF0b3ItPm5vZGUoKS0+aXNTaGFkb3dSb290KCkpCisgICAgICAgICAgICBsb3dl
c3RDb21tb25Cb3VuZGFyeSA9IHRhcmdldEl0ZXJhdG9yOworICAgICAgICAtLXRhcmdldEl0ZXJh
dG9yOworICAgICAgICAtLXJlbGF0ZWRUYXJnZXRJdGVyYXRvcjsKICAgICB9CisgICAgaWYgKHRh
cmdldEl0ZXJhdG9yIDwgdGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkgJiYgcmVsYXRlZFRhcmdldEl0
ZXJhdG9yID49IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKSkgeworICAgICAgICBpZiAo
KCpyZWxhdGVkVGFyZ2V0SXRlcmF0b3IpLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAg
Ly8gV2UgbXVzdCBoYW5kbGUgYSBjYXNlIHdoZXJlIHRhcmdldCBpcyBhIHNoYWRvdy1ob3N0IGFu
ZCBpcyBhbiBhbmNlc3RvciBvZiByZWxhdGVkLXRhcmdldC4KKyAgICAgICAgICAgIC8vIEluIHRo
aXMgY2FzZSwgd2Ugc2hvdWxkIHNldCBsb3dlc3QgY29tbW9uIGJvdW5kYXJ5IHRvICh0YXJnZXRB
bmNlc3RvcnMuYmVnaW4oKSAtIDEpIHNvIHRoYXQgYW4gZXZlbnQgc2hvdWxkIG5vdCBoYXBwZW4u
CisKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIG9uZSBleGNlcHRpb25hbCBjYXNlIHdoZXJlIHRo
ZSB0YXJnZXQgYW5kIHRoZSByZWxhdGVkIHRhcmdldCBhcmUgaW4gdGhlIHNhbXBlIHNjb3BlLgor
ICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCByZXR1cm4gbG93ZXN0Q29tbW9uQm91bmRhcnkg
YXMgaXMgc2luY2UgZXZlbnQgc2hvdWxkIGhhcHBlbiBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAg
ICAgLy8gVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGUgcmVsYXRlZCB0YXJnZXQgaXMgYSBkaXN0cmli
dXRlZCBub2RlLgorICAgICAgICAgICAgaWYgKGV4aXN0c0luU2FtZVNjb3BlKHJlbGF0ZWRUYXJn
ZXRBbmNlc3RvcnNbMF0sIHRhcmdldEFuY2VzdG9yc1swXS5ub2RlKCkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBsb3dlc3RDb21tb25Cb3VuZGFyeTsKKyAgICAgICAgICAgIC8vIFJldHVybnMg
KHRhcmdldEFuY2VzdG9ycy5iZWdpbigpIC0gMSkgYXMgYSBsb3dlc3QgY29tbW9uIGJvdW5kYXJ5
LgorICAgICAgICAgICAgcmV0dXJuIHRhcmdldEl0ZXJhdG9yOworICAgICAgICB9CiAKLSAgICBp
ZiAoIWRpdmVyZ2VkKSB7Ci0gICAgICAgIC8vIFRoZSByZWxhdGVkVGFyZ2V0IGlzIGFuIGFuY2Vz
dG9yIG9yIHNoYWRvd0hvc3Qgb2YgdGhlIHRhcmdldC4KLSAgICAgICAgLy8gRklYTUU6IFJlbW92
ZSB0aGUgZmlyc3QgY2hlY2sgb25jZSBjb252ZXJzaW9uIHRvIG5ldyBzaGFkb3cgRE9NIGlzIGNv
bXBsZXRlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ4Njk4PgotICAgICAgICBpZiAobV9ub2RlLT5z
aGFkb3dIb3N0KCkgPT0gcmVsYXRlZFRhcmdldC5nZXQoKSB8fCBpc1NoYWRvd0hvc3QocmVsYXRl
ZFRhcmdldC5nZXQoKSkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxFdmVudENvbnRleHQ+Ojpjb25z
dF9pdGVyYXRvciByZWxhdGVkVGFyZ2V0Q2hpbGQgPSB0YXJnZXRBbmNlc3RvciAtIDE7Ci0gICAg
ICAgICAgICBpZiAocmVsYXRlZFRhcmdldENoaWxkID49IG1fYW5jZXN0b3JzLmJlZ2luKCkgJiYg
cmVsYXRlZFRhcmdldENoaWxkLT5ub2RlKCktPmlzU2hhZG93Um9vdCgpKQotICAgICAgICAgICAg
ICAgIGxvd2VzdENvbW1vbkJvdW5kYXJ5ID0gcmVsYXRlZFRhcmdldENoaWxkOworICAgIH0gZWxz
ZSBpZiAodGFyZ2V0SXRlcmF0b3IgPj0gdGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkgJiYgcmVsYXRl
ZFRhcmdldEl0ZXJhdG9yIDwgcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpKSB7CisgICAg
ICAgIGlmICh0YXJnZXRJdGVyYXRvci0+bm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAg
ICAgICAgLy8gV2UgbXVzdCBoYW5kbGUgYSBjYXNlIHdoZXJlIHJlbGF0ZWQtdGFyZ2V0IGlzIGEg
c2hhZG93LWhvc3QgYW5kIGlzIGFuIGFuY2VzdG9yIG9mIHRhcmdldC4KKyAgICAgICAgICAgIC8v
IEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIHNldCBsb3dlc3QgY29tbW9uIGJvdW5kYXJ5IHRvIHJl
bGF0ZWQtdGFyZ2V0J3Mgc2hhZG93cm9vdC4KKyAgICAgICAgICAgIHJldHVybiB0YXJnZXRJdGVy
YXRvcjsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoKCpmaXJzdERpdmVyZ2VudEJvdW5kYXJ5
KSA9PSBtX25vZGUuZ2V0KCkpIHsKLSAgICAgICAgLy8gU2luY2UgYW5jZXN0b3JzIGRvZXMgbm90
IGNvbnRhaW4gdGFyZ2V0IGl0c2VsZiwgd2UgbXVzdCBhY2NvdW50Ci0gICAgICAgIC8vIGZvciB0
aGUgcG9zc2liaWxpdHkgdGhhdCB0YXJnZXQgaXMgYSBzaGFkb3dIb3N0IG9mIHJlbGF0ZWRUYXJn
ZXQKLSAgICAgICAgLy8gYW5kIHRodXMgc2VydmVzIGFzIHRoZSBsb3dlc3RDb21tb25Cb3VuZGFy
eS4KLSAgICAgICAgLy8gTHVja2lseSwgaW4gdGhpcyBjYXNlIHRoZSBmaXJzdERpdmVyZ2VudEJv
dW5kYXJ5IGlzIHRhcmdldC4KLSAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSBtX2FuY2Vz
dG9ycy5iZWdpbigpOwotICAgICAgICBtX3Nob3VsZFByZXZlbnREaXNwYXRjaCA9IHRydWU7CiAg
ICAgfQorICAgIHJldHVybiBsb3dlc3RDb21tb25Cb3VuZGFyeTsKK30KIAotICAgIGlmIChsb3dl
c3RDb21tb25Cb3VuZGFyeSAhPSBtX2FuY2VzdG9ycy5lbmQoKSkgewotICAgICAgICAvLyBUcmlt
IGFuY2VzdG9ycyB0byBsb3dlc3RDb21tb25Cb3VuZGFyeSB0byBrZWVwIGV2ZW50cyBpbnNpZGUg
b2YgdGhlIGNvbW1vbiBzaGFkb3cgRE9NIHN1YnRyZWUuCi0gICAgICAgIG1fYW5jZXN0b3JzLnNo
cmluayhsb3dlc3RDb21tb25Cb3VuZGFyeSAtIG1fYW5jZXN0b3JzLmJlZ2luKCkpOworc3RhdGlj
IGJvb2wgdmlzaWJsZShOb2RlKiBmcm9tLCBOb2RlKiB0bykKK3sKKyAgICBUcmVlU2NvcGUqIHRh
cmdldFNjb3BlID0gdG8tPnRyZWVTY29wZSgpOworICAgIGZvciAoVHJlZVNjb3BlKiBzY29wZSA9
IGZyb20tPnRyZWVTY29wZSgpOyBzY29wZTsgc2NvcGUgPSBzY29wZS0+cGFyZW50VHJlZVNjb3Bl
KCkpIHsKKyAgICAgICAgaWYgKHNjb3BlID09IHRhcmdldFNjb3BlKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIC8vIFNldCBldmVudCdzIHJlbGF0ZWQgdGFyZ2V0IHRvIHRo
ZSBmaXJzdCBlbmNvdW50ZXJlZCBzaGFkb3cgRE9NIGJvdW5kYXJ5IGluIHRoZSBkaXZlcmdlbnQg
c3VidHJlZS4KLSAgICByZXR1cm4gZmlyc3REaXZlcmdlbnRCb3VuZGFyeSAhPSByZWxhdGVkVGFy
Z2V0QW5jZXN0b3JzLmJlZ2luKCkgPyAqZmlyc3REaXZlcmdlbnRCb3VuZGFyeSA6IHJlbGF0ZWRU
YXJnZXQ7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgc3RhdGljIGJvb2wgYW5jZXN0
b3JzQ3Jvc3NTaGFkb3dCb3VuZGFyaWVzKGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBhbmNl
c3RvcnMpCitzdGF0aWMgdm9pZCBzZXRSZWxhdGVkVGFyZ2V0KEV2ZW50Q29udGV4dCYgZXZlbnRD
b250ZXh0LCBjb25zdCBWZWN0b3I8Tm9kZSo+JiByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzKQogewot
ICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGFuY2VzdG9ycy5maXJzdCgpLm5vZGUo
KSA9PSBhbmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBtaWdodCB0
YWtlIE8oTl4yKSBpbiB0aGVvcnkuIEZhc3RlbiB0aGlzLgorICAgIGZvciAoVmVjdG9yPE5vZGUq
Pjo6Y29uc3RfaXRlcmF0b3IgcmVsYXRlZFRhcmdldEl0ZXJhdG9yID0gcmVsYXRlZFRhcmdldEFu
Y2VzdG9ycy5iZWdpbigpOyByZWxhdGVkVGFyZ2V0SXRlcmF0b3IgPCByZWxhdGVkVGFyZ2V0QW5j
ZXN0b3JzLmVuZCgpOyArK3JlbGF0ZWRUYXJnZXRJdGVyYXRvcikgeworICAgICAgICBpZiAodmlz
aWJsZShldmVudENvbnRleHQubm9kZSgpLCAqcmVsYXRlZFRhcmdldEl0ZXJhdG9yKSkgeworICAg
ICAgICAgICAgZXZlbnRDb250ZXh0LnNldFJlbGF0ZWRUYXJnZXQoKnJlbGF0ZWRUYXJnZXRJdGVy
YXRvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJU
KGZhbHNlKTsKIH0KIAotLy8gRklYTUU6IE9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUyOTYzIGxhbmRzLCB0aGlzIHNob3VsZAotLy8gYmUgZ3JlYXRseSBpbXBy
b3ZlZC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDAyNS4K
LVBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRh
cmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJn
ZXQpCisvLyBGSVhNRTogUmVuYW1lIHRoaXMgZnVuY3Rpb24gc2luY2UgdGhpcyBkb2VzIG1vcmUg
dGhhbiBhZGp1c3RpbmcgcmVsYXRlZFRhcmdldC4KK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjphZGp1
c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJw
UmVsYXRlZFRhcmdldCkKIHsKLSAgICBpZiAoIXBycFJlbGF0ZWRUYXJnZXQpCi0gICAgICAgIHJl
dHVybiAwOwogCisgICAgaWYgKCFwcnBSZWxhdGVkVGFyZ2V0KQorICAgICAgICByZXR1cm47CiAg
ICAgUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQgPSBwcnBSZWxhdGVkVGFyZ2V0LT50b05vZGUo
KTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQpCi0gICAgICAgIHJldHVybiAwOwotCisgICAgICAg
IHJldHVybjsKICAgICBOb2RlKiB0YXJnZXQgPSBtX25vZGUuZ2V0KCk7CiAgICAgaWYgKCF0YXJn
ZXQpCi0gICAgICAgIHJldHVybiBwcnBSZWxhdGVkVGFyZ2V0OworICAgICAgICByZXR1cm47CiAK
ICAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7CiAKLSAgICAvLyBDYWxjdWxhdGUgZWFy
bHkgaWYgdGhlIGNvbW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxlIGJ5IGxvb2tpbmcgYXQK
LSAgICAvLyBhbmNlc3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0aW5nIGhhcyBvY2N1cmVk
IChpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgotICAg
IC8vIElmIHRoZXJlIGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0aGUgdGFyZ2V0IGFuZCBy
ZWxhdGVkIHRhcmdldCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5LgotICAgIGJvb2wgbm9D
b21tb25Cb3VuZGFyeSA9IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyhtX2FuY2VzdG9y
cyk7Ci0KICAgICBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnM7Ci0gICAgTm9k
ZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0LmdldCgpOwotICAgIGZv
ciAoTm9kZSogbiA9IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBuID0gbi0+cGFyZW50T3JI
b3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAg
IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpOwotICAgICAg
ICBpZiAoIW5vQ29tbW9uQm91bmRhcnkpCi0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0QW5jZXN0
b3JzLmFwcGVuZChuKTsKLSAgICB9CisgICAgZm9yIChDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIg
d2Fsa2VyKHJlbGF0ZWRUYXJnZXQuZ2V0KCkpOyB3YWxrZXIuZ2V0KCk7IHdhbGtlci5hZGp1c3Rl
ZFBhcmVudCgpKQorICAgICAgICByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmFwcGVuZCh3YWxrZXIu
Z2V0KCkpOworCisgICAgVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2Vz
dEJvdW5kYXJ5ID0gbG93ZXN0Q29tbW9uQm91bmRhcnkobV9hbmNlc3RvcnMsIHJlbGF0ZWRUYXJn
ZXRBbmNlc3RvcnMpOwogCi0gICAgLy8gU2hvcnQtY2lyY3VpdCB0aGUgZmFzdCBjYXNlIHdoZW4g
d2Uga25vdyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGN1bGF0ZSBhIGNvbW1vbiBib3VuZGFyeS4K
LSAgICBpZiAobm9Db21tb25Cb3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIG91dGVybW9zdFNoYWRv
d0JvdW5kYXJ5OworICAgIGlmIChsb3dlc3RCb3VuZGFyeSA8IG1fYW5jZXN0b3JzLmJlZ2luKCkp
IHsKKyAgICAgICAgLy8gRklYTUU6IEluc3RlYWQgb2Ygc2V0dGluZyBldmVyeSBldmVudGNvbnRl
eHQsIHNraXAgZXZlbnQgZGlzcGF0Y2gKKyAgICAgICAgZm9yIChWZWN0b3I8RXZlbnRDb250ZXh0
Pjo6aXRlcmF0b3IgdGFyZ2V0SXRlcmF0b3IgPSBtX2FuY2VzdG9ycy5iZWdpbigpOyB0YXJnZXRJ
dGVyYXRvciA8IG1fYW5jZXN0b3JzLmVuZCgpOyArK3RhcmdldEl0ZXJhdG9yKQorICAgICAgICAg
ICAgdGFyZ2V0SXRlcmF0b3ItPnNldFNob3VsZERpc3BhdGNoKGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIHJldHVybiBhZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMocmVsYXRl
ZFRhcmdldC5yZWxlYXNlKCksIHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOworICAgIGZvciAoVmVj
dG9yPEV2ZW50Q29udGV4dD46Oml0ZXJhdG9yIHRhcmdldEl0ZXJhdG9yID0gbV9hbmNlc3RvcnMu
YmVnaW4oKTsgdGFyZ2V0SXRlcmF0b3IgPCBtX2FuY2VzdG9ycy5lbmQoKTsgKyt0YXJnZXRJdGVy
YXRvcikgeworICAgICAgICBpZiAodGFyZ2V0SXRlcmF0b3IgPiBsb3dlc3RCb3VuZGFyeSkgewor
ICAgICAgICAgICAgaWYgKCFleGlzdHNJblNhbWVTY29wZSh0YXJnZXRJdGVyYXRvci0+bm9kZSgp
LCB0YXJnZXQpKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0SXRlcmF0b3ItPnNldFNob3VsZERp
c3BhdGNoKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBzZXRSZWxhdGVkVGFyZ2V0KCp0YXJnZXRJdGVyYXRvciwgcmVs
YXRlZFRhcmdldEFuY2VzdG9ycyk7CisgICAgfQogfQogCiBFdmVudERpc3BhdGNoZXI6OkV2ZW50
RGlzcGF0Y2hlcihOb2RlKiBub2RlKQpAQCAtMjMyLDMwICsyNjMsMzMgQEAgRXZlbnREaXNwYXRj
aGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKIAogdm9pZCBFdmVudERpc3BhdGNoZXI6
OmVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIW1fbm9kZS0+
aW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9hbmNlc3RvcnNJbml0
aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gSW5jbHVkZXMgdGFyZ2V0IGl0c2Vs
Zi4KKyAgICBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIgYW5jZXN0b3JXYWxrZXIobV9ub2RlLmdl
dCgpKTsKKyAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZH
VGFyZ2V0UnVsZXMoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpOworICAgIEV2ZW50VGFyZ2V0KiBvcmln
aW5hbFRhcmdldCA9IHRhcmdldDsKKyAgICBtX2FuY2VzdG9ycy5hcHBlbmQoRXZlbnRDb250ZXh0
KG1fbm9kZS5nZXQoKSwgdGFyZ2V0LCB0YXJnZXQpKTsKICAgICBtX2FuY2VzdG9yc0luaXRpYWxp
emVkID0gdHJ1ZTsKIAotICAgIE5vZGUqIGFuY2VzdG9yID0gbV9ub2RlLmdldCgpOwotICAgIEV2
ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhh
bmNlc3Rvcik7CisgICAgaWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1NoYWRvd1Jv
b3QoKSkgewotICAgICAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQs
IGFuY2VzdG9yKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQorICAgICAgICBpZiAoYW5jZXN0b3JX
YWxrZXIuZ2V0KCktPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAoZGV0ZXJtaW5l
RGlzcGF0Y2hCZWhhdmlvcihldmVudCwgYW5jZXN0b3JXYWxrZXIuZ2V0KCkpID09IFN0YXlJbnNp
ZGVTaGFkb3dET00pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYW5jZXN0
b3IgPSBhbmNlc3Rvci0+c2hhZG93SG9zdCgpOworICAgICAgICAgICAgYW5jZXN0b3JXYWxrZXIu
YWRqdXN0ZWRQYXJlbnQoKTsKICAgICAgICAgICAgIGlmICghbV9ub2RlLT5pc1NWR0VsZW1lbnQo
KSkKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBhbmNlc3RvcjsKKyAgICAgICAgICAgICAgICB0
YXJnZXQgPSBhbmNlc3RvcldhbGtlci5nZXQoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7Cisg
ICAgICAgICAgICBhbmNlc3RvcldhbGtlci5hZGp1c3RlZFBhcmVudCgpOwogCi0gICAgICAgIGlm
ICghYW5jZXN0b3IpCisgICAgICAgIGlmICghYW5jZXN0b3JXYWxrZXIuZ2V0KCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgbV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4dChh
bmNlc3RvciwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3IpLCB0
YXJnZXQpKTsKKyAgICAgICAgbV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4dChhbmNlc3Rv
cldhbGtlci5nZXQoKSwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0
b3JXYWxrZXIuZ2V0KCkpLCBleGlzdHNJblNhbWVTY29wZShhbmNlc3RvcldhbGtlci5nZXQoKSwg
b3JpZ2luYWxUYXJnZXQtPnRvTm9kZSgpKSA/IG9yaWdpbmFsVGFyZ2V0IDp0YXJnZXQpKTsKICAg
ICB9CiB9CiAKQEAgLTI2OSw2ICszMDMsNyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIAogICAgIFJlZlB0cjxFdmVudFRhcmdl
dD4gb3JpZ2luYWxUYXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CiAgICAgZW5zdXJlRXZlbnRBbmNl
c3RvcnMoZXZlbnQuZ2V0KCkpOworICAgIEFTU0VSVCghbV9hbmNlc3RvcnMuaXNFbXB0eSgpKTsK
IAogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dDb250ZXh0KGV2ZW50LmdldCgpLCBtX25v
ZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsKIApAQCAtMjg1LDggKzMyMCwxMCBAQCBib29s
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkK
ICAgICBpZiAod2luZG93Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSkgJiYg
ZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGlu
ZzsKIAotICAgIGZvciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9ycy5zaXplKCk7IGk7IC0taSkgewot
ICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1fYW5jZXN0b3JzW2kt
MV07CisgICAgZm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3JzLnNpemUoKSAtIDE7IGkgPiAwOyAt
LWkpIHsKKyAgICAgICAgY29uc3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2Vz
dG9yc1tpXTsKKyAgICAgICAgaWYgKCFldmVudENvbnRleHQuc2hvdWxkRGlzcGF0Y2goKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJn
ZXRTYW1lQXNUYXJnZXQoKSkgewogICAgICAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMDEsNyArMzM4LDggQEAgYm9vbCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CiAgICAgZXZlbnQtPnNldFRhcmdl
dChvcmlnaW5hbFRhcmdldC5nZXQoKSk7CiAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZl
bnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7Ci0gICAgbV9u
b2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CisgICAgbV9hbmNlc3RvcnNbMF0u
aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOworICAgIC8vIG1fbm9kZS0+aGFuZGxlTG9j
YWxFdmVudHMoZXZlbnQuZ2V0KCkpOwogICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCkBAIC0zMTAsOCArMzQ4LDEwIEBA
IGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0Up
OwogCiAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3RvcnMuc2l6ZSgpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgY29uc3QgRXZlbnRDb250ZXh0JiBl
dmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKKyAgICAgICAgICAgIGlmICghZXZlbnRDb250
ZXh0LnNob3VsZERpc3BhdGNoKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkKICAgICAg
ICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKICAgICAg
ICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAppbmRleCA4NWFlZmM0
OTMwNDNkNTE3ZWM5NzczNGU2MjE4YWFkODFkMTc5MDY3Li42MmQ5ZTc5NzI4ZWRjYjQyZWNkNWVl
MjM4YmJmMGNjYTQ5MTNlMDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRE
aXNwYXRjaGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCkBA
IC01NCwxOCArNTQsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2ltdWxh
dGVkQ2xpY2soTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCwgYm9vbCBz
ZW5kTW91c2VFdmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKTsKIAogICAgIGJvb2wgZGlzcGF0
Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4g
YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCosIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+KTsKKyAg
ICB2b2lkIGFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0
Pik7CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEV2ZW50RGlzcGF0
Y2hlcihOb2RlKik7CiAKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBhZGp1c3RUb1NoYWRv
d0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0LCBjb25zdCBWZWN0b3I8
Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwogICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlv
ciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgTm9kZSogc2hhZG93Um9vdCk7CiAg
ICAgdm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwogICAgIGNvbnN0IEV2ZW50Q29u
dGV4dCogdG9wRXZlbnRDb250ZXh0KCk7CiAKICAgICBWZWN0b3I8RXZlbnRDb250ZXh0PiBtX2Fu
Y2VzdG9yczsKKwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFy
Z2V0PiBtX29yaWdpbmFsVGFyZ2V0OwogICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmlldzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAppbmRleCBjMzY4OWM2ZGQ0NjNhZWUwNTYyODgxNzJlMjU0
ZGMzZWNmYjI1ZDBiLi5jZjJlMjY2MGE2NWUzNjExZjRiNDdlY2Y4ZWNlN2FmMjczN2VmNTAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCkBAIC0yMDEsOCArMjAxLDggQEAgYm9vbCBNb3Vz
ZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRp
c3BhdGNoZXIpIGNvbnMKICAgICBpZiAoZXZlbnQoKS0+dHlwZSgpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBTaG91bGRuJ3QgaGFwcGVuLgogCi0gICAgUmVmUHRyPEV2ZW50
VGFyZ2V0PiByZWxhdGVkVGFyZ2V0ID0gZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChl
dmVudCgpLCBldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCkpOwotICAgIGV2ZW50KCktPnNldFJlbGF0
ZWRUYXJnZXQocmVsYXRlZFRhcmdldCk7CisgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQg
PSBldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCk7CisgICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRl
ZFRhcmdldChldmVudCgpLCByZWxhdGVkVGFyZ2V0KTsKIAogICAgIGRpc3BhdGNoZXItPmRpc3Bh
dGNoRXZlbnQoZXZlbnQoKSk7CiAgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBldmVudCgpLT5kZWZh
dWx0SGFuZGxlZCgpIHx8IGV2ZW50KCktPmRlZmF1bHRQcmV2ZW50ZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAppbmRleCBiZGJkZDVhY2UyYTg1NmU4ZDU5ZWI3ODg0M2VkNmRkYWNlNGRjNGU5Li5lMDZjNmFi
NGQ4NGU4MzMwZjE1YjZlOGMxZjVlMmRmZTk5NDhhNzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0y
MTc1LDcgKzIxNzUsNiBAQCBGbG9hdFBvaW50IE5vZGU6OmNvbnZlcnRGcm9tUGFnZShjb25zdCBG
bG9hdFBvaW50JiBwKSBjb25zdAogICAgIHJldHVybiBwOwogfQogCi0jaWZuZGVmIE5ERUJVRwog
CiBzdGF0aWMgdm9pZCBhcHBlbmRBdHRyaWJ1dGVEZXNjKGNvbnN0IE5vZGUqIG5vZGUsIFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBjaGFyKiBhdHRyRGVz
YykKIHsKQEAgLTIxOTksNiArMjE5OCw3IEBAIHZvaWQgTm9kZTo6c2hvd05vZGUoY29uc3QgY2hh
ciogcHJlZml4KSBjb25zdAogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcdCVwIFwiJXNc
IlxuIiwgcHJlZml4LCBub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCksIHRoaXMsIHZhbHVlLnV0Zjgo
KS5kYXRhKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0cmluZyBhdHRycyA9ICIiOworICAg
ICAgICBhcHBlbmRBdHRyaWJ1dGVEZXNjKHRoaXMsIGF0dHJzLCBpZEF0dHIsICIgSUQ9Iik7CiAg
ICAgICAgIGFwcGVuZEF0dHJpYnV0ZURlc2ModGhpcywgYXR0cnMsIGNsYXNzQXR0ciwgIiBDTEFT
Uz0iKTsKICAgICAgICAgYXBwZW5kQXR0cmlidXRlRGVzYyh0aGlzLCBhdHRycywgc3R5bGVBdHRy
LCAiIFNUWUxFPSIpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcdCVwJXNcbiIsIHBy
ZWZpeCwgbm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpLCB0aGlzLCBhdHRycy51dGY4KCkuZGF0YSgp
KTsKQEAgLTIyOTIsNyArMjI5Miw2IEBAIHZvaWQgTm9kZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3Nz
RnJhbWUoKSBjb25zdAogICAgIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUocm9vdE5vZGUsIHRoaXMs
ICIiKTsKIH0KIAotI2VuZGlmCiAKIC8vIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGJkMjJj
M2Q2ODNmOTU2NzRkYjMwYWM4NTE1MTg1NzNjMjUzYjQ4Y2MuLjVlNmI0MmNlYWQwNDlmN2ZmMzA5
MjViMDExOGZlODc2NTZlNTM0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNTM2LDE0ICs1MzYsMTIgQEAg
cHVibGljOgogICAgIC8vCiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKE5vZGUqIGluc2Vy
dGlvblBvaW50KTsKIAotI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZvaWQgZm9ybWF0Rm9y
RGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogCiAgICAgdm9p
ZCBzaG93Tm9kZShjb25zdCBjaGFyKiBwcmVmaXggPSAiIikgY29uc3Q7CiAgICAgdm9pZCBzaG93
VHJlZUZvclRoaXMoKSBjb25zdDsKICAgICB2b2lkIHNob3dUcmVlQW5kTWFyayhjb25zdCBOb2Rl
KiBtYXJrZWROb2RlMSwgY29uc3QgY2hhciogbWFya2VkTGFiZWwxLCBjb25zdCBOb2RlKiBtYXJr
ZWROb2RlMiA9IDAsIGNvbnN0IGNoYXIqIG1hcmtlZExhYmVsMiA9IDApIGNvbnN0OwogICAgIHZv
aWQgc2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUoKSBjb25zdDsKLSNlbmRpZgogCiAgICAgdm9p
ZCByZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCop
OwogICAgIHZvaWQgdW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdCopOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGM5YzU4MzAxOTQ4ZGQyOGJjYjVjOTQyZjk1ZGFiNmIzMzA4
ZjUzMmYuLjI1OWM1ZGQxZTI3Mzg2OGM2MGExZDA5YTY5MzRhNmExYWM4ZDhmNTYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMi0wNS0wNyAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgRXZlbnQgZGlzcGF0Y2hpbmcgc2hvdWxkIHVzZSB0aGUgY29tcG9zZWQg
c2hhZG93IERPTSB0cmVlIHRyZWUgaW5zdGVhZCBvZiBvcmRpbmFsIERPTSB0cmVlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRv
dy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2
ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0bWw6CisKIDIwMTItMDUtMDYgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDU1AgdmlvbGF0aW9uIHJl
cG9ydHMgc2hvdWxkIGhhdmUgYWxsIHRoZSBmaWVsZHMgcmVxdWlyZWQgYnkgdGhlIHNwZWMKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZl
bnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlv
bi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDFlNWU3OTcyYjBkOWMxNGNhMTJlNDZhZjE3NzQ3
MjE0YzliODYyNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTA4IEBACitUZXN0cyB0byBlbnN1cmUgdGhhdCBzaGFkb3cgRE9NIGJv
dW5kYXJ5IGlzIG5vdCBjcm9zc2VkIGR1cmluZyBldmVudCBwcm9wYWdhdGlvbi4gQ2FuIG9ubHkg
cnVuIHdpdGhpbiBEUlQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitESVYJIGlk
PXNhbmRib3gKKwlESVYJIGlkPXRvcAorCQlESVYJIGlkPXNoYWRvdy1ob3N0CisJCQlESVYJIGlk
PWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisJCQlESVYJIGlkPXNoYWRvdy1yb290LWNoaWxkCisJ
CURFVEFJTFMJIGlkPWRldGFpbHMKKwkJCVNVTU1BUlkJIGlkPXN1bW1hcnkKKwkJCQlESVYKKwor
CisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRvIHNoYWRvdy1ob3N0L3NoYWRvdy1y
b290LWNoaWxkCisKKyAgbW91c2VvdXQKKworICBtb3VzZW92ZXIKKyAgICAqICAgQHNoYWRvdy1y
b290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhv
c3QpCisKKworTW92aW5nIG1vdXNlIGZyb20gc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQg
dG8gc2hhZG93LWhvc3QKKworICBtb3VzZW91dAorICAgICogICBAc2hhZG93LXJvb3QtY2hpbGQg
KHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBt
b3VzZW92ZXIKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdCB0byBkaXN0cmlidXRl
ZC1saWdodC1jaGlsZAorCisgIG1vdXNlb3V0CisgICAgKiAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0
OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICog
ICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQpCisKKyAgbW91c2VvdmVyCisgICAgKiAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAo
dGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQor
ICAgICogICBAY29udGVudCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0
ZWQ6IHNoYWRvdy1ob3N0KQorICAgICogICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAqICAgQHRvcCAodGFy
Z2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisK
K01vdmluZyBtb3VzZSBmcm9tIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkIHRvIHNoYWRvdy1ob3N0
CisKKyAgbW91c2VvdXQKKyAgICAqICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJnZXQ6
IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgKiAg
IEBjb250ZW50ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hh
ZG93LWhvc3QpCisgICAgKiAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICogICBAdG9wICh0YXJnZXQ6IGRp
c3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKKyAgbW91c2Vv
dmVyCisgICAgKiAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6
IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICogICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1o
b3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKworTW92aW5nIG1vdXNl
IGZyb20gZGV0YWlscyB0byBzdW1tYXJ5CisKKyAgbW91c2VvdXQKKyAgICAqICAgQGRldGFpbHMg
KHRhcmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisgICAgKiAgIEB0b3AgKHRhcmdl
dDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisKKyAgbW91c2VvdmVyCisgICAgKiAgIEBz
dW1tYXJ5ICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorICAgICogICBAZGV0
YWlscyAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKyAgICAqICAgQHRvcCAo
dGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKworCitNb3ZpbmcgbW91c2UgZnJv
bSBzdW1tYXJ5IHRvIGRldGFpbHMKKworICBtb3VzZW91dAorICAgICogICBAc3VtbWFyeSAodGFy
Z2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKyAgICAqICAgQGRldGFpbHMgKHRhcmdl
dDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisgICAgKiAgIEB0b3AgKHRhcmdldDogc3Vt
bWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisKKyAgbW91c2VvdmVyCisgICAgKiAgIEBkZXRhaWxz
ICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5KQorICAgICogICBAdG9wICh0YXJn
ZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5KQorCisKK01vdmluZyBtb3VzZSBmcm9tIHNo
YWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkIHRvIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisK
KyAgbW91c2VvdXQKKyAgICAqICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1y
b290LWNoaWxkKSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91c2Vv
dmVyCisgICAgKiAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICogICBAY29udGVudCAo
dGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290LWNo
aWxkKQorICAgICogICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hp
bGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAqICAgQHRvcCAodGFyZ2V0OiBkaXN0cmli
dXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisKK01vdmluZyBtb3Vz
ZSBmcm9tIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkIHRvIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290
LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAqICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0
YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisg
ICAgKiAgIEBjb250ZW50ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRl
ZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgKiAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0
cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICogICBAdG9w
ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3Qp
CisKKyAgbW91c2VvdmVyCisgICAgKiAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFk
b3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgt
bm9kZS1kaXN0cmlidXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFk
b3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44ZWFmMGI4YWNlMzI4ZjBlNWMyYThlMzNlM2ZkMWYyNTFmNmUxZjRjCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMt
d2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi5odG1sCkBAIC0wLDAgKzEsMTYwIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhZG93LWRv
bS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0ic2FuZGJveCI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdG8gZW5zdXJlIHRoYXQgc2hhZG93IERPTSBib3Vu
ZGFyeSBpcyBub3QgY3Jvc3NlZCBkdXJpbmcgZXZlbnQgcHJvcGFnYXRpb24uIENhbiBvbmx5IHJ1
biB3aXRoaW4gRFJULiIpOworCisvLyBGSVhNRTogTWFrZSBhIHNlcGFyYXRlIHV0aWxpdHkganMg
ZmlsZSBhbmQgc2hhcmUgaXQuCitmdW5jdGlvbiBtb3ZlTW91c2VPdmVyKGVsZW1lbnQpCit7Cisg
ICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAg
IHJldHVybjsKKworICAgIHZhciBkZWZhdWx0UGFkZGluZ1NpemUgPSAyMDsKKyAgICB2YXIgeCA9
IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciB5
OworICAgIGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSB8fCB3aW5kb3cuaW50ZXJuYWxzLnNo
YWRvd1Jvb3QoZWxlbWVudCkpCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGRlZmF1
bHRQYWRkaW5nU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNldFRvcCAr
IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4
LCB5KTsKK30KKwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitmdW5jdGlvbiBjbGVhckV2ZW50
UmVjb3JkcygpCit7CisgICAgZXZlbnRSZWNvcmRzID0ge307Cit9CisKK2Z1bmN0aW9uIGRpc3Bh
dGNoZWRFdmVudChldmVudFR5cGUpCit7CisgICAgdmFyIGV2ZW50cyA9IGV2ZW50UmVjb3Jkc1tl
dmVudFR5cGVdOworICAgIGlmICghZXZlbnRzKQorICAgICAgICByZXR1cm4gW107CisgICAgcmV0
dXJuIGV2ZW50czsKK30KKworZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQpCit7CisgICAgdmFy
IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUKKyAgICBpZiAoIWV2ZW50UmVjb3Jkc1tldmVudFR5cGVd
KSB7CisgICAgICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW10KKyAgICB9CisgICAgdmFy
IGV2ZW50U3RyaW5nID0gJyc7CisgICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQpCisgICAgICAg
IGV2ZW50U3RyaW5nICs9ICcgQCcgKyBldmVudC5jdXJyZW50VGFyZ2V0LmlkOworICAgIGlmIChl
dmVudC50YXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdldDogJyArIGV2ZW50
LnRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCkKKyAgICAgICAg
ZXZlbnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0ZWRUYXJnZXQuaWQgKyAn
KSc7CisgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKKyAgICAgICAgZXZlbnRTdHJpbmcg
Kz0gJyhjYXB0dXJpbmcgcGhhc2UpJzsKKyAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LmN1
cnJlbnRUYXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQp
CisgICAgICAgIHNob3VsZEJlKCJldmVudC5ldmVudFBoYXNlIiwgIjIiLCB0cnVlKTsKKyAgICBl
dmVudFJlY29yZHNbZXZlbnRUeXBlXS5wdXNoKGV2ZW50U3RyaW5nKTsKK30KKworZnVuY3Rpb24g
ZHVtcE5vZGUobm9kZSkKK3sKKyAgICB2YXIgb3V0cHV0ID0gbm9kZS5ub2RlTmFtZSArICJcdCI7
CisgICAgaWYgKG5vZGUuaWQpCisgICAgICAgIG91dHB1dCArPSAnIGlkPScgKyBub2RlLmlkOwor
ICAgIGlmIChub2RlLmNsYXNzTmFtZSkKKyAgICAgICAgb3V0cHV0ICs9ICcgY2xhc3M9JyArIG5v
ZGUuY2xhc3NOYW1lOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIGR1bXBDb21w
b3NlZFNoYWRvd1RyZWUobm9kZSwgaW5kZW50KQoreworICAgIGluZGVudCA9IGluZGVudCB8fCAi
IjsKKyAgICB2YXIgb3V0cHV0ID0gaW5kZW50ICsgZHVtcE5vZGUobm9kZSkgKyAiXG4iOworICAg
IHZhciBjaGlsZDsKKyAgICBmb3IgKGNoaWxkID0gaW50ZXJuYWxzLmZpcnN0Q2hpbGRCeVdhbGtl
cihub2RlKTsgY2hpbGQ7IGNoaWxkID0gaW50ZXJuYWxzLm5leHRTaWJsaW5nQnlXYWxrZXIoY2hp
bGQpKQorICAgICAgICAgb3V0cHV0ICs9IGR1bXBDb21wb3NlZFNoYWRvd1RyZWUoY2hpbGQsIGlu
ZGVudCArICJcdCIpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIHByZXBhcmVE
T01UcmVlKHBhcmVudCkKK3sKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoCisgICAgICAgIGNyZWF0
ZURPTSgnZGl2JywgeydpZCc6ICd0b3AnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnfSwK
KyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdzaGFkb3ctaG9zdCcs
ICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdkdW1wJ30sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdjb250ZW50JywgJ3N0
eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdzZWxlY3QnOiAnI2Rpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkJyx9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYn
LCB7J2lkJzogJ3NoYWRvdy1yb290LWNoaWxkJywgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4
J30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQn
OiAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgn
LCAndGl0bGUnOiAnZHVtcCd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2RpdicsIHsnaWQnOiAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ3N0eWxlJzog
J3BhZGRpbmctdG9wOiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGV0
YWlscycsIHsnaWQnOiAnZGV0YWlscycsICdvcGVuJzogdHJ1ZSwgJ3N0eWxlJzogJ3BhZGRpbmct
dG9wOiA0MHB4JywgJ3RpdGxlJzogJ2R1bXAnfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVET00oJ3N1bW1hcnknLCB7J2lkJzogJ3N1bW1hcnknLCAnc3R5bGUnOiAncGFkZGlu
Zy10b3A6IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSkpKTsKKworICAgIHZhciBpZHMgPSBbJ3Rv
cCcsICdzaGFkb3ctaG9zdCcsICdzaGFkb3ctaG9zdC9jb250ZW50JywgJ3NoYWRvdy1ob3N0L3No
YWRvdy1yb290LWNoaWxkJywKKyAgICAgICAgICAgICAgICdkaXN0cmlidXRlZC1saWdodC1jaGls
ZCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLAorICAgICAgICAgICAgICAgJ2RldGFp
bHMnLCAnc3VtbWFyeSddOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKGlkc1tp
XSk7CisgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgcmVjb3Jk
RXZlbnQsIGZhbHNlKTsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91
dCcsIHJlY29yZEV2ZW50LCBmYWxzZSk7CisgICAgfQorICAgIHBhcmVudC5vZmZzZXRMZWZ0Owor
ICAgIGRlYnVnKGR1bXBDb21wb3NlZFNoYWRvd1RyZWUocGFyZW50KSk7Cit9CisKK2Z1bmN0aW9u
IGRlYnVnRGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKK3sKKyAgICBkZWJ1ZygnXG4gICcgKyBl
dmVudFR5cGUpOworICAgIHZhciBldmVudHMgPSBkaXNwYXRjaGVkRXZlbnQoZXZlbnRUeXBlKTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgZGVi
dWcoJyAgICAqICAnICsgZXZlbnRzW2ldKQorfQorCitmdW5jdGlvbiBtb3ZlTW91c2Uob2xkRWxl
bWVudElkLCBuZXdFbGVtZW50SWQpCit7CisgICAgZGVidWcoJ1xuXG4nICsgJ01vdmluZyBtb3Vz
ZSBmcm9tICcgKyBvbGRFbGVtZW50SWQgKyAnIHRvICcgKyBuZXdFbGVtZW50SWQpOworICAgIG1v
dmVNb3VzZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG9sZEVsZW1lbnRJZCkpOworICAg
IGNsZWFyRXZlbnRSZWNvcmRzKCk7CisgICAgbW92ZU1vdXNlT3ZlcihnZXROb2RlSW5TaGFkb3dU
cmVlU3RhY2sobmV3RWxlbWVudElkKSk7CisKKyAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91
c2VvdXQnKTsKKyAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91c2VvdmVyJyk7Cit9CisKK2Z1
bmN0aW9uIHRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBwcmVwYXJlRE9N
VHJlZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FuZGJveCcpKTsKKworICAgIG1vdmVNb3Vz
ZSgnc2hhZG93LWhvc3QnLCAnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnKTsKKyAgICBt
b3ZlTW91c2UoJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJywgJ3NoYWRvdy1ob3N0Jyk7
CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0JywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
Jyk7CisgICAgbW92ZU1vdXNlKCdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdzaGFkb3ctaG9z
dCcpOworCisgICAgbW92ZU1vdXNlKCdkZXRhaWxzJywgJ3N1bW1hcnknKTsKKyAgICBtb3ZlTW91
c2UoJ3N1bW1hcnknLCAnZGV0YWlscycpOworCisgICAgbW92ZU1vdXNlKCdzaGFkb3ctaG9zdC9z
aGFkb3ctcm9vdC1jaGlsZCcsICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIG1vdmVN
b3VzZSgnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3Qt
Y2hpbGQnKTsKKworICAgIC8vIFRoZXNlIGNhc2VzIHNob3VsZCBub3QgaGFwcGVuIHNpbmNlIG5v
bi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCBpcyBub3QgcmVuZGVyZWQuCisgICAgLy8gRklYTUU6
IFJlYWxseT8KKyAgICAvLyBtb3ZlTW91c2UoJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ25v
bi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIC8vIG1vdmVNb3VzZSgnbm9uLWRpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgLy8g
bW92ZU1vdXNlKCdzaGFkb3ctaG9zdCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnKTsK
KyAgICAvLyBtb3ZlTW91c2UoJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdzaGFkb3ct
aG9zdCcpOworfQorCit0ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZl
bnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2
ZW50cy5odG1sCmluZGV4IGVjMmUyZjgwOGFkYTBhNjA3NTRhNDljODBiYzk5M2E4NWEyNWMxZDku
LmEwYzJjOTE4ZDQ3NGM4MjczMWZiOTBjZTVjYjc1MWQxMDNmNDk5ZTQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMuaHRt
bApAQCAtMTQ2LDcgKzE0Niw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgICAnVGFy
Z2V0IGlzIGFuIGFuY2VzdG9yIG9mIHJlbGF0ZWRUYXJnZXQuJyk7CiAgICAgc2hvdWxkQmUoJ2Rp
c3BhdGNoZWRFdmVudCgibW91c2VvdmVyIiknLCAnWyJkaXZFKDwtc2hhZG93RikoQGRpdkUpIl0n
KTsKICAgICBzaG91bGRCZSgnZGlzcGF0Y2hlZEV2ZW50KCJtb3VzZW91dCIpJywgJ1siZGl2SSg8
LWRpdkUpKEBkaXZJKSIsICJzaGFkb3dHKDwtZGl2RSkoQHNoYWRvd0cpIiwgInNoYWRvd0YoPC1k
aXZFKShAc2hhZG93RikiLCAic2hhZG93Rig8LWRpdkUpKEBkaXZFKSJdJyk7Ci0KKyAgIAogICAg
IG1vdmVNb3VzZSgnc2hhZG93RC9zaGFkb3dGL3NoYWRvd0cvZGl2SScsICdzaGFkb3dEL3NoYWRv
d0YnLAogICAgICAgICAgICAgICAnVGFyZ2V0IChzaGFkb3cgaG9zdCkgaXMgYW4gYW5jZXN0b3Ig
b2YgcmVsYXRlZFRhcmdldC4nKTsKICAgICBzaG91bGRCZSgnZGlzcGF0Y2hlZEV2ZW50KCJtb3Vz
ZW92ZXIiKScsICdbXScpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141073</attachid>
            <date>2012-05-09 19:25:16 -0700</date>
            <delta_ts>2012-05-10 01:35:22 -0700</delta_ts>
            <desc>WIP. Fix an underlining bug. Every existing test should pass now.</desc>
            <filename>bug-78586-20120510112514.patch</filename>
            <type>text/plain</type>
            <size>37193</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc2YjA3YzE4Y2JlMDM4
YzIzMDFkOGMxYzhiNzc0ZWExYjQyODc3ZS4uMjhmNTJmMzU2ZGQ3NTBkNzI0MzE4OGVlMjAzNjhm
NDk3ZGE5YTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgdHJlZSBpbnN0ZWFkIG9m
IG9yZGluYWwgRE9NIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdp
dGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OmFkanVzdGVkUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZUFkanVzdGVkUGFyZW50KToKKyAg
ICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg6CisgICAgICAgIChDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyOjpjYW5Dcm9zc1VwcGVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjpjYW5Dcm9zc0xvd2VyQm91bmRhcnkpOgorICAgICAgICAqIGRv
bS9FdmVudENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVu
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dG9Nb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50
cyk6CisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoRXZlbnRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2hvdWxkRGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFNob3Vs
ZERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhp
c3RzSW5TYW1lU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjph
bmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0
Q29tbW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5o
OgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChOb2RlKToKKwog
MjAxMi0wNS0wOCAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIENyYXNoIGR1ZSB0byBvd25pbmcgcmVuZGVyZXIgbm90IHJlbW92ZWQgZnJvbSBjdXN0b20g
c2Nyb2xsYmFyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyLmNwcAppbmRleCA1YTY5MzZjOGMyMjFmZWNhMzNlNzg2Yjg0NDkzYTYxNTI4Y2U4NTUwLi4w
YTU4ZTdlMDkwNDA4NWE1NTZlNzU5MGU5ZmVlNjI1MDE1NjQ4ZGJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcApAQCAtMjAyLDYgKzIwMiwy
OSBAQCB2b2lkIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6cGFyZW50KCkKICAgICBhc3NlcnRQ
b3N0Y29uZGl0aW9uKCk7CiB9CiAKK3ZvaWQgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjpwYXJl
bnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKQoreworICAgIEFTU0VSVCht
X25vZGUpOworICAgIG1fbm9kZSA9IHRyYXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9p
bnRBbmRTaGFkb3dSb290KG1fbm9kZSk7Cit9CisKK05vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdh
bGtlcjo6dHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3Qo
Y29uc3QgTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93
ID0gc2hhZG93T2ZQYXJlbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKEhUTUxDb250ZW50U2VsZWN0
aW9uKiBzZWxlY3Rpb24gPSBzaGFkb3ctPnNlbGVjdGlvbkZvcihub2RlKSkKKyAgICAgICAgICAg
IHJldHVybiBzZWxlY3Rpb24tPmluc2VydGlvblBvaW50KCk7CisgICAgfQorICAgIGlmIChub2Rl
LT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICBjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290
ID0gdG9TaGFkb3dSb290KG5vZGUpOworICAgICAgICBpZiAoc2hhZG93Um9vdC0+aXNZb3VuZ2Vz
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKTsKKyAgICAgICAgSW5z
ZXJ0aW9uUG9pbnQqIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQgPSBzaGFkb3dSb290LT5hc3NpZ25l
ZFRvKCk7CisgICAgICAgIEFTU0VSVChhc3NpZ25lZEluc2VydGlvblBvaW50KTsKKyAgICAgICAg
cmV0dXJuIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQ7CisgICAgfQorICAgIHJldHVybiBub2RlLT5w
YXJlbnROb2RlKCk7Cit9CisKIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVy
c2VQYXJlbnQoY29uc3QgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIWNhbkNyb3NzVXBw
ZXJCb3VuZGFyeSgpICYmIG5vZGUtPmlzU2hhZG93Um9vdCgpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKaW5kZXggOTc2NmMxYTM2NTAxOTAwODhi
OTRkYTJhNDQwYzIwNjI2ZDBkNGE5Mi4uZGEzNGVlZDY2NjdmZmJiNjJlNTY1MTNkZjdlYTc3N2Yw
ZWZkY2M4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJl
ZVdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXIuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmV2aW91c1NpYmxpbmco
KTsKIAogICAgIHZvaWQgcGFyZW50KCk7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpZ25vcmVzIHBv
bGljeS4gQWx3YXlzIGNyb3NzIGFuIHVwcGVyIGJvdW5kYXJ5LgorICAgIHZvaWQgcGFyZW50SW5j
bHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCk7CiAKICAgICB2b2lkIG5leHQoKTsK
ICAgICB2b2lkIHByZXZpb3VzKCk7CkBAIC05OSw2ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIE5v
ZGUqIHRyYXZlcnNlTGFzdENoaWxkKGNvbnN0IE5vZGUqKSBjb25zdDsKICAgICBOb2RlKiB0cmF2
ZXJzZUNoaWxkKGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pIGNvbnN0OwogICAgIE5v
ZGUqIHRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJz
ZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdChjb25zdCBOb2RlKikg
Y29uc3Q7CiAKICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2Rl
Kik7CiAgICAgc3RhdGljIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggMmE1YzUyMTBhYWVmNmI5NDFi
YmRlNWRlMjk1Y2JhMzM5ZDE0MmRmNS4uY2NiNjVjYjk5MjQxM2MyMjVlMjA4ODVjMDdkZjE4MGU5
NTIyZjIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMgKzM5LDI1IEBAIEV2ZW50Q29udGV4dDo6
RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gY3VycmVuCiAgICAgOiBtX25vZGUobm9kZSkKICAgICAsIG1fY3VycmVudFRhcmdldChjdXJy
ZW50VGFyZ2V0KQogICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9yZWxhdGVkVGFyZ2V0
KDApCisgICAgLCBtX3Nob3VsZERpc3BhdGNoKHRydWUpCiB7CiB9CiAKK3N0YXRpYyBNb3VzZUV2
ZW50KiB0b01vdXNlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChldmVudCAmJiBl
dmVudC0+aXNNb3VzZUV2ZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50
Kj4oZXZlbnQpOworfQorCiB2b2lkIEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZl
bnQqIGV2ZW50KSBjb25zdAogeworICAgIGlmICghbV9zaG91bGREaXNwYXRjaCkKKyAgICAgICAg
cmV0dXJuOwogICAgIGV2ZW50LT5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50
LT5zZXRDdXJyZW50VGFyZ2V0KG1fY3VycmVudFRhcmdldC5nZXQoKSk7CisgICAgaWYgKG1fcmVs
YXRlZFRhcmdldC5nZXQoKSAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIHRvTW91
c2VFdmVudChldmVudCktPnNldFJlbGF0ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0LmdldCgpKTsK
ICAgICBtX25vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50Q29udGV4dC5oCmluZGV4IDVlNzMxN2Y0NWNmNTQ4NTZhMzI0OWQ4N2RkMjdhMDgxNjYyZDY3
NDguLmE1NGI1Yzc3ZTAzYTA5MWYwNGExZGJmMTIzODRiZDk1YWUzZmY3ZTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRDb250ZXh0LmgKQEAgLTQyLDEzICs0MiwxOSBAQCBwdWJsaWM6CiAKICAgICBOb2Rl
KiBub2RlKCkgY29uc3Q7CiAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCgpIGNvbnN0OworICAgIEV2
ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50VGFyZ2V0
U2FtZUFzVGFyZ2V0KCkgY29uc3Q7CiAgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCop
IGNvbnN0OworICAgIHZvaWQgc2V0U2hvdWxkRGlzcGF0Y2goYm9vbCk7CisgICAgdm9pZCBzZXRS
ZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+KTsKKyAgICBib29sIHNob3VsZERp
c3BhdGNoKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAg
ICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fY3VycmVudFRhcmdldDsKICAgICBSZWZQdHI8RXZlbnRU
YXJnZXQ+IG1fdGFyZ2V0OworICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0
OworICAgIGJvb2wgbV9zaG91bGREaXNwYXRjaDsKIH07CiAKIGlubGluZSBOb2RlKiBFdmVudENv
bnRleHQ6Om5vZGUoKSBjb25zdApAQCAtNjYsNiArNzIsMjYgQEAgaW5saW5lIGJvb2wgRXZlbnRD
b250ZXh0OjpjdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkgY29uc3QKICAgICByZXR1cm4gbV9j
dXJyZW50VGFyZ2V0LmdldCgpID09IG1fdGFyZ2V0LmdldCgpOwogfQogCitpbmxpbmUgYm9vbCBF
dmVudENvbnRleHQ6OnNob3VsZERpc3BhdGNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaG91
bGREaXNwYXRjaDsKK30KKworaW5saW5lIHZvaWQgRXZlbnRDb250ZXh0OjpzZXRTaG91bGREaXNw
YXRjaChib29sIHNob3VsZERpc3BhdGNoKQoreworICAgIG1fc2hvdWxkRGlzcGF0Y2ggPSBzaG91
bGREaXNwYXRjaDsKK30KKworaW5saW5lIEV2ZW50VGFyZ2V0KiBFdmVudENvbnRleHQ6OnJlbGF0
ZWRUYXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbGF0ZWRUYXJnZXQuZ2V0KCk7Cit9
CisKK2lubGluZSB2b2lkIEV2ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRy
PEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0KQoreworICAgIG1fcmVsYXRlZFRhcmdldCA9IHJl
bGF0ZWRUYXJnZXQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIEV2ZW50Q29udGV4dF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaE1lZGlhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwCmluZGV4IGIyNDc0Y2I5NTFl
NmM5MTQ2M2NmOWYzMTU4NmRlYzNlNzIzMDlmMzMuLjMwNTQ2YjQyOTgzYWYwYzE2MzM2ODVjYjU2
ZTBjMGQ1NTA5ODJkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoTWVkaWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVk
aWF0b3IuY3BwCkBAIC02NCw3ICs2NCw3IEBAIEZvY3VzRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpG
b2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPE5vZGU+IG9sZEZvY3VzCiAKIGJv
b2wgRm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRj
aGVyKiBkaXNwYXRjaGVyKSBjb25zdAogewotICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRU
YXJnZXQoZXZlbnQoKSwgbV9vbGRGb2N1c2VkTm9kZSk7CisgICAgZGlzcGF0Y2hlci0+YWRqdXN0
QnlSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIG1fb2xkRm9jdXNlZE5vZGUpOwogICAgIHJldHVybiBF
dmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKQEAg
LTgxLDcgKzgxLDcgQEAgQmx1ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Qmx1ckV2ZW50RGlzcGF0
Y2hNZWRpYXRvcihQYXNzUmVmUHRyPE5vZGU+IG5ld0ZvY3VzZWQKIAogYm9vbCBCbHVyRXZlbnRE
aXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hl
cikgY29uc3QKIHsKLSAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCks
IG1fbmV3Rm9jdXNlZE5vZGUpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRhcmdl
dChldmVudCgpLCBtX25ld0ZvY3VzZWROb2RlKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1l
ZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDU4NjZlNjA2OGQ2ZjU5YmE2MjFkMzIxYzU0NGY0ZjI4
MzYzYmNlYjkuLmY0ODU4MDU2M2Y4ZWU2MzMzOGI0OTNiMjc5ZDE3YmJkODMzMzdhM2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAKKyNpbmNsdWRl
ICJDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93Lmgi
CiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaE1lZGlh
dG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC00NSw2ICs0NywxMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBib29sIGV4aXN0c0luU2FtZVNjb3BlKE5vZGUqIG5v
ZGUxLCBOb2RlKiBub2RlMikKK3sKKyAgICByZXR1cm4gbm9kZTEtPnRyZWVTY29wZSgpID09IG5v
ZGUyLT50cmVlU2NvcGUoKTsKK30KKwogc3RhdGljIEhhc2hTZXQ8Tm9kZSo+KiBnTm9kZXNEaXNw
YXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IDA7CiAKIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBt
ZWRpYXRvcikKQEAgLTEyMSwxMDQgKzEyOCwxMDQgQEAgc3RhdGljIGlubGluZSBib29sIGlzU2hh
ZG93SG9zdChOb2RlKiBub2RlKQogICAgIHJldHVybiBub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYg
dG9FbGVtZW50KG5vZGUpLT5oYXNTaGFkb3dSb290KCk7CiB9CiAKLVBhc3NSZWZQdHI8RXZlbnRU
YXJnZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0VG9TaGFkb3dCb3VuZGFyaWVzKFBhc3NSZWZQ
dHI8Tm9kZT4gcmVsYXRlZFRhcmdldCwgY29uc3QgVmVjdG9yPE5vZGUqPiByZWxhdGVkVGFyZ2V0
QW5jZXN0b3JzKQoraW5saW5lIHN0YXRpYyBib29sIGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRh
cmllcyhjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQogewotICAgIFZlY3Rv
cjxFdmVudENvbnRleHQ+Ojpjb25zdF9pdGVyYXRvciBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IG1f
YW5jZXN0b3JzLmVuZCgpOwotICAgIC8vIEFzc3VtZSBkaXZlcmdlbnQgYm91bmRhcnkgaXMgdGhl
IHJlbGF0ZWRUYXJnZXQgaXRzZWxmIChpbiBvdGhlciB3b3JkcywgcmVsYXRlZCB0YXJnZXQgYW5j
ZXN0b3IgY2hhaW4gZG9lcyBub3QgY3Jvc3MgYW55IHNoYWRvdyBET00gYm91bmRhcmllcykuCi0g
ICAgVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgZmlyc3REaXZlcmdlbnRCb3VuZGFyeSA9
IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsKLQotICAgIFZlY3RvcjxFdmVudENvbnRl
eHQ+Ojpjb25zdF9pdGVyYXRvciB0YXJnZXRBbmNlc3RvciA9IG1fYW5jZXN0b3JzLmVuZCgpOwot
ICAgIC8vIFdhbGsgZG93biBmcm9tIHRoZSB0b3AsIGxvb2tpbmcgZm9yIGxvd2VzdCBjb21tb24g
YW5jZXN0b3IsIGFsc28gbW9uaXRvcmluZyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMuCi0gICAgYm9v
bCBkaXZlcmdlZCA9IGZhbHNlOwotICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0
b3IgaSA9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuZW5kKCkgLSAxOyBpID49IHJlbGF0ZWRUYXJn
ZXRBbmNlc3RvcnMuYmVnaW4oKTsgLS1pKSB7Ci0gICAgICAgIGlmIChkaXZlcmdlZCkgewotICAg
ICAgICAgICAgaWYgKCgqaSktPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICAgICAgZmly
c3REaXZlcmdlbnRCb3VuZGFyeSA9IGkgKyAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAodGFyZ2V0QW5jZXN0b3IgPT0gbV9hbmNlc3RvcnMuYmVnaW4oKSkgewotICAgICAgICAgICAg
ZGl2ZXJnZWQgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0YXJnZXRBbmNlc3Rvci0tOwotCi0gICAgICAgIGlmICgoKmkpLT5pc1NoYWRvd1Jvb3Qo
KSkKLSAgICAgICAgICAgIGxvd2VzdENvbW1vbkJvdW5kYXJ5ID0gdGFyZ2V0QW5jZXN0b3I7Cisg
ICAgcmV0dXJuIGFuY2VzdG9ycy5pc0VtcHR5KCkgfHwgYW5jZXN0b3JzLmZpcnN0KCkubm9kZSgp
ID09IGFuY2VzdG9ycy5sYXN0KCkubm9kZSgpOworfQogCi0gICAgICAgIGlmICgoKmkpICE9ICgq
dGFyZ2V0QW5jZXN0b3IpLm5vZGUoKSkKLSAgICAgICAgICAgIGRpdmVyZ2VkID0gdHJ1ZTsKK3N0
YXRpYyBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91
bmRhcnkoVmVjdG9yPEV2ZW50Q29udGV4dD4mIHRhcmdldEFuY2VzdG9ycywgVmVjdG9yPE5vZGUq
PiYgcmVsYXRlZFRhcmdldEFuY2VzdG9ycykKK3sKKyAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6
Y29uc3RfaXRlcmF0b3IgdGFyZ2V0SXRlcmF0b3IgPSB0YXJnZXRBbmNlc3RvcnMuZW5kKCkgLSAx
OworICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIHJlbGF0ZWRUYXJnZXRJdGVyYXRv
ciA9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuZW5kKCkgLSAxOworICAgIFZlY3RvcjxFdmVudENv
bnRleHQ+Ojpjb25zdF9pdGVyYXRvciBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IHRhcmdldEFuY2Vz
dG9ycy5lbmQoKTsKKyAgICB3aGlsZSAodGFyZ2V0SXRlcmF0b3IgPj0gdGFyZ2V0QW5jZXN0b3Jz
LmJlZ2luKCkgJiYgcmVsYXRlZFRhcmdldEl0ZXJhdG9yID49IHJlbGF0ZWRUYXJnZXRBbmNlc3Rv
cnMuYmVnaW4oKSkgeworICAgICAgICBpZiAodGFyZ2V0SXRlcmF0b3ItPm5vZGUoKSAhPSAqcmVs
YXRlZFRhcmdldEl0ZXJhdG9yKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0YXJn
ZXRJdGVyYXRvci0+bm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIGxvd2VzdENv
bW1vbkJvdW5kYXJ5ID0gdGFyZ2V0SXRlcmF0b3I7CisgICAgICAgIC0tdGFyZ2V0SXRlcmF0b3I7
CisgICAgICAgIC0tcmVsYXRlZFRhcmdldEl0ZXJhdG9yOwogICAgIH0KKyAgICBpZiAodGFyZ2V0
SXRlcmF0b3IgPCB0YXJnZXRBbmNlc3RvcnMuYmVnaW4oKSAmJiByZWxhdGVkVGFyZ2V0SXRlcmF0
b3IgPj0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpKSB7CisgICAgICAgIGlmICgoKnJl
bGF0ZWRUYXJnZXRJdGVyYXRvciktPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICAvLyBX
ZSBtdXN0IGhhbmRsZSBhIGNhc2Ugd2hlcmUgdGFyZ2V0IGlzIGEgc2hhZG93LWhvc3QgYW5kIGlz
IGFuIGFuY2VzdG9yIG9mIHJlbGF0ZWQtdGFyZ2V0LgorICAgICAgICAgICAgLy8gSW4gdGhpcyBj
YXNlLCB3ZSBzaG91bGQgc2V0IGxvd2VzdCBjb21tb24gYm91bmRhcnkgdG8gKHRhcmdldEFuY2Vz
dG9ycy5iZWdpbigpIC0gMSkgc28gdGhhdCBhbiBldmVudCBzaG91bGQgbm90IGhhcHBlbi4KKwor
ICAgICAgICAgICAgLy8gVGhlcmUgaXMgb25lIGV4Y2VwdGlvbmFsIGNhc2Ugd2hlcmUgdGhlIHRh
cmdldCBhbmQgdGhlIHJlbGF0ZWQgdGFyZ2V0IGFyZSBpbiB0aGUgc2FtcGUgc2NvcGUuCisgICAg
ICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHJldHVybiBsb3dlc3RDb21tb25Cb3VuZGFyeSBhcyBp
cyBzaW5jZSBhbiBldmVudCBzaG91bGQgaGFwcGVuIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAg
ICAvLyBUaGlzIGNhc2UgbWlnaHQgb2NjdXIgaWYgdGhlIHJlbGF0ZWQgdGFyZ2V0IGlzIGEgZGlz
dHJpYnV0ZWQgbm9kZS4KKyAgICAgICAgICAgIGlmIChleGlzdHNJblNhbWVTY29wZShyZWxhdGVk
VGFyZ2V0QW5jZXN0b3JzWzBdLCB0YXJnZXRBbmNlc3RvcnNbMF0ubm9kZSgpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbG93ZXN0Q29tbW9uQm91bmRhcnk7CisgICAgICAgICAgICAvLyBSZXR1
cm5zICh0YXJnZXRBbmNlc3RvcnMuYmVnaW4oKSAtIDEpIGFzIGEgbG93ZXN0IGNvbW1vbiBib3Vu
ZGFyeS4KKyAgICAgICAgICAgIHJldHVybiB0YXJnZXRJdGVyYXRvcjsKKyAgICAgICAgfQogCi0g
ICAgaWYgKCFkaXZlcmdlZCkgewotICAgICAgICAvLyBUaGUgcmVsYXRlZFRhcmdldCBpcyBhbiBh
bmNlc3RvciBvciBzaGFkb3dIb3N0IG9mIHRoZSB0YXJnZXQuCi0gICAgICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlIGZpcnN0IGNoZWNrIG9uY2UgY29udmVyc2lvbiB0byBuZXcgc2hhZG93IERPTSBp
cyBjb21wbGV0ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi80ODY5OD4KLSAgICAgICAgaWYgKG1fbm9k
ZS0+c2hhZG93SG9zdCgpID09IHJlbGF0ZWRUYXJnZXQuZ2V0KCkgfHwgaXNTaGFkb3dIb3N0KHJl
bGF0ZWRUYXJnZXQuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6
Y29uc3RfaXRlcmF0b3IgcmVsYXRlZFRhcmdldENoaWxkID0gdGFyZ2V0QW5jZXN0b3IgLSAxOwot
ICAgICAgICAgICAgaWYgKHJlbGF0ZWRUYXJnZXRDaGlsZCA+PSBtX2FuY2VzdG9ycy5iZWdpbigp
ICYmIHJlbGF0ZWRUYXJnZXRDaGlsZC0+bm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAg
ICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IHJlbGF0ZWRUYXJnZXRDaGlsZDsKKyAgICB9
IGVsc2UgaWYgKHRhcmdldEl0ZXJhdG9yID49IHRhcmdldEFuY2VzdG9ycy5iZWdpbigpICYmIHJl
bGF0ZWRUYXJnZXRJdGVyYXRvciA8IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKSkgewor
ICAgICAgICBpZiAodGFyZ2V0SXRlcmF0b3ItPm5vZGUoKS0+aXNTaGFkb3dSb290KCkpIHsKKyAg
ICAgICAgICAgIC8vIFdlIG11c3QgaGFuZGxlIGEgY2FzZSB3aGVyZSByZWxhdGVkLXRhcmdldCBp
cyBhIHNoYWRvdy1ob3N0IGFuZCBpcyBhbiBhbmNlc3RvciBvZiB0YXJnZXQuCisgICAgICAgICAg
ICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBzZXQgbG93ZXN0IGNvbW1vbiBib3VuZGFyeSB0
byB0aGUgcmVsYXRlZCB0YXJnZXQncyBzaGFkb3cgcm9vdC4KKyAgICAgICAgICAgIHJldHVybiB0
YXJnZXRJdGVyYXRvcjsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoKCpmaXJzdERpdmVyZ2Vu
dEJvdW5kYXJ5KSA9PSBtX25vZGUuZ2V0KCkpIHsKLSAgICAgICAgLy8gU2luY2UgYW5jZXN0b3Jz
IGRvZXMgbm90IGNvbnRhaW4gdGFyZ2V0IGl0c2VsZiwgd2UgbXVzdCBhY2NvdW50Ci0gICAgICAg
IC8vIGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCB0YXJnZXQgaXMgYSBzaGFkb3dIb3N0IG9mIHJl
bGF0ZWRUYXJnZXQKLSAgICAgICAgLy8gYW5kIHRodXMgc2VydmVzIGFzIHRoZSBsb3dlc3RDb21t
b25Cb3VuZGFyeS4KLSAgICAgICAgLy8gTHVja2lseSwgaW4gdGhpcyBjYXNlIHRoZSBmaXJzdERp
dmVyZ2VudEJvdW5kYXJ5IGlzIHRhcmdldC4KLSAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRhcnkg
PSBtX2FuY2VzdG9ycy5iZWdpbigpOwotICAgICAgICBtX3Nob3VsZFByZXZlbnREaXNwYXRjaCA9
IHRydWU7CiAgICAgfQorICAgIHJldHVybiBsb3dlc3RDb21tb25Cb3VuZGFyeTsKK30KIAotICAg
IGlmIChsb3dlc3RDb21tb25Cb3VuZGFyeSAhPSBtX2FuY2VzdG9ycy5lbmQoKSkgewotICAgICAg
ICAvLyBUcmltIGFuY2VzdG9ycyB0byBsb3dlc3RDb21tb25Cb3VuZGFyeSB0byBrZWVwIGV2ZW50
cyBpbnNpZGUgb2YgdGhlIGNvbW1vbiBzaGFkb3cgRE9NIHN1YnRyZWUuCi0gICAgICAgIG1fYW5j
ZXN0b3JzLnNocmluayhsb3dlc3RDb21tb25Cb3VuZGFyeSAtIG1fYW5jZXN0b3JzLmJlZ2luKCkp
Oworc3RhdGljIGJvb2wgdmlzaWJsZShOb2RlKiBmcm9tLCBOb2RlKiB0bykKK3sKKyAgICBUcmVl
U2NvcGUqIHRhcmdldFNjb3BlID0gdG8tPnRyZWVTY29wZSgpOworICAgIGZvciAoVHJlZVNjb3Bl
KiBzY29wZSA9IGZyb20tPnRyZWVTY29wZSgpOyBzY29wZTsgc2NvcGUgPSBzY29wZS0+cGFyZW50
VHJlZVNjb3BlKCkpIHsKKyAgICAgICAgaWYgKHNjb3BlID09IHRhcmdldFNjb3BlKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIC8vIFNldCBldmVudCdzIHJlbGF0ZWQgdGFy
Z2V0IHRvIHRoZSBmaXJzdCBlbmNvdW50ZXJlZCBzaGFkb3cgRE9NIGJvdW5kYXJ5IGluIHRoZSBk
aXZlcmdlbnQgc3VidHJlZS4KLSAgICByZXR1cm4gZmlyc3REaXZlcmdlbnRCb3VuZGFyeSAhPSBy
ZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkgPyAqZmlyc3REaXZlcmdlbnRCb3VuZGFyeSA6
IHJlbGF0ZWRUYXJnZXQ7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgc3RhdGljIGJv
b2wgYW5jZXN0b3JzQ3Jvc3NTaGFkb3dCb3VuZGFyaWVzKGNvbnN0IFZlY3RvcjxFdmVudENvbnRl
eHQ+JiBhbmNlc3RvcnMpCitzdGF0aWMgdm9pZCBzZXRSZWxhdGVkVGFyZ2V0KEV2ZW50Q29udGV4
dCYgZXZlbnRDb250ZXh0LCBjb25zdCBWZWN0b3I8Tm9kZSo+JiByZWxhdGVkVGFyZ2V0QW5jZXN0
b3JzKQogewotICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGFuY2VzdG9ycy5maXJz
dCgpLm5vZGUoKSA9PSBhbmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKKyAgICAvLyBGSVhNRTogVGhp
cyBtaWdodCB0YWtlIE8oTl4yKSBpbiB0aGVvcnkuIE1ha2UgaXQgZmFzdC4KKyAgICBmb3IgKFZl
Y3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIHJlbGF0ZWRUYXJnZXRJdGVyYXRvciA9IHJlbGF0
ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsgcmVsYXRlZFRhcmdldEl0ZXJhdG9yIDwgcmVsYXRl
ZFRhcmdldEFuY2VzdG9ycy5lbmQoKTsgKytyZWxhdGVkVGFyZ2V0SXRlcmF0b3IpIHsKKyAgICAg
ICAgaWYgKHZpc2libGUoZXZlbnRDb250ZXh0Lm5vZGUoKSwgKnJlbGF0ZWRUYXJnZXRJdGVyYXRv
cikpIHsKKyAgICAgICAgICAgIGV2ZW50Q29udGV4dC5zZXRSZWxhdGVkVGFyZ2V0KCpyZWxhdGVk
VGFyZ2V0SXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
ICAgIEFTU0VSVChmYWxzZSk7CiB9CiAKLS8vIEZJWE1FOiBPbmNlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjk2MyBsYW5kcywgdGhpcyBzaG91bGQKLS8vIGJlIGdy
ZWF0bHkgaW1wcm92ZWQuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTQwMjUuCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNoZXI6OmFkanVz
dFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBS
ZWxhdGVkVGFyZ2V0KQordm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdEJ5UmVsYXRlZFRhcmdl
dChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQp
CiB7CiAgICAgaWYgKCFwcnBSZWxhdGVkVGFyZ2V0KQotICAgICAgICByZXR1cm4gMDsKLQorICAg
ICAgICByZXR1cm47CiAgICAgUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQgPSBwcnBSZWxhdGVk
VGFyZ2V0LT50b05vZGUoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQpCi0gICAgICAgIHJldHVy
biAwOwotCisgICAgICAgIHJldHVybjsKICAgICBOb2RlKiB0YXJnZXQgPSBtX25vZGUuZ2V0KCk7
CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBwcnBSZWxhdGVkVGFyZ2V0OworICAg
ICAgICByZXR1cm47CiAKICAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7CiAKLSAgICAv
LyBDYWxjdWxhdGUgZWFybHkgaWYgdGhlIGNvbW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxl
IGJ5IGxvb2tpbmcgYXQKLSAgICAvLyBhbmNlc3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0
aW5nIGhhcyBvY2N1cmVkIChpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJv
dW5kYXJpZXMpLgotICAgIC8vIElmIHRoZXJlIGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0
aGUgdGFyZ2V0IGFuZCByZWxhdGVkIHRhcmdldCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5
LgotICAgIGJvb2wgbm9Db21tb25Cb3VuZGFyeSA9IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRh
cmllcyhtX2FuY2VzdG9ycyk7Ci0KICAgICBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNl
c3RvcnM7Ci0gICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0
LmdldCgpOwotICAgIGZvciAoTm9kZSogbiA9IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBu
ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3Qo
KSkKLSAgICAgICAgICAgIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0
Tm9kZSgpOwotICAgICAgICBpZiAoIW5vQ29tbW9uQm91bmRhcnkpCi0gICAgICAgICAgICByZWxh
dGVkVGFyZ2V0QW5jZXN0b3JzLmFwcGVuZChuKTsKLSAgICB9CisgICAgZm9yIChDb21wb3NlZFNo
YWRvd1RyZWVXYWxrZXIgd2Fsa2VyKHJlbGF0ZWRUYXJnZXQuZ2V0KCkpOyB3YWxrZXIuZ2V0KCk7
IHdhbGtlci5wYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKSkKKyAg
ICAgICAgcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5hcHBlbmQod2Fsa2VyLmdldCgpKTsKIAotICAg
IC8vIFNob3J0LWNpcmN1aXQgdGhlIGZhc3QgY2FzZSB3aGVuIHdlIGtub3cgdGhlcmUgaXMgbm8g
bmVlZCB0byBjYWxjdWxhdGUgYSBjb21tb24gYm91bmRhcnkuCi0gICAgaWYgKG5vQ29tbW9uQm91
bmRhcnkpCi0gICAgICAgIHJldHVybiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeTsKKyAgICBWZWN0
b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgbG93ZXN0Qm91bmRhcnkgPSBsb3dlc3RD
b21tb25Cb3VuZGFyeShtX2FuY2VzdG9ycywgcmVsYXRlZFRhcmdldEFuY2VzdG9ycyk7CiAKLSAg
ICByZXR1cm4gYWRqdXN0VG9TaGFkb3dCb3VuZGFyaWVzKHJlbGF0ZWRUYXJnZXQucmVsZWFzZSgp
LCByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzKTsKKyAgICBpZiAobG93ZXN0Qm91bmRhcnkgPCBtX2Fu
Y2VzdG9ycy5iZWdpbigpKSB7CisgICAgICAgIGZvciAoVmVjdG9yPEV2ZW50Q29udGV4dD46Oml0
ZXJhdG9yIHRhcmdldEl0ZXJhdG9yID0gbV9hbmNlc3RvcnMuYmVnaW4oKTsgdGFyZ2V0SXRlcmF0
b3IgPCBtX2FuY2VzdG9ycy5lbmQoKTsgKyt0YXJnZXRJdGVyYXRvcikKKyAgICAgICAgICAgIHRh
cmdldEl0ZXJhdG9yLT5zZXRTaG91bGREaXNwYXRjaChmYWxzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBmb3IgKFZlY3RvcjxFdmVudENvbnRleHQ+OjppdGVyYXRvciB0YXJnZXRJ
dGVyYXRvciA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7IHRhcmdldEl0ZXJhdG9yIDwgbV9hbmNlc3Rv
cnMuZW5kKCk7ICsrdGFyZ2V0SXRlcmF0b3IpIHsKKyAgICAgICAgaWYgKHRhcmdldEl0ZXJhdG9y
ID4gbG93ZXN0Qm91bmRhcnkpIHsKKyAgICAgICAgICAgIGlmICghZXhpc3RzSW5TYW1lU2NvcGUo
dGFyZ2V0SXRlcmF0b3ItPm5vZGUoKSwgdGFyZ2V0KSkgeworICAgICAgICAgICAgICAgIHRhcmdl
dEl0ZXJhdG9yLT5zZXRTaG91bGREaXNwYXRjaChmYWxzZSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2V0UmVsYXRlZFRhcmdl
dCgqdGFyZ2V0SXRlcmF0b3IsIHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOworICAgIH0KIH0KIAog
RXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKQEAgLTIzMiwzMCAr
MjM5LDMzIEBAIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCiAK
IHZvaWQgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCogZXZlbnQp
CiB7Ci0gICAgaWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgaWYgKG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8v
IEluY2x1ZGVzIHRhcmdldCBpdHNlbGYuCisgICAgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyIGFu
Y2VzdG9yV2Fsa2VyKG1fbm9kZS5nZXQoKSk7CisgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsK
KyAgICBFdmVudFRhcmdldCogb3JpZ2luYWxUYXJnZXQgPSB0YXJnZXQ7CisgICAgbV9hbmNlc3Rv
cnMuYXBwZW5kKEV2ZW50Q29udGV4dChtX25vZGUuZ2V0KCksIHRhcmdldCwgdGFyZ2V0KSk7CiAg
ICAgbV9hbmNlc3RvcnNJbml0aWFsaXplZCA9IHRydWU7CiAKLSAgICBOb2RlKiBhbmNlc3RvciA9
IG1fbm9kZS5nZXQoKTsKLSAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNw
ZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3IpOworICAgIGlmICghbV9ub2RlLT5pbkRvY3Vt
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlm
IChhbmNlc3Rvci0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChkZXRlcm1pbmVE
aXNwYXRjaEJlaGF2aW9yKGV2ZW50LCBhbmNlc3RvcikgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkK
KyAgICAgICAgaWYgKGFuY2VzdG9yV2Fsa2VyLmdldCgpLT5pc1NoYWRvd1Jvb3QoKSkgeworICAg
ICAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQsIGFuY2VzdG9yV2Fs
a2VyLmdldCgpKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnNoYWRvd0hvc3QoKTsKKyAgICAg
ICAgICAgIGFuY2VzdG9yV2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hh
ZG93Um9vdCgpOwogICAgICAgICAgICAgaWYgKCFtX25vZGUtPmlzU1ZHRWxlbWVudCgpKQotICAg
ICAgICAgICAgICAgIHRhcmdldCA9IGFuY2VzdG9yOworICAgICAgICAgICAgICAgIHRhcmdldCA9
IGFuY2VzdG9yV2Fsa2VyLmdldCgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFuY2Vz
dG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKKyAgICAgICAg
ICAgIGFuY2VzdG9yV2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93
Um9vdCgpOwogCi0gICAgICAgIGlmICghYW5jZXN0b3IpCisgICAgICAgIGlmICghYW5jZXN0b3JX
YWxrZXIuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9hbmNlc3RvcnMu
YXBwZW5kKEV2ZW50Q29udGV4dChhbmNlc3RvciwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFy
Z2V0UnVsZXMoYW5jZXN0b3IpLCB0YXJnZXQpKTsKKyAgICAgICAgbV9hbmNlc3RvcnMuYXBwZW5k
KEV2ZW50Q29udGV4dChhbmNlc3RvcldhbGtlci5nZXQoKSwgZXZlbnRUYXJnZXRSZXNwZWN0aW5n
U1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpLCBleGlzdHNJblNhbWVTY29wZShh
bmNlc3RvcldhbGtlci5nZXQoKSwgb3JpZ2luYWxUYXJnZXQtPnRvTm9kZSgpKSA/IG9yaWdpbmFs
VGFyZ2V0IDp0YXJnZXQpKTsKICAgICB9CiB9CiAKQEAgLTI2OSw2ICsyNzksNyBAQCBib29sIEV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIAog
ICAgIFJlZlB0cjxFdmVudFRhcmdldD4gb3JpZ2luYWxUYXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7
CiAgICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQuZ2V0KCkpOworICAgIEFTU0VSVCghbV9h
bmNlc3RvcnMuaXNFbXB0eSgpKTsKIAogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dDb250
ZXh0KGV2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsKIApAQCAt
Mjg1LDggKzI5NiwxMCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBpZiAod2luZG93Q29udGV4dC5oYW5kbGVMb2NhbEV2
ZW50cyhldmVudC5nZXQoKSkgJiYgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAg
ICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKIAotICAgIGZvciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9y
cy5zaXplKCk7IGk7IC0taSkgewotICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29u
dGV4dCA9IG1fYW5jZXN0b3JzW2ktMV07CisgICAgZm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3Jz
LnNpemUoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgRXZlbnRDb250ZXh0JiBl
dmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKKyAgICAgICAgaWYgKCFldmVudENvbnRleHQu
c2hvdWxkRGlzcGF0Y2goKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoZXZl
bnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkgewogICAgICAgICAgICAgaWYg
KGV2ZW50LT5idWJibGVzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMDEsNyAr
MzE0LDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCiAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7
CiAgICAgZXZlbnQtPnNldFRhcmdldChvcmlnaW5hbFRhcmdldC5nZXQoKSk7CiAgICAgZXZlbnQt
PnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9u
b2RlLmdldCgpKSk7Ci0gICAgbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7
CisgICAgbV9hbmNlc3RvcnNbMF0uaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOworICAg
IC8vIG1fbm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwogICAgIGlmIChldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwog
CkBAIC0zMTAsOCArMzI0LDEwIEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShF
dmVudDo6QlVCQkxJTkdfUEhBU0UpOwogCiAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3Rv
cnMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAg
Y29uc3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKKyAgICAg
ICAgICAgIGlmICghZXZlbnRDb250ZXh0LnNob3VsZERpc3BhdGNoKCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRT
YW1lQXNUYXJnZXQoKSkKICAgICAgICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVu
dDo6QVRfVEFSR0VUKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTM0NCw3ICszNjAsNyBAQCBkb25l
RGlzcGF0Y2hpbmc6CiAgICAgICAgIC8vIHNhbWUgb3JkZXIgYXMgdGhlIGJ1YmJsaW5nIHBoYXNl
LgogICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkgewogICAgICAgICAgICAgc2l6ZV90IHNp
emUgPSBtX2FuY2VzdG9ycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXpl
OyArK2kpIHsKICAgICAgICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0
SGFuZGxlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDg1YWVmYzQ5
MzA0M2Q1MTdlYzk3NzM0ZTYyMThhYWQ4MWQxNzkwNjcuLjUzOTc1MTE1MGM1MjFlMzFmMmJmYTM5
MzZkMTNjMjhmNThlNDNlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAg
LTU0LDEzICs1NCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTaW11bGF0
ZWRDbGljayhOb2RlKiwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNl
bmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spOwogCiAgICAgYm9vbCBkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBh
ZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4pOworICAg
IHZvaWQgYWRqdXN0QnlSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gcHJwUmVsYXRlZFRhcmdldCk7CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIEV2ZW50RGlzcGF0Y2hlcihOb2RlKik7CiAKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiBhZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFy
Z2V0LCBjb25zdCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwogICAgIEV2
ZW50RGlzcGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgTm9k
ZSogc2hhZG93Um9vdCk7CiAgICAgdm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwog
ICAgIGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91
c2VFdmVudC5jcHAKaW5kZXggYzM2ODljNmRkNDYzYWVlMDU2Mjg4MTcyZTI1NGRjM2VjZmIyNWQw
Yi4uYTE5ZDhhMjFkNWIzYjMxZDY1OTlmYmY5NTA3YjQ2NjQ1NzM2NzljYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Nb3VzZUV2ZW50LmNwcApAQCAtMjAxLDggKzIwMSw4IEBAIGJvb2wgTW91c2VFdmVudERpc3Bh
dGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBj
b25zCiAgICAgaWYgKGV2ZW50KCktPnR5cGUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gU2hvdWxkbid0IGhhcHBlbi4KIAotICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVs
YXRlZFRhcmdldCA9IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZl
bnQoKS0+cmVsYXRlZFRhcmdldCgpKTsKLSAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFyZ2V0KHJl
bGF0ZWRUYXJnZXQpOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQoKS0+
cmVsYXRlZFRhcmdldCgpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRhcmdldChl
dmVudCgpLCByZWxhdGVkVGFyZ2V0KTsKIAogICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoRXZlbnQo
ZXZlbnQoKSk7CiAgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBldmVudCgpLT5kZWZhdWx0SGFuZGxl
ZCgpIHx8IGV2ZW50KCktPmRlZmF1bHRQcmV2ZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9VSUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcApp
bmRleCBmZjNmZjRhZmNmOWIyMTIxMWI3YjUzMWZhZjU0N2QxM2VmOGZkNTY5Li43MWIxZGI3ZGJk
YjlkZDhlOTkyYjUzMmM5MGMyOWM0OTcxNTgxMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVUlFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuY3BwCkBA
IC0xMjMsNyArMTIzLDcgQEAgRm9jdXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Rm9jdXNJbkV2
ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPEV2ZW50PiBldmUKIAogYm9vbCBGb2N1c0lu
RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlz
cGF0Y2hlcikgY29uc3QKIHsKLSAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2
ZW50KCksIG1fb2xkRm9jdXNlZE5vZGUpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRl
ZFRhcmdldChldmVudCgpLCBtX29sZEZvY3VzZWROb2RlKTsKICAgICByZXR1cm4gRXZlbnREaXNw
YXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC0xNDAsNyAr
MTQwLDcgQEAgRm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3VzT3V0RXZlbnREaXNw
YXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8RXZlbnQ+IGUKIAogYm9vbCBGb2N1c091dEV2ZW50RGlz
cGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIp
IGNvbnN0CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBt
X25ld0ZvY3VzZWROb2RlKTsKKyAgICBkaXNwYXRjaGVyLT5hZGp1c3RCeVJlbGF0ZWRUYXJnZXQo
ZXZlbnQoKSwgbV9uZXdGb2N1c2VkTm9kZSk7CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hNZWRp
YXRvcjo6ZGlzcGF0Y2hFdmVudChkaXNwYXRjaGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFiZmRkZmNjYmM0
YzVlNDFhODY2NWY1YzQ5NTMzMmFjYTU0MTk1YWUuLjk3YjgyZDgyYTBlMGRhYTVkZTNiNjQwZDE2
MzZlZjNmY2ZhNmM5MjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNS0wNyAgSGF5YXRv
IEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRXZlbnQgZGlzcGF0Y2hpbmcg
c2hvdWxkIHVzZSB0aGUgY29tcG9zZWQgc2hhZG93IERPTSB0cmVlIHRyZWUgaW5zdGVhZCBvZiBv
cmRpbmFsIERPTSB0cmVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9k
ZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9z
aGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRz
Lmh0bWw6CisKIDIwMTItMDUtMDggIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBTdXBwcmVzcyBmYWlsaW5nIHRlc3Qgd2hpbGUgdGhlIGZpeCBpcyBiZWluZyB3b3Jr
ZWQgb3V0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1i
b3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUt
ZGlzdHJpYnV0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yN2I4MzhlMzcwODA0OTNiNWQz
MzI2NzAzZmQzMDM2NmE5NzNiNzllCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlv
bi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMDggQEAKK1Rlc3RzIHRvIGVuc3VyZSB0aGF0IHNo
YWRvdyBET00gYm91bmRhcnkgaXMgbm90IGNyb3NzZWQgZHVyaW5nIGV2ZW50IHByb3BhZ2F0aW9u
LiBDYW4gb25seSBydW4gd2l0aGluIERSVC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK0RJVgkgaWQ9c2FuZGJveAorCURJVgkgaWQ9dG9wCisJCURJVgkgaWQ9c2hhZG93LWhvc3QK
KwkJCURJVgkgaWQ9ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQKKwkJCURJVgkgaWQ9c2hhZG93LXJv
b3QtY2hpbGQKKwkJREVUQUlMUwkgaWQ9ZGV0YWlscworCQkJU1VNTUFSWQkgaWQ9c3VtbWFyeQor
CQkJCURJVgkKKworCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRvIHNoYWRvdy1o
b3N0L3NoYWRvdy1yb290LWNoaWxkCisKKyAgbW91c2VvdXQKKworICBtb3VzZW92ZXIKKyAgICAq
ICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRl
ZDogc2hhZG93LWhvc3QpCisKKworTW92aW5nIG1vdXNlIGZyb20gc2hhZG93LWhvc3Qvc2hhZG93
LXJvb3QtY2hpbGQgdG8gc2hhZG93LWhvc3QKKworICBtb3VzZW91dAorICAgICogICBAc2hhZG93
LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ct
aG9zdCkKKworICBtb3VzZW92ZXIKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdCB0
byBkaXN0cmlidXRlZC1saWdodC1jaGlsZAorCisgIG1vdXNlb3V0CisgICAgKiAgIEBzaGFkb3ct
aG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkKQorICAgICogICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJp
YnV0ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91c2VvdmVyCisgICAgKiAgIEBkaXN0cmlidXRlZC1s
aWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNo
YWRvdy1ob3N0KQorICAgICogICBAY29udGVudCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICogICBAc2hhZG93LWhvc3QgKHRhcmdl
dDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAq
ICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRv
dy1ob3N0KQorCisKK01vdmluZyBtb3VzZSBmcm9tIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkIHRv
IHNoYWRvdy1ob3N0CisKKyAgbW91c2VvdXQKKyAgICAqICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhv
c3QpCisgICAgKiAgIEBjb250ZW50ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAo
cmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgKiAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0
cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICogICBAdG9w
ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3Qp
CisKKyAgbW91c2VvdmVyCisgICAgKiAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9z
dCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICogICBAdG9wICh0YXJn
ZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKwor
TW92aW5nIG1vdXNlIGZyb20gZGV0YWlscyB0byBzdW1tYXJ5CisKKyAgbW91c2VvdXQKKyAgICAq
ICAgQGRldGFpbHMgKHRhcmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisgICAgKiAg
IEB0b3AgKHRhcmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisKKyAgbW91c2VvdmVy
CisgICAgKiAgIEBzdW1tYXJ5ICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQor
ICAgICogICBAZGV0YWlscyAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKyAg
ICAqICAgQHRvcCAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKworCitNb3Zp
bmcgbW91c2UgZnJvbSBzdW1tYXJ5IHRvIGRldGFpbHMKKworICBtb3VzZW91dAorICAgICogICBA
c3VtbWFyeSAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKyAgICAqICAgQGRl
dGFpbHMgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisgICAgKiAgIEB0b3Ag
KHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisKKyAgbW91c2VvdmVyCisgICAg
KiAgIEBkZXRhaWxzICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5KQorICAgICog
ICBAdG9wICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5KQorCisKK01vdmluZyBt
b3VzZSBmcm9tIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkIHRvIGRpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAqICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJn
ZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQp
CisKKyAgbW91c2VvdmVyCisgICAgKiAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0
OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICog
ICBAY29udGVudCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNo
YWRvdy1yb290LWNoaWxkKQorICAgICogICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAqICAgQHRvcCAodGFy
Z2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisK
K01vdmluZyBtb3VzZSBmcm9tIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkIHRvIHNoYWRvdy1ob3N0
L3NoYWRvdy1yb290LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAqICAgQGRpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hh
ZG93LWhvc3QpCisgICAgKiAgIEBjb250ZW50ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkKSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgKiAgIEBzaGFkb3ctaG9zdCAo
dGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQor
ICAgICogICBAdG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDog
c2hhZG93LWhvc3QpCisKKyAgbW91c2VvdmVyCisgICAgKiAgIEBzaGFkb3ctcm9vdC1jaGlsZCAo
dGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkKQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnkt
ZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44ZWFmMGI4YWNlMzI4ZjBlNWMyYThlMzNlM2ZkMWYyNTFmNmUxZjRjCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3Vu
ZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi5odG1sCkBAIC0wLDAgKzEsMTYwIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvc2hhZG93LWRvbS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0ic2FuZGJveCI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xl
Ij48L3ByZT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdG8gZW5zdXJlIHRoYXQgc2hh
ZG93IERPTSBib3VuZGFyeSBpcyBub3QgY3Jvc3NlZCBkdXJpbmcgZXZlbnQgcHJvcGFnYXRpb24u
IENhbiBvbmx5IHJ1biB3aXRoaW4gRFJULiIpOworCisvLyBGSVhNRTogTWFrZSBhIHNlcGFyYXRl
IHV0aWxpdHkganMgZmlsZSBhbmQgc2hhcmUgaXQuCitmdW5jdGlvbiBtb3ZlTW91c2VPdmVyKGVs
ZW1lbnQpCit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIgfHwgIXdpbmRvdy5pbnRlcm5h
bHMpCisgICAgICAgIHJldHVybjsKKworICAgIHZhciBkZWZhdWx0UGFkZGluZ1NpemUgPSAyMDsK
KyAgICB2YXIgeCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAy
OworICAgIHZhciB5OworICAgIGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSB8fCB3aW5kb3cu
aW50ZXJuYWxzLnNoYWRvd1Jvb3QoZWxlbWVudCkpCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNl
dFRvcCArIGRlZmF1bHRQYWRkaW5nU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHkgPSBlbGVtZW50
Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5t
b3VzZU1vdmVUbyh4LCB5KTsKK30KKwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitmdW5jdGlv
biBjbGVhckV2ZW50UmVjb3JkcygpCit7CisgICAgZXZlbnRSZWNvcmRzID0ge307Cit9CisKK2Z1
bmN0aW9uIGRpc3BhdGNoZWRFdmVudChldmVudFR5cGUpCit7CisgICAgdmFyIGV2ZW50cyA9IGV2
ZW50UmVjb3Jkc1tldmVudFR5cGVdOworICAgIGlmICghZXZlbnRzKQorICAgICAgICByZXR1cm4g
W107CisgICAgcmV0dXJuIGV2ZW50czsKK30KKworZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQp
Cit7CisgICAgdmFyIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUKKyAgICBpZiAoIWV2ZW50UmVjb3Jk
c1tldmVudFR5cGVdKSB7CisgICAgICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW10KKyAg
ICB9CisgICAgdmFyIGV2ZW50U3RyaW5nID0gJyc7CisgICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJn
ZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgQCcgKyBldmVudC5jdXJyZW50VGFyZ2V0Lmlk
OworICAgIGlmIChldmVudC50YXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdl
dDogJyArIGV2ZW50LnRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdl
dCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0ZWRU
YXJnZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKKyAgICAgICAg
ZXZlbnRTdHJpbmcgKz0gJyhjYXB0dXJpbmcgcGhhc2UpJzsKKyAgICBpZiAoZXZlbnQudGFyZ2V0
ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1cnJl
bnRUYXJnZXQuaWQpCisgICAgICAgIHNob3VsZEJlKCJldmVudC5ldmVudFBoYXNlIiwgIjIiLCB0
cnVlKTsKKyAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXS5wdXNoKGV2ZW50U3RyaW5nKTsKK30K
KworZnVuY3Rpb24gZHVtcE5vZGUobm9kZSkKK3sKKyAgICB2YXIgb3V0cHV0ID0gbm9kZS5ub2Rl
TmFtZSArICJcdCI7CisgICAgaWYgKG5vZGUuaWQpCisgICAgICAgIG91dHB1dCArPSAnIGlkPScg
KyBub2RlLmlkOworICAgIGlmIChub2RlLmNsYXNzTmFtZSkKKyAgICAgICAgb3V0cHV0ICs9ICcg
Y2xhc3M9JyArIG5vZGUuY2xhc3NOYW1lOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0
aW9uIGR1bXBDb21wb3NlZFNoYWRvd1RyZWUobm9kZSwgaW5kZW50KQoreworICAgIGluZGVudCA9
IGluZGVudCB8fCAiIjsKKyAgICB2YXIgb3V0cHV0ID0gaW5kZW50ICsgZHVtcE5vZGUobm9kZSkg
KyAiXG4iOworICAgIHZhciBjaGlsZDsKKyAgICBmb3IgKGNoaWxkID0gaW50ZXJuYWxzLmZpcnN0
Q2hpbGRCeVdhbGtlcihub2RlKTsgY2hpbGQ7IGNoaWxkID0gaW50ZXJuYWxzLm5leHRTaWJsaW5n
QnlXYWxrZXIoY2hpbGQpKQorICAgICAgICAgb3V0cHV0ICs9IGR1bXBDb21wb3NlZFNoYWRvd1Ry
ZWUoY2hpbGQsIGluZGVudCArICJcdCIpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0
aW9uIHByZXBhcmVET01UcmVlKHBhcmVudCkKK3sKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoCisg
ICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICd0b3AnLCAnc3R5bGUnOiAncGFkZGluZy10
b3A6IDQwcHgnfSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdz
aGFkb3ctaG9zdCcsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdkdW1w
J30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdj
b250ZW50JywgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZWxlY3QnOiAnI2Rpc3RyaWJ1
dGVkLWxpZ2h0LWNoaWxkJyx9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlRE9NKCdkaXYnLCB7J2lkJzogJ3NoYWRvdy1yb290LWNoaWxkJywgJ3N0eWxlJzogJ3BhZGRp
bmctdG9wOiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00o
J2RpdicsIHsnaWQnOiAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc3R5bGUnOiAncGFkZGlu
Zy10b3A6IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
JywgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAgIGNy
ZWF0ZURPTSgnZGV0YWlscycsIHsnaWQnOiAnZGV0YWlscycsICdvcGVuJzogdHJ1ZSwgJ3N0eWxl
JzogJ3BhZGRpbmctdG9wOiA0MHB4JywgJ3RpdGxlJzogJ2R1bXAnfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVET00oJ3N1bW1hcnknLCB7J2lkJzogJ3N1bW1hcnknLCAnc3R5
bGUnOiAncGFkZGluZy10b3A6IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSkpKTsKKworICAgIHZh
ciBpZHMgPSBbJ3RvcCcsICdzaGFkb3ctaG9zdCcsICdzaGFkb3ctaG9zdC9jb250ZW50JywgJ3No
YWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJywKKyAgICAgICAgICAgICAgICdkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLAorICAgICAgICAg
ICAgICAgJ2RldGFpbHMnLCAnc3VtbWFyeSddOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZ2V0Tm9kZUluU2hhZG93VHJl
ZVN0YWNrKGlkc1tpXSk7CisgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vv
dmVyJywgcmVjb3JkRXZlbnQsIGZhbHNlKTsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCdtb3VzZW91dCcsIHJlY29yZEV2ZW50LCBmYWxzZSk7CisgICAgfQorICAgIHBhcmVudC5v
ZmZzZXRMZWZ0OworICAgIGRlYnVnKGR1bXBDb21wb3NlZFNoYWRvd1RyZWUocGFyZW50KSk7Cit9
CisKK2Z1bmN0aW9uIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKK3sKKyAgICBkZWJ1
ZygnXG4gICcgKyBldmVudFR5cGUpOworICAgIHZhciBldmVudHMgPSBkaXNwYXRjaGVkRXZlbnQo
ZXZlbnRUeXBlKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkK
KyAgICAgICAgZGVidWcoJyAgICAqICAnICsgZXZlbnRzW2ldKQorfQorCitmdW5jdGlvbiBtb3Zl
TW91c2Uob2xkRWxlbWVudElkLCBuZXdFbGVtZW50SWQpCit7CisgICAgZGVidWcoJ1xuXG4nICsg
J01vdmluZyBtb3VzZSBmcm9tICcgKyBvbGRFbGVtZW50SWQgKyAnIHRvICcgKyBuZXdFbGVtZW50
SWQpOworICAgIG1vdmVNb3VzZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG9sZEVsZW1l
bnRJZCkpOworICAgIGNsZWFyRXZlbnRSZWNvcmRzKCk7CisgICAgbW92ZU1vdXNlT3ZlcihnZXRO
b2RlSW5TaGFkb3dUcmVlU3RhY2sobmV3RWxlbWVudElkKSk7CisKKyAgICBkZWJ1Z0Rpc3BhdGNo
ZWRFdmVudCgnbW91c2VvdXQnKTsKKyAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91c2VvdmVy
Jyk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICBwcmVwYXJlRE9NVHJlZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FuZGJveCcpKTsKKwor
ICAgIG1vdmVNb3VzZSgnc2hhZG93LWhvc3QnLCAnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hp
bGQnKTsKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJywgJ3No
YWRvdy1ob3N0Jyk7CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0JywgJ2Rpc3RyaWJ1dGVk
LWxpZ2h0LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcs
ICdzaGFkb3ctaG9zdCcpOworCisgICAgbW92ZU1vdXNlKCdkZXRhaWxzJywgJ3N1bW1hcnknKTsK
KyAgICBtb3ZlTW91c2UoJ3N1bW1hcnknLCAnZGV0YWlscycpOworCisgICAgbW92ZU1vdXNlKCdz
aGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcsICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcp
OworICAgIG1vdmVNb3VzZSgnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3Qv
c2hhZG93LXJvb3QtY2hpbGQnKTsKKworICAgIC8vIFRoZXNlIGNhc2VzIHNob3VsZCBub3QgaGFw
cGVuIHNpbmNlIG5vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCBpcyBub3QgcmVuZGVyZWQuCisg
ICAgLy8gRklYTUU6IFJlYWxseT8KKyAgICAvLyBtb3ZlTW91c2UoJ2Rpc3RyaWJ1dGVkLWxpZ2h0
LWNoaWxkJywgJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIC8vIG1vdmVNb3Vz
ZSgnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
Jyk7CisgICAgLy8gbW92ZU1vdXNlKCdzaGFkb3ctaG9zdCcsICdub24tZGlzdHJpYnV0ZWQtbGln
aHQtY2hpbGQnKTsKKyAgICAvLyBtb3ZlTW91c2UoJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGls
ZCcsICdzaGFkb3ctaG9zdCcpOworfQorCit0ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ct
Ym91bmRhcnktZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93
LWJvdW5kYXJ5LWV2ZW50cy5odG1sCmluZGV4IGVjMmUyZjgwOGFkYTBhNjA3NTRhNDljODBiYzk5
M2E4NWEyNWMxZDkuLmEwYzJjOTE4ZDQ3NGM4MjczMWZiOTBjZTVjYjc1MWQxMDNmNDk5ZTQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZl
bnRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFy
eS1ldmVudHMuaHRtbApAQCAtMTQ2LDcgKzE0Niw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAg
ICAgICAgICAnVGFyZ2V0IGlzIGFuIGFuY2VzdG9yIG9mIHJlbGF0ZWRUYXJnZXQuJyk7CiAgICAg
c2hvdWxkQmUoJ2Rpc3BhdGNoZWRFdmVudCgibW91c2VvdmVyIiknLCAnWyJkaXZFKDwtc2hhZG93
RikoQGRpdkUpIl0nKTsKICAgICBzaG91bGRCZSgnZGlzcGF0Y2hlZEV2ZW50KCJtb3VzZW91dCIp
JywgJ1siZGl2SSg8LWRpdkUpKEBkaXZJKSIsICJzaGFkb3dHKDwtZGl2RSkoQHNoYWRvd0cpIiwg
InNoYWRvd0YoPC1kaXZFKShAc2hhZG93RikiLCAic2hhZG93Rig8LWRpdkUpKEBkaXZFKSJdJyk7
Ci0KKyAgIAogICAgIG1vdmVNb3VzZSgnc2hhZG93RC9zaGFkb3dGL3NoYWRvd0cvZGl2SScsICdz
aGFkb3dEL3NoYWRvd0YnLAogICAgICAgICAgICAgICAnVGFyZ2V0IChzaGFkb3cgaG9zdCkgaXMg
YW4gYW5jZXN0b3Igb2YgcmVsYXRlZFRhcmdldC4nKTsKICAgICBzaG91bGRCZSgnZGlzcGF0Y2hl
ZEV2ZW50KCJtb3VzZW92ZXIiKScsICdbXScpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141109</attachid>
            <date>2012-05-10 01:35:28 -0700</date>
            <delta_ts>2012-05-10 02:55:10 -0700</delta_ts>
            <desc>WIP. Fix the calculation of adjusted target. Now it considers InsertionPoints correctly.</desc>
            <filename>bug-78586-20120510173526.patch</filename>
            <type>text/plain</type>
            <size>38481</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc2YjA3YzE4Y2JlMDM4
YzIzMDFkOGMxYzhiNzc0ZWExYjQyODc3ZS4uMjhmNTJmMzU2ZGQ3NTBkNzI0MzE4OGVlMjAzNjhm
NDk3ZGE5YTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgdHJlZSBpbnN0ZWFkIG9m
IG9yZGluYWwgRE9NIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdp
dGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OmFkanVzdGVkUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZUFkanVzdGVkUGFyZW50KToKKyAg
ICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg6CisgICAgICAgIChDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyOjpjYW5Dcm9zc1VwcGVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjpjYW5Dcm9zc0xvd2VyQm91bmRhcnkpOgorICAgICAgICAqIGRv
bS9FdmVudENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVu
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dG9Nb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50
cyk6CisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoRXZlbnRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2hvdWxkRGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFNob3Vs
ZERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhp
c3RzSW5TYW1lU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjph
bmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0
Q29tbW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5o
OgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChOb2RlKToKKwog
MjAxMi0wNS0wOCAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIENyYXNoIGR1ZSB0byBvd25pbmcgcmVuZGVyZXIgbm90IHJlbW92ZWQgZnJvbSBjdXN0b20g
c2Nyb2xsYmFyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyLmNwcAppbmRleCA1YTY5MzZjOGMyMjFmZWNhMzNlNzg2Yjg0NDkzYTYxNTI4Y2U4NTUwLi4w
YTU4ZTdlMDkwNDA4NWE1NTZlNzU5MGU5ZmVlNjI1MDE1NjQ4ZGJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcApAQCAtMjAyLDYgKzIwMiwy
OSBAQCB2b2lkIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6cGFyZW50KCkKICAgICBhc3NlcnRQ
b3N0Y29uZGl0aW9uKCk7CiB9CiAKK3ZvaWQgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjpwYXJl
bnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKQoreworICAgIEFTU0VSVCht
X25vZGUpOworICAgIG1fbm9kZSA9IHRyYXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9p
bnRBbmRTaGFkb3dSb290KG1fbm9kZSk7Cit9CisKK05vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdh
bGtlcjo6dHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3Qo
Y29uc3QgTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93
ID0gc2hhZG93T2ZQYXJlbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKEhUTUxDb250ZW50U2VsZWN0
aW9uKiBzZWxlY3Rpb24gPSBzaGFkb3ctPnNlbGVjdGlvbkZvcihub2RlKSkKKyAgICAgICAgICAg
IHJldHVybiBzZWxlY3Rpb24tPmluc2VydGlvblBvaW50KCk7CisgICAgfQorICAgIGlmIChub2Rl
LT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICBjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290
ID0gdG9TaGFkb3dSb290KG5vZGUpOworICAgICAgICBpZiAoc2hhZG93Um9vdC0+aXNZb3VuZ2Vz
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKTsKKyAgICAgICAgSW5z
ZXJ0aW9uUG9pbnQqIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQgPSBzaGFkb3dSb290LT5hc3NpZ25l
ZFRvKCk7CisgICAgICAgIEFTU0VSVChhc3NpZ25lZEluc2VydGlvblBvaW50KTsKKyAgICAgICAg
cmV0dXJuIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQ7CisgICAgfQorICAgIHJldHVybiBub2RlLT5w
YXJlbnROb2RlKCk7Cit9CisKIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVy
c2VQYXJlbnQoY29uc3QgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIWNhbkNyb3NzVXBw
ZXJCb3VuZGFyeSgpICYmIG5vZGUtPmlzU2hhZG93Um9vdCgpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKaW5kZXggOTc2NmMxYTM2NTAxOTAwODhi
OTRkYTJhNDQwYzIwNjI2ZDBkNGE5Mi4uZGEzNGVlZDY2NjdmZmJiNjJlNTY1MTNkZjdlYTc3N2Yw
ZWZkY2M4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJl
ZVdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXIuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmV2aW91c1NpYmxpbmco
KTsKIAogICAgIHZvaWQgcGFyZW50KCk7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpZ25vcmVzIHBv
bGljeS4gQWx3YXlzIGNyb3NzIGFuIHVwcGVyIGJvdW5kYXJ5LgorICAgIHZvaWQgcGFyZW50SW5j
bHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCk7CiAKICAgICB2b2lkIG5leHQoKTsK
ICAgICB2b2lkIHByZXZpb3VzKCk7CkBAIC05OSw2ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIE5v
ZGUqIHRyYXZlcnNlTGFzdENoaWxkKGNvbnN0IE5vZGUqKSBjb25zdDsKICAgICBOb2RlKiB0cmF2
ZXJzZUNoaWxkKGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pIGNvbnN0OwogICAgIE5v
ZGUqIHRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJz
ZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdChjb25zdCBOb2RlKikg
Y29uc3Q7CiAKICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2Rl
Kik7CiAgICAgc3RhdGljIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggMmE1YzUyMTBhYWVmNmI5NDFi
YmRlNWRlMjk1Y2JhMzM5ZDE0MmRmNS4uY2NiNjVjYjk5MjQxM2MyMjVlMjA4ODVjMDdkZjE4MGU5
NTIyZjIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMgKzM5LDI1IEBAIEV2ZW50Q29udGV4dDo6
RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gY3VycmVuCiAgICAgOiBtX25vZGUobm9kZSkKICAgICAsIG1fY3VycmVudFRhcmdldChjdXJy
ZW50VGFyZ2V0KQogICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9yZWxhdGVkVGFyZ2V0
KDApCisgICAgLCBtX3Nob3VsZERpc3BhdGNoKHRydWUpCiB7CiB9CiAKK3N0YXRpYyBNb3VzZUV2
ZW50KiB0b01vdXNlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChldmVudCAmJiBl
dmVudC0+aXNNb3VzZUV2ZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50
Kj4oZXZlbnQpOworfQorCiB2b2lkIEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZl
bnQqIGV2ZW50KSBjb25zdAogeworICAgIGlmICghbV9zaG91bGREaXNwYXRjaCkKKyAgICAgICAg
cmV0dXJuOwogICAgIGV2ZW50LT5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50
LT5zZXRDdXJyZW50VGFyZ2V0KG1fY3VycmVudFRhcmdldC5nZXQoKSk7CisgICAgaWYgKG1fcmVs
YXRlZFRhcmdldC5nZXQoKSAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIHRvTW91
c2VFdmVudChldmVudCktPnNldFJlbGF0ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0LmdldCgpKTsK
ICAgICBtX25vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50Q29udGV4dC5oCmluZGV4IDVlNzMxN2Y0NWNmNTQ4NTZhMzI0OWQ4N2RkMjdhMDgxNjYyZDY3
NDguLmE1NGI1Yzc3ZTAzYTA5MWYwNGExZGJmMTIzODRiZDk1YWUzZmY3ZTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRDb250ZXh0LmgKQEAgLTQyLDEzICs0MiwxOSBAQCBwdWJsaWM6CiAKICAgICBOb2Rl
KiBub2RlKCkgY29uc3Q7CiAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCgpIGNvbnN0OworICAgIEV2
ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50VGFyZ2V0
U2FtZUFzVGFyZ2V0KCkgY29uc3Q7CiAgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCop
IGNvbnN0OworICAgIHZvaWQgc2V0U2hvdWxkRGlzcGF0Y2goYm9vbCk7CisgICAgdm9pZCBzZXRS
ZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+KTsKKyAgICBib29sIHNob3VsZERp
c3BhdGNoKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAg
ICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fY3VycmVudFRhcmdldDsKICAgICBSZWZQdHI8RXZlbnRU
YXJnZXQ+IG1fdGFyZ2V0OworICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0
OworICAgIGJvb2wgbV9zaG91bGREaXNwYXRjaDsKIH07CiAKIGlubGluZSBOb2RlKiBFdmVudENv
bnRleHQ6Om5vZGUoKSBjb25zdApAQCAtNjYsNiArNzIsMjYgQEAgaW5saW5lIGJvb2wgRXZlbnRD
b250ZXh0OjpjdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkgY29uc3QKICAgICByZXR1cm4gbV9j
dXJyZW50VGFyZ2V0LmdldCgpID09IG1fdGFyZ2V0LmdldCgpOwogfQogCitpbmxpbmUgYm9vbCBF
dmVudENvbnRleHQ6OnNob3VsZERpc3BhdGNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaG91
bGREaXNwYXRjaDsKK30KKworaW5saW5lIHZvaWQgRXZlbnRDb250ZXh0OjpzZXRTaG91bGREaXNw
YXRjaChib29sIHNob3VsZERpc3BhdGNoKQoreworICAgIG1fc2hvdWxkRGlzcGF0Y2ggPSBzaG91
bGREaXNwYXRjaDsKK30KKworaW5saW5lIEV2ZW50VGFyZ2V0KiBFdmVudENvbnRleHQ6OnJlbGF0
ZWRUYXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbGF0ZWRUYXJnZXQuZ2V0KCk7Cit9
CisKK2lubGluZSB2b2lkIEV2ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRy
PEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0KQoreworICAgIG1fcmVsYXRlZFRhcmdldCA9IHJl
bGF0ZWRUYXJnZXQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIEV2ZW50Q29udGV4dF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaE1lZGlhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwCmluZGV4IGIyNDc0Y2I5NTFl
NmM5MTQ2M2NmOWYzMTU4NmRlYzNlNzIzMDlmMzMuLjMwNTQ2YjQyOTgzYWYwYzE2MzM2ODVjYjU2
ZTBjMGQ1NTA5ODJkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoTWVkaWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVk
aWF0b3IuY3BwCkBAIC02NCw3ICs2NCw3IEBAIEZvY3VzRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpG
b2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPE5vZGU+IG9sZEZvY3VzCiAKIGJv
b2wgRm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRj
aGVyKiBkaXNwYXRjaGVyKSBjb25zdAogewotICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRU
YXJnZXQoZXZlbnQoKSwgbV9vbGRGb2N1c2VkTm9kZSk7CisgICAgZGlzcGF0Y2hlci0+YWRqdXN0
QnlSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIG1fb2xkRm9jdXNlZE5vZGUpOwogICAgIHJldHVybiBF
dmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKQEAg
LTgxLDcgKzgxLDcgQEAgQmx1ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Qmx1ckV2ZW50RGlzcGF0
Y2hNZWRpYXRvcihQYXNzUmVmUHRyPE5vZGU+IG5ld0ZvY3VzZWQKIAogYm9vbCBCbHVyRXZlbnRE
aXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hl
cikgY29uc3QKIHsKLSAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCks
IG1fbmV3Rm9jdXNlZE5vZGUpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRhcmdl
dChldmVudCgpLCBtX25ld0ZvY3VzZWROb2RlKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1l
ZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDU4NjZlNjA2OGQ2ZjU5YmE2MjFkMzIxYzU0NGY0ZjI4
MzYzYmNlYjkuLjcyODM4MWVhNTliMjQ3ZTUwMjE0MWUwMzMzZDRjNzY3ZTZhOGE3OTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0yNiwxMCArMjYsMTMgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKIAorI2luY2x1
ZGUgIkNvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cu
aCIKICNpbmNsdWRlICJFdmVudENvbnRleHQuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoTWVk
aWF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nv
cGVkRXZlbnRRdWV1ZS5oIgpAQCAtNDUsNiArNDgsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitzdGF0aWMgYm9vbCBleGlzdHNJblNhbWVTY29wZShOb2RlKiBub2RlMSwgTm9kZSogbm9k
ZTIpCit7CisgICAgcmV0dXJuIG5vZGUxLT50cmVlU2NvcGUoKSA9PSBub2RlMi0+dHJlZVNjb3Bl
KCk7Cit9CisKIHN0YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0
ZWRDbGlja3MgPSAwOwogCiBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2Rl
KiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gbWVkaWF0b3IpCkBAIC0x
MjEsMTA0ICsxMjksMTA0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NoYWRvd0hvc3QoTm9kZSog
bm9kZSkKICAgICByZXR1cm4gbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2Rl
KS0+aGFzU2hhZG93Um9vdCgpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERp
c3BhdGNoZXI6OmFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhQYXNzUmVmUHRyPE5vZGU+IHJlbGF0
ZWRUYXJnZXQsIGNvbnN0IFZlY3RvcjxOb2RlKj4gcmVsYXRlZFRhcmdldEFuY2VzdG9ycykKK2lu
bGluZSBzdGF0aWMgYm9vbCBhbmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMoY29uc3QgVmVj
dG9yPEV2ZW50Q29udGV4dD4mIGFuY2VzdG9ycykKIHsKLSAgICBWZWN0b3I8RXZlbnRDb250ZXh0
Pjo6Y29uc3RfaXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSBtX2FuY2VzdG9ycy5lbmQo
KTsKLSAgICAvLyBBc3N1bWUgZGl2ZXJnZW50IGJvdW5kYXJ5IGlzIHRoZSByZWxhdGVkVGFyZ2V0
IGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIHJlbGF0ZWQgdGFyZ2V0IGFuY2VzdG9yIGNoYWluIGRv
ZXMgbm90IGNyb3NzIGFueSBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgotICAgIFZlY3RvcjxOb2Rl
Kj46OmNvbnN0X2l0ZXJhdG9yIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0
QW5jZXN0b3JzLmJlZ2luKCk7Ci0KLSAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRl
cmF0b3IgdGFyZ2V0QW5jZXN0b3IgPSBtX2FuY2VzdG9ycy5lbmQoKTsKLSAgICAvLyBXYWxrIGRv
d24gZnJvbSB0aGUgdG9wLCBsb29raW5nIGZvciBsb3dlc3QgY29tbW9uIGFuY2VzdG9yLCBhbHNv
IG1vbml0b3Jpbmcgc2hhZG93IERPTSBib3VuZGFyaWVzLgotICAgIGJvb2wgZGl2ZXJnZWQgPSBm
YWxzZTsKLSAgICBmb3IgKFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGkgPSByZWxhdGVk
VGFyZ2V0QW5jZXN0b3JzLmVuZCgpIC0gMTsgaSA+PSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJl
Z2luKCk7IC0taSkgewotICAgICAgICBpZiAoZGl2ZXJnZWQpIHsKLSAgICAgICAgICAgIGlmICgo
KmkpLT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAgIGZpcnN0RGl2ZXJnZW50Qm91
bmRhcnkgPSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRhcmdldEFuY2Vz
dG9yID09IG1fYW5jZXN0b3JzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIGRpdmVyZ2VkID0gdHJ1
ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdGFyZ2V0QW5j
ZXN0b3ItLTsKLQotICAgICAgICBpZiAoKCppKS0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAg
ICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IHRhcmdldEFuY2VzdG9yOworICAgIHJldHVybiBhbmNl
c3RvcnMuaXNFbXB0eSgpIHx8IGFuY2VzdG9ycy5maXJzdCgpLm5vZGUoKSA9PSBhbmNlc3RvcnMu
bGFzdCgpLm5vZGUoKTsKK30KIAotICAgICAgICBpZiAoKCppKSAhPSAoKnRhcmdldEFuY2VzdG9y
KS5ub2RlKCkpCi0gICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7CitzdGF0aWMgVmVjdG9yPEV2
ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2VzdENvbW1vbkJvdW5kYXJ5KFZlY3RvcjxF
dmVudENvbnRleHQ+JiB0YXJnZXRBbmNlc3RvcnMsIFZlY3RvcjxOb2RlKj4mIHJlbGF0ZWRUYXJn
ZXRBbmNlc3RvcnMpCit7CisgICAgVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9y
IHRhcmdldEl0ZXJhdG9yID0gdGFyZ2V0QW5jZXN0b3JzLmVuZCgpIC0gMTsKKyAgICBWZWN0b3I8
Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciByZWxhdGVkVGFyZ2V0SXRlcmF0b3IgPSByZWxhdGVkVGFy
Z2V0QW5jZXN0b3JzLmVuZCgpIC0gMTsKKyAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3Rf
aXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSB0YXJnZXRBbmNlc3RvcnMuZW5kKCk7Cisg
ICAgd2hpbGUgKHRhcmdldEl0ZXJhdG9yID49IHRhcmdldEFuY2VzdG9ycy5iZWdpbigpICYmIHJl
bGF0ZWRUYXJnZXRJdGVyYXRvciA+PSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkpIHsK
KyAgICAgICAgaWYgKHRhcmdldEl0ZXJhdG9yLT5ub2RlKCkgIT0gKnJlbGF0ZWRUYXJnZXRJdGVy
YXRvcikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodGFyZ2V0SXRlcmF0b3ItPm5v
ZGUoKS0+aXNTaGFkb3dSb290KCkpCisgICAgICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9
IHRhcmdldEl0ZXJhdG9yOworICAgICAgICAtLXRhcmdldEl0ZXJhdG9yOworICAgICAgICAtLXJl
bGF0ZWRUYXJnZXRJdGVyYXRvcjsKICAgICB9CisgICAgaWYgKHRhcmdldEl0ZXJhdG9yIDwgdGFy
Z2V0QW5jZXN0b3JzLmJlZ2luKCkgJiYgcmVsYXRlZFRhcmdldEl0ZXJhdG9yID49IHJlbGF0ZWRU
YXJnZXRBbmNlc3RvcnMuYmVnaW4oKSkgeworICAgICAgICBpZiAoKCpyZWxhdGVkVGFyZ2V0SXRl
cmF0b3IpLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgLy8gV2UgbXVzdCBoYW5kbGUg
YSBjYXNlIHdoZXJlIHRhcmdldCBpcyBhIHNoYWRvdy1ob3N0IGFuZCBpcyBhbiBhbmNlc3RvciBv
ZiByZWxhdGVkLXRhcmdldC4KKyAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxk
IHNldCBsb3dlc3QgY29tbW9uIGJvdW5kYXJ5IHRvICh0YXJnZXRBbmNlc3RvcnMuYmVnaW4oKSAt
IDEpIHNvIHRoYXQgYW4gZXZlbnQgc2hvdWxkIG5vdCBoYXBwZW4uCisKKyAgICAgICAgICAgIC8v
IFRoZXJlIGlzIG9uZSBleGNlcHRpb25hbCBjYXNlIHdoZXJlIHRoZSB0YXJnZXQgYW5kIHRoZSBy
ZWxhdGVkIHRhcmdldCBhcmUgaW4gdGhlIHNhbXBlIHNjb3BlLgorICAgICAgICAgICAgLy8gSW4g
dGhpcyBjYXNlLCByZXR1cm4gbG93ZXN0Q29tbW9uQm91bmRhcnkgYXMgaXMgc2luY2UgYW4gZXZl
bnQgc2hvdWxkIGhhcHBlbiBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgLy8gVGhpcyBjYXNl
IG1pZ2h0IG9jY3VyIGlmIHRoZSByZWxhdGVkIHRhcmdldCBpcyBhIGRpc3RyaWJ1dGVkIG5vZGUu
CisgICAgICAgICAgICBpZiAoZXhpc3RzSW5TYW1lU2NvcGUocmVsYXRlZFRhcmdldEFuY2VzdG9y
c1swXSwgdGFyZ2V0QW5jZXN0b3JzWzBdLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGxvd2VzdENvbW1vbkJvdW5kYXJ5OworICAgICAgICAgICAgLy8gUmV0dXJucyAodGFyZ2V0QW5j
ZXN0b3JzLmJlZ2luKCkgLSAxKSBhcyBhIGxvd2VzdCBjb21tb24gYm91bmRhcnkuCisgICAgICAg
ICAgICByZXR1cm4gdGFyZ2V0SXRlcmF0b3I7CisgICAgICAgIH0KIAotICAgIGlmICghZGl2ZXJn
ZWQpIHsKLSAgICAgICAgLy8gVGhlIHJlbGF0ZWRUYXJnZXQgaXMgYW4gYW5jZXN0b3Igb3Igc2hh
ZG93SG9zdCBvZiB0aGUgdGFyZ2V0LgotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBmaXJz
dCBjaGVjayBvbmNlIGNvbnZlcnNpb24gdG8gbmV3IHNoYWRvdyBET00gaXMgY29tcGxldGUgPGh0
dHA6Ly93ZWJraXQub3JnL2IvNDg2OTg+Ci0gICAgICAgIGlmIChtX25vZGUtPnNoYWRvd0hvc3Qo
KSA9PSByZWxhdGVkVGFyZ2V0LmdldCgpIHx8IGlzU2hhZG93SG9zdChyZWxhdGVkVGFyZ2V0Lmdl
dCgpKSkgewotICAgICAgICAgICAgVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9y
IHJlbGF0ZWRUYXJnZXRDaGlsZCA9IHRhcmdldEFuY2VzdG9yIC0gMTsKLSAgICAgICAgICAgIGlm
IChyZWxhdGVkVGFyZ2V0Q2hpbGQgPj0gbV9hbmNlc3RvcnMuYmVnaW4oKSAmJiByZWxhdGVkVGFy
Z2V0Q2hpbGQtPm5vZGUoKS0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAgICAgICAgbG93ZXN0
Q29tbW9uQm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0Q2hpbGQ7CisgICAgfSBlbHNlIGlmICh0YXJn
ZXRJdGVyYXRvciA+PSB0YXJnZXRBbmNlc3RvcnMuYmVnaW4oKSAmJiByZWxhdGVkVGFyZ2V0SXRl
cmF0b3IgPCByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkpIHsKKyAgICAgICAgaWYgKHRh
cmdldEl0ZXJhdG9yLT5ub2RlKCktPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICAvLyBX
ZSBtdXN0IGhhbmRsZSBhIGNhc2Ugd2hlcmUgcmVsYXRlZC10YXJnZXQgaXMgYSBzaGFkb3ctaG9z
dCBhbmQgaXMgYW4gYW5jZXN0b3Igb2YgdGFyZ2V0LgorICAgICAgICAgICAgLy8gSW4gdGhpcyBj
YXNlLCB3ZSBzaG91bGQgc2V0IGxvd2VzdCBjb21tb24gYm91bmRhcnkgdG8gdGhlIHJlbGF0ZWQg
dGFyZ2V0J3Mgc2hhZG93IHJvb3QuCisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0SXRlcmF0b3I7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCgqZmlyc3REaXZlcmdlbnRCb3VuZGFyeSkgPT0g
bV9ub2RlLmdldCgpKSB7Ci0gICAgICAgIC8vIFNpbmNlIGFuY2VzdG9ycyBkb2VzIG5vdCBjb250
YWluIHRhcmdldCBpdHNlbGYsIHdlIG11c3QgYWNjb3VudAotICAgICAgICAvLyBmb3IgdGhlIHBv
c3NpYmlsaXR5IHRoYXQgdGFyZ2V0IGlzIGEgc2hhZG93SG9zdCBvZiByZWxhdGVkVGFyZ2V0Ci0g
ICAgICAgIC8vIGFuZCB0aHVzIHNlcnZlcyBhcyB0aGUgbG93ZXN0Q29tbW9uQm91bmRhcnkuCi0g
ICAgICAgIC8vIEx1Y2tpbHksIGluIHRoaXMgY2FzZSB0aGUgZmlyc3REaXZlcmdlbnRCb3VuZGFy
eSBpcyB0YXJnZXQuCi0gICAgICAgIGxvd2VzdENvbW1vbkJvdW5kYXJ5ID0gbV9hbmNlc3RvcnMu
YmVnaW4oKTsKLSAgICAgICAgbV9zaG91bGRQcmV2ZW50RGlzcGF0Y2ggPSB0cnVlOwogICAgIH0K
KyAgICByZXR1cm4gbG93ZXN0Q29tbW9uQm91bmRhcnk7Cit9CiAKLSAgICBpZiAobG93ZXN0Q29t
bW9uQm91bmRhcnkgIT0gbV9hbmNlc3RvcnMuZW5kKCkpIHsKLSAgICAgICAgLy8gVHJpbSBhbmNl
c3RvcnMgdG8gbG93ZXN0Q29tbW9uQm91bmRhcnkgdG8ga2VlcCBldmVudHMgaW5zaWRlIG9mIHRo
ZSBjb21tb24gc2hhZG93IERPTSBzdWJ0cmVlLgotICAgICAgICBtX2FuY2VzdG9ycy5zaHJpbmso
bG93ZXN0Q29tbW9uQm91bmRhcnkgLSBtX2FuY2VzdG9ycy5iZWdpbigpKTsKK3N0YXRpYyBib29s
IHZpc2libGUoTm9kZSogZnJvbSwgTm9kZSogdG8pCit7CisgICAgVHJlZVNjb3BlKiB0YXJnZXRT
Y29wZSA9IHRvLT50cmVlU2NvcGUoKTsKKyAgICBmb3IgKFRyZWVTY29wZSogc2NvcGUgPSBmcm9t
LT50cmVlU2NvcGUoKTsgc2NvcGU7IHNjb3BlID0gc2NvcGUtPnBhcmVudFRyZWVTY29wZSgpKSB7
CisgICAgICAgIGlmIChzY29wZSA9PSB0YXJnZXRTY29wZSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KLSAgICAvLyBTZXQgZXZlbnQncyByZWxhdGVkIHRhcmdldCB0byB0aGUgZmly
c3QgZW5jb3VudGVyZWQgc2hhZG93IERPTSBib3VuZGFyeSBpbiB0aGUgZGl2ZXJnZW50IHN1YnRy
ZWUuCi0gICAgcmV0dXJuIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgIT0gcmVsYXRlZFRhcmdldEFu
Y2VzdG9ycy5iZWdpbigpID8gKmZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgOiByZWxhdGVkVGFyZ2V0
OworICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIHN0YXRpYyBib29sIGFuY2VzdG9yc0Ny
b3NzU2hhZG93Qm91bmRhcmllcyhjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3Jz
KQorc3RhdGljIHZvaWQgc2V0UmVsYXRlZFRhcmdldChFdmVudENvbnRleHQmIGV2ZW50Q29udGV4
dCwgY29uc3QgVmVjdG9yPE5vZGUqPiYgcmVsYXRlZFRhcmdldEFuY2VzdG9ycykKIHsKLSAgICBy
ZXR1cm4gYW5jZXN0b3JzLmlzRW1wdHkoKSB8fCBhbmNlc3RvcnMuZmlyc3QoKS5ub2RlKCkgPT0g
YW5jZXN0b3JzLmxhc3QoKS5ub2RlKCk7CisgICAgLy8gRklYTUU6IFRoaXMgbWlnaHQgdGFrZSBP
KE5eMikgaW4gdGhlb3J5LiBNYWtlIGl0IGZhc3QuCisgICAgZm9yIChWZWN0b3I8Tm9kZSo+Ojpj
b25zdF9pdGVyYXRvciByZWxhdGVkVGFyZ2V0SXRlcmF0b3IgPSByZWxhdGVkVGFyZ2V0QW5jZXN0
b3JzLmJlZ2luKCk7IHJlbGF0ZWRUYXJnZXRJdGVyYXRvciA8IHJlbGF0ZWRUYXJnZXRBbmNlc3Rv
cnMuZW5kKCk7ICsrcmVsYXRlZFRhcmdldEl0ZXJhdG9yKSB7CisgICAgICAgIGlmICh2aXNpYmxl
KGV2ZW50Q29udGV4dC5ub2RlKCksICpyZWxhdGVkVGFyZ2V0SXRlcmF0b3IpKSB7CisgICAgICAg
ICAgICBldmVudENvbnRleHQuc2V0UmVsYXRlZFRhcmdldCgqcmVsYXRlZFRhcmdldEl0ZXJhdG9y
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoZmFs
c2UpOwogfQogCi0vLyBGSVhNRTogT25jZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTI5NjMgbGFuZHMsIHRoaXMgc2hvdWxkCi0vLyBiZSBncmVhdGx5IGltcHJvdmVk
LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDI1LgotUGFz
c1JlZlB0cjxFdmVudFRhcmdldD4gRXZlbnREaXNwYXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0
KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCkK
K3ZvaWQgRXZlbnREaXNwYXRjaGVyOjphZGp1c3RCeVJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50
LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQogewogICAgIGlmICgh
cHJwUmVsYXRlZFRhcmdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KKyAgICAgICAgcmV0dXJuOwog
ICAgIFJlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcHJwUmVsYXRlZFRhcmdldC0+dG9Ob2Rl
KCk7CiAgICAgaWYgKCFyZWxhdGVkVGFyZ2V0KQotICAgICAgICByZXR1cm4gMDsKLQorICAgICAg
ICByZXR1cm47CiAgICAgTm9kZSogdGFyZ2V0ID0gbV9ub2RlLmdldCgpOwogICAgIGlmICghdGFy
Z2V0KQotICAgICAgICByZXR1cm4gcHJwUmVsYXRlZFRhcmdldDsKKyAgICAgICAgcmV0dXJuOwog
CiAgICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQpOwogCi0gICAgLy8gQ2FsY3VsYXRlIGVh
cmx5IGlmIHRoZSBjb21tb24gYm91bmRhcnkgaXMgZXZlbiBwb3NzaWJsZSBieSBsb29raW5nIGF0
Ci0gICAgLy8gYW5jZXN0b3JzIHNpemUgYW5kIGlmIHRoZSByZXRhcmdldGluZyBoYXMgb2NjdXJl
ZCAoaW5kaWNhdGluZyB0aGUgcHJlc2VuY2Ugb2Ygc2hhZG93IERPTSBib3VuZGFyaWVzKS4KLSAg
ICAvLyBJZiB0aGVyZSBhcmUgbm8gYm91bmRhcmllcyBkZXRlY3RlZCwgdGhlIHRhcmdldCBhbmQg
cmVsYXRlZCB0YXJnZXQgY2FuJ3QgaGF2ZSBhIGNvbW1vbiBib3VuZGFyeS4KLSAgICBib29sIG5v
Q29tbW9uQm91bmRhcnkgPSBhbmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMobV9hbmNlc3Rv
cnMpOwotCiAgICAgVmVjdG9yPE5vZGUqPiByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzOwotICAgIE5v
ZGUqIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gcmVsYXRlZFRhcmdldC5nZXQoKTsKLSAgICBm
b3IgKE5vZGUqIG4gPSBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeTsgbjsgbiA9IG4tPnBhcmVudE9y
SG9zdE5vZGUoKSkgewotICAgICAgICBpZiAobi0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAg
ICBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IG4tPnBhcmVudE9ySG9zdE5vZGUoKTsKLSAgICAg
ICAgaWYgKCFub0NvbW1vbkJvdW5kYXJ5KQotICAgICAgICAgICAgcmVsYXRlZFRhcmdldEFuY2Vz
dG9ycy5hcHBlbmQobik7Ci0gICAgfQorICAgIGZvciAoQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
IHdhbGtlcihyZWxhdGVkVGFyZ2V0LmdldCgpKTsgd2Fsa2VyLmdldCgpOyB3YWxrZXIucGFyZW50
SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCkpCisgICAgICAgIHJlbGF0ZWRU
YXJnZXRBbmNlc3RvcnMuYXBwZW5kKHdhbGtlci5nZXQoKSk7CiAKLSAgICAvLyBTaG9ydC1jaXJj
dWl0IHRoZSBmYXN0IGNhc2Ugd2hlbiB3ZSBrbm93IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3Vs
YXRlIGEgY29tbW9uIGJvdW5kYXJ5LgotICAgIGlmIChub0NvbW1vbkJvdW5kYXJ5KQotICAgICAg
ICByZXR1cm4gb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7CisgICAgVmVjdG9yPEV2ZW50Q29udGV4
dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2VzdEJvdW5kYXJ5ID0gbG93ZXN0Q29tbW9uQm91bmRhcnko
bV9hbmNlc3RvcnMsIHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwogCi0gICAgcmV0dXJuIGFkanVz
dFRvU2hhZG93Qm91bmRhcmllcyhyZWxhdGVkVGFyZ2V0LnJlbGVhc2UoKSwgcmVsYXRlZFRhcmdl
dEFuY2VzdG9ycyk7CisgICAgaWYgKGxvd2VzdEJvdW5kYXJ5IDwgbV9hbmNlc3RvcnMuYmVnaW4o
KSkgeworICAgICAgICBmb3IgKFZlY3RvcjxFdmVudENvbnRleHQ+OjppdGVyYXRvciB0YXJnZXRJ
dGVyYXRvciA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7IHRhcmdldEl0ZXJhdG9yIDwgbV9hbmNlc3Rv
cnMuZW5kKCk7ICsrdGFyZ2V0SXRlcmF0b3IpCisgICAgICAgICAgICB0YXJnZXRJdGVyYXRvci0+
c2V0U2hvdWxkRGlzcGF0Y2goZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Zm9yIChWZWN0b3I8RXZlbnRDb250ZXh0Pjo6aXRlcmF0b3IgdGFyZ2V0SXRlcmF0b3IgPSBtX2Fu
Y2VzdG9ycy5iZWdpbigpOyB0YXJnZXRJdGVyYXRvciA8IG1fYW5jZXN0b3JzLmVuZCgpOyArK3Rh
cmdldEl0ZXJhdG9yKSB7CisgICAgICAgIGlmICh0YXJnZXRJdGVyYXRvciA+IGxvd2VzdEJvdW5k
YXJ5KSB7CisgICAgICAgICAgICBpZiAoIWV4aXN0c0luU2FtZVNjb3BlKHRhcmdldEl0ZXJhdG9y
LT5ub2RlKCksIHRhcmdldCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRJdGVyYXRvci0+c2V0
U2hvdWxkRGlzcGF0Y2goZmFsc2UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNldFJlbGF0ZWRUYXJnZXQoKnRhcmdldEl0ZXJh
dG9yLCByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzKTsKKyAgICB9CiB9CiAKIEV2ZW50RGlzcGF0Y2hl
cjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCkBAIC0yMzIsMzAgKzI0MCw0MCBAQCBFdmVu
dERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2RlKiBub2RlKQogCiB2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICgh
bV9ub2RlLT5pbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChtX2FuY2Vz
dG9yc0luaXRpYWxpemVkKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBJbmNsdWRlcyB0YXJn
ZXQgaXRzZWxmLgorICAgIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlciBhbmNlc3RvcldhbGtlciht
X25vZGUuZ2V0KCkpOworICAgIEV2ZW50VGFyZ2V0KiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50VGFy
Z2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICBt
X2FuY2VzdG9ycy5hcHBlbmQoRXZlbnRDb250ZXh0KG1fbm9kZS5nZXQoKSwgb3JpZ2luYWxUYXJn
ZXQsIG9yaWdpbmFsVGFyZ2V0KSk7CiAgICAgbV9hbmNlc3RvcnNJbml0aWFsaXplZCA9IHRydWU7
CiAKLSAgICBOb2RlKiBhbmNlc3RvciA9IG1fbm9kZS5nZXQoKTsKLSAgICBFdmVudFRhcmdldCog
dGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3IpOwor
ICAgIGlmICghbV9ub2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZl
Y3RvcjxFdmVudFRhcmdldCo+IHRhcmdldFN0YWNrOworICAgIHRhcmdldFN0YWNrLmFwcGVuZChv
cmlnaW5hbFRhcmdldCk7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9y
LT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVo
YXZpb3IoZXZlbnQsIGFuY2VzdG9yKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQorICAgICAgICBp
ZiAoYW5jZXN0b3JXYWxrZXIuZ2V0KCktPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBp
ZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgYW5jZXN0b3JXYWxrZXIuZ2V0KCkp
ID09IFN0YXlJbnNpZGVTaGFkb3dET00pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+c2hhZG93SG9zdCgpOwotICAgICAgICAgICAgaWYg
KCFtX25vZGUtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHRhcmdldCA9IGFuY2Vz
dG9yOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBh
cmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKLQotICAgICAgICBpZiAoIWFuY2VzdG9yKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fYW5jZXN0b3JzLmFwcGVuZChFdmVudENv
bnRleHQoYW5jZXN0b3IsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2Vz
dG9yKSwgdGFyZ2V0KSk7CisgICAgICAgICAgICBhbmNlc3RvcldhbGtlci5wYXJlbnRJbmNsdWRp
bmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKTsKKyAgICAgICAgICAgIGlmICghYW5jZXN0
b3JXYWxrZXIuZ2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYg
KCFtX25vZGUtPmlzU1ZHRWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2su
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTdGFjay5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLmFwcGVuZChhbmNlc3RvcldhbGtlci5n
ZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbmNl
c3RvcldhbGtlci5wYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKTsK
KyAgICAgICAgICAgIGlmICghYW5jZXN0b3JXYWxrZXIuZ2V0KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKGlzSW5zZXJ0aW9uUG9pbnQoYW5jZXN0b3JXYWxrZXIu
Z2V0KCkpICYmIHRvSW5zZXJ0aW9uUG9pbnQoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpLT5pc0FjdGl2
ZSgpKQorICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLmFwcGVuZChhbmNlc3RvcldhbGtlci5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4
dChhbmNlc3RvcldhbGtlci5nZXQoKSwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVs
ZXMoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpLCBleGlzdHNJblNhbWVTY29wZShhbmNlc3RvcldhbGtl
ci5nZXQoKSwgb3JpZ2luYWxUYXJnZXQtPnRvTm9kZSgpKSA/IG9yaWdpbmFsVGFyZ2V0IDp0YXJn
ZXRTdGFjay5sYXN0KCkpKTsKICAgICB9CiB9CiAKQEAgLTI2OSw2ICsyODcsNyBAQCBib29sIEV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIAog
ICAgIFJlZlB0cjxFdmVudFRhcmdldD4gb3JpZ2luYWxUYXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7
CiAgICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQuZ2V0KCkpOworICAgIEFTU0VSVCghbV9h
bmNlc3RvcnMuaXNFbXB0eSgpKTsKIAogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dDb250
ZXh0KGV2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsKIApAQCAt
Mjg1LDggKzMwNCwxMCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBpZiAod2luZG93Q29udGV4dC5oYW5kbGVMb2NhbEV2
ZW50cyhldmVudC5nZXQoKSkgJiYgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAg
ICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKIAotICAgIGZvciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9y
cy5zaXplKCk7IGk7IC0taSkgewotICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29u
dGV4dCA9IG1fYW5jZXN0b3JzW2ktMV07CisgICAgZm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3Jz
LnNpemUoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgRXZlbnRDb250ZXh0JiBl
dmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKKyAgICAgICAgaWYgKCFldmVudENvbnRleHQu
c2hvdWxkRGlzcGF0Y2goKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoZXZl
bnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkgewogICAgICAgICAgICAgaWYg
KGV2ZW50LT5idWJibGVzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMDEsNyAr
MzIyLDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCiAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7
CiAgICAgZXZlbnQtPnNldFRhcmdldChvcmlnaW5hbFRhcmdldC5nZXQoKSk7CiAgICAgZXZlbnQt
PnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9u
b2RlLmdldCgpKSk7Ci0gICAgbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7
CisgICAgbV9hbmNlc3RvcnNbMF0uaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOworICAg
IC8vIG1fbm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwogICAgIGlmIChldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwog
CkBAIC0zMTAsOCArMzMyLDEwIEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShF
dmVudDo6QlVCQkxJTkdfUEhBU0UpOwogCiAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3Rv
cnMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAg
Y29uc3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKKyAgICAg
ICAgICAgIGlmICghZXZlbnRDb250ZXh0LnNob3VsZERpc3BhdGNoKCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRT
YW1lQXNUYXJnZXQoKSkKICAgICAgICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVu
dDo6QVRfVEFSR0VUKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTM0NCw3ICszNjgsNyBAQCBkb25l
RGlzcGF0Y2hpbmc6CiAgICAgICAgIC8vIHNhbWUgb3JkZXIgYXMgdGhlIGJ1YmJsaW5nIHBoYXNl
LgogICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkgewogICAgICAgICAgICAgc2l6ZV90IHNp
emUgPSBtX2FuY2VzdG9ycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXpl
OyArK2kpIHsKICAgICAgICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0
SGFuZGxlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDg1YWVmYzQ5
MzA0M2Q1MTdlYzk3NzM0ZTYyMThhYWQ4MWQxNzkwNjcuLjUzOTc1MTE1MGM1MjFlMzFmMmJmYTM5
MzZkMTNjMjhmNThlNDNlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAg
LTU0LDEzICs1NCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTaW11bGF0
ZWRDbGljayhOb2RlKiwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNl
bmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spOwogCiAgICAgYm9vbCBkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBh
ZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4pOworICAg
IHZvaWQgYWRqdXN0QnlSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gcHJwUmVsYXRlZFRhcmdldCk7CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIEV2ZW50RGlzcGF0Y2hlcihOb2RlKik7CiAKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiBhZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFy
Z2V0LCBjb25zdCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwogICAgIEV2
ZW50RGlzcGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgTm9k
ZSogc2hhZG93Um9vdCk7CiAgICAgdm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwog
ICAgIGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91
c2VFdmVudC5jcHAKaW5kZXggYzM2ODljNmRkNDYzYWVlMDU2Mjg4MTcyZTI1NGRjM2VjZmIyNWQw
Yi4uYTE5ZDhhMjFkNWIzYjMxZDY1OTlmYmY5NTA3YjQ2NjQ1NzM2NzljYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Nb3VzZUV2ZW50LmNwcApAQCAtMjAxLDggKzIwMSw4IEBAIGJvb2wgTW91c2VFdmVudERpc3Bh
dGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBj
b25zCiAgICAgaWYgKGV2ZW50KCktPnR5cGUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gU2hvdWxkbid0IGhhcHBlbi4KIAotICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVs
YXRlZFRhcmdldCA9IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZl
bnQoKS0+cmVsYXRlZFRhcmdldCgpKTsKLSAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFyZ2V0KHJl
bGF0ZWRUYXJnZXQpOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQoKS0+
cmVsYXRlZFRhcmdldCgpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRhcmdldChl
dmVudCgpLCByZWxhdGVkVGFyZ2V0KTsKIAogICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoRXZlbnQo
ZXZlbnQoKSk7CiAgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBldmVudCgpLT5kZWZhdWx0SGFuZGxl
ZCgpIHx8IGV2ZW50KCktPmRlZmF1bHRQcmV2ZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9VSUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcApp
bmRleCBmZjNmZjRhZmNmOWIyMTIxMWI3YjUzMWZhZjU0N2QxM2VmOGZkNTY5Li43MWIxZGI3ZGJk
YjlkZDhlOTkyYjUzMmM5MGMyOWM0OTcxNTgxMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVUlFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuY3BwCkBA
IC0xMjMsNyArMTIzLDcgQEAgRm9jdXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Rm9jdXNJbkV2
ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPEV2ZW50PiBldmUKIAogYm9vbCBGb2N1c0lu
RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlz
cGF0Y2hlcikgY29uc3QKIHsKLSAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2
ZW50KCksIG1fb2xkRm9jdXNlZE5vZGUpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRl
ZFRhcmdldChldmVudCgpLCBtX29sZEZvY3VzZWROb2RlKTsKICAgICByZXR1cm4gRXZlbnREaXNw
YXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC0xNDAsNyAr
MTQwLDcgQEAgRm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3VzT3V0RXZlbnREaXNw
YXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8RXZlbnQ+IGUKIAogYm9vbCBGb2N1c091dEV2ZW50RGlz
cGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIp
IGNvbnN0CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBt
X25ld0ZvY3VzZWROb2RlKTsKKyAgICBkaXNwYXRjaGVyLT5hZGp1c3RCeVJlbGF0ZWRUYXJnZXQo
ZXZlbnQoKSwgbV9uZXdGb2N1c2VkTm9kZSk7CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hNZWRp
YXRvcjo6ZGlzcGF0Y2hFdmVudChkaXNwYXRjaGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFiZmRkZmNjYmM0
YzVlNDFhODY2NWY1YzQ5NTMzMmFjYTU0MTk1YWUuLjk3YjgyZDgyYTBlMGRhYTVkZTNiNjQwZDE2
MzZlZjNmY2ZhNmM5MjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNS0wNyAgSGF5YXRv
IEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRXZlbnQgZGlzcGF0Y2hpbmcg
c2hvdWxkIHVzZSB0aGUgY29tcG9zZWQgc2hhZG93IERPTSB0cmVlIHRyZWUgaW5zdGVhZCBvZiBv
cmRpbmFsIERPTSB0cmVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9k
ZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9z
aGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRz
Lmh0bWw6CisKIDIwMTItMDUtMDggIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBTdXBwcmVzcyBmYWlsaW5nIHRlc3Qgd2hpbGUgdGhlIGZpeCBpcyBiZWluZyB3b3Jr
ZWQgb3V0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1i
b3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUt
ZGlzdHJpYnV0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjkwZmE5YzE4ZjBiMzY5NDBh
MzBjZGViYmFlYzBkMjFmY2I2MWJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlv
bi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMTYgQEAKK1Rlc3RzIHRvIGVuc3VyZSB0aGF0IHNo
YWRvdyBET00gYm91bmRhcnkgaXMgbm90IGNyb3NzZWQgZHVyaW5nIGV2ZW50IHByb3BhZ2F0aW9u
LiBDYW4gb25seSBydW4gd2l0aGluIERSVC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK0RJVgkgaWQ9c2FuZGJveAorCURJVgkgaWQ9dG9wCisJCURJVgkgaWQ9c2hhZG93LWhvc3QK
KwkJCURJVgkgaWQ9ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQKKwkJCURJVgkgaWQ9c2hhZG93LXJv
b3QtY2hpbGQKKwkJREVUQUlMUwkgaWQ9ZGV0YWlscworCQkJU1VNTUFSWQkgaWQ9c3VtbWFyeQor
CQkJCURJVgkKKworCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRvIHNoYWRvdy1o
b3N0L3NoYWRvdy1yb290LWNoaWxkCisKKyAgbW91c2VvdXQKKworICBtb3VzZW92ZXIKKyAgICAq
ICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRl
ZDogc2hhZG93LWhvc3QpCisgICAgKiAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9v
dC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisKK01vdmluZyBtb3VzZSBmcm9tIHNo
YWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkIHRvIHNoYWRvdy1ob3N0CisKKyAgbW91c2VvdXQK
KyAgICAqICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAo
cmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgKiAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFk
b3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNlb3ZlcgorCisK
K01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRvIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
CisKKyAgbW91c2VvdXQKKyAgICAqICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0
KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisgICAgKiAgIEB0b3AgKHRhcmdl
dDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKworICBt
b3VzZW92ZXIKKyAgICAqICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJnZXQ6IGRpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgKiAgIEBjb250
ZW50ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAqICAgQHNo
YWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAq
ICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRl
ZDogc2hhZG93LWhvc3QpCisgICAgKiAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBkaXN0
cmlidXRlZC1saWdodC1jaGlsZCB0byBzaGFkb3ctaG9zdAorCisgIG1vdXNlb3V0CisgICAgKiAg
IEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGls
ZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICogICBAY29udGVudCAodGFyZ2V0OiBjb250
ZW50KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgKiAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0
OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgKiAgIEBzaGFkb3ctaG9zdCAo
dGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQor
ICAgICogICBAdG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDog
c2hhZG93LWhvc3QpCisKKyAgbW91c2VvdmVyCisgICAgKiAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0
OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICog
ICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQpCisKKworTW92aW5nIG1vdXNlIGZyb20gZGV0YWlscyB0byBzdW1tYXJ5CisKKyAgbW91
c2VvdXQKKyAgICAqICAgQGRldGFpbHMgKHRhcmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1h
cnkpCisgICAgKiAgIEB0b3AgKHRhcmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisK
KyAgbW91c2VvdmVyCisgICAgKiAgIEBzdW1tYXJ5ICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVk
OiBkZXRhaWxzKQorICAgICogICBAZGV0YWlscyAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDog
ZGV0YWlscykKKyAgICAqICAgQHRvcCAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWls
cykKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzdW1tYXJ5IHRvIGRldGFpbHMKKworICBtb3VzZW91
dAorICAgICogICBAc3VtbWFyeSAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykK
KyAgICAqICAgQGRldGFpbHMgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisg
ICAgKiAgIEB0b3AgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisKKyAgbW91
c2VvdmVyCisgICAgKiAgIEBkZXRhaWxzICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1t
YXJ5KQorICAgICogICBAdG9wICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5KQor
CisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkIHRvIGRp
c3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAqICAgQHNoYWRvdy1yb290
LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogZGlzdHJpYnV0ZWQt
bGlnaHQtY2hpbGQpCisgICAgKiAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1j
aGlsZCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorCisgIG1vdXNlb3Zlcgor
ICAgICogICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGln
aHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAqICAgQGNvbnRlbnQgKHRhcmdl
dDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290LWNoaWxkKQorICAgICogICBAc2hhZG93
LXJvb3QgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290LWNoaWxkKQorICAg
ICogICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxh
dGVkOiBzaGFkb3ctaG9zdCkKKyAgICAqICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisKK01vdmluZyBtb3VzZSBmcm9tIGRp
c3RyaWJ1dGVkLWxpZ2h0LWNoaWxkIHRvIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkCisK
KyAgbW91c2VvdXQKKyAgICAqICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJnZXQ6IGRp
c3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgKiAgIEBj
b250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctcm9vdC1jaGlsZCkKKyAg
ICAqICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctcm9v
dC1jaGlsZCkKKyAgICAqICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0
LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgKiAgIEB0b3AgKHRhcmdldDogZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBtb3VzZW92
ZXIKKyAgICAqICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxk
KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisgICAgKiAgIEBzaGFkb3ctcm9v
dCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0
LWNoaWxkKQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRh
cnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24u
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MzI1ZmU1OTk3YTA3OGNhZDBmZmEwMGJmM2QwNDU0MDE2YTBiODZk
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1i
b3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi5odG1sCkBAIC0wLDAgKzEsMTYy
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvc2hhZG93LWRvbS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0ic2FuZGJveCI+PC9kaXY+Cis8cHJlIGlkPSJjb25z
b2xlIj48L3ByZT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdG8gZW5zdXJlIHRoYXQg
c2hhZG93IERPTSBib3VuZGFyeSBpcyBub3QgY3Jvc3NlZCBkdXJpbmcgZXZlbnQgcHJvcGFnYXRp
b24uIENhbiBvbmx5IHJ1biB3aXRoaW4gRFJULiIpOworCisvLyBGSVhNRTogTWFrZSBhIHNlcGFy
YXRlIHV0aWxpdHkganMgZmlsZSBhbmQgc2hhcmUgaXQuCitmdW5jdGlvbiBtb3ZlTW91c2VPdmVy
KGVsZW1lbnQpCit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIgfHwgIXdpbmRvdy5pbnRl
cm5hbHMpCisgICAgICAgIHJldHVybjsKKworICAgIHZhciBkZWZhdWx0UGFkZGluZ1NpemUgPSAy
MDsKKyAgICB2YXIgeCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGgg
LyAyOworICAgIHZhciB5OworICAgIGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSB8fCB3aW5k
b3cuaW50ZXJuYWxzLnNoYWRvd1Jvb3QoZWxlbWVudCkpCisgICAgICAgIHkgPSBlbGVtZW50Lm9m
ZnNldFRvcCArIGRlZmF1bHRQYWRkaW5nU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHkgPSBlbGVt
ZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRl
ci5tb3VzZU1vdmVUbyh4LCB5KTsKK30KKwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitmdW5j
dGlvbiBjbGVhckV2ZW50UmVjb3JkcygpCit7CisgICAgZXZlbnRSZWNvcmRzID0ge307Cit9CisK
K2Z1bmN0aW9uIGRpc3BhdGNoZWRFdmVudChldmVudFR5cGUpCit7CisgICAgdmFyIGV2ZW50cyA9
IGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdOworICAgIGlmICghZXZlbnRzKQorICAgICAgICByZXR1
cm4gW107CisgICAgcmV0dXJuIGV2ZW50czsKK30KKworZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZl
bnQpCit7CisgICAgdmFyIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUKKyAgICBpZiAoIWV2ZW50UmVj
b3Jkc1tldmVudFR5cGVdKSB7CisgICAgICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW10K
KyAgICB9CisgICAgdmFyIGV2ZW50U3RyaW5nID0gJyc7CisgICAgaWYgKGV2ZW50LmN1cnJlbnRU
YXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgQCcgKyBldmVudC5jdXJyZW50VGFyZ2V0
LmlkOworICAgIGlmIChldmVudC50YXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRh
cmdldDogJyArIGV2ZW50LnRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQucmVsYXRlZFRh
cmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0
ZWRUYXJnZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKKyAgICAg
ICAgZXZlbnRTdHJpbmcgKz0gJyhjYXB0dXJpbmcgcGhhc2UpJzsKKyAgICBpZiAoZXZlbnQudGFy
Z2V0ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1
cnJlbnRUYXJnZXQuaWQpCisgICAgICAgIHNob3VsZEJlKCJldmVudC5ldmVudFBoYXNlIiwgIjIi
LCB0cnVlKTsKKyAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXS5wdXNoKGV2ZW50U3RyaW5nKTsK
K30KKworZnVuY3Rpb24gZHVtcE5vZGUobm9kZSkKK3sKKyAgICB2YXIgb3V0cHV0ID0gbm9kZS5u
b2RlTmFtZSArICJcdCI7CisgICAgaWYgKG5vZGUuaWQpCisgICAgICAgIG91dHB1dCArPSAnIGlk
PScgKyBub2RlLmlkOworICAgIGlmIChub2RlLmNsYXNzTmFtZSkKKyAgICAgICAgb3V0cHV0ICs9
ICcgY2xhc3M9JyArIG5vZGUuY2xhc3NOYW1lOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1
bmN0aW9uIGR1bXBDb21wb3NlZFNoYWRvd1RyZWUobm9kZSwgaW5kZW50KQoreworICAgIGluZGVu
dCA9IGluZGVudCB8fCAiIjsKKyAgICB2YXIgb3V0cHV0ID0gaW5kZW50ICsgZHVtcE5vZGUobm9k
ZSkgKyAiXG4iOworICAgIHZhciBjaGlsZDsKKyAgICBmb3IgKGNoaWxkID0gaW50ZXJuYWxzLmZp
cnN0Q2hpbGRCeVdhbGtlcihub2RlKTsgY2hpbGQ7IGNoaWxkID0gaW50ZXJuYWxzLm5leHRTaWJs
aW5nQnlXYWxrZXIoY2hpbGQpKQorICAgICAgICAgb3V0cHV0ICs9IGR1bXBDb21wb3NlZFNoYWRv
d1RyZWUoY2hpbGQsIGluZGVudCArICJcdCIpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1
bmN0aW9uIHByZXBhcmVET01UcmVlKHBhcmVudCkKK3sKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQo
CisgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICd0b3AnLCAnc3R5bGUnOiAncGFkZGlu
Zy10b3A6IDQwcHgnfSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6
ICdzaGFkb3ctaG9zdCcsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdk
dW1wJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6
ICdjb250ZW50JywgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4JywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZWxlY3QnOiAnI2Rpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkJyx9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ3NoYWRvdy1yb290LWNoaWxkJywgJ3N0eWxlJzogJ3Bh
ZGRpbmctdG9wOiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2RpdicsIHsnaWQnOiAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc3R5bGUnOiAncGFk
ZGluZy10b3A6IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkJywgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAg
IGNyZWF0ZURPTSgnZGV0YWlscycsIHsnaWQnOiAnZGV0YWlscycsICdvcGVuJzogdHJ1ZSwgJ3N0
eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4JywgJ3RpdGxlJzogJ2R1bXAnfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ3N1bW1hcnknLCB7J2lkJzogJ3N1bW1hcnknLCAn
c3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSkpKTsKKworICAg
IGdldE5vZGVJblNoYWRvd1RyZWVTdGFjaygnc2hhZG93LWhvc3QvJykuaWQgPSAnc2hhZG93LXJv
b3QnOworICAgIHZhciBpZHMgPSBbJ3RvcCcsICdzaGFkb3ctaG9zdCcsICdzaGFkb3ctaG9zdC8n
LCAnc2hhZG93LWhvc3QvY29udGVudCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcs
CisgICAgICAgICAgICAgICAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnbm9uLWRpc3RyaWJ1
dGVkLWxpZ2h0LWNoaWxkJywKKyAgICAgICAgICAgICAgICdkZXRhaWxzJywgJ3N1bW1hcnknXTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIg
ZWxlbWVudCA9IGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhpZHNbaV0pOworICAgICAgICBlbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHJlY29yZEV2ZW50LCBmYWxzZSk7Cisg
ICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCByZWNvcmRFdmVudCwg
ZmFsc2UpOworICAgIH0KKyAgICAKKyAgICBwYXJlbnQub2Zmc2V0TGVmdDsKKyAgICBkZWJ1Zyhk
dW1wQ29tcG9zZWRTaGFkb3dUcmVlKHBhcmVudCkpOworfQorCitmdW5jdGlvbiBkZWJ1Z0Rpc3Bh
dGNoZWRFdmVudChldmVudFR5cGUpCit7CisgICAgZGVidWcoJ1xuICAnICsgZXZlbnRUeXBlKTsK
KyAgICB2YXIgZXZlbnRzID0gZGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSk7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGRlYnVnKCcgICAgKiAg
JyArIGV2ZW50c1tpXSkKK30KKworZnVuY3Rpb24gbW92ZU1vdXNlKG9sZEVsZW1lbnRJZCwgbmV3
RWxlbWVudElkKQoreworICAgIGRlYnVnKCdcblxuJyArICdNb3ZpbmcgbW91c2UgZnJvbSAnICsg
b2xkRWxlbWVudElkICsgJyB0byAnICsgbmV3RWxlbWVudElkKTsKKyAgICBtb3ZlTW91c2VPdmVy
KGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhvbGRFbGVtZW50SWQpKTsKKyAgICBjbGVhckV2ZW50
UmVjb3JkcygpOworICAgIG1vdmVNb3VzZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG5l
d0VsZW1lbnRJZCkpOworCisgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNlb3V0Jyk7Cisg
ICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNlb3ZlcicpOworfQorCitmdW5jdGlvbiB0ZXN0
KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgcHJlcGFyZURPTVRyZWUoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbmRib3gnKSk7CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1o
b3N0JywgJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdz
aGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcsICdzaGFkb3ctaG9zdCcpOworCisgICAgbW92
ZU1vdXNlKCdzaGFkb3ctaG9zdCcsICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIG1v
dmVNb3VzZSgnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKKworICAg
IG1vdmVNb3VzZSgnZGV0YWlscycsICdzdW1tYXJ5Jyk7CisgICAgbW92ZU1vdXNlKCdzdW1tYXJ5
JywgJ2RldGFpbHMnKTsKKworICAgIG1vdmVNb3VzZSgnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3Qt
Y2hpbGQnLCAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnKTsKKyAgICBtb3ZlTW91c2UoJ2Rpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJyk7CisK
KyAgICAvLyBUaGVzZSBjYXNlcyBzaG91bGQgbm90IGhhcHBlbiBzaW5jZSBub24tZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQgaXMgbm90IHJlbmRlcmVkLgorICAgIC8vIEZJWE1FOiBSZWFsbHk/Cisg
ICAgLy8gbW92ZU1vdXNlKCdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdub24tZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQnKTsKKyAgICAvLyBtb3ZlTW91c2UoJ25vbi1kaXN0cmlidXRlZC1saWdo
dC1jaGlsZCcsICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIC8vIG1vdmVNb3VzZSgn
c2hhZG93LWhvc3QnLCAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgLy8gbW92
ZU1vdXNlKCdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKK30K
KwordGVzdCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMuaHRtbApp
bmRleCBlYzJlMmY4MDhhZGEwYTYwNzU0YTQ5YzgwYmM5OTNhODVhMjVjMWQ5Li5hMGMyYzkxOGQ0
NzRjODI3MzFmYjkwY2U1Y2I3NTFkMTAzZjQ5OWU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy5odG1sCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0bWwKQEAgLTE0Niw3
ICsxNDYsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgJ1RhcmdldCBpcyBhbiBh
bmNlc3RvciBvZiByZWxhdGVkVGFyZ2V0LicpOwogICAgIHNob3VsZEJlKCdkaXNwYXRjaGVkRXZl
bnQoIm1vdXNlb3ZlciIpJywgJ1siZGl2RSg8LXNoYWRvd0YpKEBkaXZFKSJdJyk7CiAgICAgc2hv
dWxkQmUoJ2Rpc3BhdGNoZWRFdmVudCgibW91c2VvdXQiKScsICdbImRpdkkoPC1kaXZFKShAZGl2
SSkiLCAic2hhZG93Ryg8LWRpdkUpKEBzaGFkb3dHKSIsICJzaGFkb3dGKDwtZGl2RSkoQHNoYWRv
d0YpIiwgInNoYWRvd0YoPC1kaXZFKShAZGl2RSkiXScpOwotCisgICAKICAgICBtb3ZlTW91c2Uo
J3NoYWRvd0Qvc2hhZG93Ri9zaGFkb3dHL2RpdkknLCAnc2hhZG93RC9zaGFkb3dGJywKICAgICAg
ICAgICAgICAgJ1RhcmdldCAoc2hhZG93IGhvc3QpIGlzIGFuIGFuY2VzdG9yIG9mIHJlbGF0ZWRU
YXJnZXQuJyk7CiAgICAgc2hvdWxkQmUoJ2Rpc3BhdGNoZWRFdmVudCgibW91c2VvdmVyIiknLCAn
W10nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141123</attachid>
            <date>2012-05-10 02:55:17 -0700</date>
            <delta_ts>2012-05-10 04:06:29 -0700</delta_ts>
            <desc>WIP. New ajusting relatedTarget algorithm.</desc>
            <filename>bug-78586-20120510185515.patch</filename>
            <type>text/plain</type>
            <size>35585</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc2YjA3YzE4Y2JlMDM4
YzIzMDFkOGMxYzhiNzc0ZWExYjQyODc3ZS4uMjhmNTJmMzU2ZGQ3NTBkNzI0MzE4OGVlMjAzNjhm
NDk3ZGE5YTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgdHJlZSBpbnN0ZWFkIG9m
IG9yZGluYWwgRE9NIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdp
dGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OmFkanVzdGVkUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZUFkanVzdGVkUGFyZW50KToKKyAg
ICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg6CisgICAgICAgIChDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyOjpjYW5Dcm9zc1VwcGVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjpjYW5Dcm9zc0xvd2VyQm91bmRhcnkpOgorICAgICAgICAqIGRv
bS9FdmVudENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVu
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dG9Nb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50
cyk6CisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoRXZlbnRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2hvdWxkRGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFNob3Vs
ZERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhp
c3RzSW5TYW1lU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjph
bmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0
Q29tbW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5o
OgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChOb2RlKToKKwog
MjAxMi0wNS0wOCAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIENyYXNoIGR1ZSB0byBvd25pbmcgcmVuZGVyZXIgbm90IHJlbW92ZWQgZnJvbSBjdXN0b20g
c2Nyb2xsYmFyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyLmNwcAppbmRleCA1YTY5MzZjOGMyMjFmZWNhMzNlNzg2Yjg0NDkzYTYxNTI4Y2U4NTUwLi4w
YTU4ZTdlMDkwNDA4NWE1NTZlNzU5MGU5ZmVlNjI1MDE1NjQ4ZGJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcApAQCAtMjAyLDYgKzIwMiwy
OSBAQCB2b2lkIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6cGFyZW50KCkKICAgICBhc3NlcnRQ
b3N0Y29uZGl0aW9uKCk7CiB9CiAKK3ZvaWQgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjpwYXJl
bnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKQoreworICAgIEFTU0VSVCht
X25vZGUpOworICAgIG1fbm9kZSA9IHRyYXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9p
bnRBbmRTaGFkb3dSb290KG1fbm9kZSk7Cit9CisKK05vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdh
bGtlcjo6dHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3Qo
Y29uc3QgTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93
ID0gc2hhZG93T2ZQYXJlbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKEhUTUxDb250ZW50U2VsZWN0
aW9uKiBzZWxlY3Rpb24gPSBzaGFkb3ctPnNlbGVjdGlvbkZvcihub2RlKSkKKyAgICAgICAgICAg
IHJldHVybiBzZWxlY3Rpb24tPmluc2VydGlvblBvaW50KCk7CisgICAgfQorICAgIGlmIChub2Rl
LT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICBjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290
ID0gdG9TaGFkb3dSb290KG5vZGUpOworICAgICAgICBpZiAoc2hhZG93Um9vdC0+aXNZb3VuZ2Vz
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKTsKKyAgICAgICAgSW5z
ZXJ0aW9uUG9pbnQqIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQgPSBzaGFkb3dSb290LT5hc3NpZ25l
ZFRvKCk7CisgICAgICAgIEFTU0VSVChhc3NpZ25lZEluc2VydGlvblBvaW50KTsKKyAgICAgICAg
cmV0dXJuIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQ7CisgICAgfQorICAgIHJldHVybiBub2RlLT5w
YXJlbnROb2RlKCk7Cit9CisKIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVy
c2VQYXJlbnQoY29uc3QgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIWNhbkNyb3NzVXBw
ZXJCb3VuZGFyeSgpICYmIG5vZGUtPmlzU2hhZG93Um9vdCgpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKaW5kZXggOTc2NmMxYTM2NTAxOTAwODhi
OTRkYTJhNDQwYzIwNjI2ZDBkNGE5Mi4uZGEzNGVlZDY2NjdmZmJiNjJlNTY1MTNkZjdlYTc3N2Yw
ZWZkY2M4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJl
ZVdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXIuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmV2aW91c1NpYmxpbmco
KTsKIAogICAgIHZvaWQgcGFyZW50KCk7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpZ25vcmVzIHBv
bGljeS4gQWx3YXlzIGNyb3NzIGFuIHVwcGVyIGJvdW5kYXJ5LgorICAgIHZvaWQgcGFyZW50SW5j
bHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCk7CiAKICAgICB2b2lkIG5leHQoKTsK
ICAgICB2b2lkIHByZXZpb3VzKCk7CkBAIC05OSw2ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIE5v
ZGUqIHRyYXZlcnNlTGFzdENoaWxkKGNvbnN0IE5vZGUqKSBjb25zdDsKICAgICBOb2RlKiB0cmF2
ZXJzZUNoaWxkKGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pIGNvbnN0OwogICAgIE5v
ZGUqIHRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJz
ZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdChjb25zdCBOb2RlKikg
Y29uc3Q7CiAKICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2Rl
Kik7CiAgICAgc3RhdGljIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggMmE1YzUyMTBhYWVmNmI5NDFi
YmRlNWRlMjk1Y2JhMzM5ZDE0MmRmNS4uYTFiNTFjMGU5ZmZhNGU1MDk5YTdjOThkYTUwOWE4Mjdm
MzQyZTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMgKzM5LDIyIEBAIEV2ZW50Q29udGV4dDo6
RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gY3VycmVuCiAgICAgOiBtX25vZGUobm9kZSkKICAgICAsIG1fY3VycmVudFRhcmdldChjdXJy
ZW50VGFyZ2V0KQogICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9yZWxhdGVkVGFyZ2V0
KDApCiB7CiB9CiAKK3N0YXRpYyBNb3VzZUV2ZW50KiB0b01vdXNlRXZlbnQoRXZlbnQqIGV2ZW50
KQoreworICAgIEFTU0VSVChldmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworfQorCiB2b2lkIEV2ZW50Q29u
dGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50KSBjb25zdAogewogICAgIGV2ZW50
LT5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0
KG1fY3VycmVudFRhcmdldC5nZXQoKSk7CisgICAgaWYgKG1fcmVsYXRlZFRhcmdldC5nZXQoKSAm
JiBldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIHRvTW91c2VFdmVudChldmVudCktPnNl
dFJlbGF0ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0LmdldCgpKTsKICAgICBtX25vZGUtPmhhbmRs
ZUxvY2FsRXZlbnRzKGV2ZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCmluZGV4
IDVlNzMxN2Y0NWNmNTQ4NTZhMzI0OWQ4N2RkMjdhMDgxNjYyZDY3NDguLjgwMmEzODE2Y2RhODVj
NTdlYjkyZGI2YjY2MzNhZjk4YmY5M2I2OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgK
QEAgLTQyLDEzICs0MiwxNyBAQCBwdWJsaWM6CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3Q7CiAg
ICAgRXZlbnRUYXJnZXQqIHRhcmdldCgpIGNvbnN0OworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVk
VGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkgY29u
c3Q7CiAgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCopIGNvbnN0OworICAgIHZvaWQg
c2V0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CiAKIHByaXZhdGU6CiAg
ICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fY3VycmVu
dFRhcmdldDsKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fdGFyZ2V0OworICAgIFJlZlB0cjxF
dmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0OworICAgIGJvb2wgbV9zaG91bGREaXNwYXRjaDsK
IH07CiAKIGlubGluZSBOb2RlKiBFdmVudENvbnRleHQ6Om5vZGUoKSBjb25zdApAQCAtNjYsNiAr
NzAsMTYgQEAgaW5saW5lIGJvb2wgRXZlbnRDb250ZXh0OjpjdXJyZW50VGFyZ2V0U2FtZUFzVGFy
Z2V0KCkgY29uc3QKICAgICByZXR1cm4gbV9jdXJyZW50VGFyZ2V0LmdldCgpID09IG1fdGFyZ2V0
LmdldCgpOwogfQogCitpbmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50Q29udGV4dDo6cmVsYXRlZFRh
cmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsKK30KKwor
aW5saW5lIHZvaWQgRXZlbnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpCit7CisgICAgbV9yZWxhdGVkVGFyZ2V0ID0gcmVsYXRl
ZFRhcmdldDsKK30KKwogfQogCiAjZW5kaWYgLy8gRXZlbnRDb250ZXh0X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAKaW5kZXggYjI0NzRjYjk1MWU2Yzkx
NDYzY2Y5ZjMxNTg2ZGVjM2U3MjMwOWYzMy4uMzA1NDZiNDI5ODNhZjBjMTYzMzY4NWNiNTZlMGMw
ZDU1MDk4MmQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hN
ZWRpYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRv
ci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgRm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3Vz
RXZlbnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8Tm9kZT4gb2xkRm9jdXMKIAogYm9vbCBG
b2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIq
IGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdl
dChldmVudCgpLCBtX29sZEZvY3VzZWROb2RlKTsKKyAgICBkaXNwYXRjaGVyLT5hZGp1c3RCeVJl
bGF0ZWRUYXJnZXQoZXZlbnQoKSwgbV9vbGRGb2N1c2VkTm9kZSk7CiAgICAgcmV0dXJuIEV2ZW50
RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChkaXNwYXRjaGVyKTsKIH0KIApAQCAtODEs
NyArODEsNyBAQCBCbHVyRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpCbHVyRXZlbnREaXNwYXRjaE1l
ZGlhdG9yKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Rm9jdXNlZAogCiBib29sIEJsdXJFdmVudERpc3Bh
dGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBj
b25zdAogewotICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgbV9u
ZXdGb2N1c2VkTm9kZSk7CisgICAgZGlzcGF0Y2hlci0+YWRqdXN0QnlSZWxhdGVkVGFyZ2V0KGV2
ZW50KCksIG1fbmV3Rm9jdXNlZE5vZGUpOwogICAgIHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0
b3I6OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5jcHAKaW5kZXggNTg2NmU2MDY4ZDZmNTliYTYyMWQzMjFjNTQ0ZjRmMjgzNjNi
Y2ViOS4uOTk0MzYxNGU0N2U1YWUxNmY4YzU4MTE0MGNmM2QxZmYwOTcwNDE2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTI2LDEwICsyNiwxMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgogCisjaW5jbHVkZSAi
Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgog
I2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRv
ci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJTY29wZWRF
dmVudFF1ZXVlLmgiCkBAIC00NSw2ICs0OCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3N0YXRpYyBib29sIGV4aXN0c0luU2FtZVNjb3BlKE5vZGUqIG5vZGUxLCBOb2RlKiBub2RlMikK
K3sKKyAgICByZXR1cm4gbm9kZTEtPnRyZWVTY29wZSgpID09IG5vZGUyLT50cmVlU2NvcGUoKTsK
K30KKwogc3RhdGljIEhhc2hTZXQ8Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENs
aWNrcyA9IDA7CiAKIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5v
ZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKQEAgLTEyMSwx
MDQgKzEyOSw0NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTaGFkb3dIb3N0KE5vZGUqIG5vZGUp
CiAgICAgcmV0dXJuIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmhh
c1NoYWRvd1Jvb3QoKTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gRXZlbnREaXNwYXRj
aGVyOjphZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFy
Z2V0LCBjb25zdCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpCi17Ci0gICAg
VmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2VzdENvbW1vbkJvdW5kYXJ5
ID0gbV9hbmNlc3RvcnMuZW5kKCk7Ci0gICAgLy8gQXNzdW1lIGRpdmVyZ2VudCBib3VuZGFyeSBp
cyB0aGUgcmVsYXRlZFRhcmdldCBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCByZWxhdGVkIHRhcmdl
dCBhbmNlc3RvciBjaGFpbiBkb2VzIG5vdCBjcm9zcyBhbnkgc2hhZG93IERPTSBib3VuZGFyaWVz
KS4KLSAgICBWZWN0b3I8Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBmaXJzdERpdmVyZ2VudEJvdW5k
YXJ5ID0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpOwotCi0gICAgVmVjdG9yPEV2ZW50
Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIHRhcmdldEFuY2VzdG9yID0gbV9hbmNlc3RvcnMuZW5k
KCk7Ci0gICAgLy8gV2FsayBkb3duIGZyb20gdGhlIHRvcCwgbG9va2luZyBmb3IgbG93ZXN0IGNv
bW1vbiBhbmNlc3RvciwgYWxzbyBtb25pdG9yaW5nIHNoYWRvdyBET00gYm91bmRhcmllcy4KLSAg
ICBib29sIGRpdmVyZ2VkID0gZmFsc2U7Ci0gICAgZm9yIChWZWN0b3I8Tm9kZSo+Ojpjb25zdF9p
dGVyYXRvciBpID0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5lbmQoKSAtIDE7IGkgPj0gcmVsYXRl
ZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpOyAtLWkpIHsKLSAgICAgICAgaWYgKGRpdmVyZ2VkKSB7
Ci0gICAgICAgICAgICBpZiAoKCppKS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgICAg
ICBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5ID0gaSArIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh0YXJnZXRBbmNlc3RvciA9PSBtX2FuY2VzdG9ycy5iZWdpbigpKSB7Ci0gICAgICAg
ICAgICBkaXZlcmdlZCA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRhcmdldEFuY2VzdG9yLS07Ci0KLSAgICAgICAgaWYgKCgqaSktPmlzU2hhZG93
Um9vdCgpKQotICAgICAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSB0YXJnZXRBbmNlc3Rv
cjsKLQotICAgICAgICBpZiAoKCppKSAhPSAoKnRhcmdldEFuY2VzdG9yKS5ub2RlKCkpCi0gICAg
ICAgICAgICBkaXZlcmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFkaXZlcmdlZCkgewot
ICAgICAgICAvLyBUaGUgcmVsYXRlZFRhcmdldCBpcyBhbiBhbmNlc3RvciBvciBzaGFkb3dIb3N0
IG9mIHRoZSB0YXJnZXQuCi0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGZpcnN0IGNoZWNr
IG9uY2UgY29udmVyc2lvbiB0byBuZXcgc2hhZG93IERPTSBpcyBjb21wbGV0ZSA8aHR0cDovL3dl
YmtpdC5vcmcvYi80ODY5OD4KLSAgICAgICAgaWYgKG1fbm9kZS0+c2hhZG93SG9zdCgpID09IHJl
bGF0ZWRUYXJnZXQuZ2V0KCkgfHwgaXNTaGFkb3dIb3N0KHJlbGF0ZWRUYXJnZXQuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgcmVsYXRl
ZFRhcmdldENoaWxkID0gdGFyZ2V0QW5jZXN0b3IgLSAxOwotICAgICAgICAgICAgaWYgKHJlbGF0
ZWRUYXJnZXRDaGlsZCA+PSBtX2FuY2VzdG9ycy5iZWdpbigpICYmIHJlbGF0ZWRUYXJnZXRDaGls
ZC0+bm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgICAgICBsb3dlc3RDb21tb25C
b3VuZGFyeSA9IHJlbGF0ZWRUYXJnZXRDaGlsZDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
KCpmaXJzdERpdmVyZ2VudEJvdW5kYXJ5KSA9PSBtX25vZGUuZ2V0KCkpIHsKLSAgICAgICAgLy8g
U2luY2UgYW5jZXN0b3JzIGRvZXMgbm90IGNvbnRhaW4gdGFyZ2V0IGl0c2VsZiwgd2UgbXVzdCBh
Y2NvdW50Ci0gICAgICAgIC8vIGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCB0YXJnZXQgaXMgYSBz
aGFkb3dIb3N0IG9mIHJlbGF0ZWRUYXJnZXQKLSAgICAgICAgLy8gYW5kIHRodXMgc2VydmVzIGFz
IHRoZSBsb3dlc3RDb21tb25Cb3VuZGFyeS4KLSAgICAgICAgLy8gTHVja2lseSwgaW4gdGhpcyBj
YXNlIHRoZSBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5IGlzIHRhcmdldC4KLSAgICAgICAgbG93ZXN0
Q29tbW9uQm91bmRhcnkgPSBtX2FuY2VzdG9ycy5iZWdpbigpOwotICAgICAgICBtX3Nob3VsZFBy
ZXZlbnREaXNwYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGxvd2VzdENvbW1vbkJvdW5k
YXJ5ICE9IG1fYW5jZXN0b3JzLmVuZCgpKSB7Ci0gICAgICAgIC8vIFRyaW0gYW5jZXN0b3JzIHRv
IGxvd2VzdENvbW1vbkJvdW5kYXJ5IHRvIGtlZXAgZXZlbnRzIGluc2lkZSBvZiB0aGUgY29tbW9u
IHNoYWRvdyBET00gc3VidHJlZS4KLSAgICAgICAgbV9hbmNlc3RvcnMuc2hyaW5rKGxvd2VzdENv
bW1vbkJvdW5kYXJ5IC0gbV9hbmNlc3RvcnMuYmVnaW4oKSk7Ci0gICAgfQotICAgIC8vIFNldCBl
dmVudCdzIHJlbGF0ZWQgdGFyZ2V0IHRvIHRoZSBmaXJzdCBlbmNvdW50ZXJlZCBzaGFkb3cgRE9N
IGJvdW5kYXJ5IGluIHRoZSBkaXZlcmdlbnQgc3VidHJlZS4KLSAgICByZXR1cm4gZmlyc3REaXZl
cmdlbnRCb3VuZGFyeSAhPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkgPyAqZmlyc3RE
aXZlcmdlbnRCb3VuZGFyeSA6IHJlbGF0ZWRUYXJnZXQ7Ci19Ci0KLWlubGluZSBzdGF0aWMgYm9v
bCBhbmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMoY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4
dD4mIGFuY2VzdG9ycykKLXsKLSAgICByZXR1cm4gYW5jZXN0b3JzLmlzRW1wdHkoKSB8fCBhbmNl
c3RvcnMuZmlyc3QoKS5ub2RlKCkgPT0gYW5jZXN0b3JzLmxhc3QoKS5ub2RlKCk7Ci19Ci0KLS8v
IEZJWE1FOiBPbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjk2
MyBsYW5kcywgdGhpcyBzaG91bGQKLS8vIGJlIGdyZWF0bHkgaW1wcm92ZWQuIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwMjUuCi1QYXNzUmVmUHRyPEV2ZW50
VGFyZ2V0PiBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50
LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQordm9pZCBFdmVudERp
c3BhdGNoZXI6OmFkanVzdEJ5UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8
RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCiB7CiAgICAgaWYgKCFwcnBSZWxhdGVkVGFy
Z2V0KQotICAgICAgICByZXR1cm4gMDsKLQorICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPE5v
ZGU+IHJlbGF0ZWRUYXJnZXQgPSBwcnBSZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKICAgICBpZiAo
IXJlbGF0ZWRUYXJnZXQpCi0gICAgICAgIHJldHVybiAwOwotCisgICAgICAgIHJldHVybjsKICAg
ICBOb2RlKiB0YXJnZXQgPSBtX25vZGUuZ2V0KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAg
IHJldHVybiBwcnBSZWxhdGVkVGFyZ2V0OworICAgICAgICByZXR1cm47CiAKICAgICBlbnN1cmVF
dmVudEFuY2VzdG9ycyhldmVudCk7CiAKLSAgICAvLyBDYWxjdWxhdGUgZWFybHkgaWYgdGhlIGNv
bW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxlIGJ5IGxvb2tpbmcgYXQKLSAgICAvLyBhbmNl
c3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0aW5nIGhhcyBvY2N1cmVkIChpbmRpY2F0aW5n
IHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgotICAgIC8vIElmIHRoZXJl
IGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0aGUgdGFyZ2V0IGFuZCByZWxhdGVkIHRhcmdl
dCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5LgotICAgIGJvb2wgbm9Db21tb25Cb3VuZGFy
eSA9IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyhtX2FuY2VzdG9ycyk7Ci0KICAgICBW
ZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnM7Ci0gICAgTm9kZSogb3V0ZXJtb3N0
U2hhZG93Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0LmdldCgpOwotICAgIGZvciAoTm9kZSogbiA9
IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBuID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7
Ci0gICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgIG91dGVybW9zdFNo
YWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpOwotICAgICAgICBpZiAoIW5vQ29t
bW9uQm91bmRhcnkpCi0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmFwcGVuZChu
KTsKLSAgICB9CisgICAgZm9yIChDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIgd2Fsa2VyKHJlbGF0
ZWRUYXJnZXQuZ2V0KCkpOyB3YWxrZXIuZ2V0KCk7IHdhbGtlci5wYXJlbnRJbmNsdWRpbmdJbnNl
cnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmVsYXRlZFRhcmdldEFuY2VzdG9y
cy5hcHBlbmQod2Fsa2VyLmdldCgpKTsKIAotICAgIC8vIFNob3J0LWNpcmN1aXQgdGhlIGZhc3Qg
Y2FzZSB3aGVuIHdlIGtub3cgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgYSBjb21tb24g
Ym91bmRhcnkuCi0gICAgaWYgKG5vQ29tbW9uQm91bmRhcnkpCi0gICAgICAgIHJldHVybiBvdXRl
cm1vc3RTaGFkb3dCb3VuZGFyeTsKKyAgICBIYXNoTWFwPFRyZWVTY29wZSosIEV2ZW50VGFyZ2V0
Kj4gcmVsYXRlZFRhcmdldE1hcDsKKyAgICBmb3IgKFZlY3RvcjxFdmVudENvbnRleHQ+OjppdGVy
YXRvciBpdGVyID0gbV9hbmNlc3RvcnMuYmVnaW4oKTsgaXRlciA8IG1fYW5jZXN0b3JzLmVuZCgp
OyArK2l0ZXIpCisgICAgICAgIHJlbGF0ZWRUYXJnZXRNYXAuYWRkKGl0ZXItPm5vZGUoKS0+dHJl
ZVNjb3BlKCksIDApOwogCi0gICAgcmV0dXJuIGFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhyZWxh
dGVkVGFyZ2V0LnJlbGVhc2UoKSwgcmVsYXRlZFRhcmdldEFuY2VzdG9ycyk7CisgICAgZm9yIChW
ZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdp
bigpOyBpdGVyIDwgcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5lbmQoKTsgKytpdGVyKSB7CisgICAg
ICAgIGlmICghcmVsYXRlZFRhcmdldE1hcC5jb250YWlucygoKml0ZXIpLT50cmVlU2NvcGUoKSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJlbGF0ZWRUYXJnZXRNYXAuZ2V0
KCgqaXRlciktPnRyZWVTY29wZSgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBy
ZWxhdGVkVGFyZ2V0TWFwLnNldCgoKml0ZXIpLT50cmVlU2NvcGUoKSwgKml0ZXIpOworICAgICAg
ICAvLyByZWxhdGVkVGFyZ2V0TWFwLmFkZCgoKml0ZXIpLT50cmVlU2NvcGUoKSwgKml0ZXIpOwor
ICAgIH0KKworICAgIGZvciAoVmVjdG9yPEV2ZW50Q29udGV4dD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2FuY2VzdG9ycy5iZWdpbigpOyBpdGVyIDwgbV9hbmNlc3RvcnMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBpdGVyLT5zZXRSZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJnZXRNYXAuZ2V0KGl0ZXIt
Pm5vZGUoKS0+dHJlZVNjb3BlKCkpKTsKKyAgICAgICAgaWYgKGl0ZXItPnRhcmdldCgpID09IGl0
ZXItPnJlbGF0ZWRUYXJnZXQoKSkgeworICAgICAgICAgICAgLy8gRXZlbnQgc2hvdWxkIGJlIHN0
b3BwZWQgaGVyZS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaHJpbmsgaXQKKyAgICAgICAgICAg
IC8vIG1fYW5jZXN0b3JzLnNocmluayhpdGVyIC0gbV9hbmNlc3RvcnMuYmVnaW4oKSk7CisgICAg
ICAgICAgICAvLyBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0KIAogRXZlbnREaXNwYXRjaGVy
OjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKQEAgLTIzMiwzMCArMTgxLDQwIEBAIEV2ZW50
RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCiAKIHZvaWQgRXZlbnREaXNw
YXRjaGVyOjplbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFt
X25vZGUtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG1fYW5jZXN0
b3JzSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEluY2x1ZGVzIHRhcmdl
dCBpdHNlbGYuCisgICAgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyIGFuY2VzdG9yV2Fsa2VyKG1f
bm9kZS5nZXQoKSk7CisgICAgRXZlbnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0ID0gZXZlbnRUYXJn
ZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpOworICAgIG1f
YW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQobV9ub2RlLmdldCgpLCBvcmlnaW5hbFRhcmdl
dCwgb3JpZ2luYWxUYXJnZXQpKTsKICAgICBtX2FuY2VzdG9yc0luaXRpYWxpemVkID0gdHJ1ZTsK
IAotICAgIE5vZGUqIGFuY2VzdG9yID0gbV9ub2RlLmdldCgpOwotICAgIEV2ZW50VGFyZ2V0KiB0
YXJnZXQgPSBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3Rvcik7Cisg
ICAgaWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPEV2ZW50VGFyZ2V0Kj4gdGFyZ2V0U3RhY2s7CisgICAgdGFyZ2V0U3RhY2suYXBwZW5kKG9y
aWdpbmFsVGFyZ2V0KTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAoYW5jZXN0b3It
PmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhh
dmlvcihldmVudCwgYW5jZXN0b3IpID09IFN0YXlJbnNpZGVTaGFkb3dET00pCisgICAgICAgIGlm
IChhbmNlc3RvcldhbGtlci5nZXQoKS0+aXNTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgIGlm
IChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKGV2ZW50LCBhbmNlc3RvcldhbGtlci5nZXQoKSkg
PT0gU3RheUluc2lkZVNoYWRvd0RPTSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5zaGFkb3dIb3N0KCk7Ci0gICAgICAgICAgICBpZiAo
IW1fbm9kZS0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gYW5jZXN0
b3I7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFy
ZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotCi0gICAgICAgIGlmICghYW5jZXN0b3IpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29u
dGV4dChhbmNlc3RvciwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0
b3IpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgIGFuY2VzdG9yV2Fsa2VyLnBhcmVudEluY2x1ZGlu
Z0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpOworICAgICAgICAgICAgaWYgKCFhbmNlc3Rv
cldhbGtlci5nZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAo
IW1fbm9kZS0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5y
ZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFN0YWNrLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBwZW5kKGFuY2VzdG9yV2Fsa2VyLmdl
dCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFuY2Vz
dG9yV2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpOwor
ICAgICAgICAgICAgaWYgKCFhbmNlc3RvcldhbGtlci5nZXQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBpZiAoaXNJbnNlcnRpb25Qb2ludChhbmNlc3RvcldhbGtlci5n
ZXQoKSkgJiYgdG9JbnNlcnRpb25Qb2ludChhbmNlc3RvcldhbGtlci5nZXQoKSktPmlzQWN0aXZl
KCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBwZW5kKGFuY2VzdG9yV2Fsa2VyLmdl
dCgpKTsKKyAgICAgICAgfQorICAgICAgICBtX2FuY2VzdG9ycy5hcHBlbmQoRXZlbnRDb250ZXh0
KGFuY2VzdG9yV2Fsa2VyLmdldCgpLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxl
cyhhbmNlc3RvcldhbGtlci5nZXQoKSksIGV4aXN0c0luU2FtZVNjb3BlKGFuY2VzdG9yV2Fsa2Vy
LmdldCgpLCBvcmlnaW5hbFRhcmdldC0+dG9Ob2RlKCkpID8gb3JpZ2luYWxUYXJnZXQgOnRhcmdl
dFN0YWNrLmxhc3QoKSkpOwogICAgIH0KIH0KIApAQCAtMjY5LDYgKzIyOCw3IEBAIGJvb2wgRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAg
ICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsK
ICAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudC5nZXQoKSk7CisgICAgQVNTRVJUKCFtX2Fu
Y2VzdG9ycy5pc0VtcHR5KCkpOwogCiAgICAgV2luZG93RXZlbnRDb250ZXh0IHdpbmRvd0NvbnRl
eHQoZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkpOwogCkBAIC0y
ODUsOCArMjQ1LDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgaWYgKHdpbmRvd0NvbnRleHQuaGFuZGxlTG9jYWxFdmVu
dHMoZXZlbnQuZ2V0KCkpICYmIGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAg
Z290byBkb25lRGlzcGF0Y2hpbmc7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gbV9hbmNlc3RvcnMu
c2l6ZSgpOyBpOyAtLWkpIHsKLSAgICAgICAgY29uc3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRl
eHQgPSBtX2FuY2VzdG9yc1tpLTFdOworICAgIGZvciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9ycy5z
aXplKCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZl
bnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07CiAgICAgICAgIGlmIChldmVudENvbnRleHQuY3Vy
cmVudFRhcmdldFNhbWVBc1RhcmdldCgpKSB7CiAgICAgICAgICAgICBpZiAoZXZlbnQtPmJ1YmJs
ZXMoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMwMSw3ICsyNjEsOCBAQCBib29s
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkK
ICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKICAgICBldmVudC0+
c2V0VGFyZ2V0KG9yaWdpbmFsVGFyZ2V0LmdldCgpKTsKICAgICBldmVudC0+c2V0Q3VycmVudFRh
cmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsK
LSAgICBtX25vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKKyAgICBtX2FuY2Vz
dG9yc1swXS5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CisgICAgLy8gbV9ub2RlLT5o
YW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CiAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlv
blN0b3BwZWQoKSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKQEAgLTMxMCw3ICsy
NzEsNyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5H
X1BIQVNFKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEV2ZW50Q29u
dGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07CiAgICAgICAgICAgICBpZiAoZXZl
bnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkKICAgICAgICAgICAgICAgICBl
dmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKQEAgLTM0NCw3ICszMDUsNyBA
QCBkb25lRGlzcGF0Y2hpbmc6CiAgICAgICAgIC8vIHNhbWUgb3JkZXIgYXMgdGhlIGJ1YmJsaW5n
IHBoYXNlLgogICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkgewogICAgICAgICAgICAgc2l6
ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBzaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCgh
ZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5k
ZWZhdWx0SGFuZGxlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlz
cGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDg1
YWVmYzQ5MzA0M2Q1MTdlYzk3NzM0ZTYyMThhYWQ4MWQxNzkwNjcuLjUzOTc1MTE1MGM1MjFlMzFm
MmJmYTM5MzZkMTNjMjhmNThlNDNlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVy
LmgKQEAgLTU0LDEzICs1NCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hT
aW11bGF0ZWRDbGljayhOb2RlKiwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBi
b29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spOwogCiAgICAgYm9vbCBk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiBhZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4p
OworICAgIHZvaWQgYWRqdXN0QnlSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVu
dFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCk7CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIEV2ZW50RGlzcGF0Y2hlcihOb2RlKik7CiAKLSAgICBQYXNzUmVmUHRyPEV2
ZW50VGFyZ2V0PiBhZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxh
dGVkVGFyZ2V0LCBjb25zdCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwog
ICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50
KiwgTm9kZSogc2hhZG93Um9vdCk7CiAgICAgdm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVu
dCopOwogICAgIGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAKaW5kZXggYzM2ODljNmRkNDYzYWVlMDU2Mjg4MTcyZTI1NGRjM2Vj
ZmIyNWQwYi4uYTE5ZDhhMjFkNWIzYjMxZDY1OTlmYmY5NTA3YjQ2NjQ1NzM2NzljYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAtMjAxLDggKzIwMSw4IEBAIGJvb2wgTW91c2VFdmVu
dERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRj
aGVyKSBjb25zCiAgICAgaWYgKGV2ZW50KCktPnR5cGUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gU2hvdWxkbid0IGhhcHBlbi4KIAotICAgIFJlZlB0cjxFdmVudFRhcmdl
dD4gcmVsYXRlZFRhcmdldCA9IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQo
KSwgZXZlbnQoKS0+cmVsYXRlZFRhcmdldCgpKTsKLSAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFy
Z2V0KHJlbGF0ZWRUYXJnZXQpOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZl
bnQoKS0+cmVsYXRlZFRhcmdldCgpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRh
cmdldChldmVudCgpLCByZWxhdGVkVGFyZ2V0KTsKIAogICAgIGRpc3BhdGNoZXItPmRpc3BhdGNo
RXZlbnQoZXZlbnQoKSk7CiAgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBldmVudCgpLT5kZWZhdWx0
SGFuZGxlZCgpIHx8IGV2ZW50KCktPmRlZmF1bHRQcmV2ZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50
LmNwcAppbmRleCBmZjNmZjRhZmNmOWIyMTIxMWI3YjUzMWZhZjU0N2QxM2VmOGZkNTY5Li43MWIx
ZGI3ZGJkYjlkZDhlOTkyYjUzMmM5MGMyOWM0OTcxNTgxMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vVUlFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQu
Y3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgRm9jdXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Rm9j
dXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPEV2ZW50PiBldmUKIAogYm9vbCBG
b2N1c0luRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hl
ciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFy
Z2V0KGV2ZW50KCksIG1fb2xkRm9jdXNlZE5vZGUpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5
UmVsYXRlZFRhcmdldChldmVudCgpLCBtX29sZEZvY3VzZWROb2RlKTsKICAgICByZXR1cm4gRXZl
bnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC0x
NDAsNyArMTQwLDcgQEAgRm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3VzT3V0RXZl
bnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8RXZlbnQ+IGUKIAogYm9vbCBGb2N1c091dEV2
ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3Bh
dGNoZXIpIGNvbnN0CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVu
dCgpLCBtX25ld0ZvY3VzZWROb2RlKTsKKyAgICBkaXNwYXRjaGVyLT5hZGp1c3RCeVJlbGF0ZWRU
YXJnZXQoZXZlbnQoKSwgbV9uZXdGb2N1c2VkTm9kZSk7CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0
Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChkaXNwYXRjaGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFiZmRk
ZmNjYmM0YzVlNDFhODY2NWY1YzQ5NTMzMmFjYTU0MTk1YWUuLjk3YjgyZDgyYTBlMGRhYTVkZTNi
NjQwZDE2MzZlZjNmY2ZhNmM5MjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNS0wNyAg
SGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRXZlbnQgZGlzcGF0
Y2hpbmcgc2hvdWxkIHVzZSB0aGUgY29tcG9zZWQgc2hhZG93IERPTSB0cmVlIHRyZWUgaW5zdGVh
ZCBvZiBvcmRpbmFsIERPTSB0cmVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdp
dGgtbm9kZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9u
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnkt
ZXZlbnRzLmh0bWw6CisKIDIwMTItMDUtMDggIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBTdXBwcmVzcyBmYWlsaW5nIHRlc3Qgd2hpbGUgdGhlIGZpeCBpcyBiZWlu
ZyB3b3JrZWQgb3V0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3No
YWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRo
LW5vZGUtZGlzdHJpYnV0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDQ2MTJiMDMxZjk2
MzFlNTdkMDdjZGJjNjE3YjI4ZGEwOGM2ZTBmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3Ry
aWJ1dGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMjggQEAKK1Rlc3RzIHRvIGVuc3VyZSB0
aGF0IHNoYWRvdyBET00gYm91bmRhcnkgaXMgbm90IGNyb3NzZWQgZHVyaW5nIGV2ZW50IHByb3Bh
Z2F0aW9uLiBDYW4gb25seSBydW4gd2l0aGluIERSVC4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK0RJVgkgaWQ9c2FuZGJveAorCURJVgkgaWQ9dG9wCisJCURJVgkgaWQ9c2hhZG93
LWhvc3QKKwkJCURJVgkgaWQ9ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQKKwkJCURJVgkgaWQ9c2hh
ZG93LXJvb3QtY2hpbGQKKwkJREVUQUlMUwkgaWQ9ZGV0YWlscworCQkJU1VNTUFSWQkgaWQ9c3Vt
bWFyeQorCQkJCURJVgkKKworCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRvIHNo
YWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAgQHNoYWRvdy1o
b3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEB0
b3AgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBtb3Vz
ZW92ZXIKKyAgICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxk
KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFk
b3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LWhvc3Qg
KHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAo
dGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisKK01vdmluZyBt
b3VzZSBmcm9tIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkIHRvIHNoYWRvdy1ob3N0CisK
KyAgbW91c2VvdXQKKyAgICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290
LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0
OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93
LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAg
QHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1v
dXNlb3ZlcgorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVk
OiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6
IHNoYWRvdy1ob3N0KQorCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRvIGRpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJn
ZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisgICAg
IEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCkKKworICBtb3VzZW92ZXIKKyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJn
ZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAg
IEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAg
QHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAg
ICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRl
ZDogc2hhZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hp
bGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBkaXN0cmli
dXRlZC1saWdodC1jaGlsZCB0byBzaGFkb3ctaG9zdAorCisgIG1vdXNlb3V0CisgICAgIEBkaXN0
cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJl
bGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50KSAocmVs
YXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250ZW50KSAo
cmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0cmli
dXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJn
ZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKKyAg
bW91c2VvdmVyCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0
ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1o
b3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKworTW92aW5nIG1vdXNl
IGZyb20gZGV0YWlscyB0byBzdW1tYXJ5CisKKyAgbW91c2VvdXQKKyAgICAgQGRldGFpbHMgKHRh
cmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisgICAgIEB0b3AgKHRhcmdldDogZGV0
YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisKKyAgbW91c2VvdmVyCisgICAgIEBzdW1tYXJ5ICh0
YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorICAgICBAZGV0YWlscyAodGFyZ2V0
OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKyAgICAgQHRvcCAodGFyZ2V0OiBzdW1tYXJ5
KSAocmVsYXRlZDogZGV0YWlscykKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzdW1tYXJ5IHRvIGRl
dGFpbHMKKworICBtb3VzZW91dAorICAgICBAc3VtbWFyeSAodGFyZ2V0OiBzdW1tYXJ5KSAocmVs
YXRlZDogZGV0YWlscykKKyAgICAgQGRldGFpbHMgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6
IGRldGFpbHMpCisgICAgIEB0b3AgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMp
CisKKyAgbW91c2VvdmVyCisgICAgIEBkZXRhaWxzICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVk
OiBzdW1tYXJ5KQorICAgICBAdG9wICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5
KQorCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkIHRv
IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAgQHNoYWRvdy1yb290
LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogY29udGVudCkKKyAg
ICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogY29u
dGVudCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDog
ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisgICAgIEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3Qp
IChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKworICBtb3VzZW92ZXIKKyAgICAg
QGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQp
IChyZWxhdGVkOiBzaGFkb3ctcm9vdC1jaGlsZCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6
IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctcm9vdC1jaGlsZCkKKyAgICAgQHNoYWRvdy1ob3N0
ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3Qp
CisgICAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBz
aGFkb3ctaG9zdCkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBkaXN0cmlidXRlZC1saWdodC1jaGls
ZCB0byBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZAorCisgIG1vdXNlb3V0CisgICAgIEBk
aXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkg
KHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50KSAo
cmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBj
b250ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ctaG9zdCAo
dGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQor
ICAgICBAdG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hh
ZG93LWhvc3QpCisKKyAgbW91c2VvdmVyCisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0
OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctcm9v
dCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBz
aGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQpCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2Rl
LWRpc3RyaWJ1dGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlY2FkNGJkNTliMmRkN2UwOGM2ZmQzZTcz
YTNiODk2ZDljMzVkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLmh0bWwK
QEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9zaGFkb3ctZG9tLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJzYW5kYm94Ij48L2Rpdj4K
KzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0
byBlbnN1cmUgdGhhdCBzaGFkb3cgRE9NIGJvdW5kYXJ5IGlzIG5vdCBjcm9zc2VkIGR1cmluZyBl
dmVudCBwcm9wYWdhdGlvbi4gQ2FuIG9ubHkgcnVuIHdpdGhpbiBEUlQuIik7CisKKy8vIEZJWE1F
OiBNYWtlIGEgc2VwYXJhdGUgdXRpbGl0eSBqcyBmaWxlIGFuZCBzaGFyZSBpdC4KK2Z1bmN0aW9u
IG1vdmVNb3VzZU92ZXIoZWxlbWVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlciB8
fCAhd2luZG93LmludGVybmFscykKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIGRlZmF1bHRQ
YWRkaW5nU2l6ZSA9IDIwOworICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVu
dC5vZmZzZXRXaWR0aCAvIDI7CisgICAgdmFyIHk7CisgICAgaWYgKGVsZW1lbnQuaGFzQ2hpbGRO
b2RlcygpIHx8IHdpbmRvdy5pbnRlcm5hbHMuc2hhZG93Um9vdChlbGVtZW50KSkKKyAgICAgICAg
eSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZGVmYXVsdFBhZGRpbmdTaXplOworICAgIGVsc2UKKyAg
ICAgICAgeSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworfQorCit2YXIgZXZlbnRSZWNvcmRz
ID0ge307CisKK2Z1bmN0aW9uIGNsZWFyRXZlbnRSZWNvcmRzKCkKK3sKKyAgICBldmVudFJlY29y
ZHMgPSB7fTsKK30KKworZnVuY3Rpb24gZGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKK3sKKyAg
ICB2YXIgZXZlbnRzID0gZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV07CisgICAgaWYgKCFldmVudHMp
CisgICAgICAgIHJldHVybiBbXTsKKyAgICByZXR1cm4gZXZlbnRzOworfQorCitmdW5jdGlvbiBy
ZWNvcmRFdmVudChldmVudCkKK3sKKyAgICB2YXIgZXZlbnRUeXBlID0gZXZlbnQudHlwZQorICAg
IGlmICghZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0pIHsKKyAgICAgICAgZXZlbnRSZWNvcmRzW2V2
ZW50VHlwZV0gPSBbXQorICAgIH0KKyAgICB2YXIgZXZlbnRTdHJpbmcgPSAnJzsKKyAgICBpZiAo
ZXZlbnQuY3VycmVudFRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyBAJyArIGV2ZW50
LmN1cnJlbnRUYXJnZXQuaWQ7CisgICAgaWYgKGV2ZW50LnRhcmdldCkKKyAgICAgICAgZXZlbnRT
dHJpbmcgKz0gJyAodGFyZ2V0OiAnICsgZXZlbnQudGFyZ2V0LmlkICsgJyknOworICAgIGlmIChl
dmVudC5yZWxhdGVkVGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAnIChyZWxhdGVkOiAn
ICsgZXZlbnQucmVsYXRlZFRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQuZXZlbnRQaGFz
ZSA9PSAxKQorICAgICAgICBldmVudFN0cmluZyArPSAnKGNhcHR1cmluZyBwaGFzZSknOworICAg
IGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQuY3VycmVudFRhcmdldCAmJiBldmVudC50YXJnZXQu
aWQgPT0gZXZlbnQuY3VycmVudFRhcmdldC5pZCkKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LmV2
ZW50UGhhc2UiLCAiMiIsIHRydWUpOworICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdLnB1c2go
ZXZlbnRTdHJpbmcpOworfQorCitmdW5jdGlvbiBkdW1wTm9kZShub2RlKQoreworICAgIHZhciBv
dXRwdXQgPSBub2RlLm5vZGVOYW1lICsgIlx0IjsKKyAgICBpZiAobm9kZS5pZCkKKyAgICAgICAg
b3V0cHV0ICs9ICcgaWQ9JyArIG5vZGUuaWQ7CisgICAgaWYgKG5vZGUuY2xhc3NOYW1lKQorICAg
ICAgICBvdXRwdXQgKz0gJyBjbGFzcz0nICsgbm9kZS5jbGFzc05hbWU7CisgICAgcmV0dXJuIG91
dHB1dDsKK30KKworZnVuY3Rpb24gZHVtcENvbXBvc2VkU2hhZG93VHJlZShub2RlLCBpbmRlbnQp
Cit7CisgICAgaW5kZW50ID0gaW5kZW50IHx8ICIiOworICAgIHZhciBvdXRwdXQgPSBpbmRlbnQg
KyBkdW1wTm9kZShub2RlKSArICJcbiI7CisgICAgdmFyIGNoaWxkOworICAgIGZvciAoY2hpbGQg
PSBpbnRlcm5hbHMuZmlyc3RDaGlsZEJ5V2Fsa2VyKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBpbnRl
cm5hbHMubmV4dFNpYmxpbmdCeVdhbGtlcihjaGlsZCkpCisgICAgICAgICBvdXRwdXQgKz0gZHVt
cENvbXBvc2VkU2hhZG93VHJlZShjaGlsZCwgaW5kZW50ICsgIlx0Iik7CisgICAgcmV0dXJuIG91
dHB1dDsKK30KKworZnVuY3Rpb24gcHJlcGFyZURPTVRyZWUocGFyZW50KQoreworICAgIHBhcmVu
dC5hcHBlbmRDaGlsZCgKKyAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ3RvcCcsICdz
dHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCd9LAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9N
KCdkaXYnLCB7J2lkJzogJ3NoYWRvdy1ob3N0JywgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4
JywgJ3RpdGxlJzogJ2R1bXAnfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVT
aGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Nv
bnRlbnQnLCB7J2lkJzogJ2NvbnRlbnQnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nl
bGVjdCc6ICcjZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLH0pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnc2hhZG93LXJvb3QtY2hpbGQn
LCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnfSkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcs
ICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdkdW1wJ30pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdub24tZGlzdHJp
YnV0ZWQtbGlnaHQtY2hpbGQnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnfSkpLAorICAg
ICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkZXRhaWxzJywgeydpZCc6ICdkZXRhaWxzJywgJ29w
ZW4nOiB0cnVlLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnc3VtbWFyeScsIHsnaWQn
OiAnc3VtbWFyeScsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdkdW1w
J30pKSkpOworCisgICAgZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCdzaGFkb3ctaG9zdC8nKS5p
ZCA9ICdzaGFkb3ctcm9vdCc7CisgICAgdmFyIGlkcyA9IFsndG9wJywgJ3NoYWRvdy1ob3N0Jywg
J3NoYWRvdy1ob3N0LycsICdzaGFkb3ctaG9zdC9jb250ZW50JywgJ3NoYWRvdy1ob3N0L3NoYWRv
dy1yb290LWNoaWxkJywKKyAgICAgICAgICAgICAgICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcs
ICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLAorICAgICAgICAgICAgICAgJ2RldGFpbHMn
LCAnc3VtbWFyeSddOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgIHZhciBlbGVtZW50ID0gZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKGlkc1tpXSk7
CisgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgcmVjb3JkRXZl
bnQsIGZhbHNlKTsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcs
IHJlY29yZEV2ZW50LCBmYWxzZSk7CisgICAgfQorICAgIAorICAgIHBhcmVudC5vZmZzZXRMZWZ0
OworICAgIGRlYnVnKGR1bXBDb21wb3NlZFNoYWRvd1RyZWUocGFyZW50KSk7Cit9CisKK2Z1bmN0
aW9uIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKK3sKKyAgICBkZWJ1ZygnXG4gICcg
KyBldmVudFR5cGUpOworICAgIHZhciBldmVudHMgPSBkaXNwYXRjaGVkRXZlbnQoZXZlbnRUeXBl
KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAg
ZGVidWcoJyAgICAnICsgZXZlbnRzW2ldKQorfQorCitmdW5jdGlvbiBtb3ZlTW91c2Uob2xkRWxl
bWVudElkLCBuZXdFbGVtZW50SWQpCit7CisgICAgZGVidWcoJ1xuXG4nICsgJ01vdmluZyBtb3Vz
ZSBmcm9tICcgKyBvbGRFbGVtZW50SWQgKyAnIHRvICcgKyBuZXdFbGVtZW50SWQpOworICAgIG1v
dmVNb3VzZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG9sZEVsZW1lbnRJZCkpOworICAg
IGNsZWFyRXZlbnRSZWNvcmRzKCk7CisgICAgbW92ZU1vdXNlT3ZlcihnZXROb2RlSW5TaGFkb3dU
cmVlU3RhY2sobmV3RWxlbWVudElkKSk7CisKKyAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91
c2VvdXQnKTsKKyAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91c2VvdmVyJyk7Cit9CisKK2Z1
bmN0aW9uIHRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBwcmVwYXJlRE9N
VHJlZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FuZGJveCcpKTsKKworICAgIG1vdmVNb3Vz
ZSgnc2hhZG93LWhvc3QnLCAnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnKTsKKyAgICBt
b3ZlTW91c2UoJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJywgJ3NoYWRvdy1ob3N0Jyk7
CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0JywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
Jyk7CisgICAgbW92ZU1vdXNlKCdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdzaGFkb3ctaG9z
dCcpOworCisgICAgbW92ZU1vdXNlKCdkZXRhaWxzJywgJ3N1bW1hcnknKTsKKyAgICBtb3ZlTW91
c2UoJ3N1bW1hcnknLCAnZGV0YWlscycpOworCisgICAgbW92ZU1vdXNlKCdzaGFkb3ctaG9zdC9z
aGFkb3ctcm9vdC1jaGlsZCcsICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIG1vdmVN
b3VzZSgnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3Qt
Y2hpbGQnKTsKKworICAgIC8vIFRoZXNlIGNhc2VzIHNob3VsZCBub3QgaGFwcGVuIHNpbmNlIG5v
bi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCBpcyBub3QgcmVuZGVyZWQuCisgICAgLy8gRklYTUU6
IFJlYWxseT8KKyAgICAvLyBtb3ZlTW91c2UoJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ25v
bi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIC8vIG1vdmVNb3VzZSgnbm9uLWRpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgLy8g
bW92ZU1vdXNlKCdzaGFkb3ctaG9zdCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnKTsK
KyAgICAvLyBtb3ZlTW91c2UoJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdzaGFkb3ct
aG9zdCcpOworfQorCit0ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZl
bnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2
ZW50cy5odG1sCmluZGV4IGVjMmUyZjgwOGFkYTBhNjA3NTRhNDljODBiYzk5M2E4NWEyNWMxZDku
LmEwYzJjOTE4ZDQ3NGM4MjczMWZiOTBjZTVjYjc1MWQxMDNmNDk5ZTQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMuaHRt
bApAQCAtMTQ2LDcgKzE0Niw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgICAnVGFy
Z2V0IGlzIGFuIGFuY2VzdG9yIG9mIHJlbGF0ZWRUYXJnZXQuJyk7CiAgICAgc2hvdWxkQmUoJ2Rp
c3BhdGNoZWRFdmVudCgibW91c2VvdmVyIiknLCAnWyJkaXZFKDwtc2hhZG93RikoQGRpdkUpIl0n
KTsKICAgICBzaG91bGRCZSgnZGlzcGF0Y2hlZEV2ZW50KCJtb3VzZW91dCIpJywgJ1siZGl2SSg8
LWRpdkUpKEBkaXZJKSIsICJzaGFkb3dHKDwtZGl2RSkoQHNoYWRvd0cpIiwgInNoYWRvd0YoPC1k
aXZFKShAc2hhZG93RikiLCAic2hhZG93Rig8LWRpdkUpKEBkaXZFKSJdJyk7Ci0KKyAgIAogICAg
IG1vdmVNb3VzZSgnc2hhZG93RC9zaGFkb3dGL3NoYWRvd0cvZGl2SScsICdzaGFkb3dEL3NoYWRv
d0YnLAogICAgICAgICAgICAgICAnVGFyZ2V0IChzaGFkb3cgaG9zdCkgaXMgYW4gYW5jZXN0b3Ig
b2YgcmVsYXRlZFRhcmdldC4nKTsKICAgICBzaG91bGRCZSgnZGlzcGF0Y2hlZEV2ZW50KCJtb3Vz
ZW92ZXIiKScsICdbXScpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141138</attachid>
            <date>2012-05-10 04:06:38 -0700</date>
            <delta_ts>2012-05-10 04:58:47 -0700</delta_ts>
            <desc>WIP. Now event dispatching is stopped where target == relatedTarget.</desc>
            <filename>bug-78586-20120510200636.patch</filename>
            <type>text/plain</type>
            <size>35287</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc2YjA3YzE4Y2JlMDM4
YzIzMDFkOGMxYzhiNzc0ZWExYjQyODc3ZS4uMjhmNTJmMzU2ZGQ3NTBkNzI0MzE4OGVlMjAzNjhm
NDk3ZGE5YTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgdHJlZSBpbnN0ZWFkIG9m
IG9yZGluYWwgRE9NIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdp
dGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OmFkanVzdGVkUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZUFkanVzdGVkUGFyZW50KToKKyAg
ICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg6CisgICAgICAgIChDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyOjpjYW5Dcm9zc1VwcGVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjpjYW5Dcm9zc0xvd2VyQm91bmRhcnkpOgorICAgICAgICAqIGRv
bS9FdmVudENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVu
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dG9Nb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50
cyk6CisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoRXZlbnRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2hvdWxkRGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFNob3Vs
ZERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhp
c3RzSW5TYW1lU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjph
bmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0
Q29tbW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5o
OgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChOb2RlKToKKwog
MjAxMi0wNS0wOCAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIENyYXNoIGR1ZSB0byBvd25pbmcgcmVuZGVyZXIgbm90IHJlbW92ZWQgZnJvbSBjdXN0b20g
c2Nyb2xsYmFyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyLmNwcAppbmRleCA1YTY5MzZjOGMyMjFmZWNhMzNlNzg2Yjg0NDkzYTYxNTI4Y2U4NTUwLi4w
YTU4ZTdlMDkwNDA4NWE1NTZlNzU5MGU5ZmVlNjI1MDE1NjQ4ZGJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcApAQCAtMjAyLDYgKzIwMiwy
OSBAQCB2b2lkIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6cGFyZW50KCkKICAgICBhc3NlcnRQ
b3N0Y29uZGl0aW9uKCk7CiB9CiAKK3ZvaWQgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjpwYXJl
bnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKQoreworICAgIEFTU0VSVCht
X25vZGUpOworICAgIG1fbm9kZSA9IHRyYXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9p
bnRBbmRTaGFkb3dSb290KG1fbm9kZSk7Cit9CisKK05vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdh
bGtlcjo6dHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3Qo
Y29uc3QgTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93
ID0gc2hhZG93T2ZQYXJlbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKEhUTUxDb250ZW50U2VsZWN0
aW9uKiBzZWxlY3Rpb24gPSBzaGFkb3ctPnNlbGVjdGlvbkZvcihub2RlKSkKKyAgICAgICAgICAg
IHJldHVybiBzZWxlY3Rpb24tPmluc2VydGlvblBvaW50KCk7CisgICAgfQorICAgIGlmIChub2Rl
LT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICBjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290
ID0gdG9TaGFkb3dSb290KG5vZGUpOworICAgICAgICBpZiAoc2hhZG93Um9vdC0+aXNZb3VuZ2Vz
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKTsKKyAgICAgICAgSW5z
ZXJ0aW9uUG9pbnQqIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQgPSBzaGFkb3dSb290LT5hc3NpZ25l
ZFRvKCk7CisgICAgICAgIEFTU0VSVChhc3NpZ25lZEluc2VydGlvblBvaW50KTsKKyAgICAgICAg
cmV0dXJuIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQ7CisgICAgfQorICAgIHJldHVybiBub2RlLT5w
YXJlbnROb2RlKCk7Cit9CisKIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVy
c2VQYXJlbnQoY29uc3QgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIWNhbkNyb3NzVXBw
ZXJCb3VuZGFyeSgpICYmIG5vZGUtPmlzU2hhZG93Um9vdCgpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKaW5kZXggOTc2NmMxYTM2NTAxOTAwODhi
OTRkYTJhNDQwYzIwNjI2ZDBkNGE5Mi4uZGEzNGVlZDY2NjdmZmJiNjJlNTY1MTNkZjdlYTc3N2Yw
ZWZkY2M4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJl
ZVdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXIuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmV2aW91c1NpYmxpbmco
KTsKIAogICAgIHZvaWQgcGFyZW50KCk7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpZ25vcmVzIHBv
bGljeS4gQWx3YXlzIGNyb3NzIGFuIHVwcGVyIGJvdW5kYXJ5LgorICAgIHZvaWQgcGFyZW50SW5j
bHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCk7CiAKICAgICB2b2lkIG5leHQoKTsK
ICAgICB2b2lkIHByZXZpb3VzKCk7CkBAIC05OSw2ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIE5v
ZGUqIHRyYXZlcnNlTGFzdENoaWxkKGNvbnN0IE5vZGUqKSBjb25zdDsKICAgICBOb2RlKiB0cmF2
ZXJzZUNoaWxkKGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pIGNvbnN0OwogICAgIE5v
ZGUqIHRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJz
ZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdChjb25zdCBOb2RlKikg
Y29uc3Q7CiAKICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2Rl
Kik7CiAgICAgc3RhdGljIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggMmE1YzUyMTBhYWVmNmI5NDFi
YmRlNWRlMjk1Y2JhMzM5ZDE0MmRmNS4uYTFiNTFjMGU5ZmZhNGU1MDk5YTdjOThkYTUwOWE4Mjdm
MzQyZTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMgKzM5LDIyIEBAIEV2ZW50Q29udGV4dDo6
RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gY3VycmVuCiAgICAgOiBtX25vZGUobm9kZSkKICAgICAsIG1fY3VycmVudFRhcmdldChjdXJy
ZW50VGFyZ2V0KQogICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9yZWxhdGVkVGFyZ2V0
KDApCiB7CiB9CiAKK3N0YXRpYyBNb3VzZUV2ZW50KiB0b01vdXNlRXZlbnQoRXZlbnQqIGV2ZW50
KQoreworICAgIEFTU0VSVChldmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworfQorCiB2b2lkIEV2ZW50Q29u
dGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50KSBjb25zdAogewogICAgIGV2ZW50
LT5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0
KG1fY3VycmVudFRhcmdldC5nZXQoKSk7CisgICAgaWYgKG1fcmVsYXRlZFRhcmdldC5nZXQoKSAm
JiBldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIHRvTW91c2VFdmVudChldmVudCktPnNl
dFJlbGF0ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0LmdldCgpKTsKICAgICBtX25vZGUtPmhhbmRs
ZUxvY2FsRXZlbnRzKGV2ZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCmluZGV4
IDVlNzMxN2Y0NWNmNTQ4NTZhMzI0OWQ4N2RkMjdhMDgxNjYyZDY3NDguLjgwMmEzODE2Y2RhODVj
NTdlYjkyZGI2YjY2MzNhZjk4YmY5M2I2OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgK
QEAgLTQyLDEzICs0MiwxNyBAQCBwdWJsaWM6CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3Q7CiAg
ICAgRXZlbnRUYXJnZXQqIHRhcmdldCgpIGNvbnN0OworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVk
VGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkgY29u
c3Q7CiAgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCopIGNvbnN0OworICAgIHZvaWQg
c2V0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CiAKIHByaXZhdGU6CiAg
ICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fY3VycmVu
dFRhcmdldDsKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fdGFyZ2V0OworICAgIFJlZlB0cjxF
dmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0OworICAgIGJvb2wgbV9zaG91bGREaXNwYXRjaDsK
IH07CiAKIGlubGluZSBOb2RlKiBFdmVudENvbnRleHQ6Om5vZGUoKSBjb25zdApAQCAtNjYsNiAr
NzAsMTYgQEAgaW5saW5lIGJvb2wgRXZlbnRDb250ZXh0OjpjdXJyZW50VGFyZ2V0U2FtZUFzVGFy
Z2V0KCkgY29uc3QKICAgICByZXR1cm4gbV9jdXJyZW50VGFyZ2V0LmdldCgpID09IG1fdGFyZ2V0
LmdldCgpOwogfQogCitpbmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50Q29udGV4dDo6cmVsYXRlZFRh
cmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsKK30KKwor
aW5saW5lIHZvaWQgRXZlbnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpCit7CisgICAgbV9yZWxhdGVkVGFyZ2V0ID0gcmVsYXRl
ZFRhcmdldDsKK30KKwogfQogCiAjZW5kaWYgLy8gRXZlbnRDb250ZXh0X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAKaW5kZXggYjI0NzRjYjk1MWU2Yzkx
NDYzY2Y5ZjMxNTg2ZGVjM2U3MjMwOWYzMy4uMzA1NDZiNDI5ODNhZjBjMTYzMzY4NWNiNTZlMGMw
ZDU1MDk4MmQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hN
ZWRpYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRv
ci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgRm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3Vz
RXZlbnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8Tm9kZT4gb2xkRm9jdXMKIAogYm9vbCBG
b2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIq
IGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdl
dChldmVudCgpLCBtX29sZEZvY3VzZWROb2RlKTsKKyAgICBkaXNwYXRjaGVyLT5hZGp1c3RCeVJl
bGF0ZWRUYXJnZXQoZXZlbnQoKSwgbV9vbGRGb2N1c2VkTm9kZSk7CiAgICAgcmV0dXJuIEV2ZW50
RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChkaXNwYXRjaGVyKTsKIH0KIApAQCAtODEs
NyArODEsNyBAQCBCbHVyRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpCbHVyRXZlbnREaXNwYXRjaE1l
ZGlhdG9yKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Rm9jdXNlZAogCiBib29sIEJsdXJFdmVudERpc3Bh
dGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBj
b25zdAogewotICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgbV9u
ZXdGb2N1c2VkTm9kZSk7CisgICAgZGlzcGF0Y2hlci0+YWRqdXN0QnlSZWxhdGVkVGFyZ2V0KGV2
ZW50KCksIG1fbmV3Rm9jdXNlZE5vZGUpOwogICAgIHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0
b3I6OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5jcHAKaW5kZXggNTg2NmU2MDY4ZDZmNTliYTYyMWQzMjFjNTQ0ZjRmMjgzNjNi
Y2ViOS4uNTgxM2E2YjViN2M4MmQ3MDQ1Y2MxMjYzOWViZTMxMjI5NDNhYmYyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTI2LDEwICsyNiwxMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgogCisjaW5jbHVkZSAi
Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgog
I2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRv
ci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJTY29wZWRF
dmVudFF1ZXVlLmgiCkBAIC00NSw2ICs0OCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3N0YXRpYyBib29sIGV4aXN0c0luU2FtZVNjb3BlKE5vZGUqIG5vZGUxLCBOb2RlKiBub2RlMikK
K3sKKyAgICByZXR1cm4gbm9kZTEtPnRyZWVTY29wZSgpID09IG5vZGUyLT50cmVlU2NvcGUoKTsK
K30KKwogc3RhdGljIEhhc2hTZXQ8Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENs
aWNrcyA9IDA7CiAKIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5v
ZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKQEAgLTEyMSwx
MDQgKzEyOSw0MiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTaGFkb3dIb3N0KE5vZGUqIG5vZGUp
CiAgICAgcmV0dXJuIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmhh
c1NoYWRvd1Jvb3QoKTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gRXZlbnREaXNwYXRj
aGVyOjphZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFy
Z2V0LCBjb25zdCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpCi17Ci0gICAg
VmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2VzdENvbW1vbkJvdW5kYXJ5
ID0gbV9hbmNlc3RvcnMuZW5kKCk7Ci0gICAgLy8gQXNzdW1lIGRpdmVyZ2VudCBib3VuZGFyeSBp
cyB0aGUgcmVsYXRlZFRhcmdldCBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCByZWxhdGVkIHRhcmdl
dCBhbmNlc3RvciBjaGFpbiBkb2VzIG5vdCBjcm9zcyBhbnkgc2hhZG93IERPTSBib3VuZGFyaWVz
KS4KLSAgICBWZWN0b3I8Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBmaXJzdERpdmVyZ2VudEJvdW5k
YXJ5ID0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpOwotCi0gICAgVmVjdG9yPEV2ZW50
Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIHRhcmdldEFuY2VzdG9yID0gbV9hbmNlc3RvcnMuZW5k
KCk7Ci0gICAgLy8gV2FsayBkb3duIGZyb20gdGhlIHRvcCwgbG9va2luZyBmb3IgbG93ZXN0IGNv
bW1vbiBhbmNlc3RvciwgYWxzbyBtb25pdG9yaW5nIHNoYWRvdyBET00gYm91bmRhcmllcy4KLSAg
ICBib29sIGRpdmVyZ2VkID0gZmFsc2U7Ci0gICAgZm9yIChWZWN0b3I8Tm9kZSo+Ojpjb25zdF9p
dGVyYXRvciBpID0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5lbmQoKSAtIDE7IGkgPj0gcmVsYXRl
ZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpOyAtLWkpIHsKLSAgICAgICAgaWYgKGRpdmVyZ2VkKSB7
Ci0gICAgICAgICAgICBpZiAoKCppKS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgICAg
ICBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5ID0gaSArIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh0YXJnZXRBbmNlc3RvciA9PSBtX2FuY2VzdG9ycy5iZWdpbigpKSB7Ci0gICAgICAg
ICAgICBkaXZlcmdlZCA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRhcmdldEFuY2VzdG9yLS07Ci0KLSAgICAgICAgaWYgKCgqaSktPmlzU2hhZG93
Um9vdCgpKQotICAgICAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSB0YXJnZXRBbmNlc3Rv
cjsKLQotICAgICAgICBpZiAoKCppKSAhPSAoKnRhcmdldEFuY2VzdG9yKS5ub2RlKCkpCi0gICAg
ICAgICAgICBkaXZlcmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFkaXZlcmdlZCkgewot
ICAgICAgICAvLyBUaGUgcmVsYXRlZFRhcmdldCBpcyBhbiBhbmNlc3RvciBvciBzaGFkb3dIb3N0
IG9mIHRoZSB0YXJnZXQuCi0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGZpcnN0IGNoZWNr
IG9uY2UgY29udmVyc2lvbiB0byBuZXcgc2hhZG93IERPTSBpcyBjb21wbGV0ZSA8aHR0cDovL3dl
YmtpdC5vcmcvYi80ODY5OD4KLSAgICAgICAgaWYgKG1fbm9kZS0+c2hhZG93SG9zdCgpID09IHJl
bGF0ZWRUYXJnZXQuZ2V0KCkgfHwgaXNTaGFkb3dIb3N0KHJlbGF0ZWRUYXJnZXQuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgcmVsYXRl
ZFRhcmdldENoaWxkID0gdGFyZ2V0QW5jZXN0b3IgLSAxOwotICAgICAgICAgICAgaWYgKHJlbGF0
ZWRUYXJnZXRDaGlsZCA+PSBtX2FuY2VzdG9ycy5iZWdpbigpICYmIHJlbGF0ZWRUYXJnZXRDaGls
ZC0+bm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgICAgICBsb3dlc3RDb21tb25C
b3VuZGFyeSA9IHJlbGF0ZWRUYXJnZXRDaGlsZDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
KCpmaXJzdERpdmVyZ2VudEJvdW5kYXJ5KSA9PSBtX25vZGUuZ2V0KCkpIHsKLSAgICAgICAgLy8g
U2luY2UgYW5jZXN0b3JzIGRvZXMgbm90IGNvbnRhaW4gdGFyZ2V0IGl0c2VsZiwgd2UgbXVzdCBh
Y2NvdW50Ci0gICAgICAgIC8vIGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCB0YXJnZXQgaXMgYSBz
aGFkb3dIb3N0IG9mIHJlbGF0ZWRUYXJnZXQKLSAgICAgICAgLy8gYW5kIHRodXMgc2VydmVzIGFz
IHRoZSBsb3dlc3RDb21tb25Cb3VuZGFyeS4KLSAgICAgICAgLy8gTHVja2lseSwgaW4gdGhpcyBj
YXNlIHRoZSBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5IGlzIHRhcmdldC4KLSAgICAgICAgbG93ZXN0
Q29tbW9uQm91bmRhcnkgPSBtX2FuY2VzdG9ycy5iZWdpbigpOwotICAgICAgICBtX3Nob3VsZFBy
ZXZlbnREaXNwYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGxvd2VzdENvbW1vbkJvdW5k
YXJ5ICE9IG1fYW5jZXN0b3JzLmVuZCgpKSB7Ci0gICAgICAgIC8vIFRyaW0gYW5jZXN0b3JzIHRv
IGxvd2VzdENvbW1vbkJvdW5kYXJ5IHRvIGtlZXAgZXZlbnRzIGluc2lkZSBvZiB0aGUgY29tbW9u
IHNoYWRvdyBET00gc3VidHJlZS4KLSAgICAgICAgbV9hbmNlc3RvcnMuc2hyaW5rKGxvd2VzdENv
bW1vbkJvdW5kYXJ5IC0gbV9hbmNlc3RvcnMuYmVnaW4oKSk7Ci0gICAgfQotICAgIC8vIFNldCBl
dmVudCdzIHJlbGF0ZWQgdGFyZ2V0IHRvIHRoZSBmaXJzdCBlbmNvdW50ZXJlZCBzaGFkb3cgRE9N
IGJvdW5kYXJ5IGluIHRoZSBkaXZlcmdlbnQgc3VidHJlZS4KLSAgICByZXR1cm4gZmlyc3REaXZl
cmdlbnRCb3VuZGFyeSAhPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkgPyAqZmlyc3RE
aXZlcmdlbnRCb3VuZGFyeSA6IHJlbGF0ZWRUYXJnZXQ7Ci19Ci0KLWlubGluZSBzdGF0aWMgYm9v
bCBhbmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMoY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4
dD4mIGFuY2VzdG9ycykKLXsKLSAgICByZXR1cm4gYW5jZXN0b3JzLmlzRW1wdHkoKSB8fCBhbmNl
c3RvcnMuZmlyc3QoKS5ub2RlKCkgPT0gYW5jZXN0b3JzLmxhc3QoKS5ub2RlKCk7Ci19Ci0KLS8v
IEZJWE1FOiBPbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjk2
MyBsYW5kcywgdGhpcyBzaG91bGQKLS8vIGJlIGdyZWF0bHkgaW1wcm92ZWQuIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwMjUuCi1QYXNzUmVmUHRyPEV2ZW50
VGFyZ2V0PiBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50
LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQordm9pZCBFdmVudERp
c3BhdGNoZXI6OmFkanVzdEJ5UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8
RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCiB7CiAgICAgaWYgKCFwcnBSZWxhdGVkVGFy
Z2V0KQotICAgICAgICByZXR1cm4gMDsKLQorICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPE5v
ZGU+IHJlbGF0ZWRUYXJnZXQgPSBwcnBSZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKICAgICBpZiAo
IXJlbGF0ZWRUYXJnZXQpCi0gICAgICAgIHJldHVybiAwOwotCisgICAgICAgIHJldHVybjsKICAg
ICBOb2RlKiB0YXJnZXQgPSBtX25vZGUuZ2V0KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAg
IHJldHVybiBwcnBSZWxhdGVkVGFyZ2V0OworICAgICAgICByZXR1cm47CiAKICAgICBlbnN1cmVF
dmVudEFuY2VzdG9ycyhldmVudCk7CiAKLSAgICAvLyBDYWxjdWxhdGUgZWFybHkgaWYgdGhlIGNv
bW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxlIGJ5IGxvb2tpbmcgYXQKLSAgICAvLyBhbmNl
c3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0aW5nIGhhcyBvY2N1cmVkIChpbmRpY2F0aW5n
IHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgotICAgIC8vIElmIHRoZXJl
IGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0aGUgdGFyZ2V0IGFuZCByZWxhdGVkIHRhcmdl
dCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5LgotICAgIGJvb2wgbm9Db21tb25Cb3VuZGFy
eSA9IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyhtX2FuY2VzdG9ycyk7Ci0KICAgICBW
ZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnM7Ci0gICAgTm9kZSogb3V0ZXJtb3N0
U2hhZG93Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0LmdldCgpOwotICAgIGZvciAoTm9kZSogbiA9
IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBuID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7
Ci0gICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgIG91dGVybW9zdFNo
YWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpOwotICAgICAgICBpZiAoIW5vQ29t
bW9uQm91bmRhcnkpCi0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmFwcGVuZChu
KTsKLSAgICB9CisgICAgZm9yIChDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIgd2Fsa2VyKHJlbGF0
ZWRUYXJnZXQuZ2V0KCkpOyB3YWxrZXIuZ2V0KCk7IHdhbGtlci5wYXJlbnRJbmNsdWRpbmdJbnNl
cnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmVsYXRlZFRhcmdldEFuY2VzdG9y
cy5hcHBlbmQod2Fsa2VyLmdldCgpKTsKIAotICAgIC8vIFNob3J0LWNpcmN1aXQgdGhlIGZhc3Qg
Y2FzZSB3aGVuIHdlIGtub3cgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgYSBjb21tb24g
Ym91bmRhcnkuCi0gICAgaWYgKG5vQ29tbW9uQm91bmRhcnkpCi0gICAgICAgIHJldHVybiBvdXRl
cm1vc3RTaGFkb3dCb3VuZGFyeTsKKyAgICBIYXNoTWFwPFRyZWVTY29wZSosIEV2ZW50VGFyZ2V0
Kj4gcmVsYXRlZFRhcmdldE1hcDsKKyAgICBmb3IgKFZlY3RvcjxFdmVudENvbnRleHQ+OjppdGVy
YXRvciBpdGVyID0gbV9hbmNlc3RvcnMuYmVnaW4oKTsgaXRlciA8IG1fYW5jZXN0b3JzLmVuZCgp
OyArK2l0ZXIpCisgICAgICAgIHJlbGF0ZWRUYXJnZXRNYXAuYWRkKGl0ZXItPm5vZGUoKS0+dHJl
ZVNjb3BlKCksIDApOwogCi0gICAgcmV0dXJuIGFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhyZWxh
dGVkVGFyZ2V0LnJlbGVhc2UoKSwgcmVsYXRlZFRhcmdldEFuY2VzdG9ycyk7CisgICAgZm9yIChW
ZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdp
bigpOyBpdGVyIDwgcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5lbmQoKTsgKytpdGVyKSB7CisgICAg
ICAgIEhhc2hNYXA8VHJlZVNjb3BlKiwgRXZlbnRUYXJnZXQqPjo6aXRlcmF0b3IgZm91bmQgPSBy
ZWxhdGVkVGFyZ2V0TWFwLmZpbmQoKCppdGVyKS0+dHJlZVNjb3BlKCkpOworICAgICAgICBpZiAo
Zm91bmQgIT0gcmVsYXRlZFRhcmdldE1hcC5lbmQoKSAmJiAhZm91bmQtPnNlY29uZCkKKyAgICAg
ICAgICAgIGZvdW5kLT5zZWNvbmQgPSAqaXRlcjsKKyAgICB9CisKKyAgICBmb3IgKFZlY3RvcjxF
dmVudENvbnRleHQ+OjppdGVyYXRvciBpdGVyID0gbV9hbmNlc3RvcnMuYmVnaW4oKTsgaXRlciA8
IG1fYW5jZXN0b3JzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IFdoYXQgc2hv
dWxkIHdlIGRvIGlmIGlmIHRoZXJlIGlzIG5vIHJlbGF0ZWRUYXJnZXQgaW4gdGhpcyBzY29wZT8K
KyAgICAgICAgaXRlci0+c2V0UmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0TWFwLmdldChpdGVy
LT5ub2RlKCktPnRyZWVTY29wZSgpKSk7CisgICAgICAgIGlmIChpdGVyLT50YXJnZXQoKSA9PSBp
dGVyLT5yZWxhdGVkVGFyZ2V0KCkpIHsKKyAgICAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoaW5n
IHNob3VsZCBiZSBzdG9wcGVkIGhlcmUuCisgICAgICAgICAgICBtX2FuY2VzdG9ycy5zaHJpbmso
aXRlciAtIG1fYW5jZXN0b3JzLmJlZ2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CiB9CiAKIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5v
ZGUpCkBAIC0yMzIsMzAgKzE3OCw0MCBAQCBFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hl
cihOb2RlKiBub2RlKQogCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNlc3Rv
cnMoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghbV9ub2RlLT5pbkRvY3VtZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIGlmIChtX2FuY2VzdG9yc0luaXRpYWxpemVkKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICAvLyBJbmNsdWRlcyB0YXJnZXQgaXRzZWxmLgorICAgIENvbXBvc2VkU2hh
ZG93VHJlZVdhbGtlciBhbmNlc3RvcldhbGtlcihtX25vZGUuZ2V0KCkpOworICAgIEV2ZW50VGFy
Z2V0KiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVz
KGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICBtX2FuY2VzdG9ycy5hcHBlbmQoRXZlbnRDb250
ZXh0KG1fbm9kZS5nZXQoKSwgb3JpZ2luYWxUYXJnZXQsIG9yaWdpbmFsVGFyZ2V0KSk7CiAgICAg
bV9hbmNlc3RvcnNJbml0aWFsaXplZCA9IHRydWU7CiAKLSAgICBOb2RlKiBhbmNlc3RvciA9IG1f
bm9kZS5nZXQoKTsKLSAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0
aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3IpOworICAgIGlmICghbV9ub2RlLT5pbkRvY3VtZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxFdmVudFRhcmdldCo+IHRhcmdldFN0
YWNrOworICAgIHRhcmdldFN0YWNrLmFwcGVuZChvcmlnaW5hbFRhcmdldCk7CiAgICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAg
ICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQsIGFuY2VzdG9yKSA9PSBT
dGF5SW5zaWRlU2hhZG93RE9NKQorICAgICAgICBpZiAoYW5jZXN0b3JXYWxrZXIuZ2V0KCktPmlz
U2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlv
cihldmVudCwgYW5jZXN0b3JXYWxrZXIuZ2V0KCkpID09IFN0YXlJbnNpZGVTaGFkb3dET00pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+
c2hhZG93SG9zdCgpOwotICAgICAgICAgICAgaWYgKCFtX25vZGUtPmlzU1ZHRWxlbWVudCgpKQot
ICAgICAgICAgICAgICAgIHRhcmdldCA9IGFuY2VzdG9yOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUo
KTsKLQotICAgICAgICBpZiAoIWFuY2VzdG9yKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG1fYW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQoYW5jZXN0b3IsIGV2ZW50VGFyZ2V0
UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKSwgdGFyZ2V0KSk7CisgICAgICAgICAg
ICBhbmNlc3RvcldhbGtlci5wYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jv
b3QoKTsKKyAgICAgICAgICAgIGlmICghYW5jZXN0b3JXYWxrZXIuZ2V0KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFtX25vZGUtPmlzU1ZHRWxlbWVudCgpKSB7
CisgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXRTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHRhcmdl
dFN0YWNrLmFwcGVuZChhbmNlc3RvcldhbGtlci5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbmNlc3RvcldhbGtlci5wYXJlbnRJbmNsdWRpbmdJ
bnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKTsKKyAgICAgICAgICAgIGlmICghYW5jZXN0b3JX
YWxrZXIuZ2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGlz
SW5zZXJ0aW9uUG9pbnQoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpICYmIHRvSW5zZXJ0aW9uUG9pbnQo
YW5jZXN0b3JXYWxrZXIuZ2V0KCkpLT5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAgIHRhcmdl
dFN0YWNrLmFwcGVuZChhbmNlc3RvcldhbGtlci5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAg
bV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4dChhbmNlc3RvcldhbGtlci5nZXQoKSwgZXZl
bnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpLCBl
eGlzdHNJblNhbWVTY29wZShhbmNlc3RvcldhbGtlci5nZXQoKSwgb3JpZ2luYWxUYXJnZXQtPnRv
Tm9kZSgpKSA/IG9yaWdpbmFsVGFyZ2V0IDp0YXJnZXRTdGFjay5sYXN0KCkpKTsKICAgICB9CiB9
CiAKQEAgLTI3Niw3ICsyMzIsNyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIAogICAgIC8vIEdpdmUgdGhlIHRhcmdldCBub2Rl
IGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBiZWZvcmUgRE9NIGV2ZW50IGhhbmRsZXJzIGdldCBh
IGNyYWNrLgogICAgIHZvaWQqIGRhdGEgPSBtX25vZGUtPnByZURpc3BhdGNoRXZlbnRIYW5kbGVy
KGV2ZW50LmdldCgpKTsKLSAgICBpZiAobV9zaG91bGRQcmV2ZW50RGlzcGF0Y2ggfHwgZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgIGlmIChtX2FuY2VzdG9ycy5pc0VtcHR5KCkgfHwg
bV9zaG91bGRQcmV2ZW50RGlzcGF0Y2ggfHwgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQog
ICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKIAogICAgIC8vIFRyaWdnZXIgY2FwdHVyaW5n
IGV2ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0aGUgdG9wIGFuZCB3b3JraW5nIG91ciB3YXkg
ZG93bi4KQEAgLTI4NSw4ICsyNDEsOCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBpZiAod2luZG93Q29udGV4dC5oYW5k
bGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSkgJiYgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgp
KQogICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKIAotICAgIGZvciAoc2l6ZV90IGkgPSBt
X2FuY2VzdG9ycy5zaXplKCk7IGk7IC0taSkgewotICAgICAgICBjb25zdCBFdmVudENvbnRleHQm
IGV2ZW50Q29udGV4dCA9IG1fYW5jZXN0b3JzW2ktMV07CisgICAgZm9yIChzaXplX3QgaSA9IG1f
YW5jZXN0b3JzLnNpemUoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgRXZlbnRD
b250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKICAgICAgICAgaWYgKGV2ZW50
Q29udGV4dC5jdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkpIHsKICAgICAgICAgICAgIGlmIChl
dmVudC0+YnViYmxlcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzAxLDcgKzI1
Nyw4IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQogICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwog
ICAgIGV2ZW50LT5zZXRUYXJnZXQob3JpZ2luYWxUYXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50LT5z
ZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9k
ZS5nZXQoKSkpOwotICAgIG1fbm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwor
ICAgIG1fYW5jZXN0b3JzWzBdLmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKKyAgICAv
LyBtX25vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKICAgICBpZiAoZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKIApA
QCAtMzEwLDcgKzI2Nyw3IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVu
dDo6QlVCQkxJTkdfUEhBU0UpOwogCiAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3RvcnMu
c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgY29u
c3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKICAgICAgICAg
ICAgIGlmIChldmVudENvbnRleHQuY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpKQogICAgICAg
ICAgICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwpAQCAtMzQ0
LDcgKzMwMSw3IEBAIGRvbmVEaXNwYXRjaGluZzoKICAgICAgICAgLy8gc2FtZSBvcmRlciBhcyB0
aGUgYnViYmxpbmcgcGhhc2UuCiAgICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKSB7CiAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgICAgIG1fYW5jZXN0b3JzW2ld
Lm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKICAgICAgICAgICAgICAgICBp
ZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVy
LmgKaW5kZXggODVhZWZjNDkzMDQzZDUxN2VjOTc3MzRlNjIxOGFhZDgxZDE3OTA2Ny4uNTM5NzUx
MTUwYzUyMWUzMWYyYmZhMzkzNmQxM2MyOGY1OGU0M2U3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dERpc3BhdGNoZXIuaApAQCAtNTQsMTMgKzU0LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5
aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vayk7CiAK
ICAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIFBhc3NSZWZQ
dHI8RXZlbnRUYXJnZXQ+IGFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2
ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBhZGp1c3RCeVJlbGF0ZWRUYXJnZXQoRXZlbnQqLCBQYXNz
UmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KTsKICAgICBOb2RlKiBub2RlKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRXZlbnREaXNwYXRjaGVyKE5vZGUqKTsKIAotICAgIFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhQYXNzUmVmUHRy
PE5vZGU+IHJlbGF0ZWRUYXJnZXQsIGNvbnN0IFZlY3RvcjxOb2RlKj4gcmVsYXRlZFRhcmdldEFu
Y2VzdG9ycyk7CiAgICAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRldGVybWluZURpc3BhdGNoQmVo
YXZpb3IoRXZlbnQqLCBOb2RlKiBzaGFkb3dSb290KTsKICAgICB2b2lkIGVuc3VyZUV2ZW50QW5j
ZXN0b3JzKEV2ZW50Kik7CiAgICAgY29uc3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAppbmRleCBjMzY4OWM2ZGQ0NjNhZWUwNTYyODgx
NzJlMjU0ZGMzZWNmYjI1ZDBiLi5hMTlkOGEyMWQ1YjNiMzFkNjU5OWZiZjk1MDdiNDY2NDU3MzY3
OWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCkBAIC0yMDEsOCArMjAxLDggQEAgYm9v
bCBNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNo
ZXIqIGRpc3BhdGNoZXIpIGNvbnMKICAgICBpZiAoZXZlbnQoKS0+dHlwZSgpLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTaG91bGRuJ3QgaGFwcGVuLgogCi0gICAgUmVmUHRy
PEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0ID0gZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRh
cmdldChldmVudCgpLCBldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCkpOwotICAgIGV2ZW50KCktPnNl
dFJlbGF0ZWRUYXJnZXQocmVsYXRlZFRhcmdldCk7CisgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRU
YXJnZXQgPSBldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCk7CisgICAgZGlzcGF0Y2hlci0+YWRqdXN0
QnlSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIHJlbGF0ZWRUYXJnZXQpOwogCiAgICAgZGlzcGF0Y2hl
ci0+ZGlzcGF0Y2hFdmVudChldmVudCgpKTsKICAgICBib29sIHN3YWxsb3dFdmVudCA9IGV2ZW50
KCktPmRlZmF1bHRIYW5kbGVkKCkgfHwgZXZlbnQoKS0+ZGVmYXVsdFByZXZlbnRlZCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1VJRXZlbnQuY3BwCmluZGV4IGZmM2ZmNGFmY2Y5YjIxMjExYjdiNTMxZmFmNTQ3ZDEzZWY4
ZmQ1NjkuLjcxYjFkYjdkYmRiOWRkOGU5OTJiNTMyYzkwYzI5YzQ5NzE1ODEyMDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vVUlFdmVudC5jcHAKQEAgLTEyMyw3ICsxMjMsNyBAQCBGb2N1c0luRXZlbnREaXNwYXRjaE1l
ZGlhdG9yOjpGb2N1c0luRXZlbnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZQogCiBib29sIEZvY3VzSW5FdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZl
bnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zdAogewotICAgIGRpc3BhdGNoZXItPmFkanVz
dFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgbV9vbGRGb2N1c2VkTm9kZSk7CisgICAgZGlzcGF0Y2hl
ci0+YWRqdXN0QnlSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIG1fb2xkRm9jdXNlZE5vZGUpOwogICAg
IHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7
CiB9CiAKQEAgLTE0MCw3ICsxNDAsNyBAQCBGb2N1c091dEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6
Rm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxFdmVudD4gZQogCiBib29s
IEZvY3VzT3V0RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0
Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVk
VGFyZ2V0KGV2ZW50KCksIG1fbmV3Rm9jdXNlZE5vZGUpOworICAgIGRpc3BhdGNoZXItPmFkanVz
dEJ5UmVsYXRlZFRhcmdldChldmVudCgpLCBtX25ld0ZvY3VzZWROb2RlKTsKICAgICByZXR1cm4g
RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggMWJmZGRmY2NiYzRjNWU0MWE4NjY1ZjVjNDk1MzMyYWNhNTQxOTVhZS4uOTdiODJkODJh
MGUwZGFhNWRlM2I2NDBkMTYzNmVmM2ZjZmE2YzkyNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDEyLTA1LTA3ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBF
dmVudCBkaXNwYXRjaGluZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUg
dHJlZSBpbnN0ZWFkIG9mIG9yZGluYWwgRE9NIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFy
eS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1k
aXN0cmlidXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRv
dy1ib3VuZGFyeS1ldmVudHMuaHRtbDoKKwogMjAxMi0wNS0wOCAgT2phbiBWYWZhaSAgPG9qYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN1cHByZXNzIGZhaWxpbmcgdGVzdCB3aGlsZSB0aGUg
Zml4IGlzIGJlaW5nIHdvcmtlZCBvdXQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnkt
ZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5
ODlhODIwMTE2MmM0OWUwNDA2MjU5OGJiNzZmNzhjMzNmNjQxNzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRo
LW5vZGUtZGlzdHJpYnV0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyMCBAQAorVGVzdHMg
dG8gZW5zdXJlIHRoYXQgc2hhZG93IERPTSBib3VuZGFyeSBpcyBub3QgY3Jvc3NlZCBkdXJpbmcg
ZXZlbnQgcHJvcGFnYXRpb24uIENhbiBvbmx5IHJ1biB3aXRoaW4gRFJULgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworRElWCSBpZD1zYW5kYm94CisJRElWCSBpZD10b3AKKwkJRElW
CSBpZD1zaGFkb3ctaG9zdAorCQkJRElWCSBpZD1kaXN0cmlidXRlZC1saWdodC1jaGlsZAorCQkJ
RElWCSBpZD1zaGFkb3ctcm9vdC1jaGlsZAorCQlERVRBSUxTCSBpZD1kZXRhaWxzCisJCQlTVU1N
QVJZCSBpZD1zdW1tYXJ5CisJCQkJRElWCQorCisKKworTW92aW5nIG1vdXNlIGZyb20gc2hhZG93
LWhvc3QgdG8gc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQKKworICBtb3VzZW91dAorCisg
IG1vdXNlb3ZlcgorICAgICBAc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3Qt
Y2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6
IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKKworTW92aW5nIG1v
dXNlIGZyb20gc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQgdG8gc2hhZG93LWhvc3QKKwor
ICBtb3VzZW91dAorICAgICBAc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3Qt
Y2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6
IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKKyAgbW91c2VvdmVy
CisKKworTW92aW5nIG1vdXNlIGZyb20gc2hhZG93LWhvc3QgdG8gZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQKKworICBtb3VzZW91dAorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhv
c3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKyAgICAgQHRvcCAodGFyZ2V0
OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorCisgIG1v
dXNlb3ZlcgorICAgICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgKHRhcmdldDogZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQGNvbnRlbnQgKHRh
cmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LXJvb3Qg
KHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LWhv
c3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9z
dCkKKyAgICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6
IHNoYWRvdy1ob3N0KQorCisKK01vdmluZyBtb3VzZSBmcm9tIGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkIHRvIHNoYWRvdy1ob3N0CisKKyAgbW91c2VvdXQKKyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0
LWNoaWxkICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93
LWhvc3QpCisgICAgIEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ct
aG9zdCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFk
b3ctaG9zdCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBtb3VzZW92ZXIKKyAg
ICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQpCisgICAgIEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVk
OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBkZXRhaWxz
IHRvIHN1bW1hcnkKKworICBtb3VzZW91dAorICAgICBAZGV0YWlscyAodGFyZ2V0OiBkZXRhaWxz
KSAocmVsYXRlZDogc3VtbWFyeSkKKyAgICAgQHRvcCAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRl
ZDogc3VtbWFyeSkKKworICBtb3VzZW92ZXIKKyAgICAgQHN1bW1hcnkgKHRhcmdldDogc3VtbWFy
eSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisgICAgIEBkZXRhaWxzICh0YXJnZXQ6IHN1bW1hcnkpIChy
ZWxhdGVkOiBkZXRhaWxzKQorICAgICBAdG9wICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBk
ZXRhaWxzKQorCisKK01vdmluZyBtb3VzZSBmcm9tIHN1bW1hcnkgdG8gZGV0YWlscworCisgIG1v
dXNlb3V0CisgICAgIEBzdW1tYXJ5ICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxz
KQorICAgICBAZGV0YWlscyAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKyAg
ICAgQHRvcCAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKworICBtb3VzZW92
ZXIKKyAgICAgQGRldGFpbHMgKHRhcmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisg
ICAgIEB0b3AgKHRhcmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisKKworTW92aW5n
IG1vdXNlIGZyb20gc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQgdG8gZGlzdHJpYnV0ZWQt
bGlnaHQtY2hpbGQKKworICBtb3VzZW91dAorICAgICBAc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdl
dDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBjb250ZW50KQorICAgICBAc2hhZG93LXJv
b3QgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBjb250ZW50KQorICAgICBA
c2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1s
aWdodC1jaGlsZCkKKyAgICAgQHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRp
c3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorCisgIG1vdXNlb3ZlcgorICAgICBAZGlzdHJpYnV0ZWQt
bGlnaHQtY2hpbGQgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBz
aGFkb3ctaG9zdCkKKyAgICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNo
YWRvdy1yb290LWNoaWxkKQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkgKHJl
bGF0ZWQ6IHNoYWRvdy1yb290LWNoaWxkKQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAo
dGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQor
CisKK01vdmluZyBtb3VzZSBmcm9tIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkIHRvIHNoYWRvdy1o
b3N0L3NoYWRvdy1yb290LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAgQGRpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hh
ZG93LWhvc3QpCisgICAgIEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFk
b3ctcm9vdC1jaGlsZCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxh
dGVkOiBzaGFkb3ctcm9vdC1jaGlsZCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEB0b3AgKHRh
cmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKwor
ICBtb3VzZW92ZXIKKyAgICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290
LWNoaWxkKSAocmVsYXRlZDogY29udGVudCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNo
YWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogY29udGVudCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0
YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisg
ICAgIEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCkKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5k
YXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9u
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWVjYWQ0YmQ1OWIyZGQ3ZTA4YzZmZDNlNzNhM2I4OTZkOWMzNWQx
YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ct
Ym91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbApAQCAtMCwwICsxLDE2
MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3NoYWRvdy1kb20uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9InNhbmRib3giPjwvZGl2PgorPHByZSBpZD0iY29u
c29sZSI+PC9wcmU+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIHRvIGVuc3VyZSB0aGF0
IHNoYWRvdyBET00gYm91bmRhcnkgaXMgbm90IGNyb3NzZWQgZHVyaW5nIGV2ZW50IHByb3BhZ2F0
aW9uLiBDYW4gb25seSBydW4gd2l0aGluIERSVC4iKTsKKworLy8gRklYTUU6IE1ha2UgYSBzZXBh
cmF0ZSB1dGlsaXR5IGpzIGZpbGUgYW5kIHNoYXJlIGl0LgorZnVuY3Rpb24gbW92ZU1vdXNlT3Zl
cihlbGVtZW50KQoreworICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyIHx8ICF3aW5kb3cuaW50
ZXJuYWxzKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgZGVmYXVsdFBhZGRpbmdTaXplID0g
MjA7CisgICAgdmFyIHggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRo
IC8gMjsKKyAgICB2YXIgeTsKKyAgICBpZiAoZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkgfHwgd2lu
ZG93LmludGVybmFscy5zaGFkb3dSb290KGVsZW1lbnQpKQorICAgICAgICB5ID0gZWxlbWVudC5v
ZmZzZXRUb3AgKyBkZWZhdWx0UGFkZGluZ1NpemU7CisgICAgZWxzZQorICAgICAgICB5ID0gZWxl
bWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5k
ZXIubW91c2VNb3ZlVG8oeCwgeSk7Cit9CisKK3ZhciBldmVudFJlY29yZHMgPSB7fTsKKworZnVu
Y3Rpb24gY2xlYXJFdmVudFJlY29yZHMoKQoreworICAgIGV2ZW50UmVjb3JkcyA9IHt9OworfQor
CitmdW5jdGlvbiBkaXNwYXRjaGVkRXZlbnQoZXZlbnRUeXBlKQoreworICAgIHZhciBldmVudHMg
PSBldmVudFJlY29yZHNbZXZlbnRUeXBlXTsKKyAgICBpZiAoIWV2ZW50cykKKyAgICAgICAgcmV0
dXJuIFtdOworICAgIHJldHVybiBldmVudHM7Cit9CisKK2Z1bmN0aW9uIHJlY29yZEV2ZW50KGV2
ZW50KQoreworICAgIHZhciBldmVudFR5cGUgPSBldmVudC50eXBlCisgICAgaWYgKCFldmVudFJl
Y29yZHNbZXZlbnRUeXBlXSkgeworICAgICAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXSA9IFtd
CisgICAgfQorICAgIHZhciBldmVudFN0cmluZyA9ICcnOworICAgIGlmIChldmVudC5jdXJyZW50
VGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAnIEAnICsgZXZlbnQuY3VycmVudFRhcmdl
dC5pZDsKKyAgICBpZiAoZXZlbnQudGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAnICh0
YXJnZXQ6ICcgKyBldmVudC50YXJnZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LnJlbGF0ZWRU
YXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHJlbGF0ZWQ6ICcgKyBldmVudC5yZWxh
dGVkVGFyZ2V0LmlkICsgJyknOworICAgIGlmIChldmVudC5ldmVudFBoYXNlID09IDEpCisgICAg
ICAgIGV2ZW50U3RyaW5nICs9ICcoY2FwdHVyaW5nIHBoYXNlKSc7CisgICAgaWYgKGV2ZW50LnRh
cmdldCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5pZCA9PSBldmVudC5j
dXJyZW50VGFyZ2V0LmlkKQorICAgICAgICBzaG91bGRCZSgiZXZlbnQuZXZlbnRQaGFzZSIsICIy
IiwgdHJ1ZSk7CisgICAgZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0ucHVzaChldmVudFN0cmluZyk7
Cit9CisKK2Z1bmN0aW9uIGR1bXBOb2RlKG5vZGUpCit7CisgICAgdmFyIG91dHB1dCA9IG5vZGUu
bm9kZU5hbWUgKyAiXHQiOworICAgIGlmIChub2RlLmlkKQorICAgICAgICBvdXRwdXQgKz0gJyBp
ZD0nICsgbm9kZS5pZDsKKyAgICBpZiAobm9kZS5jbGFzc05hbWUpCisgICAgICAgIG91dHB1dCAr
PSAnIGNsYXNzPScgKyBub2RlLmNsYXNzTmFtZTsKKyAgICByZXR1cm4gb3V0cHV0OworfQorCitm
dW5jdGlvbiBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKG5vZGUsIGluZGVudCkKK3sKKyAgICBpbmRl
bnQgPSBpbmRlbnQgfHwgIiI7CisgICAgdmFyIG91dHB1dCA9IGluZGVudCArIGR1bXBOb2RlKG5v
ZGUpICsgIlxuIjsKKyAgICB2YXIgY2hpbGQ7CisgICAgZm9yIChjaGlsZCA9IGludGVybmFscy5m
aXJzdENoaWxkQnlXYWxrZXIobm9kZSk7IGNoaWxkOyBjaGlsZCA9IGludGVybmFscy5uZXh0U2li
bGluZ0J5V2Fsa2VyKGNoaWxkKSkKKyAgICAgICAgIG91dHB1dCArPSBkdW1wQ29tcG9zZWRTaGFk
b3dUcmVlKGNoaWxkLCBpbmRlbnQgKyAiXHQiKTsKKyAgICByZXR1cm4gb3V0cHV0OworfQorCitm
dW5jdGlvbiBwcmVwYXJlRE9NVHJlZShwYXJlbnQpCit7CisgICAgcGFyZW50LmFwcGVuZENoaWxk
KAorICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAndG9wJywgJ3N0eWxlJzogJ3BhZGRp
bmctdG9wOiA0MHB4J30sCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQn
OiAnc2hhZG93LWhvc3QnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnLCAndGl0bGUnOiAn
ZHVtcCd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnY29udGVudCcsIHsnaWQn
OiAnY29udGVudCcsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VsZWN0JzogJyNkaXN0
cmlidXRlZC1saWdodC1jaGlsZCcsfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdzaGFkb3ctcm9vdC1jaGlsZCcsICdzdHlsZSc6ICdw
YWRkaW5nLXRvcDogNDBweCd9KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
RE9NKCdkaXYnLCB7J2lkJzogJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ3N0eWxlJzogJ3Bh
ZGRpbmctdG9wOiA0MHB4JywgJ3RpdGxlJzogJ2R1bXAnfSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ25vbi1kaXN0cmlidXRlZC1saWdodC1j
aGlsZCcsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCd9KSksCisgICAgICAgICAgICAgICAg
ICBjcmVhdGVET00oJ2RldGFpbHMnLCB7J2lkJzogJ2RldGFpbHMnLCAnb3Blbic6IHRydWUsICdz
dHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdkdW1wJ30sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdzdW1tYXJ5JywgeydpZCc6ICdzdW1tYXJ5Jywg
J3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4JywgJ3RpdGxlJzogJ2R1bXAnfSkpKSk7CisKKyAg
ICBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2soJ3NoYWRvdy1ob3N0LycpLmlkID0gJ3NoYWRvdy1y
b290JzsKKyAgICB2YXIgaWRzID0gWyd0b3AnLCAnc2hhZG93LWhvc3QnLCAnc2hhZG93LWhvc3Qv
JywgJ3NoYWRvdy1ob3N0L2NvbnRlbnQnLCAnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQn
LAorICAgICAgICAgICAgICAgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ25vbi1kaXN0cmli
dXRlZC1saWdodC1jaGlsZCcsCisgICAgICAgICAgICAgICAnZGV0YWlscycsICdzdW1tYXJ5J107
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFy
IGVsZW1lbnQgPSBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2soaWRzW2ldKTsKKyAgICAgICAgZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCByZWNvcmRFdmVudCwgZmFsc2UpOwor
ICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgcmVjb3JkRXZlbnQs
IGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgcGFyZW50Lm9mZnNldExlZnQ7CisgICAgZGVidWco
ZHVtcENvbXBvc2VkU2hhZG93VHJlZShwYXJlbnQpKTsKK30KKworZnVuY3Rpb24gZGVidWdEaXNw
YXRjaGVkRXZlbnQoZXZlbnRUeXBlKQoreworICAgIGRlYnVnKCdcbiAgJyArIGV2ZW50VHlwZSk7
CisgICAgdmFyIGV2ZW50cyA9IGRpc3BhdGNoZWRFdmVudChldmVudFR5cGUpOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBkZWJ1ZygnICAgICcg
KyBldmVudHNbaV0pCit9CisKK2Z1bmN0aW9uIG1vdmVNb3VzZShvbGRFbGVtZW50SWQsIG5ld0Vs
ZW1lbnRJZCkKK3sKKyAgICBkZWJ1ZygnXG5cbicgKyAnTW92aW5nIG1vdXNlIGZyb20gJyArIG9s
ZEVsZW1lbnRJZCArICcgdG8gJyArIG5ld0VsZW1lbnRJZCk7CisgICAgbW92ZU1vdXNlT3Zlcihn
ZXROb2RlSW5TaGFkb3dUcmVlU3RhY2sob2xkRWxlbWVudElkKSk7CisgICAgY2xlYXJFdmVudFJl
Y29yZHMoKTsKKyAgICBtb3ZlTW91c2VPdmVyKGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhuZXdF
bGVtZW50SWQpKTsKKworICAgIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KCdtb3VzZW91dCcpOworICAg
IGRlYnVnRGlzcGF0Y2hlZEV2ZW50KCdtb3VzZW92ZXInKTsKK30KKworZnVuY3Rpb24gdGVzdCgp
Cit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIHByZXBhcmVET01UcmVlKGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdzYW5kYm94JykpOworCisgICAgbW92ZU1vdXNlKCdzaGFkb3ctaG9z
dCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcpOworICAgIG1vdmVNb3VzZSgnc2hh
ZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKKworICAgIG1vdmVN
b3VzZSgnc2hhZG93LWhvc3QnLCAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnKTsKKyAgICBtb3Zl
TW91c2UoJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ3NoYWRvdy1ob3N0Jyk7CisKKyAgICBt
b3ZlTW91c2UoJ2RldGFpbHMnLCAnc3VtbWFyeScpOworICAgIG1vdmVNb3VzZSgnc3VtbWFyeScs
ICdkZXRhaWxzJyk7CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNo
aWxkJywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdkaXN0cmli
dXRlZC1saWdodC1jaGlsZCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcpOworCisg
ICAgLy8gVGhlc2UgY2FzZXMgc2hvdWxkIG5vdCBoYXBwZW4gc2luY2Ugbm9uLWRpc3RyaWJ1dGVk
LWxpZ2h0LWNoaWxkIGlzIG5vdCByZW5kZXJlZC4KKyAgICAvLyBGSVhNRTogUmVhbGx5PworICAg
IC8vIG1vdmVNb3VzZSgnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnbm9uLWRpc3RyaWJ1dGVk
LWxpZ2h0LWNoaWxkJyk7CisgICAgLy8gbW92ZU1vdXNlKCdub24tZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQnLCAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnKTsKKyAgICAvLyBtb3ZlTW91c2UoJ3No
YWRvdy1ob3N0JywgJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIC8vIG1vdmVN
b3VzZSgnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ3NoYWRvdy1ob3N0Jyk7Cit9CisK
K3Rlc3QoKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0bWwKaW5k
ZXggZWMyZTJmODA4YWRhMGE2MDc1NGE0OWM4MGJjOTkzYTg1YTI1YzFkOS4uYTBjMmM5MThkNDc0
YzgyNzMxZmI5MGNlNWNiNzUxZDEwM2Y0OTllNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy5odG1sCkBAIC0xNDYsNyAr
MTQ2LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICAgICdUYXJnZXQgaXMgYW4gYW5j
ZXN0b3Igb2YgcmVsYXRlZFRhcmdldC4nKTsKICAgICBzaG91bGRCZSgnZGlzcGF0Y2hlZEV2ZW50
KCJtb3VzZW92ZXIiKScsICdbImRpdkUoPC1zaGFkb3dGKShAZGl2RSkiXScpOwogICAgIHNob3Vs
ZEJlKCdkaXNwYXRjaGVkRXZlbnQoIm1vdXNlb3V0IiknLCAnWyJkaXZJKDwtZGl2RSkoQGRpdkkp
IiwgInNoYWRvd0coPC1kaXZFKShAc2hhZG93RykiLCAic2hhZG93Rig8LWRpdkUpKEBzaGFkb3dG
KSIsICJzaGFkb3dGKDwtZGl2RSkoQGRpdkUpIl0nKTsKLQorICAgCiAgICAgbW92ZU1vdXNlKCdz
aGFkb3dEL3NoYWRvd0Yvc2hhZG93Ry9kaXZJJywgJ3NoYWRvd0Qvc2hhZG93RicsCiAgICAgICAg
ICAgICAgICdUYXJnZXQgKHNoYWRvdyBob3N0KSBpcyBhbiBhbmNlc3RvciBvZiByZWxhdGVkVGFy
Z2V0LicpOwogICAgIHNob3VsZEJlKCdkaXNwYXRjaGVkRXZlbnQoIm1vdXNlb3ZlciIpJywgJ1td
Jyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141146</attachid>
            <date>2012-05-10 04:58:53 -0700</date>
            <delta_ts>2012-05-11 01:44:34 -0700</delta_ts>
            <desc>WIP. Find an available relatedTarget from ancestor scope.</desc>
            <filename>bug-78586-20120510205852.patch</filename>
            <type>text/plain</type>
            <size>35306</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc2YjA3YzE4Y2JlMDM4
YzIzMDFkOGMxYzhiNzc0ZWExYjQyODc3ZS4uMjhmNTJmMzU2ZGQ3NTBkNzI0MzE4OGVlMjAzNjhm
NDk3ZGE5YTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgdHJlZSBpbnN0ZWFkIG9m
IG9yZGluYWwgRE9NIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdp
dGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OmFkanVzdGVkUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZUFkanVzdGVkUGFyZW50KToKKyAg
ICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg6CisgICAgICAgIChDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyOjpjYW5Dcm9zc1VwcGVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjpjYW5Dcm9zc0xvd2VyQm91bmRhcnkpOgorICAgICAgICAqIGRv
bS9FdmVudENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVu
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dG9Nb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50
cyk6CisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoRXZlbnRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2hvdWxkRGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFNob3Vs
ZERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhp
c3RzSW5TYW1lU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjph
bmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0
Q29tbW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5o
OgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChOb2RlKToKKwog
MjAxMi0wNS0wOCAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIENyYXNoIGR1ZSB0byBvd25pbmcgcmVuZGVyZXIgbm90IHJlbW92ZWQgZnJvbSBjdXN0b20g
c2Nyb2xsYmFyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyLmNwcAppbmRleCA1YTY5MzZjOGMyMjFmZWNhMzNlNzg2Yjg0NDkzYTYxNTI4Y2U4NTUwLi4w
YTU4ZTdlMDkwNDA4NWE1NTZlNzU5MGU5ZmVlNjI1MDE1NjQ4ZGJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcApAQCAtMjAyLDYgKzIwMiwy
OSBAQCB2b2lkIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6cGFyZW50KCkKICAgICBhc3NlcnRQ
b3N0Y29uZGl0aW9uKCk7CiB9CiAKK3ZvaWQgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjpwYXJl
bnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKQoreworICAgIEFTU0VSVCht
X25vZGUpOworICAgIG1fbm9kZSA9IHRyYXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9p
bnRBbmRTaGFkb3dSb290KG1fbm9kZSk7Cit9CisKK05vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdh
bGtlcjo6dHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3Qo
Y29uc3QgTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93
ID0gc2hhZG93T2ZQYXJlbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKEhUTUxDb250ZW50U2VsZWN0
aW9uKiBzZWxlY3Rpb24gPSBzaGFkb3ctPnNlbGVjdGlvbkZvcihub2RlKSkKKyAgICAgICAgICAg
IHJldHVybiBzZWxlY3Rpb24tPmluc2VydGlvblBvaW50KCk7CisgICAgfQorICAgIGlmIChub2Rl
LT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICBjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290
ID0gdG9TaGFkb3dSb290KG5vZGUpOworICAgICAgICBpZiAoc2hhZG93Um9vdC0+aXNZb3VuZ2Vz
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKTsKKyAgICAgICAgSW5z
ZXJ0aW9uUG9pbnQqIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQgPSBzaGFkb3dSb290LT5hc3NpZ25l
ZFRvKCk7CisgICAgICAgIEFTU0VSVChhc3NpZ25lZEluc2VydGlvblBvaW50KTsKKyAgICAgICAg
cmV0dXJuIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQ7CisgICAgfQorICAgIHJldHVybiBub2RlLT5w
YXJlbnROb2RlKCk7Cit9CisKIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVy
c2VQYXJlbnQoY29uc3QgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIWNhbkNyb3NzVXBw
ZXJCb3VuZGFyeSgpICYmIG5vZGUtPmlzU2hhZG93Um9vdCgpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKaW5kZXggOTc2NmMxYTM2NTAxOTAwODhi
OTRkYTJhNDQwYzIwNjI2ZDBkNGE5Mi4uZGEzNGVlZDY2NjdmZmJiNjJlNTY1MTNkZjdlYTc3N2Yw
ZWZkY2M4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJl
ZVdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXIuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmV2aW91c1NpYmxpbmco
KTsKIAogICAgIHZvaWQgcGFyZW50KCk7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpZ25vcmVzIHBv
bGljeS4gQWx3YXlzIGNyb3NzIGFuIHVwcGVyIGJvdW5kYXJ5LgorICAgIHZvaWQgcGFyZW50SW5j
bHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCk7CiAKICAgICB2b2lkIG5leHQoKTsK
ICAgICB2b2lkIHByZXZpb3VzKCk7CkBAIC05OSw2ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIE5v
ZGUqIHRyYXZlcnNlTGFzdENoaWxkKGNvbnN0IE5vZGUqKSBjb25zdDsKICAgICBOb2RlKiB0cmF2
ZXJzZUNoaWxkKGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pIGNvbnN0OwogICAgIE5v
ZGUqIHRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJz
ZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdChjb25zdCBOb2RlKikg
Y29uc3Q7CiAKICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2Rl
Kik7CiAgICAgc3RhdGljIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggMmE1YzUyMTBhYWVmNmI5NDFi
YmRlNWRlMjk1Y2JhMzM5ZDE0MmRmNS4uYTFiNTFjMGU5ZmZhNGU1MDk5YTdjOThkYTUwOWE4Mjdm
MzQyZTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMgKzM5LDIyIEBAIEV2ZW50Q29udGV4dDo6
RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gY3VycmVuCiAgICAgOiBtX25vZGUobm9kZSkKICAgICAsIG1fY3VycmVudFRhcmdldChjdXJy
ZW50VGFyZ2V0KQogICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9yZWxhdGVkVGFyZ2V0
KDApCiB7CiB9CiAKK3N0YXRpYyBNb3VzZUV2ZW50KiB0b01vdXNlRXZlbnQoRXZlbnQqIGV2ZW50
KQoreworICAgIEFTU0VSVChldmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworfQorCiB2b2lkIEV2ZW50Q29u
dGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50KSBjb25zdAogewogICAgIGV2ZW50
LT5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0
KG1fY3VycmVudFRhcmdldC5nZXQoKSk7CisgICAgaWYgKG1fcmVsYXRlZFRhcmdldC5nZXQoKSAm
JiBldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIHRvTW91c2VFdmVudChldmVudCktPnNl
dFJlbGF0ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0LmdldCgpKTsKICAgICBtX25vZGUtPmhhbmRs
ZUxvY2FsRXZlbnRzKGV2ZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCmluZGV4
IDVlNzMxN2Y0NWNmNTQ4NTZhMzI0OWQ4N2RkMjdhMDgxNjYyZDY3NDguLjYzMjU4MTAwOTBjMDQy
OTcyNjljZTUyZTcwZTJkZDEwYWRkMTQ0MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgK
QEAgLTQyLDEzICs0MiwxNiBAQCBwdWJsaWM6CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3Q7CiAg
ICAgRXZlbnRUYXJnZXQqIHRhcmdldCgpIGNvbnN0OworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVk
VGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkgY29u
c3Q7CiAgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCopIGNvbnN0OworICAgIHZvaWQg
c2V0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CiAKIHByaXZhdGU6CiAg
ICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fY3VycmVu
dFRhcmdldDsKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fdGFyZ2V0OworICAgIFJlZlB0cjxF
dmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0OwogfTsKIAogaW5saW5lIE5vZGUqIEV2ZW50Q29u
dGV4dDo6bm9kZSgpIGNvbnN0CkBAIC02Niw2ICs2OSwxNiBAQCBpbmxpbmUgYm9vbCBFdmVudENv
bnRleHQ6OmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSBjb25zdAogICAgIHJldHVybiBtX2N1
cnJlbnRUYXJnZXQuZ2V0KCkgPT0gbV90YXJnZXQuZ2V0KCk7CiB9CiAKK2lubGluZSBFdmVudFRh
cmdldCogRXZlbnRDb250ZXh0OjpyZWxhdGVkVGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9yZWxhdGVkVGFyZ2V0LmdldCgpOworfQorCitpbmxpbmUgdm9pZCBFdmVudENvbnRleHQ6OnNl
dFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCkKK3sK
KyAgICBtX3JlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0OworfQorCiB9CiAKICNlbmRpZiAv
LyBFdmVudENvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlz
cGF0Y2hNZWRpYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaE1lZGlh
dG9yLmNwcAppbmRleCBiMjQ3NGNiOTUxZTZjOTE0NjNjZjlmMzE1ODZkZWMzZTcyMzA5ZjMzLi4z
MDU0NmI0Mjk4M2FmMGMxNjMzNjg1Y2I1NmUwYzBkNTUwOTgyZDI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaE1lZGlhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnREaXNwYXRjaE1lZGlhdG9yLmNwcApAQCAtNjQsNyArNjQsNyBAQCBGb2N1
c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Rm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1Jl
ZlB0cjxOb2RlPiBvbGRGb2N1cwogCiBib29sIEZvY3VzRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpk
aXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAgICBk
aXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIG1fb2xkRm9jdXNlZE5vZGUp
OworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRhcmdldChldmVudCgpLCBtX29sZEZv
Y3VzZWROb2RlKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2
ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC04MSw3ICs4MSw3IEBAIEJsdXJFdmVudERpc3BhdGNo
TWVkaWF0b3I6OkJsdXJFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxOb2RlPiBuZXdG
b2N1c2VkCiAKIGJvb2wgQmx1ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChF
dmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRq
dXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBtX25ld0ZvY3VzZWROb2RlKTsKKyAgICBkaXNwYXRj
aGVyLT5hZGp1c3RCeVJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgbV9uZXdGb2N1c2VkTm9kZSk7CiAg
ICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChkaXNwYXRjaGVy
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCA1ODY2ZTYw
NjhkNmY1OWJhNjIxZDMyMWM1NDRmNGYyODM2M2JjZWI5Li5jYzllNzYxZjBkYzMzNWZiYTNlZjE3
ZGQ1YmJiMDA3ZjkwM2FiMzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRE
aXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNw
cApAQCAtMjYsMTAgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZl
bnREaXNwYXRjaGVyLmgiCiAKKyNpbmNsdWRlICJDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCIK
KyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCiAj
aW5jbHVkZSAiRXZlbnREaXNwYXRjaE1lZGlhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc2VydGlvblBvaW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTW91
c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjb3BlZEV2ZW50UXVldWUuaCIKQEAgLTQ1LDYgKzQ4LDEx
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGJvb2wgZXhpc3RzSW5TYW1lU2Nv
cGUoTm9kZSogbm9kZTEsIE5vZGUqIG5vZGUyKQoreworICAgIHJldHVybiBub2RlMS0+dHJlZVNj
b3BlKCkgPT0gbm9kZTItPnRyZWVTY29wZSgpOworfQorCiBzdGF0aWMgSGFzaFNldDxOb2RlKj4q
IGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsKIAogYm9vbCBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNo
TWVkaWF0b3I+IG1lZGlhdG9yKQpAQCAtMTIxLDEwNCArMTI5LDQ3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NoYWRvd0hvc3QoTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZS0+aXNFbGVtZW50
Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aGFzU2hhZG93Um9vdCgpOwogfQogCi1QYXNzUmVm
UHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNoZXI6OmFkanVzdFRvU2hhZG93Qm91bmRhcmll
cyhQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQsIGNvbnN0IFZlY3RvcjxOb2RlKj4gcmVs
YXRlZFRhcmdldEFuY2VzdG9ycykKLXsKLSAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3Rf
aXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSBtX2FuY2VzdG9ycy5lbmQoKTsKLSAgICAv
LyBBc3N1bWUgZGl2ZXJnZW50IGJvdW5kYXJ5IGlzIHRoZSByZWxhdGVkVGFyZ2V0IGl0c2VsZiAo
aW4gb3RoZXIgd29yZHMsIHJlbGF0ZWQgdGFyZ2V0IGFuY2VzdG9yIGNoYWluIGRvZXMgbm90IGNy
b3NzIGFueSBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgotICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0
X2l0ZXJhdG9yIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3Jz
LmJlZ2luKCk7Ci0KLSAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgdGFy
Z2V0QW5jZXN0b3IgPSBtX2FuY2VzdG9ycy5lbmQoKTsKLSAgICAvLyBXYWxrIGRvd24gZnJvbSB0
aGUgdG9wLCBsb29raW5nIGZvciBsb3dlc3QgY29tbW9uIGFuY2VzdG9yLCBhbHNvIG1vbml0b3Jp
bmcgc2hhZG93IERPTSBib3VuZGFyaWVzLgotICAgIGJvb2wgZGl2ZXJnZWQgPSBmYWxzZTsKLSAg
ICBmb3IgKFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGkgPSByZWxhdGVkVGFyZ2V0QW5j
ZXN0b3JzLmVuZCgpIC0gMTsgaSA+PSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7IC0t
aSkgewotICAgICAgICBpZiAoZGl2ZXJnZWQpIHsKLSAgICAgICAgICAgIGlmICgoKmkpLT5pc1No
YWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAgIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgPSBp
ICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRhcmdldEFuY2VzdG9yID09IG1f
YW5jZXN0b3JzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIGRpdmVyZ2VkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdGFyZ2V0QW5jZXN0b3ItLTsK
LQotICAgICAgICBpZiAoKCppKS0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAgICBsb3dlc3RD
b21tb25Cb3VuZGFyeSA9IHRhcmdldEFuY2VzdG9yOwotCi0gICAgICAgIGlmICgoKmkpICE9ICgq
dGFyZ2V0QW5jZXN0b3IpLm5vZGUoKSkKLSAgICAgICAgICAgIGRpdmVyZ2VkID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWRpdmVyZ2VkKSB7Ci0gICAgICAgIC8vIFRoZSByZWxhdGVkVGFyZ2V0
IGlzIGFuIGFuY2VzdG9yIG9yIHNoYWRvd0hvc3Qgb2YgdGhlIHRhcmdldC4KLSAgICAgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGUgZmlyc3QgY2hlY2sgb25jZSBjb252ZXJzaW9uIHRvIG5ldyBzaGFk
b3cgRE9NIGlzIGNvbXBsZXRlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ4Njk4PgotICAgICAgICBp
ZiAobV9ub2RlLT5zaGFkb3dIb3N0KCkgPT0gcmVsYXRlZFRhcmdldC5nZXQoKSB8fCBpc1NoYWRv
d0hvc3QocmVsYXRlZFRhcmdldC5nZXQoKSkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxFdmVudENv
bnRleHQ+Ojpjb25zdF9pdGVyYXRvciByZWxhdGVkVGFyZ2V0Q2hpbGQgPSB0YXJnZXRBbmNlc3Rv
ciAtIDE7Ci0gICAgICAgICAgICBpZiAocmVsYXRlZFRhcmdldENoaWxkID49IG1fYW5jZXN0b3Jz
LmJlZ2luKCkgJiYgcmVsYXRlZFRhcmdldENoaWxkLT5ub2RlKCktPmlzU2hhZG93Um9vdCgpKQot
ICAgICAgICAgICAgICAgIGxvd2VzdENvbW1vbkJvdW5kYXJ5ID0gcmVsYXRlZFRhcmdldENoaWxk
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgoKmZpcnN0RGl2ZXJnZW50Qm91bmRhcnkpID09
IG1fbm9kZS5nZXQoKSkgewotICAgICAgICAvLyBTaW5jZSBhbmNlc3RvcnMgZG9lcyBub3QgY29u
dGFpbiB0YXJnZXQgaXRzZWxmLCB3ZSBtdXN0IGFjY291bnQKLSAgICAgICAgLy8gZm9yIHRoZSBw
b3NzaWJpbGl0eSB0aGF0IHRhcmdldCBpcyBhIHNoYWRvd0hvc3Qgb2YgcmVsYXRlZFRhcmdldAot
ICAgICAgICAvLyBhbmQgdGh1cyBzZXJ2ZXMgYXMgdGhlIGxvd2VzdENvbW1vbkJvdW5kYXJ5Lgot
ICAgICAgICAvLyBMdWNraWx5LCBpbiB0aGlzIGNhc2UgdGhlIGZpcnN0RGl2ZXJnZW50Qm91bmRh
cnkgaXMgdGFyZ2V0LgotICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IG1fYW5jZXN0b3Jz
LmJlZ2luKCk7Ci0gICAgICAgIG1fc2hvdWxkUHJldmVudERpc3BhdGNoID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAobG93ZXN0Q29tbW9uQm91bmRhcnkgIT0gbV9hbmNlc3RvcnMuZW5kKCkpIHsK
LSAgICAgICAgLy8gVHJpbSBhbmNlc3RvcnMgdG8gbG93ZXN0Q29tbW9uQm91bmRhcnkgdG8ga2Vl
cCBldmVudHMgaW5zaWRlIG9mIHRoZSBjb21tb24gc2hhZG93IERPTSBzdWJ0cmVlLgotICAgICAg
ICBtX2FuY2VzdG9ycy5zaHJpbmsobG93ZXN0Q29tbW9uQm91bmRhcnkgLSBtX2FuY2VzdG9ycy5i
ZWdpbigpKTsKLSAgICB9Ci0gICAgLy8gU2V0IGV2ZW50J3MgcmVsYXRlZCB0YXJnZXQgdG8gdGhl
IGZpcnN0IGVuY291bnRlcmVkIHNoYWRvdyBET00gYm91bmRhcnkgaW4gdGhlIGRpdmVyZ2VudCBz
dWJ0cmVlLgotICAgIHJldHVybiBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5ICE9IHJlbGF0ZWRUYXJn
ZXRBbmNlc3RvcnMuYmVnaW4oKSA/ICpmaXJzdERpdmVyZ2VudEJvdW5kYXJ5IDogcmVsYXRlZFRh
cmdldDsKLX0KLQotaW5saW5lIHN0YXRpYyBib29sIGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRh
cmllcyhjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQorRXZlbnRUYXJnZXQq
IGZpbmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSogc2NvcGUsIEhhc2hNYXA8VHJlZVNjb3BlKiwg
RXZlbnRUYXJnZXQqPiYgcmVsYXRlZFRhcmdldE1hcCkKIHsKLSAgICByZXR1cm4gYW5jZXN0b3Jz
LmlzRW1wdHkoKSB8fCBhbmNlc3RvcnMuZmlyc3QoKS5ub2RlKCkgPT0gYW5jZXN0b3JzLmxhc3Qo
KS5ub2RlKCk7CisgICAgaWYgKCFzY29wZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgSGFzaE1h
cDxUcmVlU2NvcGUqLCBFdmVudFRhcmdldCo+OjppdGVyYXRvciBmb3VuZCA9IHJlbGF0ZWRUYXJn
ZXRNYXAuZmluZChzY29wZSk7CisgICAgaWYgKGZvdW5kICE9IHJlbGF0ZWRUYXJnZXRNYXAuZW5k
KCkpCisgICAgICAgIHJldHVybiBmb3VuZC0+c2Vjb25kOworICAgIEV2ZW50VGFyZ2V0KiByZWxh
dGVkVGFyZ2V0ID0gZmluZFJlbGF0ZWRUYXJnZXQoc2NvcGUtPnBhcmVudFRyZWVTY29wZSgpLCBy
ZWxhdGVkVGFyZ2V0TWFwKTsKKyAgICByZWxhdGVkVGFyZ2V0TWFwLmFkZChzY29wZSwgcmVsYXRl
ZFRhcmdldCk7CisgICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQ7CiB9CiAKLS8vIEZJWE1FOiBPbmNl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjk2MyBsYW5kcywgdGhp
cyBzaG91bGQKLS8vIGJlIGdyZWF0bHkgaW1wcm92ZWQuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwMjUuCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVu
dERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQYXNzUmVmUHRy
PEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQordm9pZCBFdmVudERpc3BhdGNoZXI6OmFk
anVzdEJ5UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+
IHBycFJlbGF0ZWRUYXJnZXQpCiB7CiAgICAgaWYgKCFwcnBSZWxhdGVkVGFyZ2V0KQotICAgICAg
ICByZXR1cm4gMDsKLQorICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPE5vZGU+IHJlbGF0ZWRU
YXJnZXQgPSBwcnBSZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJn
ZXQpCi0gICAgICAgIHJldHVybiAwOwotCisgICAgICAgIHJldHVybjsKICAgICBOb2RlKiB0YXJn
ZXQgPSBtX25vZGUuZ2V0KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBwcnBS
ZWxhdGVkVGFyZ2V0OworICAgICAgICByZXR1cm47CiAKICAgICBlbnN1cmVFdmVudEFuY2VzdG9y
cyhldmVudCk7CiAKLSAgICAvLyBDYWxjdWxhdGUgZWFybHkgaWYgdGhlIGNvbW1vbiBib3VuZGFy
eSBpcyBldmVuIHBvc3NpYmxlIGJ5IGxvb2tpbmcgYXQKLSAgICAvLyBhbmNlc3RvcnMgc2l6ZSBh
bmQgaWYgdGhlIHJldGFyZ2V0aW5nIGhhcyBvY2N1cmVkIChpbmRpY2F0aW5nIHRoZSBwcmVzZW5j
ZSBvZiBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgotICAgIC8vIElmIHRoZXJlIGFyZSBubyBib3Vu
ZGFyaWVzIGRldGVjdGVkLCB0aGUgdGFyZ2V0IGFuZCByZWxhdGVkIHRhcmdldCBjYW4ndCBoYXZl
IGEgY29tbW9uIGJvdW5kYXJ5LgotICAgIGJvb2wgbm9Db21tb25Cb3VuZGFyeSA9IGFuY2VzdG9y
c0Nyb3NzU2hhZG93Qm91bmRhcmllcyhtX2FuY2VzdG9ycyk7Ci0KICAgICBWZWN0b3I8Tm9kZSo+
IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnM7Ci0gICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRh
cnkgPSByZWxhdGVkVGFyZ2V0LmdldCgpOwotICAgIGZvciAoTm9kZSogbiA9IG91dGVybW9zdFNo
YWRvd0JvdW5kYXJ5OyBuOyBuID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlm
IChuLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5
ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpOwotICAgICAgICBpZiAoIW5vQ29tbW9uQm91bmRhcnkp
Ci0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmFwcGVuZChuKTsKKyAgICBmb3Ig
KENvbXBvc2VkU2hhZG93VHJlZVdhbGtlciB3YWxrZXIocmVsYXRlZFRhcmdldC5nZXQoKSk7IHdh
bGtlci5nZXQoKTsgd2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93
Um9vdCgpKQorICAgICAgICByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmFwcGVuZCh3YWxrZXIuZ2V0
KCkpOworCisgICAgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVudFRhcmdldCo+IHJlbGF0ZWRUYXJn
ZXRNYXA7CisgICAgZm9yIChWZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gcmVsYXRlZFRh
cmdldEFuY2VzdG9ycy5iZWdpbigpOyBpdGVyIDwgcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5lbmQo
KTsgKytpdGVyKQorICAgICAgICByZWxhdGVkVGFyZ2V0TWFwLmFkZCgoKml0ZXIpLT50cmVlU2Nv
cGUoKSwgKml0ZXIpOworCisgICAgZm9yIChWZWN0b3I8RXZlbnRDb250ZXh0Pjo6aXRlcmF0b3Ig
aXRlciA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7IGl0ZXIgPCBtX2FuY2VzdG9ycy5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgIGl0ZXItPnNldFJlbGF0ZWRUYXJnZXQoZmluZFJlbGF0ZWRUYXJnZXQo
aXRlci0+bm9kZSgpLT50cmVlU2NvcGUoKSwgcmVsYXRlZFRhcmdldE1hcCkpOworICAgICAgICBp
ZiAoaXRlci0+dGFyZ2V0KCkgPT0gaXRlci0+cmVsYXRlZFRhcmdldCgpKSB7CisgICAgICAgICAg
ICAvLyBFdmVudCBkaXNwYXRjaGluZyBzaG91bGQgYmUgc3RvcHBlZCBoZXJlLgorICAgICAgICAg
ICAgbV9hbmNlc3RvcnMuc2hyaW5rKGl0ZXIgLSBtX2FuY2VzdG9ycy5iZWdpbigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQotCi0gICAgLy8gU2hvcnQtY2lyY3VpdCB0
aGUgZmFzdCBjYXNlIHdoZW4gd2Uga25vdyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGN1bGF0ZSBh
IGNvbW1vbiBib3VuZGFyeS4KLSAgICBpZiAobm9Db21tb25Cb3VuZGFyeSkKLSAgICAgICAgcmV0
dXJuIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OwotCi0gICAgcmV0dXJuIGFkanVzdFRvU2hhZG93
Qm91bmRhcmllcyhyZWxhdGVkVGFyZ2V0LnJlbGVhc2UoKSwgcmVsYXRlZFRhcmdldEFuY2VzdG9y
cyk7CiB9CiAKIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCkBA
IC0yMzIsMzAgKzE4MywzOSBAQCBFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2Rl
KiBub2RlKQogCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZl
bnQqIGV2ZW50KQogewotICAgIGlmICghbV9ub2RlLT5pbkRvY3VtZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGlmIChtX2FuY2VzdG9yc0luaXRpYWxpemVkKQogICAgICAgICByZXR1cm47
CiAKKyAgICBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIgYW5jZXN0b3JXYWxrZXIobV9ub2RlLmdl
dCgpKTsKKyAgICBFdmVudFRhcmdldCogb3JpZ2luYWxUYXJnZXQgPSBldmVudFRhcmdldFJlc3Bl
Y3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3RvcldhbGtlci5nZXQoKSk7CisgICAgbV9hbmNlc3Rv
cnMuYXBwZW5kKEV2ZW50Q29udGV4dChtX25vZGUuZ2V0KCksIG9yaWdpbmFsVGFyZ2V0LCBvcmln
aW5hbFRhcmdldCkpOwogICAgIG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQgPSB0cnVlOwogCi0gICAg
Tm9kZSogYW5jZXN0b3IgPSBtX25vZGUuZ2V0KCk7Ci0gICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9
IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKTsKKyAgICBpZiAo
IW1fbm9kZS0+aW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8RXZl
bnRUYXJnZXQqPiB0YXJnZXRTdGFjazsKKyAgICB0YXJnZXRTdGFjay5hcHBlbmQob3JpZ2luYWxU
YXJnZXQpOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChhbmNlc3Rvci0+aXNTaGFk
b3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKGV2
ZW50LCBhbmNlc3RvcikgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkKKyAgICAgICAgaWYgKGFuY2Vz
dG9yV2Fsa2VyLmdldCgpLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKGRldGVy
bWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQsIGFuY2VzdG9yV2Fsa2VyLmdldCgpKSA9PSBTdGF5
SW5zaWRlU2hhZG93RE9NKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGFu
Y2VzdG9yID0gYW5jZXN0b3ItPnNoYWRvd0hvc3QoKTsKLSAgICAgICAgICAgIGlmICghbV9ub2Rl
LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBhbmNlc3RvcjsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2Rl
R3VhcmFudGVlZEhvc3RGcmVlKCk7Ci0KLSAgICAgICAgaWYgKCFhbmNlc3RvcikKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBtX2FuY2VzdG9ycy5hcHBlbmQoRXZlbnRDb250ZXh0KGFu
Y2VzdG9yLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3RvciksIHRh
cmdldCkpOworICAgICAgICAgICAgYW5jZXN0b3JXYWxrZXIucGFyZW50SW5jbHVkaW5nSW5zZXJ0
aW9uUG9pbnRBbmRTaGFkb3dSb290KCk7CisgICAgICAgICAgICBpZiAoIWFuY2VzdG9yV2Fsa2Vy
LmdldCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghbV9ub2Rl
LT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U3RhY2suaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRTdGFjay5hcHBlbmQoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYW5jZXN0b3JXYWxr
ZXIucGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCk7CisgICAgICAg
ICAgICBpZiAoIWFuY2VzdG9yV2Fsa2VyLmdldCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGlmIChpc0luc2VydGlvblBvaW50KGFuY2VzdG9yV2Fsa2VyLmdldCgpKSAm
JiB0b0luc2VydGlvblBvaW50KGFuY2VzdG9yV2Fsa2VyLmdldCgpKS0+aXNBY3RpdmUoKSkKKyAg
ICAgICAgICAgICAgICB0YXJnZXRTdGFjay5hcHBlbmQoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpOwor
ICAgICAgICB9CisgICAgICAgIG1fYW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQoYW5jZXN0
b3JXYWxrZXIuZ2V0KCksIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2Vz
dG9yV2Fsa2VyLmdldCgpKSwgZXhpc3RzSW5TYW1lU2NvcGUoYW5jZXN0b3JXYWxrZXIuZ2V0KCks
IG9yaWdpbmFsVGFyZ2V0LT50b05vZGUoKSkgPyBvcmlnaW5hbFRhcmdldCA6dGFyZ2V0U3RhY2su
bGFzdCgpKSk7CiAgICAgfQogfQogCkBAIC0yNzYsNyArMjM2LDcgQEAgYm9vbCBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBH
aXZlIHRoZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgYmVmb3JlIERPTSBl
dmVudCBoYW5kbGVycyBnZXQgYSBjcmFjay4KICAgICB2b2lkKiBkYXRhID0gbV9ub2RlLT5wcmVE
aXNwYXRjaEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7Ci0gICAgaWYgKG1fc2hvdWxkUHJldmVu
dERpc3BhdGNoIHx8IGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICBpZiAobV9hbmNl
c3RvcnMuaXNFbXB0eSgpIHx8IG1fc2hvdWxkUHJldmVudERpc3BhdGNoIHx8IGV2ZW50LT5wcm9w
YWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKICAgICAv
LyBUcmlnZ2VyIGNhcHR1cmluZyBldmVudCBoYW5kbGVycywgc3RhcnRpbmcgYXQgdGhlIHRvcCBh
bmQgd29ya2luZyBvdXIgd2F5IGRvd24uCkBAIC0yODUsOCArMjQ1LDggQEAgYm9vbCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgaWYg
KHdpbmRvd0NvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpICYmIGV2ZW50LT5w
cm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpOyBpOyAtLWkpIHsKLSAgICAgICAg
Y29uc3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpLTFdOworICAg
IGZvciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9ycy5zaXplKCkgLSAxOyBpID4gMDsgLS1pKSB7Cisg
ICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07
CiAgICAgICAgIGlmIChldmVudENvbnRleHQuY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpKSB7
CiAgICAgICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTMwMSw3ICsyNjEsOCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShF
dmVudDo6QVRfVEFSR0VUKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KG9yaWdpbmFsVGFyZ2V0Lmdl
dCgpKTsKICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdT
VkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKLSAgICBtX25vZGUtPmhhbmRsZUxvY2FsRXZl
bnRzKGV2ZW50LmdldCgpKTsKKyAgICBtX2FuY2VzdG9yc1swXS5oYW5kbGVMb2NhbEV2ZW50cyhl
dmVudC5nZXQoKSk7CisgICAgLy8gbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQo
KSk7CiAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgZ290byBk
b25lRGlzcGF0Y2hpbmc7CiAKQEAgLTMxMCw3ICsyNzEsNyBAQCBib29sIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICAgICAgZXZlbnQt
PnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKIAogICAgICAgICBzaXplX3Qg
c2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNl
c3RvcnNbaV07CiAgICAgICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1l
QXNUYXJnZXQoKSkKICAgICAgICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6
QVRfVEFSR0VUKTsKQEAgLTM0NCw3ICszMDUsNyBAQCBkb25lRGlzcGF0Y2hpbmc6CiAgICAgICAg
IC8vIHNhbWUgb3JkZXIgYXMgdGhlIGJ1YmJsaW5nIHBoYXNlLgogICAgICAgICBpZiAoZXZlbnQt
PmJ1YmJsZXMoKSkgewogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXpl
KCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQuZ2V0
KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7
CiAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDg1YWVmYzQ5MzA0M2Q1MTdlYzk3NzM0ZTYyMThh
YWQ4MWQxNzkwNjcuLjUzOTc1MTE1MGM1MjFlMzFmMmJmYTM5MzZkMTNjMjhmNThlNDNlN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTU0LDEzICs1NCwxMiBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiwgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBz
aG93UHJlc3NlZExvb2spOwogCiAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KTsKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBhZGp1c3RSZWxhdGVkVGFyZ2V0KEV2
ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4pOworICAgIHZvaWQgYWRqdXN0QnlSZWxhdGVk
VGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCk7
CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEV2ZW50RGlzcGF0Y2hl
cihOb2RlKik7CiAKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBhZGp1c3RUb1NoYWRvd0Jv
dW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0LCBjb25zdCBWZWN0b3I8Tm9k
ZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwogICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBk
ZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgTm9kZSogc2hhZG93Um9vdCk7CiAgICAg
dm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwogICAgIGNvbnN0IEV2ZW50Q29udGV4
dCogdG9wRXZlbnRDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91
c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggYzM2
ODljNmRkNDYzYWVlMDU2Mjg4MTcyZTI1NGRjM2VjZmIyNWQwYi4uYTE5ZDhhMjFkNWIzYjMxZDY1
OTlmYmY5NTA3YjQ2NjQ1NzM2NzljYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAt
MjAxLDggKzIwMSw4IEBAIGJvb2wgTW91c2VFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNo
RXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zCiAgICAgaWYgKGV2ZW50KCkt
PnR5cGUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gU2hvdWxkbid0IGhh
cHBlbi4KIAotICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCA9IGRpc3BhdGNo
ZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZlbnQoKS0+cmVsYXRlZFRhcmdldCgp
KTsKLSAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJnZXQpOworICAgIEV2
ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQoKS0+cmVsYXRlZFRhcmdldCgpOworICAg
IGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRhcmdldChldmVudCgpLCByZWxhdGVkVGFyZ2V0
KTsKIAogICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoRXZlbnQoZXZlbnQoKSk7CiAgICAgYm9vbCBz
d2FsbG93RXZlbnQgPSBldmVudCgpLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGV2ZW50KCktPmRlZmF1
bHRQcmV2ZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcAppbmRleCBmZjNmZjRhZmNmOWIyMTIx
MWI3YjUzMWZhZjU0N2QxM2VmOGZkNTY5Li43MWIxZGI3ZGJkYjlkZDhlOTkyYjUzMmM5MGMyOWM0
OTcxNTgxMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgRm9j
dXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Rm9jdXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQ
YXNzUmVmUHRyPEV2ZW50PiBldmUKIAogYm9vbCBGb2N1c0luRXZlbnREaXNwYXRjaE1lZGlhdG9y
OjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAg
ICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIG1fb2xkRm9jdXNlZE5v
ZGUpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRhcmdldChldmVudCgpLCBtX29s
ZEZvY3VzZWROb2RlKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRj
aEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC0xNDAsNyArMTQwLDcgQEAgRm9jdXNPdXRFdmVu
dERpc3BhdGNoTWVkaWF0b3I6OkZvY3VzT3V0RXZlbnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQ
dHI8RXZlbnQ+IGUKIAogYm9vbCBGb2N1c091dEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0
Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAgZGlzcGF0
Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBtX25ld0ZvY3VzZWROb2RlKTsKKyAg
ICBkaXNwYXRjaGVyLT5hZGp1c3RCeVJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgbV9uZXdGb2N1c2Vk
Tm9kZSk7CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChk
aXNwYXRjaGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFiZmRkZmNjYmM0YzVlNDFhODY2NWY1YzQ5NTMzMmFj
YTU0MTk1YWUuLjk3YjgyZDgyYTBlMGRhYTVkZTNiNjQwZDE2MzZlZjNmY2ZhNmM5MjQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNS0wNyAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgRXZlbnQgZGlzcGF0Y2hpbmcgc2hvdWxkIHVzZSB0aGUgY29tcG9z
ZWQgc2hhZG93IERPTSB0cmVlIHRyZWUgaW5zdGVhZCBvZiBvcmRpbmFsIERPTSB0cmVlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1ODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL3No
YWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24tZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5
LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0bWw6CisKIDIwMTItMDUtMDgg
IE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTdXBwcmVzcyBmYWls
aW5nIHRlc3Qgd2hpbGUgdGhlIGZpeCBpcyBiZWluZyB3b3JrZWQgb3V0LgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1u
b2RlLWRpc3RyaWJ1dGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lOTg5YTgyMDExNjJjNDllMDQwNjI1OThiYjc2Zjc4YzMzZjY0MTc4
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1i
b3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMjAgQEAKK1Rlc3RzIHRvIGVuc3VyZSB0aGF0IHNoYWRvdyBET00gYm91bmRhcnkgaXMg
bm90IGNyb3NzZWQgZHVyaW5nIGV2ZW50IHByb3BhZ2F0aW9uLiBDYW4gb25seSBydW4gd2l0aGlu
IERSVC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0RJVgkgaWQ9c2FuZGJveAor
CURJVgkgaWQ9dG9wCisJCURJVgkgaWQ9c2hhZG93LWhvc3QKKwkJCURJVgkgaWQ9ZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQKKwkJCURJVgkgaWQ9c2hhZG93LXJvb3QtY2hpbGQKKwkJREVUQUlMUwkg
aWQ9ZGV0YWlscworCQkJU1VNTUFSWQkgaWQ9c3VtbWFyeQorCQkJCURJVgkKKworCisKK01vdmlu
ZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRvIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxk
CisKKyAgbW91c2VvdXQKKworICBtb3VzZW92ZXIKKyAgICAgQHNoYWRvdy1yb290LWNoaWxkICh0
YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBz
aGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1o
b3N0KQorCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxk
IHRvIHNoYWRvdy1ob3N0CisKKyAgbW91c2VvdXQKKyAgICAgQHNoYWRvdy1yb290LWNoaWxkICh0
YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBz
aGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1o
b3N0KQorCisgIG1vdXNlb3ZlcgorCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRv
IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAgQHNoYWRvdy1ob3N0
ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQp
CisgICAgIEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1s
aWdodC1jaGlsZCkKKworICBtb3VzZW92ZXIKKyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3Qp
CisgICAgIEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkK
KyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9z
dCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAo
cmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGln
aHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBk
aXN0cmlidXRlZC1saWdodC1jaGlsZCB0byBzaGFkb3ctaG9zdAorCisgIG1vdXNlb3V0CisgICAg
IEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGls
ZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50
KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250
ZW50KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBk
aXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAdG9w
ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3Qp
CisKKyAgbW91c2VvdmVyCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkg
KHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNo
YWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKworTW92aW5n
IG1vdXNlIGZyb20gZGV0YWlscyB0byBzdW1tYXJ5CisKKyAgbW91c2VvdXQKKyAgICAgQGRldGFp
bHMgKHRhcmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisgICAgIEB0b3AgKHRhcmdl
dDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisKKyAgbW91c2VvdmVyCisgICAgIEBzdW1t
YXJ5ICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorICAgICBAZGV0YWlscyAo
dGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKyAgICAgQHRvcCAodGFyZ2V0OiBz
dW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzdW1tYXJ5
IHRvIGRldGFpbHMKKworICBtb3VzZW91dAorICAgICBAc3VtbWFyeSAodGFyZ2V0OiBzdW1tYXJ5
KSAocmVsYXRlZDogZGV0YWlscykKKyAgICAgQGRldGFpbHMgKHRhcmdldDogc3VtbWFyeSkgKHJl
bGF0ZWQ6IGRldGFpbHMpCisgICAgIEB0b3AgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRl
dGFpbHMpCisKKyAgbW91c2VvdmVyCisgICAgIEBkZXRhaWxzICh0YXJnZXQ6IGRldGFpbHMpIChy
ZWxhdGVkOiBzdW1tYXJ5KQorICAgICBAdG9wICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBz
dW1tYXJ5KQorCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNo
aWxkIHRvIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAgQHNoYWRv
dy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogY29udGVu
dCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRl
ZDogY29udGVudCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVs
YXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisgICAgIEB0b3AgKHRhcmdldDogc2hhZG93
LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKworICBtb3VzZW92ZXIK
KyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0
LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBjb250ZW50ICh0YXJnZXQ6IGNv
bnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctcm9vdC1jaGlsZCkKKyAgICAgQHNoYWRvdy1yb290ICh0
YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctcm9vdC1jaGlsZCkKKyAgICAgQHNoYWRv
dy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93
LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxh
dGVkOiBzaGFkb3ctaG9zdCkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCB0byBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZAorCisgIG1vdXNlb3V0Cisg
ICAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250
ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFy
Z2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ct
aG9zdCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1o
b3N0KQorICAgICBAdG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRl
ZDogc2hhZG93LWhvc3QpCisKKyAgbW91c2VvdmVyCisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAo
dGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFk
b3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisg
ICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1
dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRl
ZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0
aC1ub2RlLWRpc3RyaWJ1dGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlY2FkNGJkNTliMmRkN2UwOGM2
ZmQzZTczYTNiODk2ZDljMzVkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9u
Lmh0bWwKQEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFkb3ctZG9tLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJzYW5kYm94Ij48
L2Rpdj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0cyB0byBlbnN1cmUgdGhhdCBzaGFkb3cgRE9NIGJvdW5kYXJ5IGlzIG5vdCBjcm9zc2VkIGR1
cmluZyBldmVudCBwcm9wYWdhdGlvbi4gQ2FuIG9ubHkgcnVuIHdpdGhpbiBEUlQuIik7CisKKy8v
IEZJWE1FOiBNYWtlIGEgc2VwYXJhdGUgdXRpbGl0eSBqcyBmaWxlIGFuZCBzaGFyZSBpdC4KK2Z1
bmN0aW9uIG1vdmVNb3VzZU92ZXIoZWxlbWVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5ldmVudFNl
bmRlciB8fCAhd2luZG93LmludGVybmFscykKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIGRl
ZmF1bHRQYWRkaW5nU2l6ZSA9IDIwOworICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsg
ZWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7CisgICAgdmFyIHk7CisgICAgaWYgKGVsZW1lbnQuaGFz
Q2hpbGROb2RlcygpIHx8IHdpbmRvdy5pbnRlcm5hbHMuc2hhZG93Um9vdChlbGVtZW50KSkKKyAg
ICAgICAgeSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZGVmYXVsdFBhZGRpbmdTaXplOworICAgIGVs
c2UKKyAgICAgICAgeSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQg
LyAyOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworfQorCit2YXIgZXZlbnRS
ZWNvcmRzID0ge307CisKK2Z1bmN0aW9uIGNsZWFyRXZlbnRSZWNvcmRzKCkKK3sKKyAgICBldmVu
dFJlY29yZHMgPSB7fTsKK30KKworZnVuY3Rpb24gZGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkK
K3sKKyAgICB2YXIgZXZlbnRzID0gZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV07CisgICAgaWYgKCFl
dmVudHMpCisgICAgICAgIHJldHVybiBbXTsKKyAgICByZXR1cm4gZXZlbnRzOworfQorCitmdW5j
dGlvbiByZWNvcmRFdmVudChldmVudCkKK3sKKyAgICB2YXIgZXZlbnRUeXBlID0gZXZlbnQudHlw
ZQorICAgIGlmICghZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0pIHsKKyAgICAgICAgZXZlbnRSZWNv
cmRzW2V2ZW50VHlwZV0gPSBbXQorICAgIH0KKyAgICB2YXIgZXZlbnRTdHJpbmcgPSAnJzsKKyAg
ICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyBAJyAr
IGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQ7CisgICAgaWYgKGV2ZW50LnRhcmdldCkKKyAgICAgICAg
ZXZlbnRTdHJpbmcgKz0gJyAodGFyZ2V0OiAnICsgZXZlbnQudGFyZ2V0LmlkICsgJyknOworICAg
IGlmIChldmVudC5yZWxhdGVkVGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAnIChyZWxh
dGVkOiAnICsgZXZlbnQucmVsYXRlZFRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQuZXZl
bnRQaGFzZSA9PSAxKQorICAgICAgICBldmVudFN0cmluZyArPSAnKGNhcHR1cmluZyBwaGFzZSkn
OworICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQuY3VycmVudFRhcmdldCAmJiBldmVudC50
YXJnZXQuaWQgPT0gZXZlbnQuY3VycmVudFRhcmdldC5pZCkKKyAgICAgICAgc2hvdWxkQmUoImV2
ZW50LmV2ZW50UGhhc2UiLCAiMiIsIHRydWUpOworICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVd
LnB1c2goZXZlbnRTdHJpbmcpOworfQorCitmdW5jdGlvbiBkdW1wTm9kZShub2RlKQoreworICAg
IHZhciBvdXRwdXQgPSBub2RlLm5vZGVOYW1lICsgIlx0IjsKKyAgICBpZiAobm9kZS5pZCkKKyAg
ICAgICAgb3V0cHV0ICs9ICcgaWQ9JyArIG5vZGUuaWQ7CisgICAgaWYgKG5vZGUuY2xhc3NOYW1l
KQorICAgICAgICBvdXRwdXQgKz0gJyBjbGFzcz0nICsgbm9kZS5jbGFzc05hbWU7CisgICAgcmV0
dXJuIG91dHB1dDsKK30KKworZnVuY3Rpb24gZHVtcENvbXBvc2VkU2hhZG93VHJlZShub2RlLCBp
bmRlbnQpCit7CisgICAgaW5kZW50ID0gaW5kZW50IHx8ICIiOworICAgIHZhciBvdXRwdXQgPSBp
bmRlbnQgKyBkdW1wTm9kZShub2RlKSArICJcbiI7CisgICAgdmFyIGNoaWxkOworICAgIGZvciAo
Y2hpbGQgPSBpbnRlcm5hbHMuZmlyc3RDaGlsZEJ5V2Fsa2VyKG5vZGUpOyBjaGlsZDsgY2hpbGQg
PSBpbnRlcm5hbHMubmV4dFNpYmxpbmdCeVdhbGtlcihjaGlsZCkpCisgICAgICAgICBvdXRwdXQg
Kz0gZHVtcENvbXBvc2VkU2hhZG93VHJlZShjaGlsZCwgaW5kZW50ICsgIlx0Iik7CisgICAgcmV0
dXJuIG91dHB1dDsKK30KKworZnVuY3Rpb24gcHJlcGFyZURPTVRyZWUocGFyZW50KQoreworICAg
IHBhcmVudC5hcHBlbmRDaGlsZCgKKyAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ3Rv
cCcsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCd9LAorICAgICAgICAgICAgICAgICAgY3Jl
YXRlRE9NKCdkaXYnLCB7J2lkJzogJ3NoYWRvdy1ob3N0JywgJ3N0eWxlJzogJ3BhZGRpbmctdG9w
OiA0MHB4JywgJ3RpdGxlJzogJ2R1bXAnfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2NvbnRlbnQnLCB7J2lkJzogJ2NvbnRlbnQnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQw
cHgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3NlbGVjdCc6ICcjZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLH0pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnc2hhZG93LXJvb3Qt
Y2hpbGQnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnfSkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdkaXN0cmlidXRlZC1saWdodC1j
aGlsZCcsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdkdW1wJ30pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdub24t
ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnfSkp
LAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkZXRhaWxzJywgeydpZCc6ICdkZXRhaWxz
JywgJ29wZW4nOiB0cnVlLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnLCAndGl0bGUnOiAn
ZHVtcCd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnc3VtbWFyeScs
IHsnaWQnOiAnc3VtbWFyeScsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6
ICdkdW1wJ30pKSkpOworCisgICAgZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCdzaGFkb3ctaG9z
dC8nKS5pZCA9ICdzaGFkb3ctcm9vdCc7CisgICAgdmFyIGlkcyA9IFsndG9wJywgJ3NoYWRvdy1o
b3N0JywgJ3NoYWRvdy1ob3N0LycsICdzaGFkb3ctaG9zdC9jb250ZW50JywgJ3NoYWRvdy1ob3N0
L3NoYWRvdy1yb290LWNoaWxkJywKKyAgICAgICAgICAgICAgICdkaXN0cmlidXRlZC1saWdodC1j
aGlsZCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLAorICAgICAgICAgICAgICAgJ2Rl
dGFpbHMnLCAnc3VtbWFyeSddOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKGlk
c1tpXSk7CisgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgcmVj
b3JkRXZlbnQsIGZhbHNlKTsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3Vz
ZW91dCcsIHJlY29yZEV2ZW50LCBmYWxzZSk7CisgICAgfQorICAgIAorICAgIHBhcmVudC5vZmZz
ZXRMZWZ0OworICAgIGRlYnVnKGR1bXBDb21wb3NlZFNoYWRvd1RyZWUocGFyZW50KSk7Cit9CisK
K2Z1bmN0aW9uIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKK3sKKyAgICBkZWJ1Zygn
XG4gICcgKyBldmVudFR5cGUpOworICAgIHZhciBldmVudHMgPSBkaXNwYXRjaGVkRXZlbnQoZXZl
bnRUeXBlKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgZGVidWcoJyAgICAnICsgZXZlbnRzW2ldKQorfQorCitmdW5jdGlvbiBtb3ZlTW91c2Uo
b2xkRWxlbWVudElkLCBuZXdFbGVtZW50SWQpCit7CisgICAgZGVidWcoJ1xuXG4nICsgJ01vdmlu
ZyBtb3VzZSBmcm9tICcgKyBvbGRFbGVtZW50SWQgKyAnIHRvICcgKyBuZXdFbGVtZW50SWQpOwor
ICAgIG1vdmVNb3VzZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG9sZEVsZW1lbnRJZCkp
OworICAgIGNsZWFyRXZlbnRSZWNvcmRzKCk7CisgICAgbW92ZU1vdXNlT3ZlcihnZXROb2RlSW5T
aGFkb3dUcmVlU3RhY2sobmV3RWxlbWVudElkKSk7CisKKyAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVu
dCgnbW91c2VvdXQnKTsKKyAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91c2VvdmVyJyk7Cit9
CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBwcmVw
YXJlRE9NVHJlZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FuZGJveCcpKTsKKworICAgIG1v
dmVNb3VzZSgnc2hhZG93LWhvc3QnLCAnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnKTsK
KyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJywgJ3NoYWRvdy1o
b3N0Jyk7CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0JywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0
LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdzaGFk
b3ctaG9zdCcpOworCisgICAgbW92ZU1vdXNlKCdkZXRhaWxzJywgJ3N1bW1hcnknKTsKKyAgICBt
b3ZlTW91c2UoJ3N1bW1hcnknLCAnZGV0YWlscycpOworCisgICAgbW92ZU1vdXNlKCdzaGFkb3ct
aG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcsICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAg
IG1vdmVNb3VzZSgnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3Qvc2hhZG93
LXJvb3QtY2hpbGQnKTsKKworICAgIC8vIFRoZXNlIGNhc2VzIHNob3VsZCBub3QgaGFwcGVuIHNp
bmNlIG5vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCBpcyBub3QgcmVuZGVyZWQuCisgICAgLy8g
RklYTUU6IFJlYWxseT8KKyAgICAvLyBtb3ZlTW91c2UoJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
JywgJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIC8vIG1vdmVNb3VzZSgnbm9u
LWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7Cisg
ICAgLy8gbW92ZU1vdXNlKCdzaGFkb3ctaG9zdCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hp
bGQnKTsKKyAgICAvLyBtb3ZlTW91c2UoJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdz
aGFkb3ctaG9zdCcpOworfQorCit0ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRh
cnktZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5k
YXJ5LWV2ZW50cy5odG1sCmluZGV4IGVjMmUyZjgwOGFkYTBhNjA3NTRhNDljODBiYzk5M2E4NWEy
NWMxZDkuLmEwYzJjOTE4ZDQ3NGM4MjczMWZiOTBjZTVjYjc1MWQxMDNmNDk5ZTQgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVu
dHMuaHRtbApAQCAtMTQ2LDcgKzE0Niw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAg
ICAnVGFyZ2V0IGlzIGFuIGFuY2VzdG9yIG9mIHJlbGF0ZWRUYXJnZXQuJyk7CiAgICAgc2hvdWxk
QmUoJ2Rpc3BhdGNoZWRFdmVudCgibW91c2VvdmVyIiknLCAnWyJkaXZFKDwtc2hhZG93RikoQGRp
dkUpIl0nKTsKICAgICBzaG91bGRCZSgnZGlzcGF0Y2hlZEV2ZW50KCJtb3VzZW91dCIpJywgJ1si
ZGl2SSg8LWRpdkUpKEBkaXZJKSIsICJzaGFkb3dHKDwtZGl2RSkoQHNoYWRvd0cpIiwgInNoYWRv
d0YoPC1kaXZFKShAc2hhZG93RikiLCAic2hhZG93Rig8LWRpdkUpKEBkaXZFKSJdJyk7Ci0KKyAg
IAogICAgIG1vdmVNb3VzZSgnc2hhZG93RC9zaGFkb3dGL3NoYWRvd0cvZGl2SScsICdzaGFkb3dE
L3NoYWRvd0YnLAogICAgICAgICAgICAgICAnVGFyZ2V0IChzaGFkb3cgaG9zdCkgaXMgYW4gYW5j
ZXN0b3Igb2YgcmVsYXRlZFRhcmdldC4nKTsKICAgICBzaG91bGRCZSgnZGlzcGF0Y2hlZEV2ZW50
KCJtb3VzZW92ZXIiKScsICdbXScpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141355</attachid>
            <date>2012-05-11 01:44:41 -0700</date>
            <delta_ts>2012-05-14 06:43:38 -0700</delta_ts>
            <desc>WIP. Introduce an EventAncestors class.</desc>
            <filename>bug-78586-20120511174439.patch</filename>
            <type>text/plain</type>
            <size>49470</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNjMWI2ZmYzOTczOTdi
ZjA0MjU1Nzc0MjVhZTZhZDIyZDMyZmM0NS4uNzlmN2JmMzU0Y2MyNzhkMzQwNmY2OGE2M2IzNDNm
ZTBmZGQ1M2UxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgdHJlZSBpbnN0ZWFkIG9m
IG9yZGluYWwgRE9NIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdp
dGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OmFkanVzdGVkUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZUFkanVzdGVkUGFyZW50KToKKyAg
ICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg6CisgICAgICAgIChDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyOjpjYW5Dcm9zc1VwcGVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjpjYW5Dcm9zc0xvd2VyQm91bmRhcnkpOgorICAgICAgICAqIGRv
bS9FdmVudENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVu
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dG9Nb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50
cyk6CisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoRXZlbnRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2hvdWxkRGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFNob3Vs
ZERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhp
c3RzSW5TYW1lU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjph
bmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0
Q29tbW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5o
OgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChOb2RlKToKKwog
MjAxMi0wNS0xMCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW1JlZmFjdG9yaW5nXSBNb3ZlIFNlbGVjdGlvbiBmcm9tIERPTVdpbmRvdyB0byBUcmVl
U2NvcGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIu
Y3BwCmluZGV4IDVhNjkzNmM4YzIyMWZlY2EzM2U3ODZiODQ0OTNhNjE1MjhjZTg1NTAuLjBhNThl
N2UwOTA0MDg1YTU1NmU3NTkwZTlmZWU2MjUwMTU2NDhkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwCkBAIC0yMDIsNiArMjAyLDI5IEBA
IHZvaWQgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjpwYXJlbnQoKQogICAgIGFzc2VydFBvc3Rj
b25kaXRpb24oKTsKIH0KIAordm9pZCBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnBhcmVudElu
Y2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpCit7CisgICAgQVNTRVJUKG1fbm9k
ZSk7CisgICAgbV9ub2RlID0gdHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFu
ZFNoYWRvd1Jvb3QobV9ub2RlKTsKK30KKworTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
Ojp0cmF2ZXJzZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdChjb25z
dCBOb2RlKiBub2RlKSBjb25zdAoreworICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBz
aGFkb3dPZlBhcmVudChub2RlKSkgeworICAgICAgICBpZiAoSFRNTENvbnRlbnRTZWxlY3Rpb24q
IHNlbGVjdGlvbiA9IHNoYWRvdy0+c2VsZWN0aW9uRm9yKG5vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIHNlbGVjdGlvbi0+aW5zZXJ0aW9uUG9pbnQoKTsKKyAgICB9CisgICAgaWYgKG5vZGUtPmlz
U2hhZG93Um9vdCgpKSB7CisgICAgICAgIGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0
b1NoYWRvd1Jvb3Qobm9kZSk7CisgICAgICAgIGlmIChzaGFkb3dSb290LT5pc1lvdW5nZXN0KCkp
CisgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpOworICAgICAgICBJbnNlcnRp
b25Qb2ludCogYXNzaWduZWRJbnNlcnRpb25Qb2ludCA9IHNoYWRvd1Jvb3QtPmFzc2lnbmVkVG8o
KTsKKyAgICAgICAgQVNTRVJUKGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQpOworICAgICAgICByZXR1
cm4gYXNzaWduZWRJbnNlcnRpb25Qb2ludDsKKyAgICB9CisgICAgcmV0dXJuIG5vZGUtPnBhcmVu
dE5vZGUoKTsKK30KKwogTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBh
cmVudChjb25zdCBOb2RlKiBub2RlKSBjb25zdAogewogICAgIGlmICghY2FuQ3Jvc3NVcHBlckJv
dW5kYXJ5KCkgJiYgbm9kZS0+aXNTaGFkb3dSb290KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaAppbmRleCA5NzY2YzFhMzY1MDE5MDA4OGI5NGRh
MmE0NDBjMjA2MjZkMGQ0YTkyLi5kYTM0ZWVkNjY2N2ZmYmI2MmU1NjUxM2RmN2VhNzc3ZjBlZmRj
YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5o
CkBAIC01OCw2ICs1OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXZpb3VzU2libGluZygpOwog
CiAgICAgdm9pZCBwYXJlbnQoKTsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlnbm9yZXMgcG9saWN5
LiBBbHdheXMgY3Jvc3MgYW4gdXBwZXIgYm91bmRhcnkuCisgICAgdm9pZCBwYXJlbnRJbmNsdWRp
bmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKTsKIAogICAgIHZvaWQgbmV4dCgpOwogICAg
IHZvaWQgcHJldmlvdXMoKTsKQEAgLTk5LDYgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgTm9kZSog
dHJhdmVyc2VMYXN0Q2hpbGQoY29uc3QgTm9kZSopIGNvbnN0OwogICAgIE5vZGUqIHRyYXZlcnNl
Q2hpbGQoY29uc3QgTm9kZSosIFRyYXZlcnNhbERpcmVjdGlvbikgY29uc3Q7CiAgICAgTm9kZSog
dHJhdmVyc2VQYXJlbnQoY29uc3QgTm9kZSopIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlUGFy
ZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KGNvbnN0IE5vZGUqKSBjb25z
dDsKIAogICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnN0IE5vZGUqKTsK
ICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VQcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcAppbmRleCAyYTVjNTIxMGFhZWY2Yjk0MWJiZGU1
ZGUyOTVjYmEzMzlkMTQyZGY1Li5hMWI1MWMwZTlmZmE0ZTUwOTlhN2M5OGRhNTA5YTgyN2YzNDJl
MmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMyArMzksMjIgQEAgRXZlbnRDb250ZXh0OjpFdmVu
dENvbnRleHQoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBj
dXJyZW4KICAgICA6IG1fbm9kZShub2RlKQogICAgICwgbV9jdXJyZW50VGFyZ2V0KGN1cnJlbnRU
YXJnZXQpCiAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX3JlbGF0ZWRUYXJnZXQoMCkK
IHsKIH0KIAorc3RhdGljIE1vdXNlRXZlbnQqIHRvTW91c2VFdmVudChFdmVudCogZXZlbnQpCit7
CisgICAgQVNTRVJUKGV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7Cit9CisKIHZvaWQgRXZlbnRDb250ZXh0
OjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCogZXZlbnQpIGNvbnN0CiB7CiAgICAgZXZlbnQtPnNl
dFRhcmdldChtX3RhcmdldC5nZXQoKSk7CiAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQobV9j
dXJyZW50VGFyZ2V0LmdldCgpKTsKKyAgICBpZiAobV9yZWxhdGVkVGFyZ2V0LmdldCgpICYmIGV2
ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+c2V0UmVs
YXRlZFRhcmdldChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkpOwogICAgIG1fbm9kZS0+aGFuZGxlTG9j
YWxFdmVudHMoZXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKaW5kZXggNWU3
MzE3ZjQ1Y2Y1NDg1NmEzMjQ5ZDg3ZGQyN2EwODE2NjJkNjc0OC4uNjMyNTgxMDA5MGMwNDI5NzI2
OWNlNTJlNzBlMmRkMTBhZGQxNDQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaApAQCAt
NDIsMTMgKzQyLDE2IEBAIHB1YmxpYzoKIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKICAgICBF
dmVudFRhcmdldCogdGFyZ2V0KCkgY29uc3Q7CisgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQoKSBjb25zdDsKICAgICBib29sIGN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSBjb25zdDsK
ICAgICB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KikgY29uc3Q7CisgICAgdm9pZCBzZXRS
ZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+KTsKIAogcHJpdmF0ZToKICAgICBS
ZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9jdXJyZW50VGFy
Z2V0OwogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV90YXJnZXQ7CisgICAgUmVmUHRyPEV2ZW50
VGFyZ2V0PiBtX3JlbGF0ZWRUYXJnZXQ7CiB9OwogCiBpbmxpbmUgTm9kZSogRXZlbnRDb250ZXh0
Ojpub2RlKCkgY29uc3QKQEAgLTY2LDYgKzY5LDE2IEBAIGlubGluZSBib29sIEV2ZW50Q29udGV4
dDo6Y3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY3VycmVu
dFRhcmdldC5nZXQoKSA9PSBtX3RhcmdldC5nZXQoKTsKIH0KIAoraW5saW5lIEV2ZW50VGFyZ2V0
KiBFdmVudENvbnRleHQ6OnJlbGF0ZWRUYXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jl
bGF0ZWRUYXJnZXQuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkIEV2ZW50Q29udGV4dDo6c2V0UmVs
YXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0KQoreworICAg
IG1fcmVsYXRlZFRhcmdldCA9IHJlbGF0ZWRUYXJnZXQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIEV2
ZW50Q29udGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRj
aE1lZGlhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVkaWF0b3Iu
Y3BwCmluZGV4IGIyNDc0Y2I5NTFlNmM5MTQ2M2NmOWYzMTU4NmRlYzNlNzIzMDlmMzMuLjMwNTQ2
YjQyOTgzYWYwYzE2MzM2ODVjYjU2ZTBjMGQ1NTA5ODJkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwCkBAIC02NCw3ICs2NCw3IEBAIEZvY3VzRXZl
bnREaXNwYXRjaE1lZGlhdG9yOjpGb2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRy
PE5vZGU+IG9sZEZvY3VzCiAKIGJvb2wgRm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3Bh
dGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zdAogewotICAgIGRpc3Bh
dGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgbV9vbGRGb2N1c2VkTm9kZSk7Cisg
ICAgZGlzcGF0Y2hlci0+YWRqdXN0QnlSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIG1fb2xkRm9jdXNl
ZE5vZGUpOwogICAgIHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQo
ZGlzcGF0Y2hlcik7CiB9CiAKQEAgLTgxLDcgKzgxLDcgQEAgQmx1ckV2ZW50RGlzcGF0Y2hNZWRp
YXRvcjo6Qmx1ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPE5vZGU+IG5ld0ZvY3Vz
ZWQKIAogYm9vbCBCbHVyRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50
RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAgICBkaXNwYXRjaGVyLT5hZGp1c3RS
ZWxhdGVkVGFyZ2V0KGV2ZW50KCksIG1fbmV3Rm9jdXNlZE5vZGUpOworICAgIGRpc3BhdGNoZXIt
PmFkanVzdEJ5UmVsYXRlZFRhcmdldChldmVudCgpLCBtX25ld0ZvY3VzZWROb2RlKTsKICAgICBy
ZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDU4NjZlNjA2OGQ2
ZjU5YmE2MjFkMzIxYzU0NGY0ZjI4MzYzYmNlYjkuLmFmNGVjMDE0N2E2NjQzNDIwYmNmNjcwYWVl
ZTNjNzlhZTJjOGE3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBA
IC0yNiwxMCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFdmVudERp
c3BhdGNoZXIuaCIKIAorI2luY2x1ZGUgIkNvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oIgorI2lu
Y2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKICNpbmNsdWRlICJFdmVudENvbnRleHQuaCIKICNpbmNs
dWRlICJFdmVudERpc3BhdGNoTWVkaWF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJNb3VzZUV2
ZW50LmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgpAQCAtNDUsMTYgKzQ4LDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSGFzaFNldDxOb2RlKj4qIGdOb2Rlc0Rp
c3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsKLQotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+
IG1lZGlhdG9yKQotewotICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLQot
ICAgIEV2ZW50RGlzcGF0Y2hlciBkaXNwYXRjaGVyKG5vZGUpOwotICAgIHJldHVybiBtZWRpYXRv
ci0+ZGlzcGF0Y2hFdmVudCgmZGlzcGF0Y2hlcik7Ci19Ci0KIGlubGluZSBzdGF0aWMgRXZlbnRU
YXJnZXQqIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKE5vZGUqIHJlZmVyZW5j
ZU5vZGUpCiB7CiAgICAgQVNTRVJUKHJlZmVyZW5jZU5vZGUpOwpAQCAtODEsNiArNzQsMTM0IEBA
IGlubGluZSBzdGF0aWMgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1Rhcmdl
dFJ1bGVzKE5vZGUqIHJlZmVyZW5jZU5vCiAgICAgcmV0dXJuIHJlZmVyZW5jZU5vZGU7CiB9CiAK
K2lubGluZSBzdGF0aWMgYm9vbCBleGlzdHNJblNhbWVTY29wZShOb2RlKiBub2RlMSwgTm9kZSog
bm9kZTIpCit7CisgICAgcmV0dXJuIG5vZGUxLT50cmVlU2NvcGUoKSA9PSBub2RlMi0+dHJlZVNj
b3BlKCk7Cit9CisKK0V2ZW50QW5jZXN0b3JzOjpFdmVudEFuY2VzdG9ycyhQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUpCisgICAgOiBtX25vZGUobm9kZSkKKyAgICAsIG1fYW5jZXN0b3JzSW5pdGlhbGl6
ZWQoZmFsc2UpCit7Cit9CisKK3ZvaWQgRXZlbnRBbmNlc3RvcnM6OmVuc3VyZUFuY2VzdG9ycyhF
dmVudCogZXZlbnQpCit7CisgICAgaWYgKG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2FuY2VzdG9yc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIgYW5jZXN0b3JXYWxrZXIobV9ub2RlLmdldCgpKTsKKyAgICBFdmVu
dFRhcmdldCogb3JpZ2luYWxUYXJnZXQgPSBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRS
dWxlcyhhbmNlc3RvcldhbGtlci5nZXQoKSk7CisgICAgbV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50
Q29udGV4dChtX25vZGUuZ2V0KCksIG9yaWdpbmFsVGFyZ2V0LCBvcmlnaW5hbFRhcmdldCkpOwor
ICAgIGlmICghbV9ub2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZl
Y3RvcjxFdmVudFRhcmdldCo+IHRhcmdldFN0YWNrOworICAgIHRhcmdldFN0YWNrLmFwcGVuZChv
cmlnaW5hbFRhcmdldCk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9y
V2Fsa2VyLmdldCgpLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKGRldGVybWlu
ZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQsIGFuY2VzdG9yV2Fsa2VyLmdldCgpKSA9PSBTdGF5SW5z
aWRlU2hhZG93RE9NKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGFuY2Vz
dG9yV2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpOwor
ICAgICAgICAgICAgaWYgKCFhbmNlc3RvcldhbGtlci5nZXQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICB0YXJnZXRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgaWYg
KHRhcmdldFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2su
YXBwZW5kKGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGFuY2VzdG9yV2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlv
blBvaW50QW5kU2hhZG93Um9vdCgpOworICAgICAgICAgICAgaWYgKCFhbmNlc3RvcldhbGtlci5n
ZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoaXNJbnNlcnRp
b25Qb2ludChhbmNlc3RvcldhbGtlci5nZXQoKSkgJiYgdG9JbnNlcnRpb25Qb2ludChhbmNlc3Rv
cldhbGtlci5nZXQoKSktPmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2su
YXBwZW5kKGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBtX2FuY2Vz
dG9ycy5hcHBlbmQoRXZlbnRDb250ZXh0KGFuY2VzdG9yV2Fsa2VyLmdldCgpLCBldmVudFRhcmdl
dFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3RvcldhbGtlci5nZXQoKSksIGV4aXN0c0lu
U2FtZVNjb3BlKGFuY2VzdG9yV2Fsa2VyLmdldCgpLCBvcmlnaW5hbFRhcmdldC0+dG9Ob2RlKCkp
ID8gb3JpZ2luYWxUYXJnZXQgOnRhcmdldFN0YWNrLmxhc3QoKSkpOworICAgIH0KK30KKworRXZl
bnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50QW5jZXN0b3JzOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2
aW9yKEV2ZW50KiBldmVudCwgTm9kZSogc2hhZG93Um9vdCkKK3sKKyNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpICYmIEVOQUJMRShWSURFTykKKyAgICAvLyBWaWRlby1vbmx5IGZ1bGwgc2NyZWVu
IGlzIGEgbW9kZSB3aGVyZSB3ZSB1c2UgdGhlIHNoYWRvdyBET00gYXMgYW4gaW1wbGVtZW50YXRp
b24KKyAgICAvLyBkZXRhaWwgdGhhdCBzaG91bGQgbm90IGJlIGRldGVjdGFibGUgYnkgdGhlIHdl
YiBjb250ZW50LgorICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gbV9ub2RlLT5kb2N1bWVudCgp
LT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTog
V2UgYXNzdW1lIHRoYXQgaWYgdGhlIGZ1bGwgc2NyZWVuIGVsZW1lbnQgaXMgYSBtZWRpYSBlbGVt
ZW50IHRoYXQgaXQncworICAgICAgICAvLyB0aGUgdmlkZW8tb25seSBmdWxsIHNjcmVlbi4gQm90
aCBoZXJlIGFuZCBlbHNld2hlcmUuIEJ1dCB0aGF0IGlzIHByb2JhYmx5IHdyb25nLgorICAgICAg
ICBpZiAoZWxlbWVudC0+aXNNZWRpYUVsZW1lbnQoKSAmJiBzaGFkb3dSb290ICYmIHNoYWRvd1Jv
b3QtPnNoYWRvd0hvc3QoKSA9PSBlbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIFN0YXlJbnNp
ZGVTaGFkb3dET007CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2hhZG93Um9vdCk7
CisjZW5kaWYKKworICAgIC8vIFBlciBYQkwgMi4wIHNwZWMsIG11dGF0aW9uIGV2ZW50cyBzaG91
bGQgbmV2ZXIgY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyeToKKyAgICAvLyBodHRwOi8vZGV2Lncz
Lm9yZy8yMDA2L3hibDIvI2V2ZW50LWZsb3ctYW5kLXRhcmdldGluZy1hY3Jvc3Mtc2hhZG93LXMK
KyAgICBpZiAoZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yTXV0
YXRpb25FdmVudCkpCisgICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hhZG93RE9NOworCisgICAg
Ly8gV2ViS2l0IG5ldmVyIGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQgdG8gY3Jvc3MgdGhlIHRo
ZSBzaGFkb3cgRE9NIGJvdW5kYXJ5LgorICAgIC8vIENoYW5naW5nIHRoaXMgYnJlYWtzIGV4aXN0
aW5nIHNpdGVzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTIxOTUgZm9yIGRldGFpbHMuCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQpCisgICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hhZG93
RE9NOworCisgICAgcmV0dXJuIFJldGFyZ2V0RXZlbnQ7Cit9CisKK3ZvaWQgRXZlbnRBbmNlc3Rv
cnM6OmFkanVzdEJ5UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRU
YXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit7CisgICAgZW5zdXJlQW5jZXN0b3JzKGV2ZW50KTsK
KyAgICBpZiAoIXBycFJlbGF0ZWRUYXJnZXQpCisgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8
Tm9kZT4gcmVsYXRlZFRhcmdldCA9IHBycFJlbGF0ZWRUYXJnZXQtPnRvTm9kZSgpOworICAgIGlm
ICghcmVsYXRlZFRhcmdldCkKKyAgICAgICAgcmV0dXJuOworICAgIE5vZGUqIHRhcmdldCA9IG1f
bm9kZS5nZXQoKTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPE5vZGUqPiByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzOworICAgIGZvciAoQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyIHdhbGtlcihyZWxhdGVkVGFyZ2V0LmdldCgpKTsgd2Fsa2VyLmdldCgpOyB3
YWxrZXIucGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCkpCisgICAg
ICAgIHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYXBwZW5kKHdhbGtlci5nZXQoKSk7CisKKyAgICBI
YXNoTWFwPFRyZWVTY29wZSosIEV2ZW50VGFyZ2V0Kj4gcmVsYXRlZFRhcmdldE1hcDsKKyAgICBm
b3IgKFZlY3RvcjxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3Jz
LmJlZ2luKCk7IGl0ZXIgPCByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmVuZCgpOyArK2l0ZXIpCisg
ICAgICAgIHJlbGF0ZWRUYXJnZXRNYXAuYWRkKCgqaXRlciktPnRyZWVTY29wZSgpLCAqaXRlcik7
CisKKyAgICBmb3IgKFZlY3RvcjxFdmVudENvbnRleHQ+OjppdGVyYXRvciBpdGVyID0gbV9hbmNl
c3RvcnMuYmVnaW4oKTsgaXRlciA8IG1fYW5jZXN0b3JzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAg
ICAgaXRlci0+c2V0UmVsYXRlZFRhcmdldChmaW5kUmVsYXRlZFRhcmdldChpdGVyLT5ub2RlKCkt
PnRyZWVTY29wZSgpLCByZWxhdGVkVGFyZ2V0TWFwKSk7CisgICAgICAgIGlmIChpdGVyLT50YXJn
ZXQoKSA9PSBpdGVyLT5yZWxhdGVkVGFyZ2V0KCkpIHsKKyAgICAgICAgICAgIC8vIEV2ZW50IGRp
c3BhdGNoaW5nIHNob3VsZCBiZSBzdG9wcGVkIGhlcmUuCisgICAgICAgICAgICBtX2FuY2VzdG9y
cy5zaHJpbmsoaXRlciAtIG1fYW5jZXN0b3JzLmJlZ2luKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK0V2ZW50VGFyZ2V0KiBFdmVudEFuY2VzdG9yczo6Zmlu
ZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKiBzY29wZSwgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVu
dFRhcmdldCo+JiByZWxhdGVkVGFyZ2V0TWFwKQoreworICAgIGlmICghc2NvcGUpCisgICAgICAg
IHJldHVybiAwOworICAgIEhhc2hNYXA8VHJlZVNjb3BlKiwgRXZlbnRUYXJnZXQqPjo6aXRlcmF0
b3IgZm91bmQgPSByZWxhdGVkVGFyZ2V0TWFwLmZpbmQoc2NvcGUpOworICAgIGlmIChmb3VuZCAh
PSByZWxhdGVkVGFyZ2V0TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZm91bmQtPnNlY29uZDsK
KyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IGZpbmRSZWxhdGVkVGFyZ2V0KHNjb3Bl
LT5wYXJlbnRUcmVlU2NvcGUoKSwgcmVsYXRlZFRhcmdldE1hcCk7CisgICAgcmVsYXRlZFRhcmdl
dE1hcC5hZGQoc2NvcGUsIHJlbGF0ZWRUYXJnZXQpOworICAgIHJldHVybiByZWxhdGVkVGFyZ2V0
OworfQorCitzdGF0aWMgSGFzaFNldDxOb2RlKj4qIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVk
Q2xpY2tzID0gMDsKKworYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSog
bm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlhdG9yKQoreworICAg
IEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKKworICAgIEV2ZW50RGlzcGF0Y2hl
ciBkaXNwYXRjaGVyKG5vZGUpOworICAgIHJldHVybiBtZWRpYXRvci0+ZGlzcGF0Y2hFdmVudCgm
ZGlzcGF0Y2hlcik7Cit9CisKIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2
ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRv
cikKIHsKICAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgdGFyZ2V0IGhlcmUgYmVjYXVzZSBpdCBj
YW4gZ28gYXdheSBieSB0aGUgdGltZSB3ZSBhY3R1YWxseSBmaXJlIHRoZSBldmVudC4KQEAgLTEx
NiwxNDggKzIzNywyMiBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRD
bGljayhOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcgogICAgIGdOb2Rlc0Rpc3Bh
dGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5yZW1vdmUobm9kZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NoYWRvd0hvc3QoTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aGFzU2hhZG93Um9vdCgpOwotfQotCi1QYXNz
UmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNoZXI6OmFkanVzdFRvU2hhZG93Qm91bmRh
cmllcyhQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQsIGNvbnN0IFZlY3RvcjxOb2RlKj4g
cmVsYXRlZFRhcmdldEFuY2VzdG9ycykKLXsKLSAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29u
c3RfaXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSBtX2FuY2VzdG9ycy5lbmQoKTsKLSAg
ICAvLyBBc3N1bWUgZGl2ZXJnZW50IGJvdW5kYXJ5IGlzIHRoZSByZWxhdGVkVGFyZ2V0IGl0c2Vs
ZiAoaW4gb3RoZXIgd29yZHMsIHJlbGF0ZWQgdGFyZ2V0IGFuY2VzdG9yIGNoYWluIGRvZXMgbm90
IGNyb3NzIGFueSBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgotICAgIFZlY3RvcjxOb2RlKj46OmNv
bnN0X2l0ZXJhdG9yIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0
b3JzLmJlZ2luKCk7Ci0KLSAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3Ig
dGFyZ2V0QW5jZXN0b3IgPSBtX2FuY2VzdG9ycy5lbmQoKTsKLSAgICAvLyBXYWxrIGRvd24gZnJv
bSB0aGUgdG9wLCBsb29raW5nIGZvciBsb3dlc3QgY29tbW9uIGFuY2VzdG9yLCBhbHNvIG1vbml0
b3Jpbmcgc2hhZG93IERPTSBib3VuZGFyaWVzLgotICAgIGJvb2wgZGl2ZXJnZWQgPSBmYWxzZTsK
LSAgICBmb3IgKFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGkgPSByZWxhdGVkVGFyZ2V0
QW5jZXN0b3JzLmVuZCgpIC0gMTsgaSA+PSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7
IC0taSkgewotICAgICAgICBpZiAoZGl2ZXJnZWQpIHsKLSAgICAgICAgICAgIGlmICgoKmkpLT5p
c1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAgIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkg
PSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRhcmdldEFuY2VzdG9yID09
IG1fYW5jZXN0b3JzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIGRpdmVyZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdGFyZ2V0QW5jZXN0b3It
LTsKLQotICAgICAgICBpZiAoKCppKS0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAgICBsb3dl
c3RDb21tb25Cb3VuZGFyeSA9IHRhcmdldEFuY2VzdG9yOwotCi0gICAgICAgIGlmICgoKmkpICE9
ICgqdGFyZ2V0QW5jZXN0b3IpLm5vZGUoKSkKLSAgICAgICAgICAgIGRpdmVyZ2VkID0gdHJ1ZTsK
LSAgICB9CiAKLSAgICBpZiAoIWRpdmVyZ2VkKSB7Ci0gICAgICAgIC8vIFRoZSByZWxhdGVkVGFy
Z2V0IGlzIGFuIGFuY2VzdG9yIG9yIHNoYWRvd0hvc3Qgb2YgdGhlIHRhcmdldC4KLSAgICAgICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGUgZmlyc3QgY2hlY2sgb25jZSBjb252ZXJzaW9uIHRvIG5ldyBz
aGFkb3cgRE9NIGlzIGNvbXBsZXRlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ4Njk4PgotICAgICAg
ICBpZiAobV9ub2RlLT5zaGFkb3dIb3N0KCkgPT0gcmVsYXRlZFRhcmdldC5nZXQoKSB8fCBpc1No
YWRvd0hvc3QocmVsYXRlZFRhcmdldC5nZXQoKSkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxFdmVu
dENvbnRleHQ+Ojpjb25zdF9pdGVyYXRvciByZWxhdGVkVGFyZ2V0Q2hpbGQgPSB0YXJnZXRBbmNl
c3RvciAtIDE7Ci0gICAgICAgICAgICBpZiAocmVsYXRlZFRhcmdldENoaWxkID49IG1fYW5jZXN0
b3JzLmJlZ2luKCkgJiYgcmVsYXRlZFRhcmdldENoaWxkLT5ub2RlKCktPmlzU2hhZG93Um9vdCgp
KQotICAgICAgICAgICAgICAgIGxvd2VzdENvbW1vbkJvdW5kYXJ5ID0gcmVsYXRlZFRhcmdldENo
aWxkOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgoKmZpcnN0RGl2ZXJnZW50Qm91bmRhcnkp
ID09IG1fbm9kZS5nZXQoKSkgewotICAgICAgICAvLyBTaW5jZSBhbmNlc3RvcnMgZG9lcyBub3Qg
Y29udGFpbiB0YXJnZXQgaXRzZWxmLCB3ZSBtdXN0IGFjY291bnQKLSAgICAgICAgLy8gZm9yIHRo
ZSBwb3NzaWJpbGl0eSB0aGF0IHRhcmdldCBpcyBhIHNoYWRvd0hvc3Qgb2YgcmVsYXRlZFRhcmdl
dAotICAgICAgICAvLyBhbmQgdGh1cyBzZXJ2ZXMgYXMgdGhlIGxvd2VzdENvbW1vbkJvdW5kYXJ5
LgotICAgICAgICAvLyBMdWNraWx5LCBpbiB0aGlzIGNhc2UgdGhlIGZpcnN0RGl2ZXJnZW50Qm91
bmRhcnkgaXMgdGFyZ2V0LgotICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IG1fYW5jZXN0
b3JzLmJlZ2luKCk7Ci0gICAgICAgIG1fc2hvdWxkUHJldmVudERpc3BhdGNoID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAobG93ZXN0Q29tbW9uQm91bmRhcnkgIT0gbV9hbmNlc3RvcnMuZW5kKCkp
IHsKLSAgICAgICAgLy8gVHJpbSBhbmNlc3RvcnMgdG8gbG93ZXN0Q29tbW9uQm91bmRhcnkgdG8g
a2VlcCBldmVudHMgaW5zaWRlIG9mIHRoZSBjb21tb24gc2hhZG93IERPTSBzdWJ0cmVlLgotICAg
ICAgICBtX2FuY2VzdG9ycy5zaHJpbmsobG93ZXN0Q29tbW9uQm91bmRhcnkgLSBtX2FuY2VzdG9y
cy5iZWdpbigpKTsKLSAgICB9Ci0gICAgLy8gU2V0IGV2ZW50J3MgcmVsYXRlZCB0YXJnZXQgdG8g
dGhlIGZpcnN0IGVuY291bnRlcmVkIHNoYWRvdyBET00gYm91bmRhcnkgaW4gdGhlIGRpdmVyZ2Vu
dCBzdWJ0cmVlLgotICAgIHJldHVybiBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5ICE9IHJlbGF0ZWRU
YXJnZXRBbmNlc3RvcnMuYmVnaW4oKSA/ICpmaXJzdERpdmVyZ2VudEJvdW5kYXJ5IDogcmVsYXRl
ZFRhcmdldDsKLX0KIAotaW5saW5lIHN0YXRpYyBib29sIGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91
bmRhcmllcyhjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQordm9pZCBFdmVu
dERpc3BhdGNoZXI6OmFkanVzdEJ5UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQ
dHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCiB7Ci0gICAgcmV0dXJuIGFuY2VzdG9y
cy5pc0VtcHR5KCkgfHwgYW5jZXN0b3JzLmZpcnN0KCkubm9kZSgpID09IGFuY2VzdG9ycy5sYXN0
KCkubm9kZSgpOwotfQotCi0vLyBGSVhNRTogT25jZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTI5NjMgbGFuZHMsIHRoaXMgc2hvdWxkCi0vLyBiZSBncmVhdGx5IGlt
cHJvdmVkLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDI1
LgotUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gRXZlbnREaXNwYXRjaGVyOjphZGp1c3RSZWxhdGVk
VGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRh
cmdldCkKLXsKLSAgICBpZiAoIXBycFJlbGF0ZWRUYXJnZXQpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQgPSBwcnBSZWxhdGVkVGFyZ2V0LT50b05v
ZGUoKTsKLSAgICBpZiAoIXJlbGF0ZWRUYXJnZXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Tm9kZSogdGFyZ2V0ID0gbV9ub2RlLmdldCgpOwotICAgIGlmICghdGFyZ2V0KQotICAgICAgICBy
ZXR1cm4gcHJwUmVsYXRlZFRhcmdldDsKLQotICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50
KTsKLQotICAgIC8vIENhbGN1bGF0ZSBlYXJseSBpZiB0aGUgY29tbW9uIGJvdW5kYXJ5IGlzIGV2
ZW4gcG9zc2libGUgYnkgbG9va2luZyBhdAotICAgIC8vIGFuY2VzdG9ycyBzaXplIGFuZCBpZiB0
aGUgcmV0YXJnZXRpbmcgaGFzIG9jY3VyZWQgKGluZGljYXRpbmcgdGhlIHByZXNlbmNlIG9mIHNo
YWRvdyBET00gYm91bmRhcmllcykuCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGJvdW5kYXJpZXMg
ZGV0ZWN0ZWQsIHRoZSB0YXJnZXQgYW5kIHJlbGF0ZWQgdGFyZ2V0IGNhbid0IGhhdmUgYSBjb21t
b24gYm91bmRhcnkuCi0gICAgYm9vbCBub0NvbW1vbkJvdW5kYXJ5ID0gYW5jZXN0b3JzQ3Jvc3NT
aGFkb3dCb3VuZGFyaWVzKG1fYW5jZXN0b3JzKTsKLQotICAgIFZlY3RvcjxOb2RlKj4gcmVsYXRl
ZFRhcmdldEFuY2VzdG9yczsKLSAgICBOb2RlKiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IHJl
bGF0ZWRUYXJnZXQuZ2V0KCk7Ci0gICAgZm9yIChOb2RlKiBuID0gb3V0ZXJtb3N0U2hhZG93Qm91
bmRhcnk7IG47IG4gPSBuLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKLSAgICAgICAgaWYgKG4tPmlz
U2hhZG93Um9vdCgpKQotICAgICAgICAgICAgb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSBuLT5w
YXJlbnRPckhvc3ROb2RlKCk7Ci0gICAgICAgIGlmICghbm9Db21tb25Cb3VuZGFyeSkKLSAgICAg
ICAgICAgIHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYXBwZW5kKG4pOwotICAgIH0KLQotICAgIC8v
IFNob3J0LWNpcmN1aXQgdGhlIGZhc3QgY2FzZSB3aGVuIHdlIGtub3cgdGhlcmUgaXMgbm8gbmVl
ZCB0byBjYWxjdWxhdGUgYSBjb21tb24gYm91bmRhcnkuCi0gICAgaWYgKG5vQ29tbW9uQm91bmRh
cnkpCi0gICAgICAgIHJldHVybiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeTsKLQotICAgIHJldHVy
biBhZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMocmVsYXRlZFRhcmdldC5yZWxlYXNlKCksIHJlbGF0
ZWRUYXJnZXRBbmNlc3RvcnMpOworICAgIG1fZXZlbnRBbmNlc3RvcnMuYWRqdXN0QnlSZWxhdGVk
VGFyZ2V0KGV2ZW50LCBwcnBSZWxhdGVkVGFyZ2V0KTsKIH0KIAogRXZlbnREaXNwYXRjaGVyOjpF
dmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKICAgICA6IG1fbm9kZShub2RlKQotICAgICwgbV9h
bmNlc3RvcnNJbml0aWFsaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkUHJldmVudERpc3BhdGNo
KGZhbHNlKQorICAgICwgbV9ldmVudEFuY2VzdG9ycyhub2RlKQogewogICAgIEFTU0VSVChub2Rl
KTsKICAgICBtX3ZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCk7CiB9CiAKLXZvaWQgRXZl
bnREaXNwYXRjaGVyOjplbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCogZXZlbnQpCi17Ci0gICAg
aWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
YW5jZXN0b3JzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5jZXN0b3Jz
SW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgTm9kZSogYW5jZXN0b3IgPSBtX25vZGUuZ2V0KCk7
Ci0gICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1Rhcmdl
dFJ1bGVzKGFuY2VzdG9yKTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAoYW5jZXN0
b3ItPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hC
ZWhhdmlvcihldmVudCwgYW5jZXN0b3IpID09IFN0YXlJbnNpZGVTaGFkb3dET00pCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+c2hhZG93
SG9zdCgpOwotICAgICAgICAgICAgaWYgKCFtX25vZGUtPmlzU1ZHRWxlbWVudCgpKQotICAgICAg
ICAgICAgICAgIHRhcmdldCA9IGFuY2VzdG9yOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKLQot
ICAgICAgICBpZiAoIWFuY2VzdG9yKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1f
YW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQoYW5jZXN0b3IsIGV2ZW50VGFyZ2V0UmVzcGVj
dGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKSwgdGFyZ2V0KSk7Ci0gICAgfQotfQogCiBib29s
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkK
IHsKQEAgLTI2OCwxNSArMjYzLDE1IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIEFTU0VSVCghZXZlbnQtPnR5cGUoKS5p
c051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjYW4gY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4g
ZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgogCiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBvcmln
aW5hbFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsKLSAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhl
dmVudC5nZXQoKSk7CisgICAgbV9ldmVudEFuY2VzdG9ycy5lbnN1cmVBbmNlc3RvcnMoZXZlbnQu
Z2V0KCkpOwogCiAgICAgV2luZG93RXZlbnRDb250ZXh0IHdpbmRvd0NvbnRleHQoZXZlbnQuZ2V0
KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkpOwogCi0gICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bERpc3BhdGNoRXZlbnQobV9ub2RlLT5kb2N1bWVudCgpLCAqZXZlbnQsIHdpbmRvd0NvbnRleHQu
d2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9hbmNlc3RvcnMpOworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxE
aXNwYXRjaEV2ZW50KG1fbm9kZS0+ZG9jdW1lbnQoKSwgKmV2ZW50LCB3aW5kb3dDb250ZXh0Lndp
bmRvdygpLCBtX2V2ZW50QW5jZXN0b3JzKTsKIAogICAgIC8vIEdpdmUgdGhlIHRhcmdldCBub2Rl
IGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBiZWZvcmUgRE9NIGV2ZW50IGhhbmRsZXJzIGdldCBh
IGNyYWNrLgogICAgIHZvaWQqIGRhdGEgPSBtX25vZGUtPnByZURpc3BhdGNoRXZlbnRIYW5kbGVy
KGV2ZW50LmdldCgpKTsKLSAgICBpZiAobV9zaG91bGRQcmV2ZW50RGlzcGF0Y2ggfHwgZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgIGlmIChtX2V2ZW50QW5jZXN0b3JzLmlzRW1wdHko
KSB8fCBtX3Nob3VsZFByZXZlbnREaXNwYXRjaCB8fCBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCiAgICAgLy8gVHJpZ2dlciBjYXB0
dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSB0b3AgYW5kIHdvcmtpbmcgb3Vy
IHdheSBkb3duLgpAQCAtMjg1LDE1ICsyODAsMTQgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgaWYgKHdpbmRvd0NvbnRl
eHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpICYmIGV2ZW50LT5wcm9wYWdhdGlvblN0
b3BwZWQoKSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKLSAgICBmb3IgKHNpemVf
dCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpOyBpOyAtLWkpIHsKLSAgICAgICAgY29uc3QgRXZlbnRD
b250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpLTFdOwotICAgICAgICBpZiAoZXZl
bnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkgeworICAgIGZvciAoVmVjdG9y
PEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50QW5jZXN0b3JzLmVu
ZCgpIC0gMTsgaXRlciA+IG1fZXZlbnRBbmNlc3RvcnMuYmVnaW4oKTsgLS1pdGVyKSB7CisgICAg
ICAgIGlmIChpdGVyLT5jdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkpIHsKICAgICAgICAgICAg
IGlmIChldmVudC0+YnViYmxlcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19Q
SEFTRSk7Ci0gICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQo
KSk7CisgICAgICAgIGl0ZXItPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKICAgICAg
ICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgICAgIGdvdG8gZG9u
ZURpc3BhdGNoaW5nOwogICAgIH0KQEAgLTMwMSw3ICsyOTUsNyBAQCBib29sIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBldmVudC0+
c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KG9y
aWdpbmFsVGFyZ2V0LmdldCgpKTsKICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChldmVudFRh
cmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKLSAgICBtX25vZGUt
PmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKKyAgICBtX2V2ZW50QW5jZXN0b3JzLmZp
cnN0KCktPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKICAgICBpZiAoZXZlbnQtPnBy
b3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKIApAQCAt
MzA5LDE0ICszMDMsMTIgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgICAgIC8vIFRyaWdnZXIgYnViYmxpbmcgZXZlbnQg
aGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSBib3R0b20gYW5kIHdvcmtpbmcgb3VyIHdheSB1cC4K
ICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKIAot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEV2ZW50Q29u
dGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07Ci0gICAgICAgICAgICBpZiAoZXZl
bnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkKKyAgICAgICAgZm9yIChWZWN0
b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZXZlbnRBbmNlc3RvcnMu
YmVnaW4oKSArIDE7IGl0ZXIgPCBtX2V2ZW50QW5jZXN0b3JzLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgIGlmIChpdGVyLT5jdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkpCiAgICAgICAg
ICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJV
QkJMSU5HX1BIQVNFKTsKLSAgICAgICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50
cyhldmVudC5nZXQoKSk7CisgICAgICAgICAgICBpdGVyLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVu
dC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8
IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRj
aGluZzsKICAgICAgICAgfQpAQCAtMzQzLDkgKzMzNSw4IEBAIGRvbmVEaXNwYXRjaGluZzoKICAg
ICAgICAgLy8gRm9yIGJ1YmJsaW5nIGV2ZW50cywgY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRsZXJz
IG9uIHRoZSBzYW1lIHRhcmdldHMgaW4gdGhlCiAgICAgICAgIC8vIHNhbWUgb3JkZXIgYXMgdGhl
IGJ1YmJsaW5nIHBoYXNlLgogICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkgewotICAgICAg
ICAgICAgc2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIG1fYW5jZXN0
b3JzW2ldLm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7CisgICAgICAg
ICAgICBmb3IgKFZlY3RvcjxFdmVudENvbnRleHQ+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9l
dmVudEFuY2VzdG9ycy5iZWdpbigpICsgMTsgaXRlciA8IG1fZXZlbnRBbmNlc3RvcnMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICAgICAgICAgIGl0ZXItPm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVk
KCkpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZVdpdGhEZWZhdWx0OwpAQCAtMzY2LDM2
ICszNTcsOCBAQCBkb25lV2l0aERlZmF1bHQ6CiAKIGNvbnN0IEV2ZW50Q29udGV4dCogRXZlbnRE
aXNwYXRjaGVyOjp0b3BFdmVudENvbnRleHQoKQogewotICAgIHJldHVybiBtX2FuY2VzdG9ycy5p
c0VtcHR5KCkgPyAwIDogJm1fYW5jZXN0b3JzLmxhc3QoKTsKKyAgICByZXR1cm4gbV9ldmVudEFu
Y2VzdG9ycy5pc0VtcHR5KCkgPyAwIDogbV9ldmVudEFuY2VzdG9ycy5sYXN0KCk7CiB9CiAKLUV2
ZW50RGlzcGF0Y2hCZWhhdmlvciBFdmVudERpc3BhdGNoZXI6OmRldGVybWluZURpc3BhdGNoQmVo
YXZpb3IoRXZlbnQqIGV2ZW50LCBOb2RlKiBzaGFkb3dSb290KQotewotI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkgJiYgRU5BQkxFKFZJREVPKQotICAgIC8vIFZpZGVvLW9ubHkgZnVsbCBzY3Jl
ZW4gaXMgYSBtb2RlIHdoZXJlIHdlIHVzZSB0aGUgc2hhZG93IERPTSBhcyBhbiBpbXBsZW1lbnRh
dGlvbgotICAgIC8vIGRldGFpbCB0aGF0IHNob3VsZCBub3QgYmUgZGV0ZWN0YWJsZSBieSB0aGUg
d2ViIGNvbnRlbnQuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBtX25vZGUtPmRvY3VtZW50
KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBXZSBhc3N1bWUgdGhhdCBpZiB0aGUgZnVsbCBzY3JlZW4gZWxlbWVudCBpcyBhIG1lZGlhIGVs
ZW1lbnQgdGhhdCBpdCdzCi0gICAgICAgIC8vIHRoZSB2aWRlby1vbmx5IGZ1bGwgc2NyZWVuLiBC
b3RoIGhlcmUgYW5kIGVsc2V3aGVyZS4gQnV0IHRoYXQgaXMgcHJvYmFibHkgd3JvbmcuCi0gICAg
ICAgIGlmIChlbGVtZW50LT5pc01lZGlhRWxlbWVudCgpICYmIHNoYWRvd1Jvb3QgJiYgc2hhZG93
Um9vdC0+c2hhZG93SG9zdCgpID09IGVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gU3RheUlu
c2lkZVNoYWRvd0RPTTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzaGFkb3dSb290
KTsKLSNlbmRpZgotCi0gICAgLy8gUGVyIFhCTCAyLjAgc3BlYywgbXV0YXRpb24gZXZlbnRzIHNo
b3VsZCBuZXZlciBjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJ5OgotICAgIC8vIGh0dHA6Ly9kZXYu
dzMub3JnLzIwMDYveGJsMi8jZXZlbnQtZmxvdy1hbmQtdGFyZ2V0aW5nLWFjcm9zcy1zaGFkb3ct
cwotICAgIGlmIChldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JN
dXRhdGlvbkV2ZW50KSkKLSAgICAgICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFkb3dET007Ci0KLSAg
ICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0byBjcm9zcyB0aGUg
dGhlIHNoYWRvdyBET00gYm91bmRhcnkuCi0gICAgLy8gQ2hhbmdpbmcgdGhpcyBicmVha3MgZXhp
c3Rpbmcgc2l0ZXMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCkKLSAgICAgICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFk
b3dET007Ci0KLSAgICByZXR1cm4gUmV0YXJnZXRFdmVudDsKLX0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDg1YWVmYzQ5MzA0M2Q1MTdlYzk3NzM0ZTYyMThhYWQ4
MWQxNzkwNjcuLjJiOGU1YmY5NDBlNzNkNDkyYTE4ZGUyNDlkOTczYTRhNWQ3NGI5NjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTI3LDggKzI3LDExIEBACiAjZGVmaW5l
IEV2ZW50RGlzcGF0Y2hlcl9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjaW5jbHVkZSAiRXZl
bnRDb250ZXh0LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7CkBAIC00
MCwxMiArNDMsMzQgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsK
IGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKK2Ns
YXNzIFRyZWVTY29wZTsKIAogZW51bSBFdmVudERpc3BhdGNoQmVoYXZpb3IgewogICAgIFJldGFy
Z2V0RXZlbnQsCiAgICAgU3RheUluc2lkZVNoYWRvd0RPTQogfTsKIAorY2xhc3MgRXZlbnRBbmNl
c3RvcnMgeworcHVibGljOgorICAgIEV2ZW50QW5jZXN0b3JzKFBhc3NSZWZQdHI8Tm9kZT4pOwor
ICAgIHZvaWQgZW5zdXJlQW5jZXN0b3JzKEV2ZW50Kik7CisgICAgdm9pZCBhZGp1c3RCeVJlbGF0
ZWRUYXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0
KTsKKyAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBtX2FuY2VzdG9ycy5iZWdpbigpOyB9CisgICAgVmVjdG9yPEV2ZW50Q29udGV4
dD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jZXN0b3JzLmVuZCgp
OyB9CisgICAgLy8gVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIGFuY2VzdG9y
c19iZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5jZXN0b3JzLmJlZ2luKCkgKyAxOyB9CisgICAg
Y29uc3QgRXZlbnRDb250ZXh0KiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuICZtX2FuY2VzdG9ycy5m
aXJzdCgpOyB9CisgICAgY29uc3QgRXZlbnRDb250ZXh0KiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
Jm1fYW5jZXN0b3JzLmxhc3QoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fYW5jZXN0b3JzLmlzRW1wdHkoKTsgfQorcHJpdmF0ZToKKyAgICBFdmVudERpc3BhdGNoQmVo
YXZpb3IgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCosIE5vZGUqIHNoYWRvd1Jvb3Qp
OworICAgIHN0YXRpYyBFdmVudFRhcmdldCogZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKiwg
SGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVudFRhcmdldCo+Jik7CisKKyAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlOworICAgIGJvb2wgbV9hbmNlc3RvcnNJbml0aWFsaXplZDsKKyAgICAvLyBtX2FuY2Vz
dG9ycyBpbmNsdWRlcyBhIHRhcmdldCBub2RlIGFzIHRoZSBmaXJzdCBlbGVtZW50LgorICAgIFZl
Y3RvcjxFdmVudENvbnRleHQ+IG1fYW5jZXN0b3JzOworfTsKKwogY2xhc3MgRXZlbnREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEV2ZW50KE5vZGUqLCBQYXNz
UmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4pOwpAQCAtNTQsMjMgKzc5LDE4IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVm
UHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNo
b3dQcmVzc2VkTG9vayk7CiAKICAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOwotICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGFkanVzdFJlbGF0ZWRUYXJnZXQoRXZl
bnQqLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBhZGp1c3RCeVJlbGF0ZWRU
YXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KTsK
ICAgICBOb2RlKiBub2RlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRXZlbnREaXNwYXRjaGVy
KE5vZGUqKTsKLQotICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGFkanVzdFRvU2hhZG93Qm91
bmRhcmllcyhQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQsIGNvbnN0IFZlY3RvcjxOb2Rl
Kj4gcmVsYXRlZFRhcmdldEFuY2VzdG9ycyk7Ci0gICAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRl
dGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqLCBOb2RlKiBzaGFkb3dSb290KTsKLSAgICB2
b2lkIGVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50Kik7CiAgICAgY29uc3QgRXZlbnRDb250ZXh0
KiB0b3BFdmVudENvbnRleHQoKTsKIAotICAgIFZlY3RvcjxFdmVudENvbnRleHQ+IG1fYW5jZXN0
b3JzOwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBt
X29yaWdpbmFsVGFyZ2V0OwogICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmlldzsKLSAgICBib29s
IG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQ7CiAgICAgYm9vbCBtX3Nob3VsZFByZXZlbnREaXNwYXRj
aDsKKyAgICBFdmVudEFuY2VzdG9ycyBtX2V2ZW50QW5jZXN0b3JzOwogfTsKIAogaW5saW5lIE5v
ZGUqIEV2ZW50RGlzcGF0Y2hlcjo6bm9kZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5j
cHAKaW5kZXggYzM2ODljNmRkNDYzYWVlMDU2Mjg4MTcyZTI1NGRjM2VjZmIyNWQwYi4uYTE5ZDhh
MjFkNWIzYjMxZDY1OTlmYmY5NTA3YjQ2NjQ1NzM2NzljYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2
ZW50LmNwcApAQCAtMjAxLDggKzIwMSw4IEBAIGJvb2wgTW91c2VFdmVudERpc3BhdGNoTWVkaWF0
b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zCiAgICAg
aWYgKGV2ZW50KCktPnR5cGUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
U2hvdWxkbid0IGhhcHBlbi4KIAotICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdl
dCA9IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZlbnQoKS0+cmVs
YXRlZFRhcmdldCgpKTsKLSAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJn
ZXQpOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQoKS0+cmVsYXRlZFRh
cmdldCgpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRhcmdldChldmVudCgpLCBy
ZWxhdGVkVGFyZ2V0KTsKIAogICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoRXZlbnQoZXZlbnQoKSk7
CiAgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBldmVudCgpLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGV2
ZW50KCktPmRlZmF1bHRQcmV2ZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9VSUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcAppbmRleCBmZjNm
ZjRhZmNmOWIyMTIxMWI3YjUzMWZhZjU0N2QxM2VmOGZkNTY5Li43MWIxZGI3ZGJkYjlkZDhlOTky
YjUzMmM5MGMyOWM0OTcxNTgxMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVUlF
dmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuY3BwCkBAIC0xMjMsNyAr
MTIzLDcgQEAgRm9jdXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Rm9jdXNJbkV2ZW50RGlzcGF0
Y2hNZWRpYXRvcihQYXNzUmVmUHRyPEV2ZW50PiBldmUKIAogYm9vbCBGb2N1c0luRXZlbnREaXNw
YXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikg
Y29uc3QKIHsKLSAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIG1f
b2xkRm9jdXNlZE5vZGUpOworICAgIGRpc3BhdGNoZXItPmFkanVzdEJ5UmVsYXRlZFRhcmdldChl
dmVudCgpLCBtX29sZEZvY3VzZWROb2RlKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlh
dG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC0xNDAsNyArMTQwLDcgQEAg
Rm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3VzT3V0RXZlbnREaXNwYXRjaE1lZGlh
dG9yKFBhc3NSZWZQdHI8RXZlbnQ+IGUKIAogYm9vbCBGb2N1c091dEV2ZW50RGlzcGF0Y2hNZWRp
YXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7
Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBtX25ld0ZvY3Vz
ZWROb2RlKTsKKyAgICBkaXNwYXRjaGVyLT5hZGp1c3RCeVJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwg
bV9uZXdGb2N1c2VkTm9kZSk7CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlz
cGF0Y2hFdmVudChkaXNwYXRjaGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCAwNWE4YWQ2OTY5ZDI3
NGIwNjk5NzExM2M4NGE3OGEzYWM3M2UzNThjLi4yMTAwYWIyYTY0MDNkMGJjN2JiOTljNjlkYTEw
MjA2NTljYWQzODcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudENvbnRl
eHQuaCIKKyNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaCIKQEAgLTgyLDE3ICs4MywxMyBAQCBz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgdGltZXJGaXJlZEV2ZW50TmFtZSA9ICJ0aW1lckZpcmVk
IjsKIAogaW50IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c19mcm9udGVuZENvdW50ZXIgPSAw
OwogCi1zdGF0aWMgYm9vbCBldmVudEhhc0xpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgRE9NV2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxFdmVu
dENvbnRleHQ+JiBhbmNlc3RvcnMpCitzdGF0aWMgYm9vbCBldmVudEhhc0xpc3RlbmVycyhjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRE9NV2luZG93KiB3aW5kb3csIGNvbnN0IEV2ZW50
QW5jZXN0b3JzJiBhbmNlc3RvcnMpCiB7CiAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPmhhc0V2
ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYg
KG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgTm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaV0ubm9kZSgpOwotICAgICAgICBp
ZiAoYW5jZXN0b3ItPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCisgICAgZm9yIChWZWN0
b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGFuY2VzdG9ycy5iZWdpbigp
OyBpdGVyICE9IGFuY2VzdG9ycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5u
b2RlKCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTMwMiwxMSArMjk5LDExIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0
cnVtCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZENoYW5nZVhIUlJlYWR5U3RhdGUoKTsKIH0K
IAotSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93KiB3aW5kb3csIE5vZGUqIG5v
ZGUsIGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBhbmNlc3RvcnMpCitJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hF
dmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3Qg
RXZlbnQmIGV2ZW50LCBET01XaW5kb3cqIHdpbmRvdywgY29uc3QgRXZlbnRBbmNlc3RvcnMmIGFu
Y2VzdG9ycykKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKICAgICBJbnNwZWN0b3JU
aW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVj
dG9yVGltZWxpbmVBZ2VudCgpOwotICAgIGlmICh0aW1lbGluZUFnZW50ICYmIGV2ZW50SGFzTGlz
dGVuZXJzKGV2ZW50LnR5cGUoKSwgd2luZG93LCBub2RlLCBhbmNlc3RvcnMpKSB7CisgICAgaWYg
KHRpbWVsaW5lQWdlbnQgJiYgZXZlbnRIYXNMaXN0ZW5lcnMoZXZlbnQudHlwZSgpLCB3aW5kb3cs
IGFuY2VzdG9ycykpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbERpc3BhdGNoRXZlbnQo
ZXZlbnQpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaAppbmRleCBhMTcyMDM0YjEzOTE3ZjNjNjdmOGJmMDE0OGJhMDM3NjU2ZmU0YTM2
Li45NDBmMTQxZWJiMzhjOTRjYjg5YzQ3YWM4YTA3ZGZmNzMwOWFlYjIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC00
OSw2ICs0OSw3IEBAIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKIGNsYXNzIERhdGFiYXNlOwogY2xh
c3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50Q29udGV4dDsKK2NsYXNzIEV2ZW50QW5jZXN0b3JzOwog
Y2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIaXRU
ZXN0UmVzdWx0OwpAQCAtMTExLDcgKzExMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBk
aWRDYWxsRnVuY3Rpb24oY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAg
ICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsQ2hhbmdlWEhSUmVh
ZHlTdGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgWE1MSHR0cFJlcXVlc3QqIHJlcXVlc3Qp
OwogICAgIHN0YXRpYyB2b2lkIGRpZENoYW5nZVhIUlJlYWR5U3RhdGUoY29uc3QgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSB3aWxsRGlzcGF0Y2hFdmVudChEb2N1bWVudCosIGNvbnN0IEV2ZW50JiBldmVu
dCwgRE9NV2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxFdmVudENvbnRl
eHQ+JiBhbmNlc3RvcnMpOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgd2lsbERpc3BhdGNoRXZlbnQoRG9jdW1lbnQqLCBjb25zdCBFdmVudCYsIERPTVdpbmRvdyos
IGNvbnN0IEV2ZW50QW5jZXN0b3JzJik7CiAgICAgc3RhdGljIHZvaWQgZGlkRGlzcGF0Y2hFdmVu
dChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKICAgICBzdGF0aWMgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxIYW5kbGVFdmVudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgRXZlbnQqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRIYW5kbGVFdmVudChjb25z
dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKQEAgLTI3MCw3ICsyNzEsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRpZENhbGxGdW5jdGlvbkltcGwoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSB3aWxsQ2hhbmdlWEhSUmVhZHlTdGF0ZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIFhNTEh0dHBSZXF1ZXN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkQ2hhbmdlWEhSUmVh
ZHlTdGF0ZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAg
c3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRGlzcGF0Y2hFdmVudElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGNvbnN0IEV2ZW50JiwgRE9NV2luZG93KiwgTm9kZSos
IGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBhbmNlc3RvcnMpOworICAgIHN0YXRpYyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMqLCBjb25zdCBFdmVudCYsIERPTVdpbmRvdyosIGNvbnN0IEV2ZW50QW5jZXN0
b3JzJiBhbmNlc3RvcnMpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgd2lsbEhhbmRsZUV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRXZlbnQqKTsKICAg
ICBzdGF0aWMgdm9pZCBkaWRIYW5kbGVFdmVudEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIHZvaWQgZGlkRGlzcGF0Y2hFdmVudEltcGwoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CkBAIC02MzAsMTIgKzYzMSwxMiBA
QCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZVhIUlJlYWR5
U3RhdGUoY29uc3QgSW5zcGVjdG9ySW5zdAogI2VuZGlmCiB9CiAKLWlubGluZSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0
Y2hFdmVudChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93
KiB3aW5kb3csIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBhbmNlc3Rv
cnMpCitpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBF
dmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBjb25zdCBFdmVudEFuY2VzdG9ycyYgYW5j
ZXN0b3JzKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpKTsKICAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIHJldHVybiB3aWxsRGlzcGF0Y2hFdmVu
dEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgZXZlbnQsIHdpbmRvdywgbm9kZSwgYW5jZXN0b3Jz
KTsKKyAgICAgICAgcmV0dXJuIHdpbGxEaXNwYXRjaEV2ZW50SW1wbChpbnN0cnVtZW50aW5nQWdl
bnRzLCBldmVudCwgd2luZG93LCBhbmNlc3RvcnMpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDkzNmRkY2ZjMmQ4MTBhYTRm
ZDEwMTMxOTA0MGRmMTk0NDdlZGZmMzUuLmRmZmVmMTFmMDJmNDcyMTk5ZGExNzdjZmNlNDIzMGU1
NGYwOGE0NWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNS0wNyAgSGF5YXRvIEl0byAg
PGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRXZlbnQgZGlzcGF0Y2hpbmcgc2hvdWxk
IHVzZSB0aGUgY29tcG9zZWQgc2hhZG93IERPTSB0cmVlIHRyZWUgaW5zdGVhZCBvZiBvcmRpbmFs
IERPTSB0cmVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg1ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0
cmlidXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cv
c2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0bWw6
CisKIDIwMTItMDUtMTAgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBDcmFzaCBpbiBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YSBkdWUgdG8gaW5maW5p
dGUgZmxvYXQgc2l6ZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9z
aGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0
aC1ub2RlLWRpc3RyaWJ1dGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk4OWE4MjAxMTYy
YzQ5ZTA0MDYyNTk4YmI3NmY3OGMzM2Y2NDE3OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0
cmlidXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIwIEBACitUZXN0cyB0byBlbnN1cmUg
dGhhdCBzaGFkb3cgRE9NIGJvdW5kYXJ5IGlzIG5vdCBjcm9zc2VkIGR1cmluZyBldmVudCBwcm9w
YWdhdGlvbi4gQ2FuIG9ubHkgcnVuIHdpdGhpbiBEUlQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitESVYJIGlkPXNhbmRib3gKKwlESVYJIGlkPXRvcAorCQlESVYJIGlkPXNoYWRv
dy1ob3N0CisJCQlESVYJIGlkPWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisJCQlESVYJIGlkPXNo
YWRvdy1yb290LWNoaWxkCisJCURFVEFJTFMJIGlkPWRldGFpbHMKKwkJCVNVTU1BUlkJIGlkPXN1
bW1hcnkKKwkJCQlESVYJCisKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdCB0byBz
aGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZAorCisgIG1vdXNlb3V0CisKKyAgbW91c2VvdmVy
CisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJl
bGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJv
b3QtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBz
aGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCB0byBzaGFkb3ctaG9zdAorCisgIG1vdXNlb3V0
CisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJl
bGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJv
b3QtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBtb3VzZW92ZXIKKworCitNb3Zp
bmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdCB0byBkaXN0cmlidXRlZC1saWdodC1jaGlsZAorCisg
IG1vdXNlb3V0CisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0
ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1o
b3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91c2VvdmVyCisg
ICAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250
ZW50KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBj
b250ZW50KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0
OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBA
dG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhv
c3QpCisKKworTW92aW5nIG1vdXNlIGZyb20gZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgdG8gc2hh
ZG93LWhvc3QKKworICBtb3VzZW91dAorICAgICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgKHRh
cmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAg
ICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAg
ICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQor
ICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxh
dGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNlb3ZlcgorICAgICBAc2hhZG93
LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCkKKyAgICAgQHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1
dGVkLWxpZ2h0LWNoaWxkKQorCisKK01vdmluZyBtb3VzZSBmcm9tIGRldGFpbHMgdG8gc3VtbWFy
eQorCisgIG1vdXNlb3V0CisgICAgIEBkZXRhaWxzICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVk
OiBzdW1tYXJ5KQorICAgICBAdG9wICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5
KQorCisgIG1vdXNlb3ZlcgorICAgICBAc3VtbWFyeSAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRl
ZDogZGV0YWlscykKKyAgICAgQGRldGFpbHMgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRl
dGFpbHMpCisgICAgIEB0b3AgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisK
KworTW92aW5nIG1vdXNlIGZyb20gc3VtbWFyeSB0byBkZXRhaWxzCisKKyAgbW91c2VvdXQKKyAg
ICAgQHN1bW1hcnkgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisgICAgIEBk
ZXRhaWxzICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorICAgICBAdG9wICh0
YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorCisgIG1vdXNlb3ZlcgorICAgICBA
ZGV0YWlscyAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKyAgICAgQHRvcCAo
dGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKworCitNb3ZpbmcgbW91c2UgZnJv
bSBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCB0byBkaXN0cmlidXRlZC1saWdodC1jaGls
ZAorCisgIG1vdXNlb3V0CisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ct
cm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0
OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctaG9z
dCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
KQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQt
bGlnaHQtY2hpbGQpCisKKyAgbW91c2VvdmVyCisgICAgIEBkaXN0cmlidXRlZC1saWdodC1jaGls
ZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0
KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3Qt
Y2hpbGQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hh
ZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0cmlidXRlZC1s
aWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6IGRp
c3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKKworTW92aW5n
IG1vdXNlIGZyb20gZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgdG8gc2hhZG93LWhvc3Qvc2hhZG93
LXJvb3QtY2hpbGQKKworICBtb3VzZW91dAorICAgICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQg
KHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkK
KyAgICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290LWNo
aWxkKQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRv
dy1yb290LWNoaWxkKQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGln
aHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAodGFyZ2V0OiBkaXN0
cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNlb3Zl
cgorICAgICBAc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChy
ZWxhdGVkOiBjb250ZW50KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJvb3Qt
Y2hpbGQpIChyZWxhdGVkOiBjb250ZW50KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hh
ZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKyAgICAgQHRvcCAo
dGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRz
LXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZWNhZDRiZDU5YjJkZDdlMDhjNmZkM2U3M2EzYjg5NmQ5YzM1ZDFhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1l
dmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi5odG1sCkBAIC0wLDAgKzEsMTYyIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hh
ZG93LWRvbS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0ic2FuZGJveCI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj48L3By
ZT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdG8gZW5zdXJlIHRoYXQgc2hhZG93IERP
TSBib3VuZGFyeSBpcyBub3QgY3Jvc3NlZCBkdXJpbmcgZXZlbnQgcHJvcGFnYXRpb24uIENhbiBv
bmx5IHJ1biB3aXRoaW4gRFJULiIpOworCisvLyBGSVhNRTogTWFrZSBhIHNlcGFyYXRlIHV0aWxp
dHkganMgZmlsZSBhbmQgc2hhcmUgaXQuCitmdW5jdGlvbiBtb3ZlTW91c2VPdmVyKGVsZW1lbnQp
Cit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMpCisg
ICAgICAgIHJldHVybjsKKworICAgIHZhciBkZWZhdWx0UGFkZGluZ1NpemUgPSAyMDsKKyAgICB2
YXIgeCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAg
IHZhciB5OworICAgIGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSB8fCB3aW5kb3cuaW50ZXJu
YWxzLnNoYWRvd1Jvb3QoZWxlbWVudCkpCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNldFRvcCAr
IGRlZmF1bHRQYWRkaW5nU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNl
dFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1v
dmVUbyh4LCB5KTsKK30KKwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitmdW5jdGlvbiBjbGVh
ckV2ZW50UmVjb3JkcygpCit7CisgICAgZXZlbnRSZWNvcmRzID0ge307Cit9CisKK2Z1bmN0aW9u
IGRpc3BhdGNoZWRFdmVudChldmVudFR5cGUpCit7CisgICAgdmFyIGV2ZW50cyA9IGV2ZW50UmVj
b3Jkc1tldmVudFR5cGVdOworICAgIGlmICghZXZlbnRzKQorICAgICAgICByZXR1cm4gW107Cisg
ICAgcmV0dXJuIGV2ZW50czsKK30KKworZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQpCit7Cisg
ICAgdmFyIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUKKyAgICBpZiAoIWV2ZW50UmVjb3Jkc1tldmVu
dFR5cGVdKSB7CisgICAgICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW10KKyAgICB9Cisg
ICAgdmFyIGV2ZW50U3RyaW5nID0gJyc7CisgICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQpCisg
ICAgICAgIGV2ZW50U3RyaW5nICs9ICcgQCcgKyBldmVudC5jdXJyZW50VGFyZ2V0LmlkOworICAg
IGlmIChldmVudC50YXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdldDogJyAr
IGV2ZW50LnRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCkKKyAg
ICAgICAgZXZlbnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0ZWRUYXJnZXQu
aWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKKyAgICAgICAgZXZlbnRT
dHJpbmcgKz0gJyhjYXB0dXJpbmcgcGhhc2UpJzsKKyAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2
ZW50LmN1cnJlbnRUYXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1cnJlbnRUYXJn
ZXQuaWQpCisgICAgICAgIHNob3VsZEJlKCJldmVudC5ldmVudFBoYXNlIiwgIjIiLCB0cnVlKTsK
KyAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXS5wdXNoKGV2ZW50U3RyaW5nKTsKK30KKworZnVu
Y3Rpb24gZHVtcE5vZGUobm9kZSkKK3sKKyAgICB2YXIgb3V0cHV0ID0gbm9kZS5ub2RlTmFtZSAr
ICJcdCI7CisgICAgaWYgKG5vZGUuaWQpCisgICAgICAgIG91dHB1dCArPSAnIGlkPScgKyBub2Rl
LmlkOworICAgIGlmIChub2RlLmNsYXNzTmFtZSkKKyAgICAgICAgb3V0cHV0ICs9ICcgY2xhc3M9
JyArIG5vZGUuY2xhc3NOYW1lOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIGR1
bXBDb21wb3NlZFNoYWRvd1RyZWUobm9kZSwgaW5kZW50KQoreworICAgIGluZGVudCA9IGluZGVu
dCB8fCAiIjsKKyAgICB2YXIgb3V0cHV0ID0gaW5kZW50ICsgZHVtcE5vZGUobm9kZSkgKyAiXG4i
OworICAgIHZhciBjaGlsZDsKKyAgICBmb3IgKGNoaWxkID0gaW50ZXJuYWxzLmZpcnN0Q2hpbGRC
eVdhbGtlcihub2RlKTsgY2hpbGQ7IGNoaWxkID0gaW50ZXJuYWxzLm5leHRTaWJsaW5nQnlXYWxr
ZXIoY2hpbGQpKQorICAgICAgICAgb3V0cHV0ICs9IGR1bXBDb21wb3NlZFNoYWRvd1RyZWUoY2hp
bGQsIGluZGVudCArICJcdCIpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIHBy
ZXBhcmVET01UcmVlKHBhcmVudCkKK3sKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoCisgICAgICAg
IGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICd0b3AnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQw
cHgnfSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdzaGFkb3ct
aG9zdCcsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdkdW1wJ30sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdjb250ZW50
JywgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4JywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZWxlY3QnOiAnI2Rpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkJyx9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9N
KCdkaXYnLCB7J2lkJzogJ3NoYWRvdy1yb290LWNoaWxkJywgJ3N0eWxlJzogJ3BhZGRpbmctdG9w
OiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Rpdics
IHsnaWQnOiAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6
IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVET00oJ2RpdicsIHsnaWQnOiAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ3N0
eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURP
TSgnZGV0YWlscycsIHsnaWQnOiAnZGV0YWlscycsICdvcGVuJzogdHJ1ZSwgJ3N0eWxlJzogJ3Bh
ZGRpbmctdG9wOiA0MHB4JywgJ3RpdGxlJzogJ2R1bXAnfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVET00oJ3N1bW1hcnknLCB7J2lkJzogJ3N1bW1hcnknLCAnc3R5bGUnOiAn
cGFkZGluZy10b3A6IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSkpKTsKKworICAgIGdldE5vZGVJ
blNoYWRvd1RyZWVTdGFjaygnc2hhZG93LWhvc3QvJykuaWQgPSAnc2hhZG93LXJvb3QnOworICAg
IHZhciBpZHMgPSBbJ3RvcCcsICdzaGFkb3ctaG9zdCcsICdzaGFkb3ctaG9zdC8nLCAnc2hhZG93
LWhvc3QvY29udGVudCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcsCisgICAgICAg
ICAgICAgICAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0
LWNoaWxkJywKKyAgICAgICAgICAgICAgICdkZXRhaWxzJywgJ3N1bW1hcnknXTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZWxlbWVudCA9
IGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhpZHNbaV0pOworICAgICAgICBlbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHJlY29yZEV2ZW50LCBmYWxzZSk7CisgICAgICAgIGVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCByZWNvcmRFdmVudCwgZmFsc2UpOwor
ICAgIH0KKyAgICAKKyAgICBwYXJlbnQub2Zmc2V0TGVmdDsKKyAgICBkZWJ1ZyhkdW1wQ29tcG9z
ZWRTaGFkb3dUcmVlKHBhcmVudCkpOworfQorCitmdW5jdGlvbiBkZWJ1Z0Rpc3BhdGNoZWRFdmVu
dChldmVudFR5cGUpCit7CisgICAgZGVidWcoJ1xuICAnICsgZXZlbnRUeXBlKTsKKyAgICB2YXIg
ZXZlbnRzID0gZGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSk7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBldmVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGRlYnVnKCcgICAgJyArIGV2ZW50c1tp
XSkKK30KKworZnVuY3Rpb24gbW92ZU1vdXNlKG9sZEVsZW1lbnRJZCwgbmV3RWxlbWVudElkKQor
eworICAgIGRlYnVnKCdcblxuJyArICdNb3ZpbmcgbW91c2UgZnJvbSAnICsgb2xkRWxlbWVudElk
ICsgJyB0byAnICsgbmV3RWxlbWVudElkKTsKKyAgICBtb3ZlTW91c2VPdmVyKGdldE5vZGVJblNo
YWRvd1RyZWVTdGFjayhvbGRFbGVtZW50SWQpKTsKKyAgICBjbGVhckV2ZW50UmVjb3JkcygpOwor
ICAgIG1vdmVNb3VzZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG5ld0VsZW1lbnRJZCkp
OworCisgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNlb3V0Jyk7CisgICAgZGVidWdEaXNw
YXRjaGVkRXZlbnQoJ21vdXNlb3ZlcicpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgcHJlcGFyZURPTVRyZWUoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3NhbmRib3gnKSk7CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0JywgJ3NoYWRv
dy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdzaGFkb3ctaG9zdC9z
aGFkb3ctcm9vdC1jaGlsZCcsICdzaGFkb3ctaG9zdCcpOworCisgICAgbW92ZU1vdXNlKCdzaGFk
b3ctaG9zdCcsICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIG1vdmVNb3VzZSgnZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKKworICAgIG1vdmVNb3VzZSgn
ZGV0YWlscycsICdzdW1tYXJ5Jyk7CisgICAgbW92ZU1vdXNlKCdzdW1tYXJ5JywgJ2RldGFpbHMn
KTsKKworICAgIG1vdmVNb3VzZSgnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnLCAnZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQnKTsKKyAgICBtb3ZlTW91c2UoJ2Rpc3RyaWJ1dGVkLWxpZ2h0
LWNoaWxkJywgJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJyk7CisKKyAgICAvLyBUaGVz
ZSBjYXNlcyBzaG91bGQgbm90IGhhcHBlbiBzaW5jZSBub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hp
bGQgaXMgbm90IHJlbmRlcmVkLgorICAgIC8vIEZJWE1FOiBSZWFsbHk/CisgICAgLy8gbW92ZU1v
dXNlKCdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hp
bGQnKTsKKyAgICAvLyBtb3ZlTW91c2UoJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdk
aXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIC8vIG1vdmVNb3VzZSgnc2hhZG93LWhvc3Qn
LCAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgLy8gbW92ZU1vdXNlKCdub24t
ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKK30KKwordGVzdCgpOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMuaHRtbAppbmRleCBlYzJlMmY4
MDhhZGEwYTYwNzU0YTQ5YzgwYmM5OTNhODVhMjVjMWQ5Li5hMGMyYzkxOGQ0NzRjODI3MzFmYjkw
Y2U1Y2I3NTFkMTAzZjQ5OWU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0bWwKQEAgLTE0Niw3ICsxNDYsNyBAQCBm
dW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgJ1RhcmdldCBpcyBhbiBhbmNlc3RvciBvZiBy
ZWxhdGVkVGFyZ2V0LicpOwogICAgIHNob3VsZEJlKCdkaXNwYXRjaGVkRXZlbnQoIm1vdXNlb3Zl
ciIpJywgJ1siZGl2RSg8LXNoYWRvd0YpKEBkaXZFKSJdJyk7CiAgICAgc2hvdWxkQmUoJ2Rpc3Bh
dGNoZWRFdmVudCgibW91c2VvdXQiKScsICdbImRpdkkoPC1kaXZFKShAZGl2SSkiLCAic2hhZG93
Ryg8LWRpdkUpKEBzaGFkb3dHKSIsICJzaGFkb3dGKDwtZGl2RSkoQHNoYWRvd0YpIiwgInNoYWRv
d0YoPC1kaXZFKShAZGl2RSkiXScpOwotCisgICAKICAgICBtb3ZlTW91c2UoJ3NoYWRvd0Qvc2hh
ZG93Ri9zaGFkb3dHL2RpdkknLCAnc2hhZG93RC9zaGFkb3dGJywKICAgICAgICAgICAgICAgJ1Rh
cmdldCAoc2hhZG93IGhvc3QpIGlzIGFuIGFuY2VzdG9yIG9mIHJlbGF0ZWRUYXJnZXQuJyk7CiAg
ICAgc2hvdWxkQmUoJ2Rpc3BhdGNoZWRFdmVudCgibW91c2VvdmVyIiknLCAnW10nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141719</attachid>
            <date>2012-05-14 06:43:45 -0700</date>
            <delta_ts>2012-05-15 05:43:09 -0700</delta_ts>
            <desc>WIP. Introduce an EventRelatedTargetAdjuster.</desc>
            <filename>bug-78586-20120514224344.patch</filename>
            <type>text/plain</type>
            <size>35280</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2OTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTUyZTM0NDEyYzYyZWMw
N2Y1ZTUyYTZiMmJhNzc1MDdkZmQxNzc4Mi4uNWJlZjRiNTIzYTBjOWY2ZDgwYTM3YTgxYWUxYzA3
YWQ4ZjdiNDE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgaW5zdGVhZCBvZiBvcmln
aW5hbCBET00gdHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4NTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1u
b2RlLWRpc3RyaWJ1dGlvbi5odG1sCisKKyAgICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6
YWRqdXN0ZWRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlQWRqdXN0ZWRQYXJlbnQpOgorICAgICAg
ICAqIGRvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaDoKKyAgICAgICAgKENvbXBvc2VkU2hh
ZG93VHJlZVdhbGtlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OmNhbkNyb3NzVXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNo
YWRvd1RyZWVXYWxrZXI6OmNhbkNyb3NzTG93ZXJCb3VuZGFyeSk6CisgICAgICAgICogZG9tL0V2
ZW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OkV2ZW50Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjp0b01vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKToK
KyAgICAgICAgKiBkb20vRXZlbnRDb250ZXh0Lmg6CisgICAgICAgIChFdmVudENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpzaG91bGREaXNwYXRjaCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2V0U2hvdWxkRGlz
cGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpyZWxhdGVkVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldCk6CisgICAg
ICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGlzdHNJ
blNhbWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2Vz
dG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpsb3dlc3RDb21t
b25Cb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFJlbGF0ZWRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVy
OjphZGp1c3RSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hl
cjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmg6Cisg
ICAgICAgIChFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2
ZW50KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpz
aG93Tm9kZSk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorCiAyMDEy
LTA1LTE0ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFNo
b3VsZCBoYXZlIE5vZGU6OmluRGV0YWNoKCkgZm9yIGFzc2VydGlvbiBwdXJwb3Nlcy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAKaW5kZXggZDFh
ODg5ZTY3OGRmOGEyMzI3ZmY2ZDM2ZmUzNzEwMDliNThkNjZmZi4uYzcwMzZlZDA5YTIwYWU1M2Vk
MDJhNzlmODM1YzEyNWJiOWQ1MDU1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBv
c2VkU2hhZG93VHJlZVdhbGtlci5jcHAKQEAgLTE5Nyw2ICsxOTcsMjkgQEAgdm9pZCBDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXI6OnBhcmVudCgpCiAgICAgYXNzZXJ0UG9zdGNvbmRpdGlvbigpOwog
fQogCit2b2lkIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6cGFyZW50SW5jbHVkaW5nSW5zZXJ0
aW9uUG9pbnRBbmRTaGFkb3dSb290KCkKK3sKKyAgICBBU1NFUlQobV9ub2RlKTsKKyAgICBtX25v
ZGUgPSB0cmF2ZXJzZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCht
X25vZGUpOworfQorCitOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFy
ZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KGNvbnN0IE5vZGUqIG5vZGUp
IGNvbnN0Cit7CisgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHNoYWRvd09mUGFyZW50
KG5vZGUpKSB7CisgICAgICAgIGlmIChIVE1MQ29udGVudFNlbGVjdGlvbiogc2VsZWN0aW9uID0g
c2hhZG93LT5zZWxlY3Rpb25Gb3Iobm9kZSkpCisgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9u
LT5pbnNlcnRpb25Qb2ludCgpOworICAgIH0KKyAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkp
IHsKKyAgICAgICAgY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHRvU2hhZG93Um9vdChu
b2RlKTsKKyAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPmlzWW91bmdlc3QoKSkKKyAgICAgICAgICAg
IHJldHVybiBzaGFkb3dSb290LT5ob3N0KCk7CisgICAgICAgIEluc2VydGlvblBvaW50KiBhc3Np
Z25lZEluc2VydGlvblBvaW50ID0gc2hhZG93Um9vdC0+YXNzaWduZWRUbygpOworICAgICAgICBB
U1NFUlQoYXNzaWduZWRJbnNlcnRpb25Qb2ludCk7CisgICAgICAgIHJldHVybiBhc3NpZ25lZElu
c2VydGlvblBvaW50OworICAgIH0KKyAgICByZXR1cm4gbm9kZS0+cGFyZW50Tm9kZSgpOworfQor
CiBOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50KGNvbnN0IE5v
ZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW5Dcm9zc1VwcGVyQm91bmRhcnkoKSAmJiBu
b2RlLT5pc1NoYWRvd1Jvb3QoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bXBvc2VkU2hhZG93VHJlZVdhbGtlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hh
ZG93VHJlZVdhbGtlci5oCmluZGV4IDk3NjZjMWEzNjUwMTkwMDg4Yjk0ZGEyYTQ0MGMyMDYyNmQw
ZDRhOTIuLmRhMzRlZWQ2NjY3ZmZiYjYyZTU2NTEzZGY3ZWE3NzdmMGVmZGNjOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKQEAgLTU4LDYgKzU4
LDggQEAgcHVibGljOgogICAgIHZvaWQgcHJldmlvdXNTaWJsaW5nKCk7CiAKICAgICB2b2lkIHBh
cmVudCgpOworICAgIC8vIFRoaXMgZnVuY3Rpb24gaWdub3JlcyBwb2xpY3kuIEFsd2F5cyBjcm9z
cyBhbiB1cHBlciBib3VuZGFyeS4KKyAgICB2b2lkIHBhcmVudEluY2x1ZGluZ0luc2VydGlvblBv
aW50QW5kU2hhZG93Um9vdCgpOwogCiAgICAgdm9pZCBuZXh0KCk7CiAgICAgdm9pZCBwcmV2aW91
cygpOwpAQCAtOTksNiArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBOb2RlKiB0cmF2ZXJzZUxhc3RD
aGlsZChjb25zdCBOb2RlKikgY29uc3Q7CiAgICAgTm9kZSogdHJhdmVyc2VDaGlsZChjb25zdCBO
b2RlKiwgVHJhdmVyc2FsRGlyZWN0aW9uKSBjb25zdDsKICAgICBOb2RlKiB0cmF2ZXJzZVBhcmVu
dChjb25zdCBOb2RlKikgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJ
bnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoY29uc3QgTm9kZSopIGNvbnN0OwogCiAgICAgc3Rh
dGljIE5vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZSopOwogICAgIHN0YXRpYyBO
b2RlKiB0cmF2ZXJzZVByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudENvbnRleHQuY3BwCmluZGV4IDJhNWM1MjEwYWFlZjZiOTQxYmJkZTVkZTI5NWNiYTMzOWQx
NDJkZjUuLmExYjUxYzBlOWZmYTRlNTA5OWE3Yzk4ZGE1MDlhODI3ZjM0MmUyZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudENvbnRleHQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgorI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDEzICszOSwyMiBAQCBFdmVudENvbnRleHQ6OkV2ZW50Q29udGV4dChQYXNz
UmVmUHRyPE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGN1cnJlbgogICAgIDog
bV9ub2RlKG5vZGUpCiAgICAgLCBtX2N1cnJlbnRUYXJnZXQoY3VycmVudFRhcmdldCkKICAgICAs
IG1fdGFyZ2V0KHRhcmdldCkKKyAgICAsIG1fcmVsYXRlZFRhcmdldCgwKQogewogfQogCitzdGF0
aWMgTW91c2VFdmVudCogdG9Nb3VzZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQo
ZXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2ZW50KTsKK30KKwogdm9pZCBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2Fs
RXZlbnRzKEV2ZW50KiBldmVudCkgY29uc3QKIHsKICAgICBldmVudC0+c2V0VGFyZ2V0KG1fdGFy
Z2V0LmdldCgpKTsKICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChtX2N1cnJlbnRUYXJnZXQu
Z2V0KCkpOworICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkgJiYgZXZlbnQtPmlzTW91c2VF
dmVudCgpKQorICAgICAgICB0b01vdXNlRXZlbnQoZXZlbnQpLT5zZXRSZWxhdGVkVGFyZ2V0KG1f
cmVsYXRlZFRhcmdldC5nZXQoKSk7CiAgICAgbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVu
dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAppbmRleCA1ZTczMTdmNDVjZjU0ODU2
YTMyNDlkODdkZDI3YTA4MTY2MmQ2NzQ4Li42MzI1ODEwMDkwYzA0Mjk3MjY5Y2U1MmU3MGUyZGQx
MGFkZDE0NDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCkBAIC00MiwxMyArNDIsMTYg
QEAgcHVibGljOgogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogICAgIEV2ZW50VGFyZ2V0KiB0
YXJnZXQoKSBjb25zdDsKKyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCgpIGNvbnN0Owog
ICAgIGJvb2wgY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpIGNvbnN0OwogICAgIHZvaWQgaGFu
ZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBjb25zdDsKKyAgICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQo
UGFzc1JlZlB0cjxFdmVudFRhcmdldD4pOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBt
X25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX2N1cnJlbnRUYXJnZXQ7CiAgICAgUmVm
UHRyPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsKKyAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fcmVs
YXRlZFRhcmdldDsKIH07CiAKIGlubGluZSBOb2RlKiBFdmVudENvbnRleHQ6Om5vZGUoKSBjb25z
dApAQCAtNjYsNiArNjksMTYgQEAgaW5saW5lIGJvb2wgRXZlbnRDb250ZXh0OjpjdXJyZW50VGFy
Z2V0U2FtZUFzVGFyZ2V0KCkgY29uc3QKICAgICByZXR1cm4gbV9jdXJyZW50VGFyZ2V0LmdldCgp
ID09IG1fdGFyZ2V0LmdldCgpOwogfQogCitpbmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50Q29udGV4
dDo6cmVsYXRlZFRhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5n
ZXQoKTsKK30KKworaW5saW5lIHZvaWQgRXZlbnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpCit7CisgICAgbV9yZWxhdGVkVGFy
Z2V0ID0gcmVsYXRlZFRhcmdldDsKK30KKwogfQogCiAjZW5kaWYgLy8gRXZlbnRDb250ZXh0X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggMTY4OWUwNmI4Y2E0YmYw
YWI1ODNjOGYzOTFiZjk5ODkwYTk3NWJkYy4uZTA3MmQ0MmRhNmExZDFmMGNiYWFlYzg2ODQxYmFk
ODE1ZjViOWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTI2
LDEwICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0
Y2hlci5oIgogCisjaW5jbHVkZSAiQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgiCisjaW5jbHVk
ZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUg
IkV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQu
aCIKICNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCkBAIC00Nyw2ICs1MCw1NSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hp
bmdTaW11bGF0ZWRDbGlja3MgPSAwOwogCit2b2lkIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVy
OjphZGp1c3QoVmVjdG9yPEV2ZW50Q29udGV4dD4mIGFuY2VzdG9ycywgTm9kZSogcmVsYXRlZFRh
cmdldCkKK3sKKyAgICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3BlID0gMDsKKyAgICBmb3Ig
KENvbXBvc2VkU2hhZG93VHJlZVdhbGtlciB3YWxrZXIocmVsYXRlZFRhcmdldCk7IHdhbGtlci5n
ZXQoKTsgd2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgp
KSB7CisgICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSB3YWxrZXIuZ2V0KCktPnRyZWVTY29wZSgp
OworICAgICAgICAvLyBTa2lwcyBhZGRpbmcgYSBub2RlIHRvIHRoZSBtYXAgaWYgdHJlZVNjb3Bl
IGRvZXMgbm90IGNoYW5nZS4KKyAgICAgICAgaWYgKHNjb3BlICE9IHByZXZpb3VzVHJlZVNjb3Bl
KQorICAgICAgICAgICAgbV9yZWxhdGVkVGFyZ2V0TWFwLmFkZChzY29wZSwgd2Fsa2VyLmdldCgp
KTsKKyAgICAgICAgcHJldmlvdXNUcmVlU2NvcGUgPSBzY29wZTsKKyAgICB9CisKKyAgICBwcmV2
aW91c1RyZWVTY29wZSA9IDA7CisgICAgRXZlbnRUYXJnZXQqIGFkanVzdGVkUmVsYXRlZFRhcmdl
dCA9IDA7CisgICAgZm9yIChWZWN0b3I8RXZlbnRDb250ZXh0Pjo6aXRlcmF0b3IgaXRlciA9IGFu
Y2VzdG9ycy5iZWdpbigpOyBpdGVyIDwgYW5jZXN0b3JzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAg
ICAgVHJlZVNjb3BlKiBzY29wZSA9IGl0ZXItPm5vZGUoKS0+dHJlZVNjb3BlKCk7CisgICAgICAg
IGlmIChzY29wZSA9PSBwcmV2aW91c1RyZWVTY29wZSkgeworICAgICAgICAgICAgLy8gUmUtdXNl
IHRoZSBwcmV2aW91cyBhZGp1c3RlZFJlbGF0ZWRUYXJnZXQgaWYgdHJlZVNjb3BlIGRvZXMgbm90
IGNoYW5nZS4KKyAgICAgICAgICAgIGl0ZXItPnNldFJlbGF0ZWRUYXJnZXQoYWRqdXN0ZWRSZWxh
dGVkVGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkanVzdGVkUmVsYXRl
ZFRhcmdldCA9IGZpbmRSZWxhdGVkVGFyZ2V0KHNjb3BlKTsKKyAgICAgICAgICAgIGl0ZXItPnNl
dFJlbGF0ZWRUYXJnZXQoYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAg
ICBwcmV2aW91c1RyZWVTY29wZSA9IHNjb3BlOworICAgICAgICBpZiAoaXRlci0+dGFyZ2V0KCkg
PT0gYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0KSB7CisgICAgICAgICAgICAvLyBFdmVudCBkaXNwYXRj
aGluZyBzaG91bGQgYmUgc3RvcHBlZCBoZXJlLgorICAgICAgICAgICAgYW5jZXN0b3JzLnNocmlu
ayhpdGVyIC0gYW5jZXN0b3JzLmJlZ2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK0V2ZW50VGFyZ2V0KiBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6
ZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKiBzY29wZSkKK3sKKyAgICBWZWN0b3I8VHJlZVNj
b3BlKj4gcGFyZW50VHJlZVNjb3BlczsKKyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9
IDA7CisgICAgd2hpbGUgKHNjb3BlKSB7CisgICAgICAgIHBhcmVudFRyZWVTY29wZXMuYXBwZW5k
KHNjb3BlKTsKKyAgICAgICAgUmVsYXRlZFRhcmdldE1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQg
PSBtX3JlbGF0ZWRUYXJnZXRNYXAuZmluZChzY29wZSk7CisgICAgICAgIGlmIChmb3VuZCAhPSBt
X3JlbGF0ZWRUYXJnZXRNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBm
b3VuZC0+c2Vjb25kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2Nv
cGUgPSBzY29wZS0+cGFyZW50VHJlZVNjb3BlKCk7CisgICAgfQorICAgIGZvciAoVmVjdG9yPFRy
ZWVTY29wZSo+OjppdGVyYXRvciBpdGVyID0gcGFyZW50VHJlZVNjb3Blcy5iZWdpbigpOyBpdGVy
IDwgcGFyZW50VHJlZVNjb3Blcy5lbmQoKTsgKytpdGVyKQorICAgICAgbV9yZWxhdGVkVGFyZ2V0
TWFwLmFkZCgqaXRlciwgcmVsYXRlZFRhcmdldCk7CisgICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQ7
Cit9CisKIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKIHsKICAgICBBU1NFUlQo
IWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBAIC0xMTYsMTA0ICsxNjgsMTcgQEAgdm9pZCBF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXIKICAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+
cmVtb3ZlKG5vZGUpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNo
ZXI6OmFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJn
ZXQsIGNvbnN0IFZlY3RvcjxOb2RlKj4gcmVsYXRlZFRhcmdldEFuY2VzdG9ycykKLXsKLSAgICBW
ZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkg
PSBtX2FuY2VzdG9ycy5lbmQoKTsKLSAgICAvLyBBc3N1bWUgZGl2ZXJnZW50IGJvdW5kYXJ5IGlz
IHRoZSByZWxhdGVkVGFyZ2V0IGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIHJlbGF0ZWQgdGFyZ2V0
IGFuY2VzdG9yIGNoYWluIGRvZXMgbm90IGNyb3NzIGFueSBzaGFkb3cgRE9NIGJvdW5kYXJpZXMp
LgotICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGZpcnN0RGl2ZXJnZW50Qm91bmRh
cnkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7Ci0KLSAgICBWZWN0b3I8RXZlbnRD
b250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgdGFyZ2V0QW5jZXN0b3IgPSBtX2FuY2VzdG9ycy5lbmQo
KTsKLSAgICAvLyBXYWxrIGRvd24gZnJvbSB0aGUgdG9wLCBsb29raW5nIGZvciBsb3dlc3QgY29t
bW9uIGFuY2VzdG9yLCBhbHNvIG1vbml0b3Jpbmcgc2hhZG93IERPTSBib3VuZGFyaWVzLgotICAg
IGJvb2wgZGl2ZXJnZWQgPSBmYWxzZTsKLSAgICBmb3IgKFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0
ZXJhdG9yIGkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmVuZCgpIC0gMTsgaSA+PSByZWxhdGVk
VGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7IC0taSkgewotICAgICAgICBpZiAoZGl2ZXJnZWQpIHsK
LSAgICAgICAgICAgIGlmICgoKmkpLT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAg
IGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgPSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHRhcmdldEFuY2VzdG9yID09IG1fYW5jZXN0b3JzLmJlZ2luKCkpIHsKLSAgICAgICAg
ICAgIGRpdmVyZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgdGFyZ2V0QW5jZXN0b3ItLTsKLQotICAgICAgICBpZiAoKCppKS0+aXNTaGFkb3dS
b290KCkpCi0gICAgICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IHRhcmdldEFuY2VzdG9y
OwotCi0gICAgICAgIGlmICgoKmkpICE9ICgqdGFyZ2V0QW5jZXN0b3IpLm5vZGUoKSkKLSAgICAg
ICAgICAgIGRpdmVyZ2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpdmVyZ2VkKSB7Ci0g
ICAgICAgIC8vIFRoZSByZWxhdGVkVGFyZ2V0IGlzIGFuIGFuY2VzdG9yIG9yIHNoYWRvd0hvc3Qg
b2YgdGhlIHRhcmdldC4KLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgZmlyc3QgY2hlY2sg
b25jZSBjb252ZXJzaW9uIHRvIG5ldyBzaGFkb3cgRE9NIGlzIGNvbXBsZXRlIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzQ4Njk4PgotICAgICAgICBpZiAobV9ub2RlLT5zaGFkb3dIb3N0KCkgPT0gcmVs
YXRlZFRhcmdldC5nZXQoKSB8fCBpc1NoYWRvd0hvc3QocmVsYXRlZFRhcmdldC5nZXQoKSkpIHsK
LSAgICAgICAgICAgIFZlY3RvcjxFdmVudENvbnRleHQ+Ojpjb25zdF9pdGVyYXRvciByZWxhdGVk
VGFyZ2V0Q2hpbGQgPSB0YXJnZXRBbmNlc3RvciAtIDE7Ci0gICAgICAgICAgICBpZiAocmVsYXRl
ZFRhcmdldENoaWxkID49IG1fYW5jZXN0b3JzLmJlZ2luKCkgJiYgcmVsYXRlZFRhcmdldENoaWxk
LT5ub2RlKCktPmlzU2hhZG93Um9vdCgpKQotICAgICAgICAgICAgICAgIGxvd2VzdENvbW1vbkJv
dW5kYXJ5ID0gcmVsYXRlZFRhcmdldENoaWxkOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgo
KmZpcnN0RGl2ZXJnZW50Qm91bmRhcnkpID09IG1fbm9kZS5nZXQoKSkgewotICAgICAgICAvLyBT
aW5jZSBhbmNlc3RvcnMgZG9lcyBub3QgY29udGFpbiB0YXJnZXQgaXRzZWxmLCB3ZSBtdXN0IGFj
Y291bnQKLSAgICAgICAgLy8gZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRhcmdldCBpcyBhIHNo
YWRvd0hvc3Qgb2YgcmVsYXRlZFRhcmdldAotICAgICAgICAvLyBhbmQgdGh1cyBzZXJ2ZXMgYXMg
dGhlIGxvd2VzdENvbW1vbkJvdW5kYXJ5LgotICAgICAgICAvLyBMdWNraWx5LCBpbiB0aGlzIGNh
c2UgdGhlIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgaXMgdGFyZ2V0LgotICAgICAgICBsb3dlc3RD
b21tb25Cb3VuZGFyeSA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7Ci0gICAgICAgIG1fc2hvdWxkUHJl
dmVudERpc3BhdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobG93ZXN0Q29tbW9uQm91bmRh
cnkgIT0gbV9hbmNlc3RvcnMuZW5kKCkpIHsKLSAgICAgICAgLy8gVHJpbSBhbmNlc3RvcnMgdG8g
bG93ZXN0Q29tbW9uQm91bmRhcnkgdG8ga2VlcCBldmVudHMgaW5zaWRlIG9mIHRoZSBjb21tb24g
c2hhZG93IERPTSBzdWJ0cmVlLgotICAgICAgICBtX2FuY2VzdG9ycy5zaHJpbmsobG93ZXN0Q29t
bW9uQm91bmRhcnkgLSBtX2FuY2VzdG9ycy5iZWdpbigpKTsKLSAgICB9Ci0gICAgLy8gU2V0IGV2
ZW50J3MgcmVsYXRlZCB0YXJnZXQgdG8gdGhlIGZpcnN0IGVuY291bnRlcmVkIHNoYWRvdyBET00g
Ym91bmRhcnkgaW4gdGhlIGRpdmVyZ2VudCBzdWJ0cmVlLgotICAgIHJldHVybiBmaXJzdERpdmVy
Z2VudEJvdW5kYXJ5ICE9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKSA/ICpmaXJzdERp
dmVyZ2VudEJvdW5kYXJ5IDogcmVsYXRlZFRhcmdldDsKLX0KLQotaW5saW5lIHN0YXRpYyBib29s
IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyhjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0
PiYgYW5jZXN0b3JzKQotewotICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGFuY2Vz
dG9ycy5maXJzdCgpLm5vZGUoKSA9PSBhbmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKLX0KLQotLy8g
RklYTUU6IE9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTYz
IGxhbmRzLCB0aGlzIHNob3VsZAotLy8gYmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDAyNS4KLVBhc3NSZWZQdHI8RXZlbnRU
YXJnZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQs
IFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCiB7CiAgICAgaWYgKCFwcnBSZWxhdGVkVGFyZ2V0
KQotICAgICAgICByZXR1cm4gMDsKLQorICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPE5vZGU+
IHJlbGF0ZWRUYXJnZXQgPSBwcnBSZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKICAgICBpZiAoIXJl
bGF0ZWRUYXJnZXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTm9kZSogdGFyZ2V0ID0gbV9u
b2RlLmdldCgpOwotICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm4gcHJwUmVsYXRlZFRh
cmdldDsKLQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX25vZGUuZ2V0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7Ci0KLSAgICAvLyBDYWxj
dWxhdGUgZWFybHkgaWYgdGhlIGNvbW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxlIGJ5IGxv
b2tpbmcgYXQKLSAgICAvLyBhbmNlc3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0aW5nIGhh
cyBvY2N1cmVkIChpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJvdW5kYXJp
ZXMpLgotICAgIC8vIElmIHRoZXJlIGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0aGUgdGFy
Z2V0IGFuZCByZWxhdGVkIHRhcmdldCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5LgotICAg
IGJvb2wgbm9Db21tb25Cb3VuZGFyeSA9IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyht
X2FuY2VzdG9ycyk7Ci0KLSAgICBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnM7
Ci0gICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0LmdldCgp
OwotICAgIGZvciAoTm9kZSogbiA9IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBuID0gbi0+
cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkKLSAg
ICAgICAgICAgIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgp
OwotICAgICAgICBpZiAoIW5vQ29tbW9uQm91bmRhcnkpCi0gICAgICAgICAgICByZWxhdGVkVGFy
Z2V0QW5jZXN0b3JzLmFwcGVuZChuKTsKLSAgICB9Ci0KLSAgICAvLyBTaG9ydC1jaXJjdWl0IHRo
ZSBmYXN0IGNhc2Ugd2hlbiB3ZSBrbm93IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3VsYXRlIGEg
Y29tbW9uIGJvdW5kYXJ5LgotICAgIGlmIChub0NvbW1vbkJvdW5kYXJ5KQotICAgICAgICByZXR1
cm4gb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7Ci0KLSAgICByZXR1cm4gYWRqdXN0VG9TaGFkb3dC
b3VuZGFyaWVzKHJlbGF0ZWRUYXJnZXQucmVsZWFzZSgpLCByZWxhdGVkVGFyZ2V0QW5jZXN0b3Jz
KTsKKyAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcigpLmFkanVzdChtX2FuY2VzdG9ycywg
cmVsYXRlZFRhcmdldC5nZXQoKSk7CiB9CiAKIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRj
aGVyKE5vZGUqIG5vZGUpCkBAIC0yMjcsMzAgKzE5MiwzOSBAQCBFdmVudERpc3BhdGNoZXI6OkV2
ZW50RGlzcGF0Y2hlcihOb2RlKiBub2RlKQogCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJl
RXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghbV9ub2RlLT5pbkRvY3Vt
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChtX2FuY2VzdG9yc0luaXRpYWxpemVk
KQogICAgICAgICByZXR1cm47CiAKKyAgICBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIgYW5jZXN0
b3JXYWxrZXIobV9ub2RlLmdldCgpKTsKKyAgICBFdmVudFRhcmdldCogb3JpZ2luYWxUYXJnZXQg
PSBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3RvcldhbGtlci5nZXQo
KSk7CisgICAgbV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4dChtX25vZGUuZ2V0KCksIG9y
aWdpbmFsVGFyZ2V0LCBvcmlnaW5hbFRhcmdldCkpOwogICAgIG1fYW5jZXN0b3JzSW5pdGlhbGl6
ZWQgPSB0cnVlOwogCi0gICAgTm9kZSogYW5jZXN0b3IgPSBtX25vZGUuZ2V0KCk7Ci0gICAgRXZl
bnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFu
Y2VzdG9yKTsKKyAgICBpZiAoIW1fbm9kZS0+aW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBWZWN0b3I8RXZlbnRUYXJnZXQqPiB0YXJnZXRTdGFjazsKKyAgICB0YXJnZXRTdGFj
ay5hcHBlbmQob3JpZ2luYWxUYXJnZXQpOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlm
IChhbmNlc3Rvci0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChkZXRlcm1pbmVE
aXNwYXRjaEJlaGF2aW9yKGV2ZW50LCBhbmNlc3RvcikgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkK
KyAgICAgICAgaWYgKGFuY2VzdG9yV2Fsa2VyLmdldCgpLT5pc1NoYWRvd1Jvb3QoKSkgeworICAg
ICAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQsIGFuY2VzdG9yV2Fs
a2VyLmdldCgpKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnNoYWRvd0hvc3QoKTsKLSAgICAg
ICAgICAgIGlmICghbV9ub2RlLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICB0YXJn
ZXQgPSBhbmNlc3RvcjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhbmNlc3RvciA9IGFu
Y2VzdG9yLT5wYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7Ci0KLSAgICAgICAgaWYgKCFh
bmNlc3RvcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2FuY2VzdG9ycy5hcHBl
bmQoRXZlbnRDb250ZXh0KGFuY2VzdG9yLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRS
dWxlcyhhbmNlc3RvciksIHRhcmdldCkpOworICAgICAgICAgICAgYW5jZXN0b3JXYWxrZXIucGFy
ZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCk7CisgICAgICAgICAgICBp
ZiAoIWFuY2VzdG9yV2Fsa2VyLmdldCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGlmICghbV9ub2RlLT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIHRh
cmdldFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U3RhY2su
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5hcHBlbmQoYW5jZXN0
b3JXYWxrZXIuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgYW5jZXN0b3JXYWxrZXIucGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFk
b3dSb290KCk7CisgICAgICAgICAgICBpZiAoIWFuY2VzdG9yV2Fsa2VyLmdldCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChpc0luc2VydGlvblBvaW50KGFuY2Vz
dG9yV2Fsa2VyLmdldCgpKSAmJiB0b0luc2VydGlvblBvaW50KGFuY2VzdG9yV2Fsa2VyLmdldCgp
KS0+aXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5hcHBlbmQoYW5jZXN0
b3JXYWxrZXIuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIG1fYW5jZXN0b3JzLmFwcGVuZChF
dmVudENvbnRleHQoYW5jZXN0b3JXYWxrZXIuZ2V0KCksIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NW
R1RhcmdldFJ1bGVzKGFuY2VzdG9yV2Fsa2VyLmdldCgpKSwgdGFyZ2V0U3RhY2subGFzdCgpKSk7
CiAgICAgfQogfQogCkBAIC0yNzEsNyArMjQ1LDcgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBHaXZlIHRoZSB0
YXJnZXQgbm9kZSBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgYmVmb3JlIERPTSBldmVudCBoYW5k
bGVycyBnZXQgYSBjcmFjay4KICAgICB2b2lkKiBkYXRhID0gbV9ub2RlLT5wcmVEaXNwYXRjaEV2
ZW50SGFuZGxlcihldmVudC5nZXQoKSk7Ci0gICAgaWYgKG1fc2hvdWxkUHJldmVudERpc3BhdGNo
IHx8IGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICBpZiAobV9hbmNlc3RvcnMuaXNF
bXB0eSgpIHx8IG1fc2hvdWxkUHJldmVudERpc3BhdGNoIHx8IGV2ZW50LT5wcm9wYWdhdGlvblN0
b3BwZWQoKSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKICAgICAvLyBUcmlnZ2Vy
IGNhcHR1cmluZyBldmVudCBoYW5kbGVycywgc3RhcnRpbmcgYXQgdGhlIHRvcCBhbmQgd29ya2lu
ZyBvdXIgd2F5IGRvd24uCkBAIC0yODAsOCArMjU0LDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgaWYgKHdpbmRvd0Nv
bnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpICYmIGV2ZW50LT5wcm9wYWdhdGlv
blN0b3BwZWQoKSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKLSAgICBmb3IgKHNp
emVfdCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpOyBpOyAtLWkpIHsKLSAgICAgICAgY29uc3QgRXZl
bnRDb250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpLTFdOworICAgIGZvciAoc2l6
ZV90IGkgPSBtX2FuY2VzdG9ycy5zaXplKCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgIGNv
bnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07CiAgICAgICAg
IGlmIChldmVudENvbnRleHQuY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpKSB7CiAgICAgICAg
ICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTI5Niw3ICsyNzAsOCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRf
VEFSR0VUKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KG9yaWdpbmFsVGFyZ2V0LmdldCgpKTsKICAg
ICBldmVudC0+c2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRS
dWxlcyhtX25vZGUuZ2V0KCkpKTsKLSAgICBtX25vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50
LmdldCgpKTsKKyAgICBtX2FuY2VzdG9yc1swXS5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQo
KSk7CisgICAgLy8gbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CiAgICAg
aWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgZ290byBkb25lRGlzcGF0
Y2hpbmc7CiAKQEAgLTMwNSw3ICsyODAsNyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICAgICAgZXZlbnQtPnNldEV2ZW50
UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSA9IG1f
YW5jZXN0b3JzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKICAgICAg
ICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07
CiAgICAgICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQo
KSkKICAgICAgICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VU
KTsKQEAgLTMzOSw3ICszMTQsNyBAQCBkb25lRGlzcGF0Y2hpbmc6CiAgICAgICAgIC8vIHNhbWUg
b3JkZXIgYXMgdGhlIGJ1YmJsaW5nIHBoYXNlLgogICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMo
KSkgewogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7Ci0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBtX2Fu
Y2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwogICAg
ICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQpAQCAtMzc5LDExICszNTQsNiBA
QCBFdmVudERpc3BhdGNoQmVoYXZpb3IgRXZlbnREaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRj
aEJlaGF2aW9yKEV2ZW50KiBldmVudCwgTgogICAgIFVOVVNFRF9QQVJBTShzaGFkb3dSb290KTsK
ICNlbmRpZgogCi0gICAgLy8gUGVyIFhCTCAyLjAgc3BlYywgbXV0YXRpb24gZXZlbnRzIHNob3Vs
ZCBuZXZlciBjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJ5OgotICAgIC8vIGh0dHA6Ly9kZXYudzMu
b3JnLzIwMDYveGJsMi8jZXZlbnQtZmxvdy1hbmQtdGFyZ2V0aW5nLWFjcm9zcy1zaGFkb3ctcwot
ICAgIGlmIChldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNdXRh
dGlvbkV2ZW50KSkKLSAgICAgICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFkb3dET007Ci0KICAgICAv
LyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0byBjcm9zcyB0aGUgdGhl
IHNoYWRvdyBET00gYm91bmRhcnkuCiAgICAgLy8gQ2hhbmdpbmcgdGhpcyBicmVha3MgZXhpc3Rp
bmcgc2l0ZXMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MjE5NSBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApp
bmRleCA4NWFlZmM0OTMwNDNkNTE3ZWM5NzczNGU2MjE4YWFkODFkMTc5MDY3Li43NzI3MmJmNzk3
ZDE3YmY2NmI2Mzc1YmI1YTU3MDY1YmNhY2QzMWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlz
cGF0Y2hlci5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEV2ZW50RGlzcGF0Y2hlcl9oCiAK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCwxMiArNDEs
MjcgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFBs
YXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKK2NsYXNzIFRyZWVT
Y29wZTsKIAogZW51bSBFdmVudERpc3BhdGNoQmVoYXZpb3IgewogICAgIFJldGFyZ2V0RXZlbnQs
CiAgICAgU3RheUluc2lkZVNoYWRvd0RPTQogfTsKIAorY2xhc3MgRXZlbnRBbmNlc3RvcnNCdWls
ZGVycyB7CitwdWJsaWM6CisgICAgdm9pZCBidWlsZChOb2RlKiwgVmVjdG9yPEV2ZW50Q29udGV4
dD4mKTsKK307CisKK2NsYXNzIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKK3B1YmxpYzoK
KyAgICB2b2lkIGFkanVzdChWZWN0b3I8RXZlbnRDb250ZXh0PiYsIE5vZGUqIHJlbGF0ZWRUYXJn
ZXQpOworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8VHJlZVNjb3BlKiwgRXZlbnRUYXJn
ZXQqPiBSZWxhdGVkVGFyZ2V0TWFwOworICAgIEV2ZW50VGFyZ2V0KiBmaW5kUmVsYXRlZFRhcmdl
dChUcmVlU2NvcGUqKTsKKyAgICBSZWxhdGVkVGFyZ2V0TWFwIG1fcmVsYXRlZFRhcmdldE1hcDsK
K307CisKIGNsYXNzIEV2ZW50RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wg
ZGlzcGF0Y2hFdmVudChOb2RlKiwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+KTsK
QEAgLTU0LDEzICs3MCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTaW11
bGF0ZWRDbGljayhOb2RlKiwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29s
IHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spOwogCiAgICAgYm9vbCBkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0
PiBhZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4pOwor
ICAgIHZvaWQgYWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCosIFBhc3NSZWZQdHI8RXZlbnRUYXJn
ZXQ+IHBycFJlbGF0ZWRUYXJnZXQpOwogICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9kZSopOwogCi0gICAgUGFzc1JlZlB0cjxFdmVudFRh
cmdldD4gYWRqdXN0VG9TaGFkb3dCb3VuZGFyaWVzKFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRh
cmdldCwgY29uc3QgVmVjdG9yPE5vZGUqPiByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzKTsKICAgICBF
dmVudERpc3BhdGNoQmVoYXZpb3IgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCosIE5v
ZGUqIHNoYWRvd1Jvb3QpOwogICAgIHZvaWQgZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQqKTsK
ICAgICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4dCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlRXZlbnQuY3BwCmluZGV4IGMzNjg5YzZkZDQ2M2FlZTA1NjI4ODE3MmUyNTRkYzNlY2ZiMjVk
MGIuLmNmMmUyNjYwYTY1ZTM2MTFmNGI0N2VjZjhlY2U3YWYyNzM3ZWY1MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAKQEAgLTIwMSw4ICsyMDEsOCBAQCBib29sIE1vdXNlRXZlbnREaXNw
YXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikg
Y29ucwogICAgIGlmIChldmVudCgpLT50eXBlKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIFNob3VsZG4ndCBoYXBwZW4uCiAKLSAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IHJl
bGF0ZWRUYXJnZXQgPSBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIGV2
ZW50KCktPnJlbGF0ZWRUYXJnZXQoKSk7Ci0gICAgZXZlbnQoKS0+c2V0UmVsYXRlZFRhcmdldChy
ZWxhdGVkVGFyZ2V0KTsKKyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IGV2ZW50KCkt
PnJlbGF0ZWRUYXJnZXQoKTsKKyAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2
ZW50KCksIHJlbGF0ZWRUYXJnZXQpOwogCiAgICAgZGlzcGF0Y2hlci0+ZGlzcGF0Y2hFdmVudChl
dmVudCgpKTsKICAgICBib29sIHN3YWxsb3dFdmVudCA9IGV2ZW50KCktPmRlZmF1bHRIYW5kbGVk
KCkgfHwgZXZlbnQoKS0+ZGVmYXVsdFByZXZlbnRlZCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU3N2I0ZDY4YzhjNjFl
YTVmYmI1NzExMDdkNzVmZWZkODkwOTUwNmMuLjBmMzY1Yjk5MjVlNjkzZTY4ZTNmMmNlMWVkNDk5
MTYyMzljY2FjMjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNS0wNyAgSGF5YXRvIEl0
byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRXZlbnQgZGlzcGF0Y2hpbmcgc2hv
dWxkIHVzZSB0aGUgY29tcG9zZWQgc2hhZG93IERPTSB0cmVlIGluc3RlYWQgb2Ygb3JpZ2luYWwg
RE9NIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3Ry
aWJ1dGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9z
aGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbDogQWRkZWQu
CisKIDIwMTItMDUtMTQgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBbUXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLCB1bnNraXAgbm93IHBhc3NpbmcgdGVz
dHMgYWZ0ZXIgcjExNjkyNi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMt
d2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk4OWE4MjAx
MTYyYzQ5ZTA0MDYyNTk4YmI3NmY3OGMzM2Y2NDE3OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1k
aXN0cmlidXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIwIEBACitUZXN0cyB0byBlbnN1
cmUgdGhhdCBzaGFkb3cgRE9NIGJvdW5kYXJ5IGlzIG5vdCBjcm9zc2VkIGR1cmluZyBldmVudCBw
cm9wYWdhdGlvbi4gQ2FuIG9ubHkgcnVuIHdpdGhpbiBEUlQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitESVYJIGlkPXNhbmRib3gKKwlESVYJIGlkPXRvcAorCQlESVYJIGlkPXNo
YWRvdy1ob3N0CisJCQlESVYJIGlkPWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisJCQlESVYJIGlk
PXNoYWRvdy1yb290LWNoaWxkCisJCURFVEFJTFMJIGlkPWRldGFpbHMKKwkJCVNVTU1BUlkJIGlk
PXN1bW1hcnkKKwkJCQlESVYJCisKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdCB0
byBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZAorCisgIG1vdXNlb3V0CisKKyAgbW91c2Vv
dmVyCisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkg
KHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93
LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworCitNb3ZpbmcgbW91c2UgZnJv
bSBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCB0byBzaGFkb3ctaG9zdAorCisgIG1vdXNl
b3V0CisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkg
KHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93
LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBtb3VzZW92ZXIKKworCitN
b3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdCB0byBkaXN0cmlidXRlZC1saWdodC1jaGlsZAor
CisgIG1vdXNlb3V0CisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJl
bGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRv
dy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91c2VvdmVy
CisgICAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBj
b250ZW50KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0
OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctaG9zdCAodGFy
Z2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAg
ICBAdG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93
LWhvc3QpCisKKworTW92aW5nIG1vdXNlIGZyb20gZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgdG8g
c2hhZG93LWhvc3QKKworICBtb3VzZW91dAorICAgICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQg
KHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkK
KyAgICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQor
ICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0
KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChy
ZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNlb3ZlcgorICAgICBAc2hh
ZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCkKKyAgICAgQHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkKQorCisKK01vdmluZyBtb3VzZSBmcm9tIGRldGFpbHMgdG8gc3Vt
bWFyeQorCisgIG1vdXNlb3V0CisgICAgIEBkZXRhaWxzICh0YXJnZXQ6IGRldGFpbHMpIChyZWxh
dGVkOiBzdW1tYXJ5KQorICAgICBAdG9wICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1t
YXJ5KQorCisgIG1vdXNlb3ZlcgorICAgICBAc3VtbWFyeSAodGFyZ2V0OiBzdW1tYXJ5KSAocmVs
YXRlZDogZGV0YWlscykKKyAgICAgQGRldGFpbHMgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6
IGRldGFpbHMpCisgICAgIEB0b3AgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMp
CisKKworTW92aW5nIG1vdXNlIGZyb20gc3VtbWFyeSB0byBkZXRhaWxzCisKKyAgbW91c2VvdXQK
KyAgICAgQHN1bW1hcnkgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisgICAg
IEBkZXRhaWxzICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorICAgICBAdG9w
ICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorCisgIG1vdXNlb3ZlcgorICAg
ICBAZGV0YWlscyAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKyAgICAgQHRv
cCAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKworCitNb3ZpbmcgbW91c2Ug
ZnJvbSBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCB0byBkaXN0cmlidXRlZC1saWdodC1j
aGlsZAorCisgIG1vdXNlb3V0CisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFk
b3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFy
Z2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ct
aG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91c2VvdmVyCisgICAgIEBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1o
b3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LXJv
b3QtY2hpbGQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDog
c2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6
IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKKworTW92
aW5nIG1vdXNlIGZyb20gZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgdG8gc2hhZG93LWhvc3Qvc2hh
ZG93LXJvb3QtY2hpbGQKKworICBtb3VzZW91dAorICAgICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hp
bGQgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9z
dCkKKyAgICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290
LWNoaWxkKQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNo
YWRvdy1yb290LWNoaWxkKQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQt
bGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAodGFyZ2V0OiBk
aXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNl
b3ZlcgorICAgICBAc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQp
IChyZWxhdGVkOiBjb250ZW50KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJv
b3QtY2hpbGQpIChyZWxhdGVkOiBjb250ZW50KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDog
c2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKyAgICAgQHRv
cCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
KQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZl
bnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3No
YWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hZWNhZDRiZDU5YjJkZDdlMDhjNmZkM2U3M2EzYjg5NmQ5YzM1ZDFhCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFy
eS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi5odG1sCkBAIC0wLDAgKzEsMTYyIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
c2hhZG93LWRvbS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0ic2FuZGJveCI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj48
L3ByZT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdG8gZW5zdXJlIHRoYXQgc2hhZG93
IERPTSBib3VuZGFyeSBpcyBub3QgY3Jvc3NlZCBkdXJpbmcgZXZlbnQgcHJvcGFnYXRpb24uIENh
biBvbmx5IHJ1biB3aXRoaW4gRFJULiIpOworCisvLyBGSVhNRTogTWFrZSBhIHNlcGFyYXRlIHV0
aWxpdHkganMgZmlsZSBhbmQgc2hhcmUgaXQuCitmdW5jdGlvbiBtb3ZlTW91c2VPdmVyKGVsZW1l
bnQpCit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMp
CisgICAgICAgIHJldHVybjsKKworICAgIHZhciBkZWZhdWx0UGFkZGluZ1NpemUgPSAyMDsKKyAg
ICB2YXIgeCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOwor
ICAgIHZhciB5OworICAgIGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSB8fCB3aW5kb3cuaW50
ZXJuYWxzLnNoYWRvd1Jvb3QoZWxlbWVudCkpCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNldFRv
cCArIGRlZmF1bHRQYWRkaW5nU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHkgPSBlbGVtZW50Lm9m
ZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3Vz
ZU1vdmVUbyh4LCB5KTsKK30KKwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitmdW5jdGlvbiBj
bGVhckV2ZW50UmVjb3JkcygpCit7CisgICAgZXZlbnRSZWNvcmRzID0ge307Cit9CisKK2Z1bmN0
aW9uIGRpc3BhdGNoZWRFdmVudChldmVudFR5cGUpCit7CisgICAgdmFyIGV2ZW50cyA9IGV2ZW50
UmVjb3Jkc1tldmVudFR5cGVdOworICAgIGlmICghZXZlbnRzKQorICAgICAgICByZXR1cm4gW107
CisgICAgcmV0dXJuIGV2ZW50czsKK30KKworZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQpCit7
CisgICAgdmFyIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUKKyAgICBpZiAoIWV2ZW50UmVjb3Jkc1tl
dmVudFR5cGVdKSB7CisgICAgICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW10KKyAgICB9
CisgICAgdmFyIGV2ZW50U3RyaW5nID0gJyc7CisgICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQp
CisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgQCcgKyBldmVudC5jdXJyZW50VGFyZ2V0LmlkOwor
ICAgIGlmIChldmVudC50YXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdldDog
JyArIGV2ZW50LnRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCkK
KyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0ZWRUYXJn
ZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKKyAgICAgICAgZXZl
bnRTdHJpbmcgKz0gJyhjYXB0dXJpbmcgcGhhc2UpJzsKKyAgICBpZiAoZXZlbnQudGFyZ2V0ICYm
IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1cnJlbnRU
YXJnZXQuaWQpCisgICAgICAgIHNob3VsZEJlKCJldmVudC5ldmVudFBoYXNlIiwgIjIiLCB0cnVl
KTsKKyAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXS5wdXNoKGV2ZW50U3RyaW5nKTsKK30KKwor
ZnVuY3Rpb24gZHVtcE5vZGUobm9kZSkKK3sKKyAgICB2YXIgb3V0cHV0ID0gbm9kZS5ub2RlTmFt
ZSArICJcdCI7CisgICAgaWYgKG5vZGUuaWQpCisgICAgICAgIG91dHB1dCArPSAnIGlkPScgKyBu
b2RlLmlkOworICAgIGlmIChub2RlLmNsYXNzTmFtZSkKKyAgICAgICAgb3V0cHV0ICs9ICcgY2xh
c3M9JyArIG5vZGUuY2xhc3NOYW1lOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9u
IGR1bXBDb21wb3NlZFNoYWRvd1RyZWUobm9kZSwgaW5kZW50KQoreworICAgIGluZGVudCA9IGlu
ZGVudCB8fCAiIjsKKyAgICB2YXIgb3V0cHV0ID0gaW5kZW50ICsgZHVtcE5vZGUobm9kZSkgKyAi
XG4iOworICAgIHZhciBjaGlsZDsKKyAgICBmb3IgKGNoaWxkID0gaW50ZXJuYWxzLmZpcnN0Q2hp
bGRCeVdhbGtlcihub2RlKTsgY2hpbGQ7IGNoaWxkID0gaW50ZXJuYWxzLm5leHRTaWJsaW5nQnlX
YWxrZXIoY2hpbGQpKQorICAgICAgICAgb3V0cHV0ICs9IGR1bXBDb21wb3NlZFNoYWRvd1RyZWUo
Y2hpbGQsIGluZGVudCArICJcdCIpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9u
IHByZXBhcmVET01UcmVlKHBhcmVudCkKK3sKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoCisgICAg
ICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICd0b3AnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6
IDQwcHgnfSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdzaGFk
b3ctaG9zdCcsICdzdHlsZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdkdW1wJ30s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdjb250
ZW50JywgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZWxlY3QnOiAnI2Rpc3RyaWJ1dGVk
LWxpZ2h0LWNoaWxkJyx9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
RE9NKCdkaXYnLCB7J2lkJzogJ3NoYWRvdy1yb290LWNoaWxkJywgJ3N0eWxlJzogJ3BhZGRpbmct
dG9wOiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Rp
dicsIHsnaWQnOiAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc3R5bGUnOiAncGFkZGluZy10
b3A6IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywg
J3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0
ZURPTSgnZGV0YWlscycsIHsnaWQnOiAnZGV0YWlscycsICdvcGVuJzogdHJ1ZSwgJ3N0eWxlJzog
J3BhZGRpbmctdG9wOiA0MHB4JywgJ3RpdGxlJzogJ2R1bXAnfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVET00oJ3N1bW1hcnknLCB7J2lkJzogJ3N1bW1hcnknLCAnc3R5bGUn
OiAncGFkZGluZy10b3A6IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSkpKTsKKworICAgIGdldE5v
ZGVJblNoYWRvd1RyZWVTdGFjaygnc2hhZG93LWhvc3QvJykuaWQgPSAnc2hhZG93LXJvb3QnOwor
ICAgIHZhciBpZHMgPSBbJ3RvcCcsICdzaGFkb3ctaG9zdCcsICdzaGFkb3ctaG9zdC8nLCAnc2hh
ZG93LWhvc3QvY29udGVudCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcsCisgICAg
ICAgICAgICAgICAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnbm9uLWRpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkJywKKyAgICAgICAgICAgICAgICdkZXRhaWxzJywgJ3N1bW1hcnknXTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZWxlbWVu
dCA9IGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhpZHNbaV0pOworICAgICAgICBlbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHJlY29yZEV2ZW50LCBmYWxzZSk7CisgICAgICAg
IGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCByZWNvcmRFdmVudCwgZmFsc2Up
OworICAgIH0KKyAgICAKKyAgICBwYXJlbnQub2Zmc2V0TGVmdDsKKyAgICBkZWJ1ZyhkdW1wQ29t
cG9zZWRTaGFkb3dUcmVlKHBhcmVudCkpOworfQorCitmdW5jdGlvbiBkZWJ1Z0Rpc3BhdGNoZWRF
dmVudChldmVudFR5cGUpCit7CisgICAgZGVidWcoJ1xuICAnICsgZXZlbnRUeXBlKTsKKyAgICB2
YXIgZXZlbnRzID0gZGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSk7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGRlYnVnKCcgICAgJyArIGV2ZW50
c1tpXSkKK30KKworZnVuY3Rpb24gbW92ZU1vdXNlKG9sZEVsZW1lbnRJZCwgbmV3RWxlbWVudElk
KQoreworICAgIGRlYnVnKCdcblxuJyArICdNb3ZpbmcgbW91c2UgZnJvbSAnICsgb2xkRWxlbWVu
dElkICsgJyB0byAnICsgbmV3RWxlbWVudElkKTsKKyAgICBtb3ZlTW91c2VPdmVyKGdldE5vZGVJ
blNoYWRvd1RyZWVTdGFjayhvbGRFbGVtZW50SWQpKTsKKyAgICBjbGVhckV2ZW50UmVjb3Jkcygp
OworICAgIG1vdmVNb3VzZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG5ld0VsZW1lbnRJ
ZCkpOworCisgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNlb3V0Jyk7CisgICAgZGVidWdE
aXNwYXRjaGVkRXZlbnQoJ21vdXNlb3ZlcicpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgcHJlcGFyZURPTVRyZWUoZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3NhbmRib3gnKSk7CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0JywgJ3No
YWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdzaGFkb3ctaG9z
dC9zaGFkb3ctcm9vdC1jaGlsZCcsICdzaGFkb3ctaG9zdCcpOworCisgICAgbW92ZU1vdXNlKCdz
aGFkb3ctaG9zdCcsICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIG1vdmVNb3VzZSgn
ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKKworICAgIG1vdmVNb3Vz
ZSgnZGV0YWlscycsICdzdW1tYXJ5Jyk7CisgICAgbW92ZU1vdXNlKCdzdW1tYXJ5JywgJ2RldGFp
bHMnKTsKKworICAgIG1vdmVNb3VzZSgnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnLCAn
ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnKTsKKyAgICBtb3ZlTW91c2UoJ2Rpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkJywgJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJyk7CisKKyAgICAvLyBU
aGVzZSBjYXNlcyBzaG91bGQgbm90IGhhcHBlbiBzaW5jZSBub24tZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQgaXMgbm90IHJlbmRlcmVkLgorICAgIC8vIEZJWE1FOiBSZWFsbHk/CisgICAgLy8gbW92
ZU1vdXNlKCdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQnKTsKKyAgICAvLyBtb3ZlTW91c2UoJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcs
ICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIC8vIG1vdmVNb3VzZSgnc2hhZG93LWhv
c3QnLCAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgLy8gbW92ZU1vdXNlKCdu
b24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKK30KKwordGVzdCgp
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMuaHRtbAppbmRleCBlYzJl
MmY4MDhhZGEwYTYwNzU0YTQ5YzgwYmM5OTNhODVhMjVjMWQ5Li5hMGMyYzkxOGQ0NzRjODI3MzFm
YjkwY2U1Y2I3NTFkMTAzZjQ5OWU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLmh0bWwKQEAgLTE0Niw3ICsxNDYsNyBA
QCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgJ1RhcmdldCBpcyBhbiBhbmNlc3RvciBv
ZiByZWxhdGVkVGFyZ2V0LicpOwogICAgIHNob3VsZEJlKCdkaXNwYXRjaGVkRXZlbnQoIm1vdXNl
b3ZlciIpJywgJ1siZGl2RSg8LXNoYWRvd0YpKEBkaXZFKSJdJyk7CiAgICAgc2hvdWxkQmUoJ2Rp
c3BhdGNoZWRFdmVudCgibW91c2VvdXQiKScsICdbImRpdkkoPC1kaXZFKShAZGl2SSkiLCAic2hh
ZG93Ryg8LWRpdkUpKEBzaGFkb3dHKSIsICJzaGFkb3dGKDwtZGl2RSkoQHNoYWRvd0YpIiwgInNo
YWRvd0YoPC1kaXZFKShAZGl2RSkiXScpOwotCisgICAKICAgICBtb3ZlTW91c2UoJ3NoYWRvd0Qv
c2hhZG93Ri9zaGFkb3dHL2RpdkknLCAnc2hhZG93RC9zaGFkb3dGJywKICAgICAgICAgICAgICAg
J1RhcmdldCAoc2hhZG93IGhvc3QpIGlzIGFuIGFuY2VzdG9yIG9mIHJlbGF0ZWRUYXJnZXQuJyk7
CiAgICAgc2hvdWxkQmUoJ2Rpc3BhdGNoZWRFdmVudCgibW91c2VvdmVyIiknLCAnW10nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>141720</attachid>
            <date>2012-05-14 06:46:40 -0700</date>
            <delta_ts>2012-05-14 06:46:40 -0700</delta_ts>
            <desc>Benchmark for event-dispatching.</desc>
            <filename>event-benchmark.html</filename>
            <type>text/html</type>
            <size>3311</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hh
ZG93LWRvbS5qcyI+PC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+CjxwPkJlbmNobWFyayBmb3IgZXZl
bnQgZGlzcGF0Y2hpbmcuPC9wPgo8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KPGRpdiBpZD0idG9w
Ij48L2Rpdj4KPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KPHNjcmlwdD4KCmZ1bmN0aW9uIGFwcGVu
ZERPTVRyZWUocGFyZW50LCBoZWlnaHQpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVpZ2h0
OyArK2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgIjEiKTsKICAgICAgICBw
YXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwogICAgICAgIHBhcmVudCA9IGNoaWxkOwogICAgfQog
ICAgcmV0dXJuIHBhcmVudDsKfQoKZnVuY3Rpb24gYXBwZW5kRE9NVHJlZUluY2x1ZGluZ1NoYWRv
d0hvc3QocGFyZW50LCBoZWlnaHQpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVpZ2h0OyAr
K2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
ICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgIjEiKTsKICAgICAgICBpZiAo
aSAlIDEwID09IDUpIHsKICAgICAgICAgICAgdmFyIHNoYWRvd1Jvb3QgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChwYXJlbnQpOwogICAgICAgICAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKGNoaWxk
KTsKICAgICAgICB9IGVsc2UKICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGNoaWxkKTsK
ICAgICAgICBwYXJlbnQgPSBjaGlsZDsKICAgIH0KICAgIHJldHVybiBwYXJlbnQ7Cn0KCgp2YXIg
dGFza3NQZXJVbml0ID0gNTA7CnZhciBtYXhVbml0cyA9IDEwOwoKZnVuY3Rpb24gbWFrZUxpc3Rl
bmVyKGRlc2NyaXB0aW9uLCBjYWxsYmFjaykgewogICAgdmFyIGNhbGxlZCA9IDA7CiAgICB2YXIg
c3RhcnQgPSBEYXRlLm5vdygpOwogICAgdmFyIHRlc3RDb3VudCA9IDA7CiAgICB2YXIgc3VtID0g
MDsKCiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgKytjYWxsZWQ7CiAgICAgICAgaWYg
KGNhbGxlZCAlIHRhc2tzUGVyVW5pdCA9PSAwKSB7CiAgICAgICAgICAgIHZhciBlbmQgPSBEYXRl
Lm5vdygpOwogICAgICAgICAgICBzdW0gKz0gZW5kIC0gc3RhcnQ7CiAgICAgICAgICAgIHN0YXJ0
ID0gZW5kOwogICAgICAgICAgICArK3Rlc3RDb3VudDsKICAgICAgICB9CiAgICAgICAgaWYgKGNh
bGxlZCA9PSB0YXNrc1BlclVuaXQgKiBtYXhVbml0cykgewogICAgICAgICAgICBkZWJ1ZyhkZXNj
cmlwdGlvbik7CiAgICAgICAgICAgIGRlYnVnKCcgVG9vayAnICsgKHN1bSAvIHRlc3RDb3VudCkg
KyAnIG1zLiAnICsgJyAoJyArIHN1bSArICcvJyArIHRlc3RDb3VudCArICcpJyk7CiAgICAgICAg
ICAgIGlmIChjYWxsYmFjaykKICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgfQog
ICAgfQp9CgpmdW5jdGlvbiB0ZXN0VHJlZVdpdGhvdXRTaGFkb3dIb3N0KHRvcCwgaGVpZ2h0KSB7
CiAgICB2YXIgYnJhbmNoUG9pbnQgPSBhcHBlbmRET01UcmVlKHRvcCwgaGVpZ2h0IC8gMik7CiAg
ICB2YXIgbGVhZjEgPSBhcHBlbmRET01UcmVlKGJyYW5jaFBvaW50LCBoZWlnaHQgLyAyKTsKICAg
IHZhciBsZWFmMiA9IGFwcGVuZERPTVRyZWUoYnJhbmNoUG9pbnQsIGhlaWdodCAvIDIpOwogICAg
cmV0dXJuIFtsZWFmMSwgbGVhZjJdOwp9CgpmdW5jdGlvbiB0ZXN0VHJlZVdpdGhTaGFkb3dIb3N0
KHRvcCwgaGVpZ2h0KSB7CiAgICB2YXIgYnJhbmNoUG9pbnQgPSBhcHBlbmRET01UcmVlSW5jbHVk
aW5nU2hhZG93SG9zdCh0b3AsIGhlaWdodCAvIDIpOwogICAgdmFyIGxlYWYxID0gYXBwZW5kRE9N
VHJlZUluY2x1ZGluZ1NoYWRvd0hvc3QoYnJhbmNoUG9pbnQsIGhlaWdodCAvIDIpOwogICAgdmFy
IGxlYWYyID0gYXBwZW5kRE9NVHJlZUluY2x1ZGluZ1NoYWRvd0hvc3QoYnJhbmNoUG9pbnQsIGhl
aWdodCAvIDIpOwogICAgcmV0dXJuIFtsZWFmMSwgbGVhZjJdOwp9CgpmdW5jdGlvbiBwb3N0VGFz
ayhub2RlMSwgbm9kZTIpIHsKICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKCiAgICBmdW5j
dGlvbiB0YXNrKCkgewogICAgICAgIG5vZGUxLmZvY3VzKCk7CiAgICAgICAgbm9kZTIuZm9jdXMo
KTsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFza3NQZXJVbml0ICogbWF4VW5pdHM7
ICsraSkKICAgICAgICB0YXNrKCk7Cn0KCmZ1bmN0aW9uIGRvQmVuY2htYXJrKCkKewogICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CiAgICB9CgogICAgdmFyIHRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3An
KTsKICAgIHZhciBoZWlnaHRMaXN0ID0gWzEwLCAyMCwgMzAsIDUwLCAxMDAsIDIwMF07CiAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGhlaWdodExpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIg
aGVpZ2h0ID0gaGVpZ2h0TGlzdFtpXTsKCiAgICAgICAgdmFyIGxlYWZOb2RlcyA9IHRlc3RUcmVl
V2l0aG91dFNoYWRvd0hvc3QodG9wLCBoZWlnaHQpOwogICAgICAgIGxlYWZOb2Rlc1sxXS5hZGRF
dmVudExpc3RlbmVyKCdmb2N1cycsIG1ha2VMaXN0ZW5lcignU2hhZG93LUZyZWUgVHJlZSAoaGVp
Z2h0PScgKyBoZWlnaHQgKyAnKScpKTsKICAgICAgICBwb3N0VGFzayhsZWFmTm9kZXNbMF0sIGxl
YWZOb2Rlc1sxXSk7CgogICAgICAgIHZhciBsZWFmTm9kZXMgPSB0ZXN0VHJlZVdpdGhTaGFkb3dI
b3N0KHRvcCwgaGVpZ2h0KTsKICAgICAgICBsZWFmTm9kZXNbMV0uYWRkRXZlbnRMaXN0ZW5lcign
Zm9jdXNpbicsIG1ha2VMaXN0ZW5lcignVGVlZSB3aXRoIFNoYWRvd0hvc3QgKGhlaWdodD0nICsg
aGVpZ2h0ICsgJyknLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKGkgPT0gaGVpZ2h0TGlz
dC5sZW5ndGggLSAxKQogICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOwogICAgICAgIH0pKTsKCiAgICAgICAgcG9zdFRhc2sobGVhZk5vZGVzWzBdLCBsZWFm
Tm9kZXNbMV0pOwogICAgfQp9Cgpkb0JlbmNobWFyaygpOwoKPC9zY3JpcHQ+CjwvYm9keT4KPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141936</attachid>
            <date>2012-05-15 05:43:15 -0700</date>
            <delta_ts>2012-05-16 02:25:30 -0700</delta_ts>
            <desc>WIP.</desc>
            <filename>bug-78586-20120515214314.patch</filename>
            <type>text/plain</type>
            <size>36120</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRlZjU4MGY4MTc2MDYx
M2YzNWQ4NTdjMGVkZTVkYTg3ZWVjOTg3Yy4uNWU2Y2M3OTA0NzI3MjI0YTQ4YTY0NDhlZTNkYzhh
M2JkOWZjODQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgdXNlIHRoZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgaW5zdGVhZCBvZiBvcmln
aW5hbCBET00gdHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4NTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1u
b2RlLWRpc3RyaWJ1dGlvbi5odG1sCisKKyAgICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6
YWRqdXN0ZWRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlQWRqdXN0ZWRQYXJlbnQpOgorICAgICAg
ICAqIGRvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaDoKKyAgICAgICAgKENvbXBvc2VkU2hh
ZG93VHJlZVdhbGtlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OmNhbkNyb3NzVXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNo
YWRvd1RyZWVXYWxrZXI6OmNhbkNyb3NzTG93ZXJCb3VuZGFyeSk6CisgICAgICAgICogZG9tL0V2
ZW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OkV2ZW50Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjp0b01vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKToK
KyAgICAgICAgKiBkb20vRXZlbnRDb250ZXh0Lmg6CisgICAgICAgIChFdmVudENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpzaG91bGREaXNwYXRjaCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2V0U2hvdWxkRGlz
cGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpyZWxhdGVkVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldCk6CisgICAg
ICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGlzdHNJ
blNhbWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2Vz
dG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpsb3dlc3RDb21t
b25Cb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFJlbGF0ZWRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVy
OjphZGp1c3RSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hl
cjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmg6Cisg
ICAgICAgIChFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2
ZW50KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpz
aG93Tm9kZSk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorCiAyMDEy
LTA1LTE0ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4gCiAKICAgICAg
ICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0luZGVudCcpIGluIHRoZSBkaXJlY3QgY2hpbGQgb2Yg
U2hhZG93Um9vdCBjYXVzZXMgYSBjcmFzaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBv
c2VkU2hhZG93VHJlZVdhbGtlci5jcHAKaW5kZXggMjM1NjgzZmVkZjhjYzY5ZTU5ODlmNDFjNjM3
MWU5OTgwODdhZmQyNC4uNDE4NWYzZWJmYzI5ZDAwYWIzMTJjZDJmMGNiYzRmMzY2MTFlMTVlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAK
QEAgLTE5Niw2ICsxOTYsMjkgQEAgdm9pZCBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnBhcmVu
dCgpCiAgICAgYXNzZXJ0UG9zdGNvbmRpdGlvbigpOwogfQogCit2b2lkIENvbXBvc2VkU2hhZG93
VHJlZVdhbGtlcjo6cGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCkK
K3sKKyAgICBBU1NFUlQobV9ub2RlKTsKKyAgICBtX25vZGUgPSB0cmF2ZXJzZVBhcmVudEluY2x1
ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdChtX25vZGUpOworfQorCitOb2RlKiBDb21w
b3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9p
bnRBbmRTaGFkb3dSb290KGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgaWYgKEVsZW1l
bnRTaGFkb3cqIHNoYWRvdyA9IHNoYWRvd09mUGFyZW50KG5vZGUpKSB7CisgICAgICAgIGlmIChJ
bnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQgPSBzaGFkb3ctPmluc2VydGlvblBvaW50Rm9y
KG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGluc2VydGlvblBvaW50OworICAgIH0KKyAgICBp
ZiAobm9kZS0+aXNTaGFkb3dSb290KCkpIHsKKyAgICAgICAgY29uc3QgU2hhZG93Um9vdCogc2hh
ZG93Um9vdCA9IHRvU2hhZG93Um9vdChub2RlKTsKKyAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPmlz
WW91bmdlc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCk7CisgICAg
ICAgIEluc2VydGlvblBvaW50KiBhc3NpZ25lZEluc2VydGlvblBvaW50ID0gc2hhZG93Um9vdC0+
YXNzaWduZWRUbygpOworICAgICAgICBBU1NFUlQoYXNzaWduZWRJbnNlcnRpb25Qb2ludCk7Cisg
ICAgICAgIHJldHVybiBhc3NpZ25lZEluc2VydGlvblBvaW50OworICAgIH0KKyAgICByZXR1cm4g
bm9kZS0+cGFyZW50Tm9kZSgpOworfQorCiBOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6
OnRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW5D
cm9zc1VwcGVyQm91bmRhcnkoKSAmJiBub2RlLT5pc1NoYWRvd1Jvb3QoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oCmluZGV4IDk3NjZjMWEzNjUw
MTkwMDg4Yjk0ZGEyYTQ0MGMyMDYyNmQwZDRhOTIuLmRhMzRlZWQ2NjY3ZmZiYjYyZTU2NTEzZGY3
ZWE3NzdmMGVmZGNjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNo
YWRvd1RyZWVXYWxrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dU
cmVlV2Fsa2VyLmgKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgIHZvaWQgcHJldmlvdXNT
aWJsaW5nKCk7CiAKICAgICB2b2lkIHBhcmVudCgpOworICAgIC8vIFRoaXMgZnVuY3Rpb24gaWdu
b3JlcyBwb2xpY3kuIEFsd2F5cyBjcm9zcyBhbiB1cHBlciBib3VuZGFyeS4KKyAgICB2b2lkIHBh
cmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpOwogCiAgICAgdm9pZCBu
ZXh0KCk7CiAgICAgdm9pZCBwcmV2aW91cygpOwpAQCAtOTksNiArMTAxLDcgQEAgcHJpdmF0ZToK
ICAgICBOb2RlKiB0cmF2ZXJzZUxhc3RDaGlsZChjb25zdCBOb2RlKikgY29uc3Q7CiAgICAgTm9k
ZSogdHJhdmVyc2VDaGlsZChjb25zdCBOb2RlKiwgVHJhdmVyc2FsRGlyZWN0aW9uKSBjb25zdDsK
ICAgICBOb2RlKiB0cmF2ZXJzZVBhcmVudChjb25zdCBOb2RlKikgY29uc3Q7CisgICAgTm9kZSog
dHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoY29uc3Qg
Tm9kZSopIGNvbnN0OwogCiAgICAgc3RhdGljIE5vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmcoY29u
c3QgTm9kZSopOwogICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzU2libGluZyhjb25z
dCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCmluZGV4IDJhNWM1MjEwYWFl
ZjZiOTQxYmJkZTVkZTI5NWNiYTMzOWQxNDJkZjUuLmExYjUxYzBlOWZmYTRlNTA5OWE3Yzk4ZGE1
MDlhODI3ZjM0MmUyZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJO
b2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEzICszOSwyMiBAQCBFdmVudENv
bnRleHQ6OkV2ZW50Q29udGV4dChQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IGN1cnJlbgogICAgIDogbV9ub2RlKG5vZGUpCiAgICAgLCBtX2N1cnJlbnRUYXJn
ZXQoY3VycmVudFRhcmdldCkKICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICAsIG1fcmVsYXRl
ZFRhcmdldCgwKQogewogfQogCitzdGF0aWMgTW91c2VFdmVudCogdG9Nb3VzZUV2ZW50KEV2ZW50
KiBldmVudCkKK3sKKyAgICBBU1NFUlQoZXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKK30KKwogdm9pZCBF
dmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiBldmVudCkgY29uc3QKIHsKICAg
ICBldmVudC0+c2V0VGFyZ2V0KG1fdGFyZ2V0LmdldCgpKTsKICAgICBldmVudC0+c2V0Q3VycmVu
dFRhcmdldChtX2N1cnJlbnRUYXJnZXQuZ2V0KCkpOworICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQu
Z2V0KCkgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICB0b01vdXNlRXZlbnQoZXZl
bnQpLT5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7CiAgICAgbV9ub2Rl
LT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQu
aAppbmRleCA1ZTczMTdmNDVjZjU0ODU2YTMyNDlkODdkZDI3YTA4MTY2MmQ2NzQ4Li42MzI1ODEw
MDkwYzA0Mjk3MjY5Y2U1MmU3MGUyZGQxMGFkZDE0NDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29u
dGV4dC5oCkBAIC00MiwxMyArNDIsMTYgQEAgcHVibGljOgogCiAgICAgTm9kZSogbm9kZSgpIGNv
bnN0OwogICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQoKSBjb25zdDsKKyAgICBFdmVudFRhcmdldCog
cmVsYXRlZFRhcmdldCgpIGNvbnN0OwogICAgIGJvb2wgY3VycmVudFRhcmdldFNhbWVBc1Rhcmdl
dCgpIGNvbnN0OwogICAgIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBjb25zdDsKKyAg
ICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4pOwogCiBwcml2
YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBt
X2N1cnJlbnRUYXJnZXQ7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsKKyAgICBS
ZWZQdHI8RXZlbnRUYXJnZXQ+IG1fcmVsYXRlZFRhcmdldDsKIH07CiAKIGlubGluZSBOb2RlKiBF
dmVudENvbnRleHQ6Om5vZGUoKSBjb25zdApAQCAtNjYsNiArNjksMTYgQEAgaW5saW5lIGJvb2wg
RXZlbnRDb250ZXh0OjpjdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkgY29uc3QKICAgICByZXR1
cm4gbV9jdXJyZW50VGFyZ2V0LmdldCgpID09IG1fdGFyZ2V0LmdldCgpOwogfQogCitpbmxpbmUg
RXZlbnRUYXJnZXQqIEV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdldCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsKK30KKworaW5saW5lIHZvaWQgRXZlbnRDb250
ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJn
ZXQpCit7CisgICAgbV9yZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdldDsKK30KKwogfQogCiAj
ZW5kaWYgLy8gRXZlbnRDb250ZXh0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5j
cHAKaW5kZXggMTY4OWUwNmI4Y2E0YmYwYWI1ODNjOGYzOTFiZjk5ODkwYTk3NWJkYy4uMThkMmIy
YjYyOTJiYmZiNTQ0ZTgzODhlYTRjOTc3NDU2YWFjMjFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTI2LDEwICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgogCisjaW5jbHVkZSAiQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyLmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkV2
ZW50Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgi
CkBAIC00Nyw2ICs1MCw2MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBIYXNoU2V0
PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSAwOwogCitFdmVudFJl
bGF0ZWRUYXJnZXRBZGp1c3Rlcjo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0
cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpCisgICAgOiBtX25v
ZGUobm9kZSkKKyAgICAsIG1fcmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0KQoreworICAgIEFT
U0VSVChub2RlKTsKKyAgICBBU1NFUlQocmVsYXRlZFRhcmdldCk7Cit9CisKK3ZvaWQgRXZlbnRS
ZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmFkanVzdChWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0
b3JzKQoreworICAgIFRyZWVTY29wZSogbGFzdFRyZWVTY29wZSA9IDA7CisgICAgZm9yIChDb21w
b3NlZFNoYWRvd1RyZWVXYWxrZXIgd2Fsa2VyKG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7IHdhbGtl
ci5nZXQoKTsgd2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9v
dCgpKSB7CisgICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSB3YWxrZXIuZ2V0KCktPnRyZWVTY29w
ZSgpOworICAgICAgICAvLyBTa2lwcyBhZGRpbmcgYSBub2RlIHRvIHRoZSBtYXAgaWYgdHJlZVNj
b3BlIGRvZXMgbm90IGNoYW5nZS4KKyAgICAgICAgaWYgKHNjb3BlICE9IGxhc3RUcmVlU2NvcGUp
CisgICAgICAgICAgICBtX3JlbGF0ZWRUYXJnZXRNYXAuYWRkKHNjb3BlLCB3YWxrZXIuZ2V0KCkp
OworICAgICAgICBsYXN0VHJlZVNjb3BlID0gc2NvcGU7CisgICAgfQorCisgICAgbGFzdFRyZWVT
Y29wZSA9IDA7CisgICAgRXZlbnRUYXJnZXQqIGFkanVzdGVkUmVsYXRlZFRhcmdldCA9IDA7Cisg
ICAgZm9yIChWZWN0b3I8RXZlbnRDb250ZXh0Pjo6aXRlcmF0b3IgaXRlciA9IGFuY2VzdG9ycy5i
ZWdpbigpOyBpdGVyIDwgYW5jZXN0b3JzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgVHJlZVNj
b3BlKiBzY29wZSA9IGl0ZXItPm5vZGUoKS0+dHJlZVNjb3BlKCk7CisgICAgICAgIGlmIChzY29w
ZSA9PSBsYXN0VHJlZVNjb3BlKSB7CisgICAgICAgICAgICAvLyBSZS11c2UgdGhlIHByZXZpb3Vz
IGFkanVzdGVkUmVsYXRlZFRhcmdldCBpZiB0cmVlU2NvcGUgZG9lcyBub3QgY2hhbmdlLgorICAg
ICAgICAgICAgaXRlci0+c2V0UmVsYXRlZFRhcmdldChhZGp1c3RlZFJlbGF0ZWRUYXJnZXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0ID0gZmlu
ZFJlbGF0ZWRUYXJnZXQoc2NvcGUpOworICAgICAgICAgICAgaXRlci0+c2V0UmVsYXRlZFRhcmdl
dChhZGp1c3RlZFJlbGF0ZWRUYXJnZXQpOworICAgICAgICB9CisgICAgICAgIGxhc3RUcmVlU2Nv
cGUgPSBzY29wZTsKKyAgICAgICAgaWYgKGl0ZXItPnRhcmdldCgpID09IGFkanVzdGVkUmVsYXRl
ZFRhcmdldCkgeworICAgICAgICAgICAgLy8gRXZlbnQgZGlzcGF0Y2hpbmcgc2hvdWxkIGJlIHN0
b3BwZWQgaGVyZS4KKyAgICAgICAgICAgIGFuY2VzdG9ycy5zaHJpbmsoaXRlciAtIGFuY2VzdG9y
cy5iZWdpbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitF
dmVudFRhcmdldCogRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmZpbmRSZWxhdGVkVGFyZ2V0
KFRyZWVTY29wZSogc2NvcGUpCit7CisgICAgVmVjdG9yPFRyZWVTY29wZSo+IHBhcmVudFRyZWVT
Y29wZXM7CisgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSAwOworICAgIHdoaWxlIChz
Y29wZSkgeworICAgICAgICBwYXJlbnRUcmVlU2NvcGVzLmFwcGVuZChzY29wZSk7CisgICAgICAg
IFJlbGF0ZWRUYXJnZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9yZWxhdGVkVGFyZ2V0
TWFwLmZpbmQoc2NvcGUpOworICAgICAgICBpZiAoZm91bmQgIT0gbV9yZWxhdGVkVGFyZ2V0TWFw
LmVuZCgpKSB7CisgICAgICAgICAgICByZWxhdGVkVGFyZ2V0ID0gZm91bmQtPnNlY29uZDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNjb3BlID0gc2NvcGUtPnBhcmVu
dFRyZWVTY29wZSgpOworICAgIH0KKyAgICBmb3IgKFZlY3RvcjxUcmVlU2NvcGUqPjo6aXRlcmF0
b3IgaXRlciA9IHBhcmVudFRyZWVTY29wZXMuYmVnaW4oKTsgaXRlciA8IHBhcmVudFRyZWVTY29w
ZXMuZW5kKCk7ICsraXRlcikKKyAgICAgIG1fcmVsYXRlZFRhcmdldE1hcC5hZGQoKml0ZXIsIHJl
bGF0ZWRUYXJnZXQpOworICAgIHJldHVybiByZWxhdGVkVGFyZ2V0OworfQorCiBib29sIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50RGlz
cGF0Y2hNZWRpYXRvcj4gbWVkaWF0b3IpCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9y
YmlkZGVuKCkpOwpAQCAtMTE2LDEwNCArMTc2LDI5IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVy
CiAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKIH0K
IAotUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gRXZlbnREaXNwYXRjaGVyOjphZGp1c3RUb1NoYWRv
d0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0LCBjb25zdCBWZWN0b3I8
Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpCi17Ci0gICAgVmVjdG9yPEV2ZW50Q29udGV4
dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2VzdENvbW1vbkJvdW5kYXJ5ID0gbV9hbmNlc3RvcnMuZW5k
KCk7Ci0gICAgLy8gQXNzdW1lIGRpdmVyZ2VudCBib3VuZGFyeSBpcyB0aGUgcmVsYXRlZFRhcmdl
dCBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCByZWxhdGVkIHRhcmdldCBhbmNlc3RvciBjaGFpbiBk
b2VzIG5vdCBjcm9zcyBhbnkgc2hhZG93IERPTSBib3VuZGFyaWVzKS4KLSAgICBWZWN0b3I8Tm9k
ZSo+Ojpjb25zdF9pdGVyYXRvciBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5ID0gcmVsYXRlZFRhcmdl
dEFuY2VzdG9ycy5iZWdpbigpOwotCi0gICAgVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0
ZXJhdG9yIHRhcmdldEFuY2VzdG9yID0gbV9hbmNlc3RvcnMuZW5kKCk7Ci0gICAgLy8gV2FsayBk
b3duIGZyb20gdGhlIHRvcCwgbG9va2luZyBmb3IgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciwgYWxz
byBtb25pdG9yaW5nIHNoYWRvdyBET00gYm91bmRhcmllcy4KLSAgICBib29sIGRpdmVyZ2VkID0g
ZmFsc2U7Ci0gICAgZm9yIChWZWN0b3I8Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpID0gcmVsYXRl
ZFRhcmdldEFuY2VzdG9ycy5lbmQoKSAtIDE7IGkgPj0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5i
ZWdpbigpOyAtLWkpIHsKLSAgICAgICAgaWYgKGRpdmVyZ2VkKSB7Ci0gICAgICAgICAgICBpZiAo
KCppKS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgICAgICBmaXJzdERpdmVyZ2VudEJv
dW5kYXJ5ID0gaSArIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0YXJnZXRBbmNl
c3RvciA9PSBtX2FuY2VzdG9ycy5iZWdpbigpKSB7Ci0gICAgICAgICAgICBkaXZlcmdlZCA9IHRy
dWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRhcmdldEFu
Y2VzdG9yLS07Ci0KLSAgICAgICAgaWYgKCgqaSktPmlzU2hhZG93Um9vdCgpKQotICAgICAgICAg
ICAgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSB0YXJnZXRBbmNlc3RvcjsKLQotICAgICAgICBpZiAo
KCppKSAhPSAoKnRhcmdldEFuY2VzdG9yKS5ub2RlKCkpCi0gICAgICAgICAgICBkaXZlcmdlZCA9
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFkaXZlcmdlZCkgewotICAgICAgICAvLyBUaGUgcmVs
YXRlZFRhcmdldCBpcyBhbiBhbmNlc3RvciBvciBzaGFkb3dIb3N0IG9mIHRoZSB0YXJnZXQuCi0g
ICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGZpcnN0IGNoZWNrIG9uY2UgY29udmVyc2lvbiB0
byBuZXcgc2hhZG93IERPTSBpcyBjb21wbGV0ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi80ODY5OD4K
LSAgICAgICAgaWYgKG1fbm9kZS0+c2hhZG93SG9zdCgpID09IHJlbGF0ZWRUYXJnZXQuZ2V0KCkg
fHwgaXNTaGFkb3dIb3N0KHJlbGF0ZWRUYXJnZXQuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBWZWN0
b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgcmVsYXRlZFRhcmdldENoaWxkID0gdGFy
Z2V0QW5jZXN0b3IgLSAxOwotICAgICAgICAgICAgaWYgKHJlbGF0ZWRUYXJnZXRDaGlsZCA+PSBt
X2FuY2VzdG9ycy5iZWdpbigpICYmIHJlbGF0ZWRUYXJnZXRDaGlsZC0+bm9kZSgpLT5pc1NoYWRv
d1Jvb3QoKSkKLSAgICAgICAgICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IHJlbGF0ZWRU
YXJnZXRDaGlsZDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoKCpmaXJzdERpdmVyZ2VudEJv
dW5kYXJ5KSA9PSBtX25vZGUuZ2V0KCkpIHsKLSAgICAgICAgLy8gU2luY2UgYW5jZXN0b3JzIGRv
ZXMgbm90IGNvbnRhaW4gdGFyZ2V0IGl0c2VsZiwgd2UgbXVzdCBhY2NvdW50Ci0gICAgICAgIC8v
IGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCB0YXJnZXQgaXMgYSBzaGFkb3dIb3N0IG9mIHJlbGF0
ZWRUYXJnZXQKLSAgICAgICAgLy8gYW5kIHRodXMgc2VydmVzIGFzIHRoZSBsb3dlc3RDb21tb25C
b3VuZGFyeS4KLSAgICAgICAgLy8gTHVja2lseSwgaW4gdGhpcyBjYXNlIHRoZSBmaXJzdERpdmVy
Z2VudEJvdW5kYXJ5IGlzIHRhcmdldC4KLSAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSBt
X2FuY2VzdG9ycy5iZWdpbigpOwotICAgICAgICBtX3Nob3VsZFByZXZlbnREaXNwYXRjaCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKGxvd2VzdENvbW1vbkJvdW5kYXJ5ICE9IG1fYW5jZXN0b3Jz
LmVuZCgpKSB7Ci0gICAgICAgIC8vIFRyaW0gYW5jZXN0b3JzIHRvIGxvd2VzdENvbW1vbkJvdW5k
YXJ5IHRvIGtlZXAgZXZlbnRzIGluc2lkZSBvZiB0aGUgY29tbW9uIHNoYWRvdyBET00gc3VidHJl
ZS4KLSAgICAgICAgbV9hbmNlc3RvcnMuc2hyaW5rKGxvd2VzdENvbW1vbkJvdW5kYXJ5IC0gbV9h
bmNlc3RvcnMuYmVnaW4oKSk7Ci0gICAgfQotICAgIC8vIFNldCBldmVudCdzIHJlbGF0ZWQgdGFy
Z2V0IHRvIHRoZSBmaXJzdCBlbmNvdW50ZXJlZCBzaGFkb3cgRE9NIGJvdW5kYXJ5IGluIHRoZSBk
aXZlcmdlbnQgc3VidHJlZS4KLSAgICByZXR1cm4gZmlyc3REaXZlcmdlbnRCb3VuZGFyeSAhPSBy
ZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkgPyAqZmlyc3REaXZlcmdlbnRCb3VuZGFyeSA6
IHJlbGF0ZWRUYXJnZXQ7Ci19Ci0KLWlubGluZSBzdGF0aWMgYm9vbCBhbmNlc3RvcnNDcm9zc1No
YWRvd0JvdW5kYXJpZXMoY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4dD4mIGFuY2VzdG9ycykKK3N0
YXRpYyBib29sIG5lZWRzQWRqdXN0UmVsYXRlZFRhcmdldChOb2RlKiBub2RlLCBOb2RlKiByZWxh
dGVkVGFyZ2V0KQogewotICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGFuY2VzdG9y
cy5maXJzdCgpLm5vZGUoKSA9PSBhbmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKKyAgICByZXR1cm4g
bm9kZS0+dHJlZVNjb3BlKCktPnJvb3ROb2RlKCktPmlzU2hhZG93Um9vdCgpIHx8IHJlbGF0ZWRU
YXJnZXQtPnRyZWVTY29wZSgpLT5yb290Tm9kZSgpLT5pc1NoYWRvd1Jvb3QoKQorICAgICAgICB8
fCBpc1NoYWRvd0hvc3Qobm9kZS0+cGFyZW50Tm9kZSgpKSB8fCBpc1NoYWRvd0hvc3QocmVsYXRl
ZFRhcmdldC0+cGFyZW50Tm9kZSgpKTsKIH0KIAotLy8gRklYTUU6IE9uY2UgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTYzIGxhbmRzLCB0aGlzIHNob3VsZAotLy8g
YmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDAyNS4KLVBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6
YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+
IHBycFJlbGF0ZWRUYXJnZXQpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRh
cmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJn
ZXQpCiB7CiAgICAgaWYgKCFwcnBSZWxhdGVkVGFyZ2V0KQotICAgICAgICByZXR1cm4gMDsKLQor
ICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQgPSBwcnBSZWxh
dGVkVGFyZ2V0LT50b05vZGUoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgTm9kZSogdGFyZ2V0ID0gbV9ub2RlLmdldCgpOwotICAgIGlmICghdGFy
Z2V0KQotICAgICAgICByZXR1cm4gcHJwUmVsYXRlZFRhcmdldDsKLQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCFtX25vZGUuZ2V0KCkpCisgICAgICAgIHJldHVybjsKICAgICBlbnN1cmVFdmVu
dEFuY2VzdG9ycyhldmVudCk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgZWFybHkgaWYgdGhlIGNvbW1v
biBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxlIGJ5IGxvb2tpbmcgYXQKLSAgICAvLyBhbmNlc3Rv
cnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0aW5nIGhhcyBvY2N1cmVkIChpbmRpY2F0aW5nIHRo
ZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgotICAgIC8vIElmIHRoZXJlIGFy
ZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0aGUgdGFyZ2V0IGFuZCByZWxhdGVkIHRhcmdldCBj
YW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5LgotICAgIGJvb2wgbm9Db21tb25Cb3VuZGFyeSA9
IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyhtX2FuY2VzdG9ycyk7Ci0KLSAgICBWZWN0
b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnM7Ci0gICAgTm9kZSogb3V0ZXJtb3N0U2hh
ZG93Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0LmdldCgpOwotICAgIGZvciAoTm9kZSogbiA9IG91
dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBuID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0g
ICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgIG91dGVybW9zdFNoYWRv
d0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpOwotICAgICAgICBpZiAoIW5vQ29tbW9u
Qm91bmRhcnkpCi0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmFwcGVuZChuKTsK
KyAgICAvLyBGSVhNRTogV2UgY2FuIGhhdmUgYSBzaG9ydGN1dCBoZXJlIGlmIHRoZXJlIGlzIG5v
IHNoYWRvdyBkb20uCisgICAgaWYgKG5lZWRzQWRqdXN0UmVsYXRlZFRhcmdldChtX25vZGUuZ2V0
KCksIHJlbGF0ZWRUYXJnZXQuZ2V0KCkpKQorICAgICAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1
c3RlcihtX25vZGUsIHJlbGF0ZWRUYXJnZXQucmVsZWFzZSgpKS5hZGp1c3QobV9hbmNlc3RvcnMp
OworICAgIGVsc2UgeworICAgICAgICBmb3IgKFZlY3RvcjxFdmVudENvbnRleHQ+OjppdGVyYXRv
ciBpdGVyID0gbV9hbmNlc3RvcnMuYmVnaW4oKTsgaXRlciA8IG1fYW5jZXN0b3JzLmVuZCgpOyAr
K2l0ZXIpCisgICAgICAgICAgICBpdGVyLT5zZXRSZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJnZXQp
OwogICAgIH0KLQotICAgIC8vIFNob3J0LWNpcmN1aXQgdGhlIGZhc3QgY2FzZSB3aGVuIHdlIGtu
b3cgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgYSBjb21tb24gYm91bmRhcnkuCi0gICAg
aWYgKG5vQ29tbW9uQm91bmRhcnkpCi0gICAgICAgIHJldHVybiBvdXRlcm1vc3RTaGFkb3dCb3Vu
ZGFyeTsKLQotICAgIHJldHVybiBhZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMocmVsYXRlZFRhcmdl
dC5yZWxlYXNlKCksIHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwogfQogCiBFdmVudERpc3BhdGNo
ZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2RlKiBub2RlKQpAQCAtMjI3LDMwICsyMTIsMzkgQEAgRXZl
bnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKIAogdm9pZCBFdmVudERp
c3BhdGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAo
IW1fbm9kZS0+aW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9hbmNl
c3RvcnNJbml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ29tcG9zZWRTaGFkb3dU
cmVlV2Fsa2VyIGFuY2VzdG9yV2Fsa2VyKG1fbm9kZS5nZXQoKSk7CisgICAgRXZlbnRUYXJnZXQq
IG9yaWdpbmFsVGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5j
ZXN0b3JXYWxrZXIuZ2V0KCkpOworICAgIG1fYW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQo
bV9ub2RlLmdldCgpLCBvcmlnaW5hbFRhcmdldCwgb3JpZ2luYWxUYXJnZXQpKTsKICAgICBtX2Fu
Y2VzdG9yc0luaXRpYWxpemVkID0gdHJ1ZTsKIAotICAgIE5vZGUqIGFuY2VzdG9yID0gbV9ub2Rl
LmdldCgpOwotICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudFRhcmdldFJlc3BlY3RpbmdT
VkdUYXJnZXRSdWxlcyhhbmNlc3Rvcik7CisgICAgaWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4gdGFyZ2V0U3RhY2s7
CisgICAgdGFyZ2V0U3RhY2suYXBwZW5kKG9yaWdpbmFsVGFyZ2V0KTsKICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBpZiAoYW5jZXN0b3ItPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgYW5jZXN0b3IpID09IFN0YXlJ
bnNpZGVTaGFkb3dET00pCisgICAgICAgIGlmIChhbmNlc3RvcldhbGtlci5nZXQoKS0+aXNTaGFk
b3dSb290KCkpIHsKKyAgICAgICAgICAgIGlmIChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKGV2
ZW50LCBhbmNlc3RvcldhbGtlci5nZXQoKSkgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5zaGFk
b3dIb3N0KCk7Ci0gICAgICAgICAgICBpZiAoIW1fbm9kZS0+aXNTVkdFbGVtZW50KCkpCi0gICAg
ICAgICAgICAgICAgdGFyZ2V0ID0gYW5jZXN0b3I7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwot
Ci0gICAgICAgIGlmICghYW5jZXN0b3IpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
bV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4dChhbmNlc3RvciwgZXZlbnRUYXJnZXRSZXNw
ZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3IpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgIGFu
Y2VzdG9yV2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgp
OworICAgICAgICAgICAgaWYgKCFhbmNlc3RvcldhbGtlci5nZXQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+aXNTVkdFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICB0YXJnZXRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAg
aWYgKHRhcmdldFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3Rh
Y2suYXBwZW5kKGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGFuY2VzdG9yV2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2Vy
dGlvblBvaW50QW5kU2hhZG93Um9vdCgpOworICAgICAgICAgICAgaWYgKCFhbmNlc3RvcldhbGtl
ci5nZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoaXNJbnNl
cnRpb25Qb2ludChhbmNlc3RvcldhbGtlci5nZXQoKSkgJiYgdG9JbnNlcnRpb25Qb2ludChhbmNl
c3RvcldhbGtlci5nZXQoKSktPmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0U3Rh
Y2suYXBwZW5kKGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fu
Y2VzdG9ycy5hcHBlbmQoRXZlbnRDb250ZXh0KGFuY2VzdG9yV2Fsa2VyLmdldCgpLCBldmVudFRh
cmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3RvcldhbGtlci5nZXQoKSksIHRhcmdl
dFN0YWNrLmxhc3QoKSkpOwogICAgIH0KIH0KIApAQCAtMjcxLDcgKzI2NSw3IEBAIGJvb2wgRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAg
ICAgLy8gR2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIGJlZm9y
ZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2suCiAgICAgdm9pZCogZGF0YSA9IG1fbm9k
ZS0+cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwotICAgIGlmIChtX3Nob3Vs
ZFByZXZlbnREaXNwYXRjaCB8fCBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgaWYg
KG1fYW5jZXN0b3JzLmlzRW1wdHkoKSB8fCBtX3Nob3VsZFByZXZlbnREaXNwYXRjaCB8fCBldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwog
CiAgICAgLy8gVHJpZ2dlciBjYXB0dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRo
ZSB0b3AgYW5kIHdvcmtpbmcgb3VyIHdheSBkb3duLgpAQCAtMjgwLDggKzI3NCw4IEBAIGJvb2wg
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQog
ICAgIGlmICh3aW5kb3dDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKSAmJiBl
dmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5n
OwogCi0gICAgZm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3JzLnNpemUoKTsgaTsgLS1pKSB7Ci0g
ICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaS0x
XTsKKyAgICBmb3IgKHNpemVfdCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpIC0gMTsgaSA+IDA7IC0t
aSkgeworICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1fYW5jZXN0
b3JzW2ldOwogICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJn
ZXQoKSkgewogICAgICAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC0yOTYsNyArMjkwLDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgZXZlbnQtPnNldEV2ZW50
UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CiAgICAgZXZlbnQtPnNldFRhcmdldChvcmlnaW5hbFRh
cmdldC5nZXQoKSk7CiAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNw
ZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7Ci0gICAgbV9ub2RlLT5oYW5kbGVM
b2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CisgICAgbV9hbmNlc3RvcnNbMF0uaGFuZGxlTG9jYWxF
dmVudHMoZXZlbnQuZ2V0KCkpOworICAgIC8vIG1fbm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZl
bnQuZ2V0KCkpOwogICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAg
IGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCkBAIC0zMDUsNyArMzAwLDcgQEAgYm9vbCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgICAg
IGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CiAKICAgICAgICAg
c2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6
ZTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9
IG1fYW5jZXN0b3JzW2ldOwogICAgICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50VGFy
Z2V0U2FtZUFzVGFyZ2V0KCkpCiAgICAgICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2Uo
RXZlbnQ6OkFUX1RBUkdFVCk7CkBAIC0zMzksNyArMzM0LDcgQEAgZG9uZURpc3BhdGNoaW5nOgog
ICAgICAgICAvLyBzYW1lIG9yZGVyIGFzIHRoZSBidWJibGluZyBwaGFzZS4KICAgICAgICAgaWYg
KGV2ZW50LT5idWJibGVzKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3Rv
cnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgbV9hbmNlc3RvcnNbaV0ubm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2
ZW50LmdldCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCkpOwogICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKQEAg
LTM3OSwxMSArMzc0LDYgQEAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6
ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQsIE4KICAgICBVTlVTRURfUEFS
QU0oc2hhZG93Um9vdCk7CiAjZW5kaWYKIAotICAgIC8vIFBlciBYQkwgMi4wIHNwZWMsIG11dGF0
aW9uIGV2ZW50cyBzaG91bGQgbmV2ZXIgY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyeToKLSAgICAv
LyBodHRwOi8vZGV2LnczLm9yZy8yMDA2L3hibDIvI2V2ZW50LWZsb3ctYW5kLXRhcmdldGluZy1h
Y3Jvc3Mtc2hhZG93LXMKLSAgICBpZiAoZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yTXV0YXRpb25FdmVudCkpCi0gICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hh
ZG93RE9NOwotCiAgICAgLy8gV2ViS2l0IG5ldmVyIGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQg
dG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cgRE9NIGJvdW5kYXJ5LgogICAgIC8vIENoYW5naW5nIHRo
aXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxOTUgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnREaXNwYXRjaGVyLmgKaW5kZXggODVhZWZjNDkzMDQzZDUxN2VjOTc3MzRlNjIxOGFhZDgxZDE3
OTA2Ny4uNmY4OTFjMTM0MjdjNjZhY2ZlOGEzYTdkY2YxM2EzMWZhZDU2YjBjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBFdmVu
dERpc3BhdGNoZXJfaAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDAsMTIgKzQxLDI2IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZl
bnQ7CitjbGFzcyBUcmVlU2NvcGU7CiAKIGVudW0gRXZlbnREaXNwYXRjaEJlaGF2aW9yIHsKICAg
ICBSZXRhcmdldEV2ZW50LAogICAgIFN0YXlJbnNpZGVTaGFkb3dET00KIH07CiAKK2NsYXNzIEV2
ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKK3B1YmxpYzoKKyAgICBFdmVudFJlbGF0ZWRUYXJn
ZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJn
ZXQpOworICAgIHZvaWQgYWRqdXN0KFZlY3RvcjxFdmVudENvbnRleHQ+Jik7Citwcml2YXRlOgor
ICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVudFRhcmdldCo+IFJlbGF0ZWRUYXJn
ZXRNYXA7CisgICAgRXZlbnRUYXJnZXQqIGZpbmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSopOwor
CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVkVGFy
Z2V0OworICAgIFJlbGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVkVGFyZ2V0TWFwOworfTsKKwogY2xh
c3MgRXZlbnREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEV2
ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4pOwpAQCAtNTQsMTMg
KzY5LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNr
KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNl
RXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vayk7CiAKICAgICBib29sIGRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pOwotICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGFkanVzdFJl
bGF0ZWRUYXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBh
ZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVs
YXRlZFRhcmdldCk7CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEV2
ZW50RGlzcGF0Y2hlcihOb2RlKik7CiAKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBhZGp1
c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0LCBjb25z
dCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwogICAgIEV2ZW50RGlzcGF0
Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgTm9kZSogc2hhZG93
Um9vdCk7CiAgICAgdm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwogICAgIGNvbnN0
IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5j
cHAKaW5kZXggYzM2ODljNmRkNDYzYWVlMDU2Mjg4MTcyZTI1NGRjM2VjZmIyNWQwYi4uY2YyZTI2
NjBhNjVlMzYxMWY0YjQ3ZWNmOGVjZTdhZjI3MzdlZjUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2
ZW50LmNwcApAQCAtMjAxLDggKzIwMSw4IEBAIGJvb2wgTW91c2VFdmVudERpc3BhdGNoTWVkaWF0
b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zCiAgICAg
aWYgKGV2ZW50KCktPnR5cGUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
U2hvdWxkbid0IGhhcHBlbi4KIAotICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdl
dCA9IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZlbnQoKS0+cmVs
YXRlZFRhcmdldCgpKTsKLSAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJn
ZXQpOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQoKS0+cmVsYXRlZFRh
cmdldCgpOworICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgcmVs
YXRlZFRhcmdldCk7CiAKICAgICBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2ZW50KGV2ZW50KCkpOwog
ICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZXZlbnQoKS0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBldmVu
dCgpLT5kZWZhdWx0UHJldmVudGVkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNGQ1ZGEwNmQzMzdhM2QzMzNiY2NjNjMy
M2EwZjI0YjRkNzY1MzVkYy4uODk3N2I1NDI5M2U2OTZmOWMxMmU0MDQ5ZTFiMWNlZGY5YjJiMDUz
YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA1LTA3ICBIYXlhdG8gSXRvICA8aGF5YXRv
QGNocm9taXVtLm9yZz4KKworICAgICAgICBFdmVudCBkaXNwYXRjaGluZyBzaG91bGQgdXNlIHRo
ZSBjb21wb3NlZCBzaGFkb3cgRE9NIHRyZWUgaW5zdGVhZCBvZiBvcmlnaW5hbCBET00gdHJlZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTg2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Rv
bS9zaGFkb3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy13aXRoLW5vZGUtZGlzdHJpYnV0aW9uLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3Vu
ZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3RyaWJ1dGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0w
NS0xNSAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIEdUSyBnYXJkZW5pbmcgYWZ0ZXIgcjExNjk4NiwgcjExNzAxMiBhbmQgcjExNzAx
Ni4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRh
cnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1ub2RlLWRpc3Ry
aWJ1dGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk4OWE4MjAxMTYyYzQ5ZTA0MDYyNTk4
YmI3NmY3OGMzM2Y2NDE3OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24tZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIwIEBACitUZXN0cyB0byBlbnN1cmUgdGhhdCBzaGFkb3cg
RE9NIGJvdW5kYXJ5IGlzIG5vdCBjcm9zc2VkIGR1cmluZyBldmVudCBwcm9wYWdhdGlvbi4gQ2Fu
IG9ubHkgcnVuIHdpdGhpbiBEUlQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitE
SVYJIGlkPXNhbmRib3gKKwlESVYJIGlkPXRvcAorCQlESVYJIGlkPXNoYWRvdy1ob3N0CisJCQlE
SVYJIGlkPWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisJCQlESVYJIGlkPXNoYWRvdy1yb290LWNo
aWxkCisJCURFVEFJTFMJIGlkPWRldGFpbHMKKwkJCVNVTU1BUlkJIGlkPXN1bW1hcnkKKwkJCQlE
SVYJCisKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdCB0byBzaGFkb3ctaG9zdC9z
aGFkb3ctcm9vdC1jaGlsZAorCisgIG1vdXNlb3V0CisKKyAgbW91c2VvdmVyCisgICAgIEBzaGFk
b3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRv
dy1ob3N0KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChy
ZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdC9z
aGFkb3ctcm9vdC1jaGlsZCB0byBzaGFkb3ctaG9zdAorCisgIG1vdXNlb3V0CisgICAgIEBzaGFk
b3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRv
dy1ob3N0KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChy
ZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBtb3VzZW92ZXIKKworCitNb3ZpbmcgbW91c2UgZnJv
bSBzaGFkb3ctaG9zdCB0byBkaXN0cmlidXRlZC1saWdodC1jaGlsZAorCisgIG1vdXNlb3V0Cisg
ICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1
dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRl
ZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91c2VvdmVyCisgICAgIEBkaXN0cmli
dXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0
ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRl
ZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250ZW50KSAocmVs
YXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6
IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKKworTW92
aW5nIG1vdXNlIGZyb20gZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgdG8gc2hhZG93LWhvc3QKKwor
ICBtb3VzZW91dAorICAgICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgKHRhcmdldDogZGlzdHJp
YnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQGNvbnRlbnQg
KHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LXJv
b3QgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93
LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ct
aG9zdCkKKyAgICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0
ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNlb3ZlcgorICAgICBAc2hhZG93LWhvc3QgKHRhcmdl
dDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKyAgICAg
QHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkKQorCisKK01vdmluZyBtb3VzZSBmcm9tIGRldGFpbHMgdG8gc3VtbWFyeQorCisgIG1vdXNl
b3V0CisgICAgIEBkZXRhaWxzICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5KQor
ICAgICBAdG9wICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5KQorCisgIG1vdXNl
b3ZlcgorICAgICBAc3VtbWFyeSAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykK
KyAgICAgQGRldGFpbHMgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisgICAg
IEB0b3AgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisKKworTW92aW5nIG1v
dXNlIGZyb20gc3VtbWFyeSB0byBkZXRhaWxzCisKKyAgbW91c2VvdXQKKyAgICAgQHN1bW1hcnkg
KHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisgICAgIEBkZXRhaWxzICh0YXJn
ZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorICAgICBAdG9wICh0YXJnZXQ6IHN1bW1h
cnkpIChyZWxhdGVkOiBkZXRhaWxzKQorCisgIG1vdXNlb3ZlcgorICAgICBAZGV0YWlscyAodGFy
Z2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKyAgICAgQHRvcCAodGFyZ2V0OiBkZXRh
aWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9z
dC9zaGFkb3ctcm9vdC1jaGlsZCB0byBkaXN0cmlidXRlZC1saWdodC1jaGlsZAorCisgIG1vdXNl
b3V0CisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkg
KHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9v
dC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBz
aGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9w
ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQp
CisKKyAgbW91c2VvdmVyCisgICAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBk
aXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29u
dGVudCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAg
IEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hp
bGQpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkg
KHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKKworTW92aW5nIG1vdXNlIGZyb20g
ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgdG8gc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQK
KworICBtb3VzZW91dAorICAgICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgKHRhcmdldDogZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQGNvbnRl
bnQgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290LWNoaWxkKQorICAgICBA
c2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290LWNoaWxk
KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChy
ZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNlb3ZlcgorICAgICBAc2hh
ZG93LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBjb250
ZW50KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxh
dGVkOiBjb250ZW50KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpIChy
ZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKyAgICAgQHRvcCAodGFyZ2V0OiBzaGFk
b3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1k
aXN0cmlidXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91
bmRhcnktZXZlbnRzLXdpdGgtbm9kZS1kaXN0cmlidXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWNh
ZDRiZDU5YjJkZDdlMDhjNmZkM2U3M2EzYjg5NmQ5YzM1ZDFhCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMtd2l0aC1u
b2RlLWRpc3RyaWJ1dGlvbi5odG1sCkBAIC0wLDAgKzEsMTYyIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhZG93LWRvbS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0ic2FuZGJveCI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdHMgdG8gZW5zdXJlIHRoYXQgc2hhZG93IERPTSBib3VuZGFyeSBp
cyBub3QgY3Jvc3NlZCBkdXJpbmcgZXZlbnQgcHJvcGFnYXRpb24uIENhbiBvbmx5IHJ1biB3aXRo
aW4gRFJULiIpOworCisvLyBGSVhNRTogTWFrZSBhIHNlcGFyYXRlIHV0aWxpdHkganMgZmlsZSBh
bmQgc2hhcmUgaXQuCitmdW5jdGlvbiBtb3ZlTW91c2VPdmVyKGVsZW1lbnQpCit7CisgICAgaWYg
KCF3aW5kb3cuZXZlbnRTZW5kZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHJldHVy
bjsKKworICAgIHZhciBkZWZhdWx0UGFkZGluZ1NpemUgPSAyMDsKKyAgICB2YXIgeCA9IGVsZW1l
bnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciB5OworICAg
IGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSB8fCB3aW5kb3cuaW50ZXJuYWxzLnNoYWRvd1Jv
b3QoZWxlbWVudCkpCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGRlZmF1bHRQYWRk
aW5nU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1l
bnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsK
K30KKwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitmdW5jdGlvbiBjbGVhckV2ZW50UmVjb3Jk
cygpCit7CisgICAgZXZlbnRSZWNvcmRzID0ge307Cit9CisKK2Z1bmN0aW9uIGRpc3BhdGNoZWRF
dmVudChldmVudFR5cGUpCit7CisgICAgdmFyIGV2ZW50cyA9IGV2ZW50UmVjb3Jkc1tldmVudFR5
cGVdOworICAgIGlmICghZXZlbnRzKQorICAgICAgICByZXR1cm4gW107CisgICAgcmV0dXJuIGV2
ZW50czsKK30KKworZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQpCit7CisgICAgdmFyIGV2ZW50
VHlwZSA9IGV2ZW50LnR5cGUKKyAgICBpZiAoIWV2ZW50UmVjb3Jkc1tldmVudFR5cGVdKSB7Cisg
ICAgICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW10KKyAgICB9CisgICAgdmFyIGV2ZW50
U3RyaW5nID0gJyc7CisgICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQpCisgICAgICAgIGV2ZW50
U3RyaW5nICs9ICcgQCcgKyBldmVudC5jdXJyZW50VGFyZ2V0LmlkOworICAgIGlmIChldmVudC50
YXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdldDogJyArIGV2ZW50LnRhcmdl
dC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCkKKyAgICAgICAgZXZlbnRT
dHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0ZWRUYXJnZXQuaWQgKyAnKSc7Cisg
ICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyhj
YXB0dXJpbmcgcGhhc2UpJzsKKyAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LmN1cnJlbnRU
YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQpCisgICAg
ICAgIHNob3VsZEJlKCJldmVudC5ldmVudFBoYXNlIiwgIjIiLCB0cnVlKTsKKyAgICBldmVudFJl
Y29yZHNbZXZlbnRUeXBlXS5wdXNoKGV2ZW50U3RyaW5nKTsKK30KKworZnVuY3Rpb24gZHVtcE5v
ZGUobm9kZSkKK3sKKyAgICB2YXIgb3V0cHV0ID0gbm9kZS5ub2RlTmFtZSArICJcdCI7CisgICAg
aWYgKG5vZGUuaWQpCisgICAgICAgIG91dHB1dCArPSAnIGlkPScgKyBub2RlLmlkOworICAgIGlm
IChub2RlLmNsYXNzTmFtZSkKKyAgICAgICAgb3V0cHV0ICs9ICcgY2xhc3M9JyArIG5vZGUuY2xh
c3NOYW1lOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIGR1bXBDb21wb3NlZFNo
YWRvd1RyZWUobm9kZSwgaW5kZW50KQoreworICAgIGluZGVudCA9IGluZGVudCB8fCAiIjsKKyAg
ICB2YXIgb3V0cHV0ID0gaW5kZW50ICsgZHVtcE5vZGUobm9kZSkgKyAiXG4iOworICAgIHZhciBj
aGlsZDsKKyAgICBmb3IgKGNoaWxkID0gaW50ZXJuYWxzLmZpcnN0Q2hpbGRCeVdhbGtlcihub2Rl
KTsgY2hpbGQ7IGNoaWxkID0gaW50ZXJuYWxzLm5leHRTaWJsaW5nQnlXYWxrZXIoY2hpbGQpKQor
ICAgICAgICAgb3V0cHV0ICs9IGR1bXBDb21wb3NlZFNoYWRvd1RyZWUoY2hpbGQsIGluZGVudCAr
ICJcdCIpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIHByZXBhcmVET01UcmVl
KHBhcmVudCkKK3sKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoCisgICAgICAgIGNyZWF0ZURPTSgn
ZGl2JywgeydpZCc6ICd0b3AnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnfSwKKyAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdzaGFkb3ctaG9zdCcsICdzdHls
ZSc6ICdwYWRkaW5nLXRvcDogNDBweCcsICd0aXRsZSc6ICdkdW1wJ30sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdjb250ZW50JywgJ3N0eWxlJzog
J3BhZGRpbmctdG9wOiA0MHB4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdzZWxlY3QnOiAnI2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyx9
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lk
JzogJ3NoYWRvdy1yb290LWNoaWxkJywgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0MHB4J30pKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc3R5bGUnOiAncGFkZGluZy10b3A6IDQwcHgnLCAndGl0
bGUnOiAnZHVtcCd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Rp
dicsIHsnaWQnOiAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ3N0eWxlJzogJ3BhZGRp
bmctdG9wOiA0MHB4J30pKSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGV0YWlscycs
IHsnaWQnOiAnZGV0YWlscycsICdvcGVuJzogdHJ1ZSwgJ3N0eWxlJzogJ3BhZGRpbmctdG9wOiA0
MHB4JywgJ3RpdGxlJzogJ2R1bXAnfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVET00oJ3N1bW1hcnknLCB7J2lkJzogJ3N1bW1hcnknLCAnc3R5bGUnOiAncGFkZGluZy10b3A6
IDQwcHgnLCAndGl0bGUnOiAnZHVtcCd9KSkpKTsKKworICAgIGdldE5vZGVJblNoYWRvd1RyZWVT
dGFjaygnc2hhZG93LWhvc3QvJykuaWQgPSAnc2hhZG93LXJvb3QnOworICAgIHZhciBpZHMgPSBb
J3RvcCcsICdzaGFkb3ctaG9zdCcsICdzaGFkb3ctaG9zdC8nLCAnc2hhZG93LWhvc3QvY29udGVu
dCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcsCisgICAgICAgICAgICAgICAnZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywKKyAg
ICAgICAgICAgICAgICdkZXRhaWxzJywgJ3N1bW1hcnknXTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZWxlbWVudCA9IGdldE5vZGVJblNo
YWRvd1RyZWVTdGFjayhpZHNbaV0pOworICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
J21vdXNlb3ZlcicsIHJlY29yZEV2ZW50LCBmYWxzZSk7CisgICAgICAgIGVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcignbW91c2VvdXQnLCByZWNvcmRFdmVudCwgZmFsc2UpOworICAgIH0KKyAgICAK
KyAgICBwYXJlbnQub2Zmc2V0TGVmdDsKKyAgICBkZWJ1ZyhkdW1wQ29tcG9zZWRTaGFkb3dUcmVl
KHBhcmVudCkpOworfQorCitmdW5jdGlvbiBkZWJ1Z0Rpc3BhdGNoZWRFdmVudChldmVudFR5cGUp
Cit7CisgICAgZGVidWcoJ1xuICAnICsgZXZlbnRUeXBlKTsKKyAgICB2YXIgZXZlbnRzID0gZGlz
cGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMu
bGVuZ3RoOyArK2kpCisgICAgICAgIGRlYnVnKCcgICAgJyArIGV2ZW50c1tpXSkKK30KKworZnVu
Y3Rpb24gbW92ZU1vdXNlKG9sZEVsZW1lbnRJZCwgbmV3RWxlbWVudElkKQoreworICAgIGRlYnVn
KCdcblxuJyArICdNb3ZpbmcgbW91c2UgZnJvbSAnICsgb2xkRWxlbWVudElkICsgJyB0byAnICsg
bmV3RWxlbWVudElkKTsKKyAgICBtb3ZlTW91c2VPdmVyKGdldE5vZGVJblNoYWRvd1RyZWVTdGFj
ayhvbGRFbGVtZW50SWQpKTsKKyAgICBjbGVhckV2ZW50UmVjb3JkcygpOworICAgIG1vdmVNb3Vz
ZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG5ld0VsZW1lbnRJZCkpOworCisgICAgZGVi
dWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNlb3V0Jyk7CisgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQo
J21vdXNlb3ZlcicpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgcHJlcGFyZURPTVRyZWUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbmRi
b3gnKSk7CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0JywgJ3NoYWRvdy1ob3N0L3NoYWRv
dy1yb290LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1j
aGlsZCcsICdzaGFkb3ctaG9zdCcpOworCisgICAgbW92ZU1vdXNlKCdzaGFkb3ctaG9zdCcsICdk
aXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAgIG1vdmVNb3VzZSgnZGlzdHJpYnV0ZWQtbGln
aHQtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKKworICAgIG1vdmVNb3VzZSgnZGV0YWlscycsICdz
dW1tYXJ5Jyk7CisgICAgbW92ZU1vdXNlKCdzdW1tYXJ5JywgJ2RldGFpbHMnKTsKKworICAgIG1v
dmVNb3VzZSgnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnLCAnZGlzdHJpYnV0ZWQtbGln
aHQtY2hpbGQnKTsKKyAgICBtb3ZlTW91c2UoJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ3No
YWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJyk7CisKKyAgICAvLyBUaGVzZSBjYXNlcyBzaG91
bGQgbm90IGhhcHBlbiBzaW5jZSBub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgaXMgbm90IHJl
bmRlcmVkLgorICAgIC8vIEZJWE1FOiBSZWFsbHk/CisgICAgLy8gbW92ZU1vdXNlKCdkaXN0cmli
dXRlZC1saWdodC1jaGlsZCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnKTsKKyAgICAv
LyBtb3ZlTW91c2UoJ25vbi1kaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdkaXN0cmlidXRlZC1s
aWdodC1jaGlsZCcpOworICAgIC8vIG1vdmVNb3VzZSgnc2hhZG93LWhvc3QnLCAnbm9uLWRpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgLy8gbW92ZU1vdXNlKCdub24tZGlzdHJpYnV0ZWQt
bGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKK30KKwordGVzdCgpOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvc2hhZG93LWJvdW5kYXJ5LWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hh
ZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVudHMuaHRtbAppbmRleCBlYzJlMmY4MDhhZGEwYTYwNzU0
YTQ5YzgwYmM5OTNhODVhMjVjMWQ5Li5hMGMyYzkxOGQ0NzRjODI3MzFmYjkwY2U1Y2I3NTFkMTAz
ZjQ5OWU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWJv
dW5kYXJ5LWV2ZW50cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFk
b3ctYm91bmRhcnktZXZlbnRzLmh0bWwKQEAgLTE0Niw3ICsxNDYsNyBAQCBmdW5jdGlvbiB0ZXN0
KCkKICAgICAgICAgICAgICAgJ1RhcmdldCBpcyBhbiBhbmNlc3RvciBvZiByZWxhdGVkVGFyZ2V0
LicpOwogICAgIHNob3VsZEJlKCdkaXNwYXRjaGVkRXZlbnQoIm1vdXNlb3ZlciIpJywgJ1siZGl2
RSg8LXNoYWRvd0YpKEBkaXZFKSJdJyk7CiAgICAgc2hvdWxkQmUoJ2Rpc3BhdGNoZWRFdmVudCgi
bW91c2VvdXQiKScsICdbImRpdkkoPC1kaXZFKShAZGl2SSkiLCAic2hhZG93Ryg8LWRpdkUpKEBz
aGFkb3dHKSIsICJzaGFkb3dGKDwtZGl2RSkoQHNoYWRvd0YpIiwgInNoYWRvd0YoPC1kaXZFKShA
ZGl2RSkiXScpOwotCisgICAKICAgICBtb3ZlTW91c2UoJ3NoYWRvd0Qvc2hhZG93Ri9zaGFkb3dH
L2RpdkknLCAnc2hhZG93RC9zaGFkb3dGJywKICAgICAgICAgICAgICAgJ1RhcmdldCAoc2hhZG93
IGhvc3QpIGlzIGFuIGFuY2VzdG9yIG9mIHJlbGF0ZWRUYXJnZXQuJyk7CiAgICAgc2hvdWxkQmUo
J2Rpc3BhdGNoZWRFdmVudCgibW91c2VvdmVyIiknLCAnW10nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>141937</attachid>
            <date>2012-05-15 05:46:06 -0700</date>
            <delta_ts>2012-05-15 05:46:06 -0700</delta_ts>
            <desc>modify EventDispatcher for benchmark</desc>
            <filename>EventDisptche.cpp.diff</filename>
            <type>application/octet-stream</type>
            <size>2059</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggMThkMmIyYi4uNjM4ZTQy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJXaW5kb3dFdmVudENvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5o
IgpAQCAtMTgyLDYgKzE4MywxMiBAQCBzdGF0aWMgYm9vbCBuZWVkc0FkanVzdFJlbGF0ZWRUYXJn
ZXQoTm9kZSogbm9kZSwgTm9kZSogcmVsYXRlZFRhcmdldCkKICAgICAgICAgfHwgaXNTaGFkb3dI
b3N0KG5vZGUtPnBhcmVudE5vZGUoKSkgfHwgaXNTaGFkb3dIb3N0KHJlbGF0ZWRUYXJnZXQtPnBh
cmVudE5vZGUoKSk7CiB9CiAKK3N0YXRpYyBib29sIHNob3VsZENvdW50KEV2ZW50KiBldmVudCwg
Tm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gZXZlbnQtPnR5cGUoKSA9PSAiZm9jdXNpbiIgJiYg
bm9kZS0+aXNFbGVtZW50Tm9kZSgpCisgICAgICAgICYmIHRvRWxlbWVudChub2RlKS0+Z2V0QXR0
cmlidXRlKEhUTUxOYW1lczo6dGl0bGVBdHRyKSA9PSAiZHVtcCI7Cit9CisKIHZvaWQgRXZlbnRE
aXNwYXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxF
dmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCkKIHsKICAgICBpZiAoIXBycFJlbGF0ZWRUYXJn
ZXQpCkBAIC0xOTEsNiArMTk4LDIwIEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjphZGp1c3RSZWxh
dGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4KICAgICAgICAg
cmV0dXJuOwogICAgIGlmICghbV9ub2RlLmdldCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBz
dGF0aWMgaW50IGNhbGxlZCA9IDA7CisgICAgc3RhdGljIGRvdWJsZSBzdGFydCA9IDA7CisgICAg
c3RhdGljIGRvdWJsZSBzdW0gPSAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgdGFza3NQZXJVbml0
PSAxMDA7CisKKyAgICBpZiAoc2hvdWxkQ291bnQoZXZlbnQsIG1fbm9kZS5nZXQoKSkpIHsKKyAg
ICAgICAgaWYgKGNhbGxlZCAlIHRhc2tzUGVyVW5pdCA9PSAwKSB7CisgICAgICAgICAgICBzdW0g
PSAwOworICAgICAgICAgICAgc3RhcnQgPSBjdXJyZW50VGltZU1TKCk7CisgICAgICAgIH0KKyAg
ICAgICAgKytjYWxsZWQ7CisgICAgfQorCiAgICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQp
OwogICAgIC8vIEZJWE1FOiBXZSBjYW4gaGF2ZSBhIHNob3J0Y3V0IGhlcmUgaWYgdGhlcmUgaXMg
bm8gc2hhZG93IGRvbS4KICAgICBpZiAobmVlZHNBZGp1c3RSZWxhdGVkVGFyZ2V0KG1fbm9kZS5n
ZXQoKSwgcmVsYXRlZFRhcmdldC5nZXQoKSkpCkBAIC0xOTksNiArMjIwLDEyIEBAIHZvaWQgRXZl
bnREaXNwYXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0
cjxFdmVudFRhcmdldD4KICAgICAgICAgZm9yIChWZWN0b3I8RXZlbnRDb250ZXh0Pjo6aXRlcmF0
b3IgaXRlciA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7IGl0ZXIgPCBtX2FuY2VzdG9ycy5lbmQoKTsg
KytpdGVyKQogICAgICAgICAgICAgaXRlci0+c2V0UmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0
KTsKICAgICB9CisKKyAgICBpZiAoc2hvdWxkQ291bnQoZXZlbnQsIG1fbm9kZS5nZXQoKSkpIHsK
KyAgICAgICAgaWYgKGNhbGxlZCAlIHRhc2tzUGVyVW5pdCA9PSAwKSB7CisgICAgICAgICAgICBw
cmludGYoIiBUb29rICVmIG1zIFxuIiwgKGN1cnJlbnRUaW1lTVMoKSAtIHN0YXJ0KSk7CisgICAg
ICAgIH0KKyAgICB9CiB9CiAKIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUq
IG5vZGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142203</attachid>
            <date>2012-05-16 02:25:37 -0700</date>
            <delta_ts>2012-05-16 04:23:36 -0700</delta_ts>
            <desc>ready for reviews</desc>
            <filename>bug-78586-20120516182536.patch</filename>
            <type>text/plain</type>
            <size>44281</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY0ZjllZjFiZjE3NDMw
ZjQ5ZjdhMzhiN2I2N2M2YmM0MDc1OTY0Zi4uNmEzMDY3N2QyYTBkYTlhZTgyMzRhNzhiZjk0Mjdl
YTI3ODFiZGZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxMi0wNS0xNSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IGEgU2hh
ZG93IERPTSBzcGVjJ3Mgc2VjdGlvbiA2ICdFdmVudHMnLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGltcGxlbWVudHMgYSBTaGFkb3cgRE9NIHNw
ZWMncyBzZWN0aW9uIDYgJ0V2ZW50cycsIGludHJvZHVjaW5nIGEgbmV3CisgICAgICAgIGFsZ29y
aXRobSBzbyB0aGF0IGV2ZW50IGRpc3BhdGNoaW5nIHVzZSBhIGNvbXBvc2VkIHNoYWRvdyBET00g
dHJlZSwKKyAgICAgICAgbm90IG5vcm1hbCBET00gdHJlZSwgaW4gZGlzcGF0Y2hpbmcgZXZlbnRz
IHRvIGVhY2ggbm9kZXMuCisKKyAgICAgICAgVGhlIHNwZWMgaXMgaGVyZTogaHR0cDovL2R2Y3Mu
dzMub3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2luZGV4Lmh0
bWwjZXZlbnRzCisKKyAgICAgICAgU3VtbWFyeSBvZiBjaGFuZ2VzOgorICAgICAgICAtIFRoZSBl
eHRlcm5hbCBiZWhhdmlvciBkb2VzIG5vdCBjaGFuZ2UgaWYgc2hhZG93IERPTSBpcyBub3QgaW52
b2x2ZWQKKyAgICAgICAgaW4gZXZlbnRzLiBXZSBrZWVwIGEgY29tcGF0aWJpbGl0eSBvZiBleGl0
aW5nIGV2ZW50IGRpc3BhdGNoaW5nCisgICAgICAgIG1lY2hhbmlzbSBzbyB0aGF0IHdlIHdvbid0
IGJyZWFrIFdlYi4KKyAgICAgICAgLSBFdmVudCBhbmNlc3RvcnMsIHdoaWNoIGFyZSB1c2VkIGlu
IGRpc3BhdGNoaW5nIGV2ZW50cyBpbiBDQVBUVVJFIChvcgorICAgICAgICBCVUJCTEUpIHBoYXNl
LCBhcmUgbm93IGEgcmVzdWx0IG9mIHRyYXZlcnNpbmcgYW5jZXN0b3JzIGluIGNvbXBvc2VkCisg
ICAgICAgIHNoYWRvdyBET00gdHJlZSBvcmRlci4KKyAgICAgICAgLSBFdmVudHMnIHRhcmdldCBh
bmQgcmVsYXRlZC10YXJnZXQgYXJlIGNvcnJlY3RseSBhZGp1c3RlZCBzbyB0aGF0IHdlCisgICAg
ICAgIGRvbid0IGxlYWsgYW55IG5vZGUgd2hpY2ggaXMgaW5hY2Nlc3NpYmxlIGZyb20gdGhlIGV2
ZW50J3MKKyAgICAgICAgY3VycmVudC10YXJnZXQgbm9kZS4gV2UgbWFpbnRhaW4gYm90aCB1cHBl
ciBhbmQgbG93ZXIgYm91bmRhcmllcworICAgICAgICBlbmNhcHN1bGF0aW9uIG9mIFNoYWRvdyBE
T00gaW4gZXZlbnQgZGlzcGF0Y2hpbmcuCisKKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIG9m
IGV2ZW50IGRpc3BhdGNoaW5nLiBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBET00gdHJl
ZSwKKyAgICAgICAgaW5jbHVkaW5nIHNvbWUgbmVzdGVkIHNoYWRvdyBob3N0czoKKyAgICAgICAg
QQorICAgICAgICBgLS1CLS0tLS1bU1ItQl0KKyAgICAgICAgICAgfC1DICAgICBgLS1HLS0tLS0t
LS0tLS0tLS1bU1ItR10KKyAgICAgICAgICAgfCBgLUQgICAgICB8LTxIIHNlbGVjdD1DPiAgICB8
LS1KLS0tLS0tLS0tLS0tLS0tW1NSLUpdCisgICAgICAgICAgIGAtRSAgICAgICAgYC08SSBzZWxl
Y3Q9RT4gICAgfCAgYC08SyBzZWxlY3Q9SD4gICAgYC08TiBzZWxlY3Q9Sz4KKyAgICAgICAgICAg
ICBgLUYgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYC0tTC0tLS0tLS0tLS0tLS0tLVtTUi1MXQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAtPE0gc2VsZWN0PUk+ICAgIGAtPE8gc2VsZWN0
PU0+CisKKyAgICAgICAgICBOb3RhdGlvbjogW1NSLVhdOiBTaGFkb3cgUm9vdAorICAgICAgICAg
ICAgICAgICAgICA8WCBzZWxlY3Q9WT46IEluc2VydGlvbiBQb2ludCwgY2FsbGVkIFgsIHdoaWNo
IHNlbGVjdHMgWS4KKworICAgICAgICBJZiBtb3VzZSBtb3ZlcyBmcm9tICcjRicgdG8gJyNEJywg
dGhlIGZvbGxvd2luZyAnbW91c2VvdmVyJyBldmVudHMgYXJlIGRpc3BhdGNoZWQgaW4gZWFjaCBh
bmNlc3RvciBub2RlOgorCisgICAgICAgIFtjdXJyZW50VGFyZ2V0XSBbdGFyZ2V0XSBbcmVsYXRl
ZC10YXJnZXRdCisgICAgICAgICAgI0QgICAgICAgICAgICAgI0QgICAgICAgI0YKKyAgICAgICAg
ICAjQyAgICAgICAgICAgICAjRCAgICAgICAjRgorICAgICAgICAgICNIICAgICAgICAgICAgICNI
ICAgICAgICNJCisgICAgICAgICAgI0sgICAgICAgICAgICAgI0sgICAgICAgI00KKyAgICAgICAg
ICAjTiAgICAgICAgICAgICAjTiAgICAgICAjTQorICAgICAgICAgICNTUi1KICAgICAgICAgICNO
ICAgICAgICNNCisgICAgICAgICAgI0ogICAgICAgICAgICAgI0sgICAgICAgI00KKyAgICAgICAg
ICAjU1ItRyAgICAgICAgICAjSyAgICAgICAjTQorICAgICAgICAgICNHICAgICAgICAgICAgICNI
ICAgICAgICNJCisgICAgICAgICAgI1NSLUIgICAgICAgICAgI0ggICAgICAgI0kKKyAgICAgICAg
ICAjQiAgICAgICAgICAgICAjRCAgICAgICAjRgorICAgICAgICAgICNBICAgICAgICAgICAgICNE
ICAgICAgICNGCisKKyAgICAgICAgRGV0YWlscyBhcmU6CisgICAgICAgIC0gSW5zZXJ0aW9uIHBv
aW50cywgc3VjaCBhcyA8Y29udGVudD4gb3IgPHNoYWRvdz4sIGFyZSByZXNvbHZlZCBjb3JyZWN0
bHkKKyAgICAgICAgaW4gY2FsY3VsYXRpbmcgZXZlbnQgYW5jZXN0b3JzLiBUaGF0IG1lYW5zIGlm
IGEgbm9kZSBpcyBkaXN0cmlidXRlZCB0bworICAgICAgICBhbiBpbnNlcnRpb24gcG9pbnQsIHRo
ZSBpbnNlcnRpb24gcG9pbnQgaXMgbm93IGFuIGFuY2VzdG9yIG9mIHRoZSBub2RlIGluCisgICAg
ICAgIGJ1YmJsaW5nIChvciBjYXB0dXJpbmcpIHBoYXNlLgorICAgICAgICAtIEJvdGggaW5zZXJ0
aW9uIHBvaW50cyBhbmQgc2hhZG93IHJvb3RzIG5vdyBjYW4gcmVjZWl2ZSBldmVudHMuIFdlIGNh
biBhZGQKKyAgICAgICAgZXZlbnQgbGlzdGVuZXJzIHRvIGluc2VydGlvbiBwb2ludHMgYW5kIHNo
YWRvdyByb290cyBvZmZpY2lhbGx5LgorICAgICAgICAtIERpc3BhdGNoZWQgZXZlbnQncyB0YXJn
ZXQgaXMgbm93IGFkanVzdGVkIGNvcnJlY3RseSB1c2luZyBldmVudCB0YXJnZXQKKyAgICAgICAg
Y2FsY3VsYXRpb24gYWxnb3JpdGhtLiBUaGUgYWxnb3JpdGhtIGlzIG5vdyBmdWxseSBhd2FyZSBv
ZiBpbnNlcnRpb24gcG9pbnRzLgorICAgICAgICAtIERpc3BhdGNoZWQgZXZlbnQncyByZWxhdGVk
LXRhcmdldCBjYW4gZGlmZmVyIGluIGVhY2ggdHJlZSBzY29wZSBpbgorICAgICAgICBldmVudCBh
bmNlc3RvcnMuIFdlIGNob29zZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSByZWxhdGVkLXRhcmdldCB1
c2luZyBldmVudAorICAgICAgICByZWxhdGVkLXRhcmdldCBhZGp1c3RpbmcgYWxnb3JpdGhtIGZv
ciBlYWNoIG5vZGVzLgorCisgICAgICAgIFBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb246CisgICAg
ICAgIFRoaXMgcGF0Y2ggY2FuIGFjaGlldmUgdGhlIGNvbXBldGl0aXZlIHBlcmZvcm1hbmNlLiBU
aGUgcmVzdWx0IG9mCisgICAgICAgIC4vVG9vbHMvU2NyaXB0cy9ydW4tcGVyZi10ZXN0cyBQZXJm
b3JtYW5jZVRlc3RzL0RPTS9FdmVudHMuaHRtbCBhcmU6CisKKyAgICAgICAgQmVmb3JlIGFwcGx5
aW5nIHRoaXMgcGF0Y2g6CisgICAgICAgICAgICBSdW5uaW5nIERPTS9FdmVudHMuaHRtbCAoMSBv
ZiAxKQorICAgICAgICAgICAgUkVTVUxUIERPTTogRXZlbnRzPSAyNzAuMzEwNzE0Mjg2IG1zCisg
ICAgICAgICAgICBtZWRpYW49IDI2OS43NSBtcywgc3RkZXY9IDIuMDA0MjM5NzY2MyBtcywgbWlu
PSAyNjcuMzU3MTQyODU3IG1zLCBtYXg9IDI3Ni41IG1zCisKKyAgICAgICAgQWZ0ZXIgYXBwbHlp
bmcgdGhpcyBwYXRjaDoKKyAgICAgICAgICAgIFJ1bm5pbmcgRE9NL0V2ZW50cy5odG1sICgxIG9m
IDEpCisgICAgICAgICAgICBSRVNVTFQgRE9NOiBFdmVudHM9IDI2OC4xMDgzMzMzMzMgbXMKKyAg
ICAgICAgICAgIG1lZGlhbj0gMjY3LjUgbXMsIHN0ZGV2PSAyLjQxODgzMTU3MTk1IG1zLCBtaW49
IDI2My42MjUgbXMsIG1heD0gMjczLjE0Mjg1NzE0MyBtcworCisgICAgICAgIEkndmUgYWxzbyBj
b25kdWN0ZWQgYSBtaWNybyBiZW5jaG1hcmsgdXNpbmcgYm90aCBTaGFkb3ctRnJlZS1ET00tVHJl
ZSBhbmQgRE9NLVRyZWUtV2l0aC1TaGFkb3ctSG9zdC4KKyAgICAgICAgU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU4NiNjNDAgZm9yIHRoZSByZXN1bHRzLgor
ICAgICAgICBUaGUgcGVyZm9ybWFuY2UgaGFzIG5vdCBjaGFuZ2VkIGluIGJvdGggYmFzZXMuCisK
KyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hp
bmcuaHRtbAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnBhcmVudEluY2x1ZGlu
Z0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2VQYXJlbnRJbmNs
dWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9Db21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIuaDoKKyAgICAgICAgKENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcik6
CisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dENvbnRleHQ6OkV2ZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjp0b01vdXNlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRXZlbnRDb250ZXh0Lmg6CisgICAgICAg
IChFdmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpyZWxhdGVk
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250
ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpFdmVudFJl
bGF0ZWRUYXJnZXRBZGp1c3Rlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjphZGp1c3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmZpbmRSZWxhdGVkVGFyZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRldGVybWluZURpc3BhdGNoQmVoYXZpb3IpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIpOgorICAgICAgICAoRXZlbnREaXNwYXRj
aGVyKToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
b3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudCk6CisKIDIwMTItMDUtMTUg
IEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmFzaCBp
biBEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAKaW5kZXggMjM1NjgzZmVkZjhjYzY5
ZTU5ODlmNDFjNjM3MWU5OTgwODdhZmQyNC4uNDE4NWYzZWJmYzI5ZDAwYWIzMTJjZDJmMGNiYzRm
MzY2MTFlMTVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJl
ZVdhbGtlci5jcHAKQEAgLTE5Niw2ICsxOTYsMjkgQEAgdm9pZCBDb21wb3NlZFNoYWRvd1RyZWVX
YWxrZXI6OnBhcmVudCgpCiAgICAgYXNzZXJ0UG9zdGNvbmRpdGlvbigpOwogfQogCit2b2lkIENv
bXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6cGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRT
aGFkb3dSb290KCkKK3sKKyAgICBBU1NFUlQobV9ub2RlKTsKKyAgICBtX25vZGUgPSB0cmF2ZXJz
ZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdChtX25vZGUpOworfQor
CitOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50SW5jbHVkaW5n
SW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0Cit7Cisg
ICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHNoYWRvd09mUGFyZW50KG5vZGUpKSB7Cisg
ICAgICAgIGlmIChJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQgPSBzaGFkb3ctPmluc2Vy
dGlvblBvaW50Rm9yKG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGluc2VydGlvblBvaW50Owor
ICAgIH0KKyAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkpIHsKKyAgICAgICAgY29uc3QgU2hh
ZG93Um9vdCogc2hhZG93Um9vdCA9IHRvU2hhZG93Um9vdChub2RlKTsKKyAgICAgICAgaWYgKHNo
YWRvd1Jvb3QtPmlzWW91bmdlc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5o
b3N0KCk7CisgICAgICAgIEluc2VydGlvblBvaW50KiBhc3NpZ25lZEluc2VydGlvblBvaW50ID0g
c2hhZG93Um9vdC0+YXNzaWduZWRUbygpOworICAgICAgICBBU1NFUlQoYXNzaWduZWRJbnNlcnRp
b25Qb2ludCk7CisgICAgICAgIHJldHVybiBhc3NpZ25lZEluc2VydGlvblBvaW50OworICAgIH0K
KyAgICByZXR1cm4gbm9kZS0+cGFyZW50Tm9kZSgpOworfQorCiBOb2RlKiBDb21wb3NlZFNoYWRv
d1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAg
ICAgaWYgKCFjYW5Dcm9zc1VwcGVyQm91bmRhcnkoKSAmJiBub2RlLT5pc1NoYWRvd1Jvb3QoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oCmluZGV4
IDk3NjZjMWEzNjUwMTkwMDg4Yjk0ZGEyYTQ0MGMyMDYyNmQwZDRhOTIuLjFhOWQyYTkzYzYzNjYz
M2E5ZTNmMjQyMDFiNTBjNGUwOTNhZjdiOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29t
cG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgIHZv
aWQgcHJldmlvdXNTaWJsaW5nKCk7CiAKICAgICB2b2lkIHBhcmVudCgpOworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaWdub3JlcyBwb2xpY3kgYW5kIGFsd2F5cyBjcm9zc2VzIGFuIHVwcGVyIGJvdW5k
YXJ5LgorICAgIHZvaWQgcGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290
KCk7CiAKICAgICB2b2lkIG5leHQoKTsKICAgICB2b2lkIHByZXZpb3VzKCk7CkBAIC05OSw2ICsx
MDEsNyBAQCBwcml2YXRlOgogICAgIE5vZGUqIHRyYXZlcnNlTGFzdENoaWxkKGNvbnN0IE5vZGUq
KSBjb25zdDsKICAgICBOb2RlKiB0cmF2ZXJzZUNoaWxkKGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxE
aXJlY3Rpb24pIGNvbnN0OwogICAgIE5vZGUqIHRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqKSBj
b25zdDsKKyAgICBOb2RlKiB0cmF2ZXJzZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5k
U2hhZG93Um9vdChjb25zdCBOb2RlKikgY29uc3Q7CiAKICAgICBzdGF0aWMgTm9kZSogdHJhdmVy
c2VOZXh0U2libGluZyhjb25zdCBOb2RlKik7CiAgICAgc3RhdGljIE5vZGUqIHRyYXZlcnNlUHJl
dmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAK
aW5kZXggMmE1YzUyMTBhYWVmNmI5NDFiYmRlNWRlMjk1Y2JhMzM5ZDE0MmRmNS4uYTFiNTFjMGU5
ZmZhNGU1MDk5YTdjOThkYTUwOWE4MjdmMzQyZTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29u
dGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMg
KzM5LDIyIEBAIEV2ZW50Q29udGV4dDo6RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9kZT4gbm9k
ZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gY3VycmVuCiAgICAgOiBtX25vZGUobm9kZSkKICAg
ICAsIG1fY3VycmVudFRhcmdldChjdXJyZW50VGFyZ2V0KQogICAgICwgbV90YXJnZXQodGFyZ2V0
KQorICAgICwgbV9yZWxhdGVkVGFyZ2V0KDApCiB7CiB9CiAKK3N0YXRpYyBNb3VzZUV2ZW50KiB0
b01vdXNlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChldmVudCAmJiBldmVudC0+
aXNNb3VzZUV2ZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZl
bnQpOworfQorCiB2b2lkIEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2
ZW50KSBjb25zdAogewogICAgIGV2ZW50LT5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAg
IGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG1fY3VycmVudFRhcmdldC5nZXQoKSk7CisgICAgaWYg
KG1fcmVsYXRlZFRhcmdldC5nZXQoKSAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAg
IHRvTW91c2VFdmVudChldmVudCktPnNldFJlbGF0ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0Lmdl
dCgpKTsKICAgICBtX25vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50Q29udGV4dC5oCmluZGV4IDVlNzMxN2Y0NWNmNTQ4NTZhMzI0OWQ4N2RkMjdhMDgx
NjYyZDY3NDguLjYzMjU4MTAwOTBjMDQyOTcyNjljZTUyZTcwZTJkZDEwYWRkMTQ0MDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRDb250ZXh0LmgKQEAgLTQyLDEzICs0MiwxNiBAQCBwdWJsaWM6CiAKICAg
ICBOb2RlKiBub2RlKCkgY29uc3Q7CiAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCgpIGNvbnN0Owor
ICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50
VGFyZ2V0U2FtZUFzVGFyZ2V0KCkgY29uc3Q7CiAgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhF
dmVudCopIGNvbnN0OworICAgIHZvaWQgc2V0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50
VGFyZ2V0Pik7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQ
dHI8RXZlbnRUYXJnZXQ+IG1fY3VycmVudFRhcmdldDsKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+
IG1fdGFyZ2V0OworICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0OwogfTsK
IAogaW5saW5lIE5vZGUqIEV2ZW50Q29udGV4dDo6bm9kZSgpIGNvbnN0CkBAIC02Niw2ICs2OSwx
NiBAQCBpbmxpbmUgYm9vbCBFdmVudENvbnRleHQ6OmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQo
KSBjb25zdAogICAgIHJldHVybiBtX2N1cnJlbnRUYXJnZXQuZ2V0KCkgPT0gbV90YXJnZXQuZ2V0
KCk7CiB9CiAKK2lubGluZSBFdmVudFRhcmdldCogRXZlbnRDb250ZXh0OjpyZWxhdGVkVGFyZ2V0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0LmdldCgpOworfQorCitpbmxp
bmUgdm9pZCBFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRh
cmdldD4gcmVsYXRlZFRhcmdldCkKK3sKKyAgICBtX3JlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFy
Z2V0OworfQorCiB9CiAKICNlbmRpZiAvLyBFdmVudENvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCAxNjg5ZTA2YjhjYTRiZjBhYjU4M2M4ZjM5MWJmOTk4
OTBhOTc1YmRjLi40OTgzNWZmY2MyNzYwZWE1YzI4MDNmOTljMzVmYjIwMWIwNjdiZjNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMjYsMTAgKzI2LDEzIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAKKyNpbmNs
dWRlICJDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93
LmgiCiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaE1l
ZGlhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxl
bWVudC5oIgorI2luY2x1ZGUgIkluc2VydGlvblBvaW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNj
b3BlZEV2ZW50UXVldWUuaCIKQEAgLTQ3LDYgKzUwLDYzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RhdGljIEhhc2hTZXQ8Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNr
cyA9IDA7CiAKK0V2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpFdmVudFJlbGF0ZWRUYXJnZXRB
ZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRh
cmdldCkKKyAgICA6IG1fbm9kZShub2RlKQorICAgICwgbV9yZWxhdGVkVGFyZ2V0KHJlbGF0ZWRU
YXJnZXQpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIEFTU0VSVChyZWxhdGVkVGFyZ2V0KTsK
K30KKwordm9pZCBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6YWRqdXN0KFZlY3RvcjxFdmVu
dENvbnRleHQ+JiBhbmNlc3RvcnMpCit7CisgICAgVHJlZVNjb3BlKiBsYXN0VHJlZVNjb3BlID0g
MDsKKyAgICBmb3IgKENvbXBvc2VkU2hhZG93VHJlZVdhbGtlciB3YWxrZXIobV9yZWxhdGVkVGFy
Z2V0LmdldCgpKTsgd2Fsa2VyLmdldCgpOyB3YWxrZXIucGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9u
UG9pbnRBbmRTaGFkb3dSb290KCkpIHsKKyAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IHdhbGtl
ci5nZXQoKS0+dHJlZVNjb3BlKCk7CisgICAgICAgIC8vIFNraXBzIGFkZGluZyBhIG5vZGUgdG8g
dGhlIG1hcCBpZiB0cmVlU2NvcGUgZG9lcyBub3QgY2hhbmdlLgorICAgICAgICBpZiAoc2NvcGUg
IT0gbGFzdFRyZWVTY29wZSkKKyAgICAgICAgICAgIG1fcmVsYXRlZFRhcmdldE1hcC5hZGQoc2Nv
cGUsIHdhbGtlci5nZXQoKSk7CisgICAgICAgIGxhc3RUcmVlU2NvcGUgPSBzY29wZTsKKyAgICB9
CisKKyAgICBsYXN0VHJlZVNjb3BlID0gMDsKKyAgICBFdmVudFRhcmdldCogYWRqdXN0ZWRSZWxh
dGVkVGFyZ2V0ID0gMDsKKyAgICBmb3IgKFZlY3RvcjxFdmVudENvbnRleHQ+OjppdGVyYXRvciBp
dGVyID0gYW5jZXN0b3JzLmJlZ2luKCk7IGl0ZXIgPCBhbmNlc3RvcnMuZW5kKCk7ICsraXRlcikg
eworICAgICAgICBUcmVlU2NvcGUqIHNjb3BlID0gaXRlci0+bm9kZSgpLT50cmVlU2NvcGUoKTsK
KyAgICAgICAgaWYgKHNjb3BlID09IGxhc3RUcmVlU2NvcGUpIHsKKyAgICAgICAgICAgIC8vIFJl
LXVzZSB0aGUgcHJldmlvdXMgYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0IGlmIHRyZWVTY29wZSBkb2Vz
IG5vdCBjaGFuZ2UuCisgICAgICAgICAgICBpdGVyLT5zZXRSZWxhdGVkVGFyZ2V0KGFkanVzdGVk
UmVsYXRlZFRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGp1c3RlZFJl
bGF0ZWRUYXJnZXQgPSBmaW5kUmVsYXRlZFRhcmdldChzY29wZSk7CisgICAgICAgICAgICBpdGVy
LT5zZXRSZWxhdGVkVGFyZ2V0KGFkanVzdGVkUmVsYXRlZFRhcmdldCk7CisgICAgICAgIH0KKyAg
ICAgICAgbGFzdFRyZWVTY29wZSA9IHNjb3BlOworICAgICAgICBpZiAoaXRlci0+dGFyZ2V0KCkg
PT0gYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0KSB7CisgICAgICAgICAgICAvLyBFdmVudCBkaXNwYXRj
aGluZyBzaG91bGQgYmUgc3RvcHBlZCBoZXJlLgorICAgICAgICAgICAgYW5jZXN0b3JzLnNocmlu
ayhpdGVyIC0gYW5jZXN0b3JzLmJlZ2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK0V2ZW50VGFyZ2V0KiBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6
ZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKiBzY29wZSkKK3sKKyAgICBWZWN0b3I8VHJlZVNj
b3BlKj4gcGFyZW50VHJlZVNjb3BlczsKKyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9
IDA7CisgICAgd2hpbGUgKHNjb3BlKSB7CisgICAgICAgIHBhcmVudFRyZWVTY29wZXMuYXBwZW5k
KHNjb3BlKTsKKyAgICAgICAgUmVsYXRlZFRhcmdldE1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQg
PSBtX3JlbGF0ZWRUYXJnZXRNYXAuZmluZChzY29wZSk7CisgICAgICAgIGlmIChmb3VuZCAhPSBt
X3JlbGF0ZWRUYXJnZXRNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBm
b3VuZC0+c2Vjb25kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2Nv
cGUgPSBzY29wZS0+cGFyZW50VHJlZVNjb3BlKCk7CisgICAgfQorICAgIGZvciAoVmVjdG9yPFRy
ZWVTY29wZSo+OjppdGVyYXRvciBpdGVyID0gcGFyZW50VHJlZVNjb3Blcy5iZWdpbigpOyBpdGVy
IDwgcGFyZW50VHJlZVNjb3Blcy5lbmQoKTsgKytpdGVyKQorICAgICAgbV9yZWxhdGVkVGFyZ2V0
TWFwLmFkZCgqaXRlciwgcmVsYXRlZFRhcmdldCk7CisgICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQ7
Cit9CisKIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKIHsKICAgICBBU1NFUlQo
IWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBAIC0xMTYsMTA0ICsxNzYsMTggQEAgdm9pZCBF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXIKICAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+
cmVtb3ZlKG5vZGUpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNo
ZXI6OmFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJn
ZXQsIGNvbnN0IFZlY3RvcjxOb2RlKj4gcmVsYXRlZFRhcmdldEFuY2VzdG9ycykKLXsKLSAgICBW
ZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkg
PSBtX2FuY2VzdG9ycy5lbmQoKTsKLSAgICAvLyBBc3N1bWUgZGl2ZXJnZW50IGJvdW5kYXJ5IGlz
IHRoZSByZWxhdGVkVGFyZ2V0IGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIHJlbGF0ZWQgdGFyZ2V0
IGFuY2VzdG9yIGNoYWluIGRvZXMgbm90IGNyb3NzIGFueSBzaGFkb3cgRE9NIGJvdW5kYXJpZXMp
LgotICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGZpcnN0RGl2ZXJnZW50Qm91bmRh
cnkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7Ci0KLSAgICBWZWN0b3I8RXZlbnRD
b250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgdGFyZ2V0QW5jZXN0b3IgPSBtX2FuY2VzdG9ycy5lbmQo
KTsKLSAgICAvLyBXYWxrIGRvd24gZnJvbSB0aGUgdG9wLCBsb29raW5nIGZvciBsb3dlc3QgY29t
bW9uIGFuY2VzdG9yLCBhbHNvIG1vbml0b3Jpbmcgc2hhZG93IERPTSBib3VuZGFyaWVzLgotICAg
IGJvb2wgZGl2ZXJnZWQgPSBmYWxzZTsKLSAgICBmb3IgKFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0
ZXJhdG9yIGkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmVuZCgpIC0gMTsgaSA+PSByZWxhdGVk
VGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7IC0taSkgewotICAgICAgICBpZiAoZGl2ZXJnZWQpIHsK
LSAgICAgICAgICAgIGlmICgoKmkpLT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAg
IGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgPSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHRhcmdldEFuY2VzdG9yID09IG1fYW5jZXN0b3JzLmJlZ2luKCkpIHsKLSAgICAgICAg
ICAgIGRpdmVyZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgdGFyZ2V0QW5jZXN0b3ItLTsKIAotICAgICAgICBpZiAoKCppKS0+aXNTaGFkb3dS
b290KCkpCi0gICAgICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IHRhcmdldEFuY2VzdG9y
OwotCi0gICAgICAgIGlmICgoKmkpICE9ICgqdGFyZ2V0QW5jZXN0b3IpLm5vZGUoKSkKLSAgICAg
ICAgICAgIGRpdmVyZ2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpdmVyZ2VkKSB7Ci0g
ICAgICAgIC8vIFRoZSByZWxhdGVkVGFyZ2V0IGlzIGFuIGFuY2VzdG9yIG9yIHNoYWRvd0hvc3Qg
b2YgdGhlIHRhcmdldC4KLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgZmlyc3QgY2hlY2sg
b25jZSBjb252ZXJzaW9uIHRvIG5ldyBzaGFkb3cgRE9NIGlzIGNvbXBsZXRlIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzQ4Njk4PgotICAgICAgICBpZiAobV9ub2RlLT5zaGFkb3dIb3N0KCkgPT0gcmVs
YXRlZFRhcmdldC5nZXQoKSB8fCBpc1NoYWRvd0hvc3QocmVsYXRlZFRhcmdldC5nZXQoKSkpIHsK
LSAgICAgICAgICAgIFZlY3RvcjxFdmVudENvbnRleHQ+Ojpjb25zdF9pdGVyYXRvciByZWxhdGVk
VGFyZ2V0Q2hpbGQgPSB0YXJnZXRBbmNlc3RvciAtIDE7Ci0gICAgICAgICAgICBpZiAocmVsYXRl
ZFRhcmdldENoaWxkID49IG1fYW5jZXN0b3JzLmJlZ2luKCkgJiYgcmVsYXRlZFRhcmdldENoaWxk
LT5ub2RlKCktPmlzU2hhZG93Um9vdCgpKQotICAgICAgICAgICAgICAgIGxvd2VzdENvbW1vbkJv
dW5kYXJ5ID0gcmVsYXRlZFRhcmdldENoaWxkOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgo
KmZpcnN0RGl2ZXJnZW50Qm91bmRhcnkpID09IG1fbm9kZS5nZXQoKSkgewotICAgICAgICAvLyBT
aW5jZSBhbmNlc3RvcnMgZG9lcyBub3QgY29udGFpbiB0YXJnZXQgaXRzZWxmLCB3ZSBtdXN0IGFj
Y291bnQKLSAgICAgICAgLy8gZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRhcmdldCBpcyBhIHNo
YWRvd0hvc3Qgb2YgcmVsYXRlZFRhcmdldAotICAgICAgICAvLyBhbmQgdGh1cyBzZXJ2ZXMgYXMg
dGhlIGxvd2VzdENvbW1vbkJvdW5kYXJ5LgotICAgICAgICAvLyBMdWNraWx5LCBpbiB0aGlzIGNh
c2UgdGhlIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgaXMgdGFyZ2V0LgotICAgICAgICBsb3dlc3RD
b21tb25Cb3VuZGFyeSA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7Ci0gICAgICAgIG1fc2hvdWxkUHJl
dmVudERpc3BhdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobG93ZXN0Q29tbW9uQm91bmRh
cnkgIT0gbV9hbmNlc3RvcnMuZW5kKCkpIHsKLSAgICAgICAgLy8gVHJpbSBhbmNlc3RvcnMgdG8g
bG93ZXN0Q29tbW9uQm91bmRhcnkgdG8ga2VlcCBldmVudHMgaW5zaWRlIG9mIHRoZSBjb21tb24g
c2hhZG93IERPTSBzdWJ0cmVlLgotICAgICAgICBtX2FuY2VzdG9ycy5zaHJpbmsobG93ZXN0Q29t
bW9uQm91bmRhcnkgLSBtX2FuY2VzdG9ycy5iZWdpbigpKTsKLSAgICB9Ci0gICAgLy8gU2V0IGV2
ZW50J3MgcmVsYXRlZCB0YXJnZXQgdG8gdGhlIGZpcnN0IGVuY291bnRlcmVkIHNoYWRvdyBET00g
Ym91bmRhcnkgaW4gdGhlIGRpdmVyZ2VudCBzdWJ0cmVlLgotICAgIHJldHVybiBmaXJzdERpdmVy
Z2VudEJvdW5kYXJ5ICE9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKSA/ICpmaXJzdERp
dmVyZ2VudEJvdW5kYXJ5IDogcmVsYXRlZFRhcmdldDsKLX0KLQotaW5saW5lIHN0YXRpYyBib29s
IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyhjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0
PiYgYW5jZXN0b3JzKQotewotICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGFuY2Vz
dG9ycy5maXJzdCgpLm5vZGUoKSA9PSBhbmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKLX0KLQotLy8g
RklYTUU6IE9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTYz
IGxhbmRzLCB0aGlzIHNob3VsZAotLy8gYmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDAyNS4KLVBhc3NSZWZQdHI8RXZlbnRU
YXJnZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQs
IFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCiB7CiAgICAgaWYgKCFwcnBSZWxhdGVkVGFyZ2V0
KQotICAgICAgICByZXR1cm4gMDsKLQorICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPE5vZGU+
IHJlbGF0ZWRUYXJnZXQgPSBwcnBSZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKICAgICBpZiAoIXJl
bGF0ZWRUYXJnZXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTm9kZSogdGFyZ2V0ID0gbV9u
b2RlLmdldCgpOwotICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm4gcHJwUmVsYXRlZFRh
cmdldDsKLQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX25vZGUuZ2V0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7Ci0KLSAgICAvLyBDYWxj
dWxhdGUgZWFybHkgaWYgdGhlIGNvbW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxlIGJ5IGxv
b2tpbmcgYXQKLSAgICAvLyBhbmNlc3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0aW5nIGhh
cyBvY2N1cmVkIChpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJvdW5kYXJp
ZXMpLgotICAgIC8vIElmIHRoZXJlIGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0aGUgdGFy
Z2V0IGFuZCByZWxhdGVkIHRhcmdldCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5LgotICAg
IGJvb2wgbm9Db21tb25Cb3VuZGFyeSA9IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyht
X2FuY2VzdG9ycyk7Ci0KLSAgICBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnM7
Ci0gICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0LmdldCgp
OwotICAgIGZvciAoTm9kZSogbiA9IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBuID0gbi0+
cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkKLSAg
ICAgICAgICAgIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgp
OwotICAgICAgICBpZiAoIW5vQ29tbW9uQm91bmRhcnkpCi0gICAgICAgICAgICByZWxhdGVkVGFy
Z2V0QW5jZXN0b3JzLmFwcGVuZChuKTsKLSAgICB9Ci0KLSAgICAvLyBTaG9ydC1jaXJjdWl0IHRo
ZSBmYXN0IGNhc2Ugd2hlbiB3ZSBrbm93IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3VsYXRlIGEg
Y29tbW9uIGJvdW5kYXJ5LgotICAgIGlmIChub0NvbW1vbkJvdW5kYXJ5KQotICAgICAgICByZXR1
cm4gb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7Ci0KLSAgICByZXR1cm4gYWRqdXN0VG9TaGFkb3dC
b3VuZGFyaWVzKHJlbGF0ZWRUYXJnZXQucmVsZWFzZSgpLCByZWxhdGVkVGFyZ2V0QW5jZXN0b3Jz
KTsKKyAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihtX25vZGUsIHJlbGF0ZWRUYXJnZXQu
cmVsZWFzZSgpKS5hZGp1c3QobV9hbmNlc3RvcnMpOwogfQogCiBFdmVudERpc3BhdGNoZXI6OkV2
ZW50RGlzcGF0Y2hlcihOb2RlKiBub2RlKQpAQCAtMjI3LDMwICsyMDEsMzkgQEAgRXZlbnREaXNw
YXRjaGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKIAogdm9pZCBFdmVudERpc3BhdGNo
ZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIW1fbm9k
ZS0+aW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9hbmNlc3RvcnNJ
bml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyIGFuY2VzdG9yV2Fsa2VyKG1fbm9kZS5nZXQoKSk7CisgICAgRXZlbnRUYXJnZXQqIG9yaWdp
bmFsVGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3JX
YWxrZXIuZ2V0KCkpOworICAgIG1fYW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQobV9ub2Rl
LmdldCgpLCBvcmlnaW5hbFRhcmdldCwgb3JpZ2luYWxUYXJnZXQpKTsKICAgICBtX2FuY2VzdG9y
c0luaXRpYWxpemVkID0gdHJ1ZTsKIAotICAgIE5vZGUqIGFuY2VzdG9yID0gbV9ub2RlLmdldCgp
OwotICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJn
ZXRSdWxlcyhhbmNlc3Rvcik7CisgICAgaWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4gdGFyZ2V0U3RhY2s7CisgICAg
dGFyZ2V0U3RhY2suYXBwZW5kKG9yaWdpbmFsVGFyZ2V0KTsKICAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICBpZiAoYW5jZXN0b3ItPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAo
ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgYW5jZXN0b3IpID09IFN0YXlJbnNpZGVT
aGFkb3dET00pCisgICAgICAgIGlmIChhbmNlc3RvcldhbGtlci5nZXQoKS0+aXNTaGFkb3dSb290
KCkpIHsKKyAgICAgICAgICAgIGlmIChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKGV2ZW50LCBh
bmNlc3RvcldhbGtlci5nZXQoKSkgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkKICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5zaGFkb3dIb3N0
KCk7Ci0gICAgICAgICAgICBpZiAoIW1fbm9kZS0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgICAg
ICAgICAgdGFyZ2V0ID0gYW5jZXN0b3I7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYW5j
ZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotCi0gICAg
ICAgIGlmICghYW5jZXN0b3IpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9hbmNl
c3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4dChhbmNlc3RvciwgZXZlbnRUYXJnZXRSZXNwZWN0aW5n
U1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3IpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgIGFuY2VzdG9y
V2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpOworICAg
ICAgICAgICAgaWYgKCFhbmNlc3RvcldhbGtlci5nZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICB0YXJnZXRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgaWYgKHRh
cmdldFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBw
ZW5kKGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGFuY2VzdG9yV2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBv
aW50QW5kU2hhZG93Um9vdCgpOworICAgICAgICAgICAgaWYgKCFhbmNlc3RvcldhbGtlci5nZXQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoaXNJbnNlcnRpb25Q
b2ludChhbmNlc3RvcldhbGtlci5nZXQoKSkgJiYgdG9JbnNlcnRpb25Qb2ludChhbmNlc3Rvcldh
bGtlci5nZXQoKSktPmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBw
ZW5kKGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBtX2FuY2VzdG9y
cy5hcHBlbmQoRXZlbnRDb250ZXh0KGFuY2VzdG9yV2Fsa2VyLmdldCgpLCBldmVudFRhcmdldFJl
c3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3RvcldhbGtlci5nZXQoKSksIHRhcmdldFN0YWNr
Lmxhc3QoKSkpOwogICAgIH0KIH0KIApAQCAtMjcxLDcgKzI1NCw3IEBAIGJvb2wgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgLy8g
R2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIGJlZm9yZSBET00g
ZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2suCiAgICAgdm9pZCogZGF0YSA9IG1fbm9kZS0+cHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwotICAgIGlmIChtX3Nob3VsZFByZXZl
bnREaXNwYXRjaCB8fCBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgaWYgKG1fYW5j
ZXN0b3JzLmlzRW1wdHkoKSB8fCBtX3Nob3VsZFByZXZlbnREaXNwYXRjaCB8fCBldmVudC0+cHJv
cGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCiAgICAg
Ly8gVHJpZ2dlciBjYXB0dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSB0b3Ag
YW5kIHdvcmtpbmcgb3VyIHdheSBkb3duLgpAQCAtMjgwLDggKzI2Myw4IEBAIGJvb2wgRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIGlm
ICh3aW5kb3dDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKSAmJiBldmVudC0+
cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCi0g
ICAgZm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3JzLnNpemUoKTsgaTsgLS1pKSB7Ci0gICAgICAg
IGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaS0xXTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpIC0gMTsgaSA+IDA7IC0taSkgewor
ICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1fYW5jZXN0b3JzW2ld
OwogICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkg
ewogICAgICAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkBAIC0yOTYsNyArMjc5LDcgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2Uo
RXZlbnQ6OkFUX1RBUkdFVCk7CiAgICAgZXZlbnQtPnNldFRhcmdldChvcmlnaW5hbFRhcmdldC5n
ZXQoKSk7CiAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5n
U1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7Ci0gICAgbV9ub2RlLT5oYW5kbGVMb2NhbEV2
ZW50cyhldmVudC5nZXQoKSk7CisgICAgbV9hbmNlc3RvcnNbMF0uaGFuZGxlTG9jYWxFdmVudHMo
ZXZlbnQuZ2V0KCkpOwogICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAg
ICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCkBAIC0zMDUsNyArMjg4LDcgQEAgYm9vbCBFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAg
ICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CiAKICAgICAg
ICAgc2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwg
c2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4
dCA9IG1fYW5jZXN0b3JzW2ldOwogICAgICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50
VGFyZ2V0U2FtZUFzVGFyZ2V0KCkpCiAgICAgICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkFUX1RBUkdFVCk7CkBAIC0zMzksNyArMzIyLDcgQEAgZG9uZURpc3BhdGNoaW5n
OgogICAgICAgICAvLyBzYW1lIG9yZGVyIGFzIHRoZSBidWJibGluZyBwaGFzZS4KICAgICAgICAg
aWYgKGV2ZW50LT5idWJibGVzKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNl
c3RvcnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgbV9hbmNlc3RvcnNbaV0ubm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50LmdldCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJl
dmVudGVkKCkpOwogICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkK
QEAgLTM3OSwxMSArMzYyLDYgQEAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hl
cjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQsIE4KICAgICBVTlVTRURf
UEFSQU0oc2hhZG93Um9vdCk7CiAjZW5kaWYKIAotICAgIC8vIFBlciBYQkwgMi4wIHNwZWMsIG11
dGF0aW9uIGV2ZW50cyBzaG91bGQgbmV2ZXIgY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyeToKLSAg
ICAvLyBodHRwOi8vZGV2LnczLm9yZy8yMDA2L3hibDIvI2V2ZW50LWZsb3ctYW5kLXRhcmdldGlu
Zy1hY3Jvc3Mtc2hhZG93LXMKLSAgICBpZiAoZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yTXV0YXRpb25FdmVudCkpCi0gICAgICAgIHJldHVybiBTdGF5SW5zaWRl
U2hhZG93RE9NOwotCiAgICAgLy8gV2ViS2l0IG5ldmVyIGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZl
bnQgdG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cgRE9NIGJvdW5kYXJ5LgogICAgIC8vIENoYW5naW5n
IHRoaXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxOTUgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmgKaW5kZXggODVhZWZjNDkzMDQzZDUxN2VjOTc3MzRlNjIxOGFhZDgx
ZDE3OTA2Ny4uNmY4OTFjMTM0MjdjNjZhY2ZlOGEzYTdkY2YxM2EzMWZhZDU2YjBjMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBF
dmVudERpc3BhdGNoZXJfaAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDAsMTIgKzQxLDI2IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVs
RXZlbnQ7CitjbGFzcyBUcmVlU2NvcGU7CiAKIGVudW0gRXZlbnREaXNwYXRjaEJlaGF2aW9yIHsK
ICAgICBSZXRhcmdldEV2ZW50LAogICAgIFN0YXlJbnNpZGVTaGFkb3dET00KIH07CiAKK2NsYXNz
IEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKK3B1YmxpYzoKKyAgICBFdmVudFJlbGF0ZWRU
YXJnZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRU
YXJnZXQpOworICAgIHZvaWQgYWRqdXN0KFZlY3RvcjxFdmVudENvbnRleHQ+Jik7Citwcml2YXRl
OgorICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVudFRhcmdldCo+IFJlbGF0ZWRU
YXJnZXRNYXA7CisgICAgRXZlbnRUYXJnZXQqIGZpbmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSop
OworCisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVk
VGFyZ2V0OworICAgIFJlbGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVkVGFyZ2V0TWFwOworfTsKKwog
Y2xhc3MgRXZlbnREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRj
aEV2ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4pOwpAQCAtNTQs
MTMgKzY5LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENs
aWNrKE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1v
dXNlRXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vayk7CiAKICAgICBib29sIGRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGFkanVz
dFJlbGF0ZWRUYXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgdm9p
ZCBhZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJw
UmVsYXRlZFRhcmdldCk7CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IEV2ZW50RGlzcGF0Y2hlcihOb2RlKik7CiAKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBh
ZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0LCBj
b25zdCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwogICAgIEV2ZW50RGlz
cGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgTm9kZSogc2hh
ZG93Um9vdCk7CiAgICAgdm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwogICAgIGNv
bnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVu
dC5jcHAKaW5kZXggYzM2ODljNmRkNDYzYWVlMDU2Mjg4MTcyZTI1NGRjM2VjZmIyNWQwYi4uY2Yy
ZTI2NjBhNjVlMzYxMWY0YjQ3ZWNmOGVjZTdhZjI3MzdlZjUwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZUV2ZW50LmNwcApAQCAtMjAxLDggKzIwMSw4IEBAIGJvb2wgTW91c2VFdmVudERpc3BhdGNoTWVk
aWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zCiAg
ICAgaWYgKGV2ZW50KCktPnR5cGUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gU2hvdWxkbid0IGhhcHBlbi4KIAotICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRh
cmdldCA9IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZlbnQoKS0+
cmVsYXRlZFRhcmdldCgpKTsKLSAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFyZ2V0KHJlbGF0ZWRU
YXJnZXQpOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQoKS0+cmVsYXRl
ZFRhcmdldCgpOworICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwg
cmVsYXRlZFRhcmdldCk7CiAKICAgICBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2ZW50KGV2ZW50KCkp
OwogICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZXZlbnQoKS0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBl
dmVudCgpLT5kZWZhdWx0UHJldmVudGVkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDhmOTFjOWYxN2RkZGFkODkxOTBk
OWUyM2M2OTVlZWRlMjJlMzA2ZC4uNWE3YmQ1NGViZmE5MGJkOGQ0ZTg1NWFhMjg4NDFkM2ZiNGUx
MDA5NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA1LTE1ICBIYXlhdG8gSXRvICA8aGF5
YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgYSBTaGFkb3cgRE9NIHNwZWMn
cyBzZWN0aW9uIDYgJ0V2ZW50cycuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODU4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hp
bmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93
LWRvbS1ldmVudC1kaXNwYXRjaGluZy5odG1sOiBBZGRlZC4KKwogMjAxMi0wNS0xNSAgQWJoaXNo
ZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENyYXNoIGluIERvY3Vt
ZW50Ojpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hp
bmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMTE2NzhhMTcwOWJmNjJjNDNiNmMyMWViNDYx
ZGM4ZDdlZDhkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwy
NDYgQEAKK1Rlc3RzIHRvIGVuc3VyZSB0aGF0IGV2ZW50IGRpc3BhdGNoaW5nIGJlaGF2ZXMgYXMg
dGhlIFNoYWRvdyBET00gc3BlYyBkZXNjcmliZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCisKKworQ29tcG9zZWQgU2hhZG93IFRyZWUgd2lsbCBiZToKK0RJVgkgaWQ9c2FuZGJv
eAorCURJVgkgaWQ9dG9wCisJCURJVgkgaWQ9c2hhZG93LWhvc3QKKwkJCURJVgkgaWQ9ZGlzdHJp
YnV0ZWQtbGlnaHQtY2hpbGQKKwkJCURJVgkgaWQ9c2hhZG93LXJvb3QtY2hpbGQKKworCitNb3Zp
bmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdCB0byBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGls
ZAorCisgIG1vdXNlb3V0CisKKyAgbW91c2VvdmVyCisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAo
dGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBA
c2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ct
aG9zdCkKKworTW92aW5nIG1vdXNlIGZyb20gc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQg
dG8gc2hhZG93LWhvc3QKKworICBtb3VzZW91dAorICAgICBAc2hhZG93LXJvb3QtY2hpbGQgKHRh
cmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHNo
YWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhv
c3QpCisKKyAgbW91c2VvdmVyCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRvIGRp
c3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAgQHNoYWRvdy1ob3N0ICh0
YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisg
ICAgIEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCkKKworICBtb3VzZW92ZXIKKyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0
YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisg
ICAgIEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAg
ICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkK
KyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVs
YXRlZDogc2hhZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworTW92aW5nIG1vdXNlIGZyb20gZGlzdHJp
YnV0ZWQtbGlnaHQtY2hpbGQgdG8gc2hhZG93LWhvc3QKKworICBtb3VzZW91dAorICAgICBAZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChy
ZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkgKHJl
bGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkg
KHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJp
YnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAodGFy
Z2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisg
IG1vdXNlb3ZlcgorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxh
dGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKyAgICAgQHRvcCAodGFyZ2V0OiBzaGFkb3ct
aG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorCitNb3ZpbmcgbW91c2Ug
ZnJvbSBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCB0byBkaXN0cmlidXRlZC1saWdodC1j
aGlsZAorCisgIG1vdXNlb3V0CisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFk
b3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFy
Z2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ct
aG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91c2VvdmVyCisgICAgIEBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1o
b3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LXJv
b3QtY2hpbGQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDog
c2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6
IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKK01vdmlu
ZyBtb3VzZSBmcm9tIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkIHRvIHNoYWRvdy1ob3N0L3NoYWRv
dy1yb290LWNoaWxkCisKKyAgbW91c2VvdXQKKyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3Qp
CisgICAgIEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctcm9vdC1j
aGlsZCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFk
b3ctcm9vdC1jaGlsZCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBtb3VzZW92
ZXIKKyAgICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAo
cmVsYXRlZDogY29udGVudCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1yb290
LWNoaWxkKSAocmVsYXRlZDogY29udGVudCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNo
YWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisgICAgIEB0b3Ag
KHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkK
KworCitDb21wb3NlZCBTaGFkb3cgVHJlZSB3aWxsIGJlOgorRElWCSBpZD1zYW5kYm94CisJRElW
CSBpZD10b3AKKwkJREVUQUlMUwkgaWQ9ZGV0YWlscworCQkJU1VNTUFSWQkgaWQ9c3VtbWFyeQor
CQkJCURJVgkKKworCitNb3ZpbmcgbW91c2UgZnJvbSBkZXRhaWxzIHRvIHN1bW1hcnkKKworICBt
b3VzZW91dAorICAgICBAZGV0YWlscyAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFy
eSkKKyAgICAgQHRvcCAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKworICBt
b3VzZW92ZXIKKyAgICAgQHN1bW1hcnkgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFp
bHMpCisgICAgIEBkZXRhaWxzICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQor
ICAgICBAdG9wICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorCitNb3Zpbmcg
bW91c2UgZnJvbSBzdW1tYXJ5IHRvIGRldGFpbHMKKworICBtb3VzZW91dAorICAgICBAc3VtbWFy
eSAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKyAgICAgQGRldGFpbHMgKHRh
cmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisgICAgIEB0b3AgKHRhcmdldDogc3Vt
bWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisKKyAgbW91c2VvdmVyCisgICAgIEBkZXRhaWxzICh0
YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5KQorICAgICBAdG9wICh0YXJnZXQ6IGRl
dGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5KQorCisKK0NvbXBvc2VkIFNoYWRvdyBUcmVlIHdpbGwg
YmU6CitESVYJIGlkPXNhbmRib3gKKwlESVYJIGlkPXRvcAorCQlESVYJIGlkPUEKKwkJCURJVgkg
aWQ9QgorCQkJCURJVgkgaWQ9RworCQkJCQlESVYJIGlkPUoKKwkJCQkJCURJVgkgaWQ9QworCQkJ
CQkJCURJVgkgaWQ9RAorCQkJCQlESVYJIGlkPUwKKwkJCQkJCURJVgkgaWQ9RQorCQkJCQkJCURJ
VgkgaWQ9RgorCisKK01vdmluZyBtb3VzZSBmcm9tIEYgdG8gRAorCisgIG1vdXNlb3V0CisgICAg
IEBGICh0YXJnZXQ6IEYpIChyZWxhdGVkOiBEKQorICAgICBARSAodGFyZ2V0OiBGKSAocmVsYXRl
ZDogRCkKKyAgICAgQEkgKHRhcmdldDogSSkgKHJlbGF0ZWQ6IEgpCisgICAgIEBNICh0YXJnZXQ6
IE0pIChyZWxhdGVkOiBLKQorICAgICBATyAodGFyZ2V0OiBPKSAocmVsYXRlZDogSykKKyAgICAg
QHNoYWRvdy1yb290LUwgKHRhcmdldDogTykgKHJlbGF0ZWQ6IEspCisgICAgIEBMICh0YXJnZXQ6
IE0pIChyZWxhdGVkOiBLKQorICAgICBAc2hhZG93LXJvb3QtRyAodGFyZ2V0OiBNKSAocmVsYXRl
ZDogSykKKyAgICAgQEcgKHRhcmdldDogSSkgKHJlbGF0ZWQ6IEgpCisgICAgIEBzaGFkb3ctcm9v
dC1CICh0YXJnZXQ6IEkpIChyZWxhdGVkOiBIKQorICAgICBAQiAodGFyZ2V0OiBGKSAocmVsYXRl
ZDogRCkKKyAgICAgQEEgKHRhcmdldDogRikgKHJlbGF0ZWQ6IEQpCisgICAgIEB0b3AgKHRhcmdl
dDogRikgKHJlbGF0ZWQ6IEQpCisKKyAgbW91c2VvdmVyCisgICAgIEBEICh0YXJnZXQ6IEQpIChy
ZWxhdGVkOiBGKQorICAgICBAQyAodGFyZ2V0OiBEKSAocmVsYXRlZDogRikKKyAgICAgQEggKHRh
cmdldDogSCkgKHJlbGF0ZWQ6IEkpCisgICAgIEBLICh0YXJnZXQ6IEspIChyZWxhdGVkOiBNKQor
ICAgICBATiAodGFyZ2V0OiBOKSAocmVsYXRlZDogTSkKKyAgICAgQHNoYWRvdy1yb290LUogKHRh
cmdldDogTikgKHJlbGF0ZWQ6IE0pCisgICAgIEBKICh0YXJnZXQ6IEspIChyZWxhdGVkOiBNKQor
ICAgICBAc2hhZG93LXJvb3QtRyAodGFyZ2V0OiBLKSAocmVsYXRlZDogTSkKKyAgICAgQEcgKHRh
cmdldDogSCkgKHJlbGF0ZWQ6IEkpCisgICAgIEBzaGFkb3ctcm9vdC1CICh0YXJnZXQ6IEgpIChy
ZWxhdGVkOiBJKQorICAgICBAQiAodGFyZ2V0OiBEKSAocmVsYXRlZDogRikKKyAgICAgQEEgKHRh
cmdldDogRCkgKHJlbGF0ZWQ6IEYpCisgICAgIEB0b3AgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEYp
CisKK01vdmluZyBtb3VzZSBmcm9tIEIvRy9MIHRvIEQKKworICBtb3VzZW91dAorICAgICBATCAo
dGFyZ2V0OiBMKSAocmVsYXRlZDogSykKKyAgICAgQHNoYWRvdy1yb290LUcgKHRhcmdldDogTCkg
KHJlbGF0ZWQ6IEspCisgICAgIEBHICh0YXJnZXQ6IEcpIChyZWxhdGVkOiBIKQorICAgICBAc2hh
ZG93LXJvb3QtQiAodGFyZ2V0OiBHKSAocmVsYXRlZDogSCkKKyAgICAgQEIgKHRhcmdldDogQikg
KHJlbGF0ZWQ6IEQpCisgICAgIEBBICh0YXJnZXQ6IEIpIChyZWxhdGVkOiBEKQorICAgICBAdG9w
ICh0YXJnZXQ6IEIpIChyZWxhdGVkOiBEKQorCisgIG1vdXNlb3ZlcgorICAgICBARCAodGFyZ2V0
OiBEKSAocmVsYXRlZDogQikKKyAgICAgQEMgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEIpCisgICAg
IEBIICh0YXJnZXQ6IEgpIChyZWxhdGVkOiBHKQorICAgICBASyAodGFyZ2V0OiBLKSAocmVsYXRl
ZDogTCkKKyAgICAgQE4gKHRhcmdldDogTikgKHJlbGF0ZWQ6IEwpCisgICAgIEBzaGFkb3ctcm9v
dC1KICh0YXJnZXQ6IE4pIChyZWxhdGVkOiBMKQorICAgICBASiAodGFyZ2V0OiBLKSAocmVsYXRl
ZDogTCkKKyAgICAgQHNoYWRvdy1yb290LUcgKHRhcmdldDogSykgKHJlbGF0ZWQ6IEwpCisgICAg
IEBHICh0YXJnZXQ6IEgpIChyZWxhdGVkOiBHKQorICAgICBAc2hhZG93LXJvb3QtQiAodGFyZ2V0
OiBIKSAocmVsYXRlZDogRykKKyAgICAgQEIgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEIpCisgICAg
IEBBICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBCKQorICAgICBAdG9wICh0YXJnZXQ6IEQpIChyZWxh
dGVkOiBCKQorCitNb3ZpbmcgbW91c2UgZnJvbSBCL0cvTCB0byBCL0cvSgorCisgIG1vdXNlb3V0
CisgICAgIEBMICh0YXJnZXQ6IEwpIChyZWxhdGVkOiBKKQorICAgICBAc2hhZG93LXJvb3QtRyAo
dGFyZ2V0OiBMKSAocmVsYXRlZDogSikKKworICBtb3VzZW92ZXIKKyAgICAgQEogKHRhcmdldDog
SikgKHJlbGF0ZWQ6IEwpCisgICAgIEBzaGFkb3ctcm9vdC1HICh0YXJnZXQ6IEopIChyZWxhdGVk
OiBMKQorCitNb3ZpbmcgbW91c2UgZnJvbSBBIHRvIEQKKworICBtb3VzZW91dAorICAgICBAQSAo
dGFyZ2V0OiBBKSAocmVsYXRlZDogRCkKKyAgICAgQHRvcCAodGFyZ2V0OiBBKSAocmVsYXRlZDog
RCkKKworICBtb3VzZW92ZXIKKyAgICAgQEQgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEEpCisgICAg
IEBDICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBBKQorICAgICBASCAodGFyZ2V0OiBIKSAocmVsYXRl
ZDogQSkKKyAgICAgQEsgKHRhcmdldDogSykgKHJlbGF0ZWQ6IEEpCisgICAgIEBOICh0YXJnZXQ6
IE4pIChyZWxhdGVkOiBBKQorICAgICBAc2hhZG93LXJvb3QtSiAodGFyZ2V0OiBOKSAocmVsYXRl
ZDogQSkKKyAgICAgQEogKHRhcmdldDogSykgKHJlbGF0ZWQ6IEEpCisgICAgIEBzaGFkb3ctcm9v
dC1HICh0YXJnZXQ6IEspIChyZWxhdGVkOiBBKQorICAgICBARyAodGFyZ2V0OiBIKSAocmVsYXRl
ZDogQSkKKyAgICAgQHNoYWRvdy1yb290LUIgKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAg
IEBCICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBBKQorICAgICBAQSAodGFyZ2V0OiBEKSAocmVsYXRl
ZDogQSkKKyAgICAgQHRvcCAodGFyZ2V0OiBEKSAocmVsYXRlZDogQSkKKworTW92aW5nIG1vdXNl
IGZyb20gRCB0byBBCisKKyAgbW91c2VvdXQKKyAgICAgQEQgKHRhcmdldDogRCkgKHJlbGF0ZWQ6
IEEpCisgICAgIEBDICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBBKQorICAgICBASCAodGFyZ2V0OiBI
KSAocmVsYXRlZDogQSkKKyAgICAgQEsgKHRhcmdldDogSykgKHJlbGF0ZWQ6IEEpCisgICAgIEBO
ICh0YXJnZXQ6IE4pIChyZWxhdGVkOiBBKQorICAgICBAc2hhZG93LXJvb3QtSiAodGFyZ2V0OiBO
KSAocmVsYXRlZDogQSkKKyAgICAgQEogKHRhcmdldDogSykgKHJlbGF0ZWQ6IEEpCisgICAgIEBz
aGFkb3ctcm9vdC1HICh0YXJnZXQ6IEspIChyZWxhdGVkOiBBKQorICAgICBARyAodGFyZ2V0OiBI
KSAocmVsYXRlZDogQSkKKyAgICAgQHNoYWRvdy1yb290LUIgKHRhcmdldDogSCkgKHJlbGF0ZWQ6
IEEpCisgICAgIEBCICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBBKQorICAgICBAQSAodGFyZ2V0OiBE
KSAocmVsYXRlZDogQSkKKyAgICAgQHRvcCAodGFyZ2V0OiBEKSAocmVsYXRlZDogQSkKKworICBt
b3VzZW92ZXIKKyAgICAgQEEgKHRhcmdldDogQSkgKHJlbGF0ZWQ6IEQpCisgICAgIEB0b3AgKHRh
cmdldDogQSkgKHJlbGF0ZWQ6IEQpCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmcuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMx
OGM0MjA2OGM3NTE0MzY4MTBhM2UwZjdkMDVjMzFkMDU0YWFiNwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5n
Lmh0bWwKQEAgLTAsMCArMSwyMjEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFkb3ctZG9tLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJzYW5kYm94Ij48
L2Rpdj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0cyB0byBlbnN1cmUgdGhhdCBldmVudCBkaXNwYXRjaGluZyBiZWhhdmVzIGFzIHRoZSBTaGFk
b3cgRE9NIHNwZWMgZGVzY3JpYmVzLiIpOworCitmdW5jdGlvbiBtb3ZlTW91c2VPdmVyKGVsZW1l
bnQpCit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMp
CisgICAgICAgIHJldHVybjsKKworICAgIHZhciBkZWZhdWx0UGFkZGluZ1NpemUgPSAyMDsKKyAg
ICB2YXIgeCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOwor
ICAgIHZhciB5OworICAgIGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSB8fCB3aW5kb3cuaW50
ZXJuYWxzLnNoYWRvd1Jvb3QoZWxlbWVudCkpCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNldFRv
cCArIGRlZmF1bHRQYWRkaW5nU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHkgPSBlbGVtZW50Lm9m
ZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3Vz
ZU1vdmVUbyh4LCB5KTsKK30KKwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitmdW5jdGlvbiBj
bGVhckV2ZW50UmVjb3JkcygpCit7CisgICAgZXZlbnRSZWNvcmRzID0ge307Cit9CisKK2Z1bmN0
aW9uIGRpc3BhdGNoZWRFdmVudChldmVudFR5cGUpCit7CisgICAgdmFyIGV2ZW50cyA9IGV2ZW50
UmVjb3Jkc1tldmVudFR5cGVdOworICAgIGlmICghZXZlbnRzKQorICAgICAgICByZXR1cm4gW107
CisgICAgcmV0dXJuIGV2ZW50czsKK30KKworZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQpCit7
CisgICAgdmFyIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUKKyAgICBpZiAoIWV2ZW50UmVjb3Jkc1tl
dmVudFR5cGVdKSB7CisgICAgICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW10KKyAgICB9
CisgICAgdmFyIGV2ZW50U3RyaW5nID0gJyc7CisgICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQp
CisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgQCcgKyBldmVudC5jdXJyZW50VGFyZ2V0LmlkOwor
ICAgIGlmIChldmVudC50YXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdldDog
JyArIGV2ZW50LnRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCkK
KyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0ZWRUYXJn
ZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKKyAgICAgICAgZXZl
bnRTdHJpbmcgKz0gJyhjYXB0dXJpbmcgcGhhc2UpJzsKKyAgICBpZiAoZXZlbnQudGFyZ2V0ICYm
IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1cnJlbnRU
YXJnZXQuaWQpCisgICAgICAgIHNob3VsZEJlKCJldmVudC5ldmVudFBoYXNlIiwgIjIiLCB0cnVl
KTsKKyAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXS5wdXNoKGV2ZW50U3RyaW5nKTsKK30KKwor
ZnVuY3Rpb24gZHVtcE5vZGUobm9kZSkKK3sKKyAgICB2YXIgb3V0cHV0ID0gbm9kZS5ub2RlTmFt
ZSArICJcdCI7CisgICAgaWYgKG5vZGUuaWQpCisgICAgICAgIG91dHB1dCArPSAnIGlkPScgKyBu
b2RlLmlkOworICAgIGlmIChub2RlLmNsYXNzTmFtZSkKKyAgICAgICAgb3V0cHV0ICs9ICcgY2xh
c3M9JyArIG5vZGUuY2xhc3NOYW1lOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9u
IGR1bXBDb21wb3NlZFNoYWRvd1RyZWUobm9kZSwgaW5kZW50KQoreworICAgIGluZGVudCA9IGlu
ZGVudCB8fCAiIjsKKyAgICB2YXIgb3V0cHV0ID0gaW5kZW50ICsgZHVtcE5vZGUobm9kZSkgKyAi
XG4iOworICAgIHZhciBjaGlsZDsKKyAgICBmb3IgKGNoaWxkID0gaW50ZXJuYWxzLmZpcnN0Q2hp
bGRCeVdhbGtlcihub2RlKTsgY2hpbGQ7IGNoaWxkID0gaW50ZXJuYWxzLm5leHRTaWJsaW5nQnlX
YWxrZXIoY2hpbGQpKQorICAgICAgICAgb3V0cHV0ICs9IGR1bXBDb21wb3NlZFNoYWRvd1RyZWUo
Y2hpbGQsIGluZGVudCArICJcdCIpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9u
IGFkZEV2ZW50TGlzdGVuZXJzKG5vZGVzKQoreworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9k
ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIG5vZGUgPSBnZXROb2RlSW5TaGFkb3dUcmVl
U3RhY2sobm9kZXNbaV0pOworICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3Zl
cicsIHJlY29yZEV2ZW50LCBmYWxzZSk7CisgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcign
bW91c2VvdXQnLCByZWNvcmRFdmVudCwgZmFsc2UpOworICAgICAgICBpZiAobm9kZS50YWdOYW1l
ID09ICdESVYnIHx8IG5vZGUudGFnTmFtZSA9PSAnREVUQUlMUycgfHwgbm9kZS50YWdOYW1lID09
ICdTVU1NQVJZJykKKyAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsICdwYWRk
aW5nLXRvcDogNDBweDsnKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHByZXBhcmVET01UcmVlMShw
YXJlbnQpCit7CisgICAgcGFyZW50LmFwcGVuZENoaWxkKAorICAgICAgICBjcmVhdGVET00oJ2Rp
dicsIHsnaWQnOiAndG9wJ30sCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsn
aWQnOiAnc2hhZG93LWhvc3QnfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVT
aGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Nv
bnRlbnQnLCB7J2lkJzogJ2NvbnRlbnQnLCAnc2VsZWN0JzogJyNkaXN0cmlidXRlZC1saWdodC1j
aGlsZCcsfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2
JywgeydpZCc6ICdzaGFkb3ctcm9vdC1jaGlsZCd9KSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJ30p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdu
b24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnfSkpKSk7CisKKyAgICBhZGRFdmVudExpc3RlbmVy
cyhbJ3RvcCcsICdzaGFkb3ctaG9zdCcsICdzaGFkb3ctaG9zdC8nLCAnc2hhZG93LWhvc3QvY29u
dGVudCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQnXSk7CisgICAgZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCdzaGFkb3ctaG9zdC8nKS5p
ZCA9ICdzaGFkb3ctcm9vdCc7CisgICAgcGFyZW50Lm9mZnNldExlZnQ7CisgICAgZGVidWcoJ1xu
XG5Db21wb3NlZCBTaGFkb3cgVHJlZSB3aWxsIGJlOlxuJyArIGR1bXBDb21wb3NlZFNoYWRvd1Ry
ZWUocGFyZW50KSk7Cit9CisKK2Z1bmN0aW9uIHByZXBhcmVET01UcmVlMihwYXJlbnQpCit7Cisg
ICAgcGFyZW50LmFwcGVuZENoaWxkKAorICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAn
dG9wJ30sCisgICAgICAgICAgICAgICAgICAvLyAnZGV0YWlscy9zdW1tYXJ5JyBlbGVtZW50cyB1
c2UgU2hhZG93IERPTSBpbiBpdHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICBj
cmVhdGVET00oJ2RldGFpbHMnLCB7J2lkJzogJ2RldGFpbHMnLCAnb3Blbic6IHRydWV9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnc3VtbWFyeScsIHsnaWQnOiAnc3Vt
bWFyeSd9KSkpKTsKKworICAgIGFkZEV2ZW50TGlzdGVuZXJzKFsndG9wJywgJ2RldGFpbHMnLCAn
c3VtbWFyeSddKTsKKyAgICBwYXJlbnQub2Zmc2V0TGVmdDsKKyAgICBkZWJ1ZygnXG5cbkNvbXBv
c2VkIFNoYWRvdyBUcmVlIHdpbGwgYmU6XG4nICsgZHVtcENvbXBvc2VkU2hhZG93VHJlZShwYXJl
bnQpKTsKK30KKworZnVuY3Rpb24gcHJlcGFyZURPTVRyZWUzKHBhcmVudCkKK3sKKyAgICBwYXJl
bnQuYXBwZW5kQ2hpbGQoCisgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICd0b3AnfSwK
KyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdBJ30sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ0InfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2Jywgeydp
ZCc6ICdHJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ0onfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50
JywgeydpZCc6ICdOJywgJ3NlbGVjdCc6ICcjSyd9KSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Nv
bnRlbnQnLCB7J2lkJzogJ0snLCAnc2VsZWN0JzogJyNIJ30pKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7
J2lkJzogJ0wnfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdPJywgJ3NlbGVjdCc6ICcjTSd9KSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVET00oJ2NvbnRlbnQnLCB7J2lkJzogJ00nLCAnc2VsZWN0JzogJyNJJ30pKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
RE9NKCdjb250ZW50JywgeydpZCc6ICdIJywgJ3NlbGVjdCc6ICcjQyd9KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2NvbnRl
bnQnLCB7J2lkJzogJ0knLCAnc2VsZWN0JzogJyNFJ30pKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdDJ30sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Rpdics
IHsnaWQnOiAnRCd9KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZURPTSgnZGl2JywgeydpZCc6ICdFJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnRid9KSkpKSkpOwor
CisgICAgYWRkRXZlbnRMaXN0ZW5lcnMoWyd0b3AnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywg
J0YnLCAnQi8nLCAnQi9HJywgJ0IvSCcsICdCL0knLCAnQi9HLycsICdCL0cvSicsICdCL0cvSycs
ICdCL0cvTCcsICdCL0cvTScsCisgICAgICAgICAgICAgICAgICAgICAgICdCL0cvSi8nLCAnQi9H
L0ovTicsICdCL0cvTC8nLCAnQi9HL0wvTyddKTsKKyAgICBnZXROb2RlSW5TaGFkb3dUcmVlU3Rh
Y2soJ0IvJykuaWQgPSAnc2hhZG93LXJvb3QtQic7CisgICAgZ2V0Tm9kZUluU2hhZG93VHJlZVN0
YWNrKCdCL0cvJykuaWQgPSAnc2hhZG93LXJvb3QtRyc7CisgICAgZ2V0Tm9kZUluU2hhZG93VHJl
ZVN0YWNrKCdCL0cvSi8nKS5pZCA9ICdzaGFkb3ctcm9vdC1KJzsKKyAgICBnZXROb2RlSW5TaGFk
b3dUcmVlU3RhY2soJ0IvRy9MLycpLmlkID0gJ3NoYWRvdy1yb290LUwnOworICAgIHBhcmVudC5v
ZmZzZXRMZWZ0OworICAgIGRlYnVnKCdcblxuQ29tcG9zZWQgU2hhZG93IFRyZWUgd2lsbCBiZTpc
bicgKyBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKHBhcmVudCkpOworfQorCitmdW5jdGlvbiBkZWJ1
Z0Rpc3BhdGNoZWRFdmVudChldmVudFR5cGUpCit7CisgICAgZGVidWcoJ1xuICAnICsgZXZlbnRU
eXBlKTsKKyAgICB2YXIgZXZlbnRzID0gZGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSk7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGRlYnVnKCcg
ICAgJyArIGV2ZW50c1tpXSkKK30KKworZnVuY3Rpb24gbW92ZU1vdXNlKG9sZEVsZW1lbnRJZCwg
bmV3RWxlbWVudElkKQoreworICAgIGNsZWFyRXZlbnRSZWNvcmRzKCk7CisgICAgZGVidWcoJ1xu
JyArICdNb3ZpbmcgbW91c2UgZnJvbSAnICsgb2xkRWxlbWVudElkICsgJyB0byAnICsgbmV3RWxl
bWVudElkKTsKKyAgICBtb3ZlTW91c2VPdmVyKGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhvbGRF
bGVtZW50SWQpKTsKKyAgICAvLyBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91c2VvdXQnKTsKKyAg
ICAvLyBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91c2VvdmVyJyk7CisKKyAgICBjbGVhckV2ZW50
UmVjb3JkcygpOworICAgIG1vdmVNb3VzZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG5l
d0VsZW1lbnRJZCkpOworICAgIC8vIGlzSW5uZXJtb3N0QWN0aXZlRWxlbWVudChuZXdFbGVtZW50
SWQpOworCisgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNlb3V0Jyk7CisgICAgZGVidWdE
aXNwYXRjaGVkRXZlbnQoJ21vdXNlb3ZlcicpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICB2YXIgc2FuZGJveCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdzYW5kYm94Jyk7CisgICAgcHJlcGFyZURPTVRyZWUxKHNhbmRib3gpOworCisg
ICAgbW92ZU1vdXNlKCdzaGFkb3ctaG9zdCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGls
ZCcpOworICAgIG1vdmVNb3VzZSgnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnLCAnc2hh
ZG93LWhvc3QnKTsKKworICAgIG1vdmVNb3VzZSgnc2hhZG93LWhvc3QnLCAnZGlzdHJpYnV0ZWQt
bGlnaHQtY2hpbGQnKTsKKyAgICBtb3ZlTW91c2UoJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywg
J3NoYWRvdy1ob3N0Jyk7CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290
LWNoaWxkJywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdkaXN0
cmlidXRlZC1saWdodC1jaGlsZCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcpOwor
CisgICAgc2FuZGJveC5pbm5lckhUTUwgPSAnJzsKKyAgICBwcmVwYXJlRE9NVHJlZTIoc2FuZGJv
eCk7CisKKyAgICBtb3ZlTW91c2UoJ2RldGFpbHMnLCAnc3VtbWFyeScpOworICAgIG1vdmVNb3Vz
ZSgnc3VtbWFyeScsICdkZXRhaWxzJyk7CisKKyAgICBzYW5kYm94LmlubmVySFRNTCA9ICcnOwor
ICAgIHByZXBhcmVET01UcmVlMyhzYW5kYm94KTsKKworICAgIG1vdmVNb3VzZSgnRicsICdEJyk7
CisgICAgbW92ZU1vdXNlKCdCL0cvTCcsICdEJyk7CisgICAgbW92ZU1vdXNlKCdCL0cvTCcsICdC
L0cvSicpOworICAgIG1vdmVNb3VzZSgnQScsICdEJyk7CisgICAgbW92ZU1vdXNlKCdEJywgJ0En
KTsKK30KKwordGVzdCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142219</attachid>
            <date>2012-05-16 04:23:43 -0700</date>
            <delta_ts>2012-05-16 20:37:53 -0700</delta_ts>
            <desc>ready for reviews. Refine a changelog.</desc>
            <filename>bug-78586-20120516202341.patch</filename>
            <type>text/plain</type>
            <size>44582</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY0ZjllZjFiZjE3NDMw
ZjQ5ZjdhMzhiN2I2N2M2YmM0MDc1OTY0Zi4uOGE1NzdmM2MxMTQzZGFkMmY1YTQxZTQ0YWZmZjc0
YTkxNzkwNmY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxMi0wNS0xNSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IGEgU2hh
ZG93IERPTSBzcGVjJ3Mgc2VjdGlvbiA2ICdFdmVudHMnLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGltcGxlbWVudHMgYSBTaGFkb3cgRE9NIHNw
ZWMncyBzZWN0aW9uIDYgJ0V2ZW50cycsIGludHJvZHVjaW5nIGEgbmV3CisgICAgICAgIGFsZ29y
aXRobSBzbyB0aGF0IGV2ZW50IGRpc3BhdGNoaW5nIHVzZSBhIGNvbXBvc2VkIHNoYWRvdyBET00g
dHJlZSwKKyAgICAgICAgaW5zdGVhZCBvZiBub3JtYWwgRE9NIHRyZWUsIGluIGRpc3BhdGNoaW5n
IGV2ZW50cyB0byBlYWNoIG5vZGUuCisKKyAgICAgICAgVGhlIHNwZWMgaXMgaGVyZTogaHR0cDov
L2R2Y3MudzMub3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2lu
ZGV4Lmh0bWwjZXZlbnRzCisKKyAgICAgICAgU3VtbWFyeSBvZiBjaGFuZ2VzOgorICAgICAgICAt
IEF0dGFjaGluZyBzaGFkb3cgRE9NIGRvZXMgbm90IGFmZmVjdCBhbiBldmVudCBkaXNwYXRjaGlu
ZworICAgICAgICBiZWhhdmlvciBvZiBlbmNsb3NpbmcgRE9NIHRyZWUuIFRoaXMgYXBwbGllcyBl
dmVuIGlmIHNvbWUgbm9kZXMKKyAgICAgICAgYXJlIGRpc3RyaWJ1dGVkIHRvIGluc2VydGlvbiBw
b2ludHMuIFdlIGtlZXAgYSBjb21wYXRpYmlsaXR5IG9mCisgICAgICAgIGV4aXN0aW5nIGV2ZW50
IGRpc3BhdGNoaW5nIG1lY2hhbmlzbSBzbyB0aGF0IHdlIHdvbid0IGJyZWFrIFdlYi4KKyAgICAg
ICAgLSBFdmVudCBhbmNlc3RvcnMsIHdoaWNoIGFyZSB1c2VkIGluIGRpc3BhdGNoaW5nIGV2ZW50
cyBpbiBjYXB0dXJlIChvcgorICAgICAgICBidWJibGUpIHBoYXNlLCBhcmUgbm93IHRoZSByZXN1
bHQgb2YgdHJhdmVyc2luZyBhbmNlc3RvcnMgaW4gY29tcG9zZWQKKyAgICAgICAgc2hhZG93IERP
TSB0cmVlIG9yZGVyLCBpbnN0ZWFkIG9mIG5vcm1hbCBET00gdHJlZSBvcmRlci4KKyAgICAgICAg
LSBFdmVudCdzIHRhcmdldCBhbmQgcmVsYXRlZC10YXJnZXQgYXJlIGNvcnJlY3RseSBhZGp1c3Rl
ZCBzbyB0aGF0CisgICAgICAgIHdlIGRvbid0IGxlYWsgYW55IG5vZGUgd2hpY2ggaXMgaW5hY2Nl
c3NpYmxlIGZyb20gdGhlIGV2ZW50J3MKKyAgICAgICAgY3VycmVudC10YXJnZXQgbm9kZS4gV2Ug
ZW5mb3JjZSBib3RoIHVwcGVyIGFuZCBsb3dlciBib3VuZGFyeQorICAgICAgICBlbmNhcHN1bGF0
aW9uIG9mIFNoYWRvdyBET00gaW4gZXZlbnQgZGlzcGF0Y2hpbmcKKworICAgICAgICBIZXJlIGlz
IGFuIGV4YW1wbGUgb2YgZXZlbnQgZGlzcGF0Y2hpbmcuIFN1cHBvc2Ugd2UgaGF2ZSB0aGUgZm9s
bG93aW5nIERPTSB0cmVlLCB3aGljaAorICAgICAgICBpbmNsdWRlcyBzb21lIG5lc3RlZCBzaGFk
b3cgaG9zdHMgYW5kIGluc2VydGlvbiBwb2ludHMKKyAgICAgICAgQQorICAgICAgICBgLS1CLS0t
LS1bU1ItQl0KKyAgICAgICAgICAgfC1DICAgICBgLS1HLS0tLS0tLS0tLS0tLS1bU1ItR10KKyAg
ICAgICAgICAgfCBgLUQgICAgICB8LTxIIHNlbGVjdD1DPiAgICB8LS1KLS0tLS0tLS0tLS0tLS0t
W1NSLUpdCisgICAgICAgICAgIGAtRSAgICAgICAgYC08SSBzZWxlY3Q9RT4gICAgfCAgYC08SyBz
ZWxlY3Q9SD4gICAgYC08TiBzZWxlY3Q9Sz4KKyAgICAgICAgICAgICBgLUYgICAgICAgICAgICAg
ICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0t
TC0tLS0tLS0tLS0tLS0tLVtTUi1MXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGAtPE0gc2VsZWN0PUk+ICAgIGAtPE8gc2VsZWN0PU0+CisKKyAgICAgICAgICBO
b3RhdGlvbjogW1NSLVhdOiBTaGFkb3cgUm9vdAorICAgICAgICAgICAgICAgICAgICA8WCBzZWxl
Y3Q9WT46IEluc2VydGlvbiBQb2ludCwgY2FsbGVkIFgsIHdoaWNoIHNlbGVjdHMgWS4KKworICAg
ICAgICBJZiBhIG1vdXNlIG1vdmVzIGZyb20gbm9kZSAnI0YnIHRvIG5vZGUgJyNEJywgdGhlIGZv
bGxvd2luZworICAgICAgICAnbW91c2VvdmVyJyBldmVudHMgYXJlIGRpc3BhdGNoZWQgaW4gZWFj
aCBhbmNlc3RvciBub2RlOgorCisgICAgICAgIFtjdXJyZW50VGFyZ2V0XSBbdGFyZ2V0XSBbcmVs
YXRlZC10YXJnZXRdCisgICAgICAgICAgI0QgICAgICAgICAgICAgI0QgICAgICAgI0YKKyAgICAg
ICAgICAjQyAgICAgICAgICAgICAjRCAgICAgICAjRgorICAgICAgICAgICNIICAgICAgICAgICAg
ICNIICAgICAgICNJCisgICAgICAgICAgI0sgICAgICAgICAgICAgI0sgICAgICAgI00KKyAgICAg
ICAgICAjTiAgICAgICAgICAgICAjTiAgICAgICAjTQorICAgICAgICAgICNTUi1KICAgICAgICAg
ICNOICAgICAgICNNCisgICAgICAgICAgI0ogICAgICAgICAgICAgI0sgICAgICAgI00KKyAgICAg
ICAgICAjU1ItRyAgICAgICAgICAjSyAgICAgICAjTQorICAgICAgICAgICNHICAgICAgICAgICAg
ICNIICAgICAgICNJCisgICAgICAgICAgI1NSLUIgICAgICAgICAgI0ggICAgICAgI0kKKyAgICAg
ICAgICAjQiAgICAgICAgICAgICAjRCAgICAgICAjRgorICAgICAgICAgICNBICAgICAgICAgICAg
ICNEICAgICAgICNGCisKKyAgICAgICAgRGV0YWlscyBhcmU6CisgICAgICAgIC0gSW5zZXJ0aW9u
IHBvaW50cywgc3VjaCBhcyA8Y29udGVudD4gb3IgPHNoYWRvdz4sIGFyZSByZXNvbHZlZCBjb3Jy
ZWN0bHkKKyAgICAgICAgaW4gY2FsY3VsYXRpbmcgZXZlbnQgYW5jZXN0b3JzLiBUaGF0IG1lYW5z
IGlmIGEgbm9kZSBpcyBkaXN0cmlidXRlZCB0bworICAgICAgICBhbiBpbnNlcnRpb24gcG9pbnQs
IHRoZSBpbnNlcnRpb24gcG9pbnQgaXMgbm93IGFuIGFuY2VzdG9yIG9mIHRoZSBub2RlIGluCisg
ICAgICAgIGJ1YmJsaW5nIChvciBjYXB0dXJpbmcpIGV2ZW50cy4KKyAgICAgICAgLSBCb3RoIGlu
c2VydGlvbiBwb2ludHMgYW5kIHNoYWRvdyByb290cyBub3cgY2FuIHJlY2VpdmUgZXZlbnRzLiBX
ZSBjYW4gYWRkCisgICAgICAgIGV2ZW50IGxpc3RlbmVycyB0byBpbnNlcnRpb24gcG9pbnRzIGFu
ZCBzaGFkb3cgcm9vdHMuCisgICAgICAgIC0gRGlzcGF0Y2hlZCBldmVudCdzIHRhcmdldCBpcyBu
b3cgYWRqdXN0ZWQgY29ycmVjdGx5IHVzaW5nIHRoZSByZS10YXJnZXRpbmcKKyAgICAgICAgYWxn
b3JpdGhtLiBUaGUgYWxnb3JpdGhtIGlzIG5vdyBmdWxseSBhd2FyZSBvZiBpbnNlcnRpb24gcG9p
bnRzLgorICAgICAgICAtIERpc3BhdGNoZWQgZXZlbnQncyByZWxhdGVkLXRhcmdldCBjYW4gbm93
IGRpZmZlciBpbiBlYWNoIHRyZWUgc2NvcGUgb2YKKyAgICAgICAgZXZlbnQgYW5jZXN0b3JzLiBX
ZSBjaG9vc2UgdGhlIG1vc3QgYXBwcm9wcmlhdGUgcmVsYXRlZC10YXJnZXQgdXNpbmcgdGhlCisg
ICAgICAgIHJlbGF0ZWQgdGFyZ2V0IHJlc29sdXRpb24gYWxnb3JpdGhtIGZvciBlYWNoIG5vZGUu
CisKKyAgICAgICAgUGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbjoKKyAgICAgICAgVGhpcyBwYXRj
aCBjYW4gYWNoaWV2ZSB0aGUgY29tcGV0aXRpdmUgcGVyZm9ybWFuY2UuIFRoZSByZXN1bHRzIG9m
CisgICAgICAgIC4vVG9vbHMvU2NyaXB0cy9ydW4tcGVyZi10ZXN0cyBQZXJmb3JtYW5jZVRlc3Rz
L0RPTS9FdmVudHMuaHRtbCBmb3IKKyAgICAgICAgYmVmb3JlL2FmdGVyIHRoaXMgcGF0Y2ggYXJl
OgorCisgICAgICAgIEJlZm9yZSBhcHBseWluZyB0aGlzIHBhdGNoOgorICAgICAgICAgICAgUnVu
bmluZyBET00vRXZlbnRzLmh0bWwgKDEgb2YgMSkKKyAgICAgICAgICAgIFJFU1VMVCBET006IEV2
ZW50cz0gMjcwLjMxMDcxNDI4NiBtcworICAgICAgICAgICAgbWVkaWFuPSAyNjkuNzUgbXMsIHN0
ZGV2PSAyLjAwNDIzOTc2NjMgbXMsIG1pbj0gMjY3LjM1NzE0Mjg1NyBtcywgbWF4PSAyNzYuNSBt
cworCisgICAgICAgIEFmdGVyIGFwcGx5aW5nIHRoaXMgcGF0Y2g6CisgICAgICAgICAgICBSdW5u
aW5nIERPTS9FdmVudHMuaHRtbCAoMSBvZiAxKQorICAgICAgICAgICAgUkVTVUxUIERPTTogRXZl
bnRzPSAyNjguMTA4MzMzMzMzIG1zCisgICAgICAgICAgICBtZWRpYW49IDI2Ny41IG1zLCBzdGRl
dj0gMi40MTg4MzE1NzE5NSBtcywgbWluPSAyNjMuNjI1IG1zLCBtYXg9IDI3My4xNDI4NTcxNDMg
bXMKKworICAgICAgICBJJ3ZlIGFsc28gY29uZHVjdGVkIGEgbWljcm8gYmVuY2htYXJrIHVzaW5n
IGJvdGgKKyAgICAgICAgU2hhZG93LUZyZWUtRE9NLVRyZWUgYW5kIERPTS1UcmVlLVdpdGgtU2hh
ZG93LUhvc3QuCisgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg1ODYjYzQwIGZvciB0aGUgcmVzdWx0cy4KKyAgICAgICAgSXQgc2VlbXMgdGhhdCB0
aGUgbmV3IGltcGxlbWVudGF0aW9uIGhhcyBtb3JlIGNhcGFiaWxpdGllcywgYnV0CisgICAgICAg
IGRvZXNuJ3Qgc2FjcmlmaWNlIGEgcGVyZm9ybWFuY2Ugb2YgZXZlbnQgZGlzcGF0Y2hpbmcgaW4g
ZWl0aGVyIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9t
LWV2ZW50LWRpc3BhdGNoaW5nLmh0bWwKKworICAgICAgICAqIGRvbS9Db21wb3NlZFNoYWRvd1Ry
ZWVXYWxrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
OjpwYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRy
YXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KToKKyAgICAg
ICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg6CisgICAgICAgIChDb21wb3NlZFNo
YWRvd1RyZWVXYWxrZXIpOgorICAgICAgICAqIGRvbS9FdmVudENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9Nb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0V2ZW50Q29u
dGV4dC5oOgorICAgICAgICAoRXZlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
Q29udGV4dDo6cmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldCk6CisgICAgICAgICogZG9tL0V2
ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJlbGF0ZWRUYXJnZXRB
ZGp1c3Rlcjo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6YWRqdXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRl
ZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0
ZWRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVu
dEFuY2VzdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNw
YXRjaEJlaGF2aW9yKToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKToKKyAgICAg
ICAgKEV2ZW50RGlzcGF0Y2hlcik6CisgICAgICAgICogZG9tL01vdXNlRXZlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TW91c2VFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQp
OgorCiAyMDEyLTA1LTE1ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgQ3Jhc2ggaW4gRG9jdW1lbnQ6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwCmluZGV4
IDIzNTY4M2ZlZGY4Y2M2OWU1OTg5ZjQxYzYzNzFlOTk4MDg3YWZkMjQuLjQxODVmM2ViZmMyOWQw
MGFiMzEyY2QyZjBjYmM0ZjM2NjExZTE1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwCkBAIC0xOTYsNiArMTk2LDI5IEBAIHZvaWQgQ29t
cG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjpwYXJlbnQoKQogICAgIGFzc2VydFBvc3Rjb25kaXRpb24o
KTsKIH0KIAordm9pZCBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnBhcmVudEluY2x1ZGluZ0lu
c2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpCit7CisgICAgQVNTRVJUKG1fbm9kZSk7CisgICAg
bV9ub2RlID0gdHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jv
b3QobV9ub2RlKTsKK30KKworTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJz
ZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdChjb25zdCBOb2RlKiBu
b2RlKSBjb25zdAoreworICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBzaGFkb3dPZlBh
cmVudChub2RlKSkgeworICAgICAgICBpZiAoSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50
ID0gc2hhZG93LT5pbnNlcnRpb25Qb2ludEZvcihub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBp
bnNlcnRpb25Qb2ludDsKKyAgICB9CisgICAgaWYgKG5vZGUtPmlzU2hhZG93Um9vdCgpKSB7Cisg
ICAgICAgIGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0b1NoYWRvd1Jvb3Qobm9kZSk7
CisgICAgICAgIGlmIChzaGFkb3dSb290LT5pc1lvdW5nZXN0KCkpCisgICAgICAgICAgICByZXR1
cm4gc2hhZG93Um9vdC0+aG9zdCgpOworICAgICAgICBJbnNlcnRpb25Qb2ludCogYXNzaWduZWRJ
bnNlcnRpb25Qb2ludCA9IHNoYWRvd1Jvb3QtPmFzc2lnbmVkVG8oKTsKKyAgICAgICAgQVNTRVJU
KGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQpOworICAgICAgICByZXR1cm4gYXNzaWduZWRJbnNlcnRp
b25Qb2ludDsKKyAgICB9CisgICAgcmV0dXJuIG5vZGUtPnBhcmVudE5vZGUoKTsKK30KKwogTm9k
ZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudChjb25zdCBOb2RlKiBu
b2RlKSBjb25zdAogewogICAgIGlmICghY2FuQ3Jvc3NVcHBlckJvdW5kYXJ5KCkgJiYgbm9kZS0+
aXNTaGFkb3dSb290KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1Ry
ZWVXYWxrZXIuaAppbmRleCA5NzY2YzFhMzY1MDE5MDA4OGI5NGRhMmE0NDBjMjA2MjZkMGQ0YTky
Li4xYTlkMmE5M2M2MzY2MzNhOWUzZjI0MjAxYjUwYzRlMDkzYWY3Yjk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oCkBAIC01OCw2ICs1OCw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHByZXZpb3VzU2libGluZygpOwogCiAgICAgdm9pZCBwYXJlbnQo
KTsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlnbm9yZXMgcG9saWN5IGFuZCBhbHdheXMgY3Jvc3Nl
cyBhbiB1cHBlciBib3VuZGFyeS4KKyAgICB2b2lkIHBhcmVudEluY2x1ZGluZ0luc2VydGlvblBv
aW50QW5kU2hhZG93Um9vdCgpOwogCiAgICAgdm9pZCBuZXh0KCk7CiAgICAgdm9pZCBwcmV2aW91
cygpOwpAQCAtOTksNiArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBOb2RlKiB0cmF2ZXJzZUxhc3RD
aGlsZChjb25zdCBOb2RlKikgY29uc3Q7CiAgICAgTm9kZSogdHJhdmVyc2VDaGlsZChjb25zdCBO
b2RlKiwgVHJhdmVyc2FsRGlyZWN0aW9uKSBjb25zdDsKICAgICBOb2RlKiB0cmF2ZXJzZVBhcmVu
dChjb25zdCBOb2RlKikgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJ
bnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoY29uc3QgTm9kZSopIGNvbnN0OwogCiAgICAgc3Rh
dGljIE5vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZSopOwogICAgIHN0YXRpYyBO
b2RlKiB0cmF2ZXJzZVByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudENvbnRleHQuY3BwCmluZGV4IDJhNWM1MjEwYWFlZjZiOTQxYmJkZTVkZTI5NWNiYTMzOWQx
NDJkZjUuLmExYjUxYzBlOWZmYTRlNTA5OWE3Yzk4ZGE1MDlhODI3ZjM0MmUyZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudENvbnRleHQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgorI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDEzICszOSwyMiBAQCBFdmVudENvbnRleHQ6OkV2ZW50Q29udGV4dChQYXNz
UmVmUHRyPE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGN1cnJlbgogICAgIDog
bV9ub2RlKG5vZGUpCiAgICAgLCBtX2N1cnJlbnRUYXJnZXQoY3VycmVudFRhcmdldCkKICAgICAs
IG1fdGFyZ2V0KHRhcmdldCkKKyAgICAsIG1fcmVsYXRlZFRhcmdldCgwKQogewogfQogCitzdGF0
aWMgTW91c2VFdmVudCogdG9Nb3VzZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQo
ZXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2ZW50KTsKK30KKwogdm9pZCBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2Fs
RXZlbnRzKEV2ZW50KiBldmVudCkgY29uc3QKIHsKICAgICBldmVudC0+c2V0VGFyZ2V0KG1fdGFy
Z2V0LmdldCgpKTsKICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChtX2N1cnJlbnRUYXJnZXQu
Z2V0KCkpOworICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkgJiYgZXZlbnQtPmlzTW91c2VF
dmVudCgpKQorICAgICAgICB0b01vdXNlRXZlbnQoZXZlbnQpLT5zZXRSZWxhdGVkVGFyZ2V0KG1f
cmVsYXRlZFRhcmdldC5nZXQoKSk7CiAgICAgbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVu
dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAppbmRleCA1ZTczMTdmNDVjZjU0ODU2
YTMyNDlkODdkZDI3YTA4MTY2MmQ2NzQ4Li42MzI1ODEwMDkwYzA0Mjk3MjY5Y2U1MmU3MGUyZGQx
MGFkZDE0NDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCkBAIC00MiwxMyArNDIsMTYg
QEAgcHVibGljOgogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogICAgIEV2ZW50VGFyZ2V0KiB0
YXJnZXQoKSBjb25zdDsKKyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCgpIGNvbnN0Owog
ICAgIGJvb2wgY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpIGNvbnN0OwogICAgIHZvaWQgaGFu
ZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBjb25zdDsKKyAgICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQo
UGFzc1JlZlB0cjxFdmVudFRhcmdldD4pOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBt
X25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX2N1cnJlbnRUYXJnZXQ7CiAgICAgUmVm
UHRyPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsKKyAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fcmVs
YXRlZFRhcmdldDsKIH07CiAKIGlubGluZSBOb2RlKiBFdmVudENvbnRleHQ6Om5vZGUoKSBjb25z
dApAQCAtNjYsNiArNjksMTYgQEAgaW5saW5lIGJvb2wgRXZlbnRDb250ZXh0OjpjdXJyZW50VGFy
Z2V0U2FtZUFzVGFyZ2V0KCkgY29uc3QKICAgICByZXR1cm4gbV9jdXJyZW50VGFyZ2V0LmdldCgp
ID09IG1fdGFyZ2V0LmdldCgpOwogfQogCitpbmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50Q29udGV4
dDo6cmVsYXRlZFRhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5n
ZXQoKTsKK30KKworaW5saW5lIHZvaWQgRXZlbnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpCit7CisgICAgbV9yZWxhdGVkVGFy
Z2V0ID0gcmVsYXRlZFRhcmdldDsKK30KKwogfQogCiAjZW5kaWYgLy8gRXZlbnRDb250ZXh0X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggMTY4OWUwNmI4Y2E0YmYw
YWI1ODNjOGYzOTFiZjk5ODkwYTk3NWJkYy4uNDk4MzVmZmNjMjc2MGVhNWMyODAzZjk5YzM1ZmIy
MDFiMDY3YmYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTI2
LDEwICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0
Y2hlci5oIgogCisjaW5jbHVkZSAiQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgiCisjaW5jbHVk
ZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUg
IkV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQu
aCIKICNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCkBAIC00Nyw2ICs1MCw2MyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hp
bmdTaW11bGF0ZWRDbGlja3MgPSAwOwogCitFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6RXZl
bnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRy
PE5vZGU+IHJlbGF0ZWRUYXJnZXQpCisgICAgOiBtX25vZGUobm9kZSkKKyAgICAsIG1fcmVsYXRl
ZFRhcmdldChyZWxhdGVkVGFyZ2V0KQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBBU1NFUlQo
cmVsYXRlZFRhcmdldCk7Cit9CisKK3ZvaWQgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmFk
anVzdChWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQoreworICAgIFRyZWVTY29wZSog
bGFzdFRyZWVTY29wZSA9IDA7CisgICAgZm9yIChDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIgd2Fs
a2VyKG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7IHdhbGtlci5nZXQoKTsgd2Fsa2VyLnBhcmVudElu
Y2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpKSB7CisgICAgICAgIFRyZWVTY29w
ZSogc2NvcGUgPSB3YWxrZXIuZ2V0KCktPnRyZWVTY29wZSgpOworICAgICAgICAvLyBTa2lwcyBh
ZGRpbmcgYSBub2RlIHRvIHRoZSBtYXAgaWYgdHJlZVNjb3BlIGRvZXMgbm90IGNoYW5nZS4KKyAg
ICAgICAgaWYgKHNjb3BlICE9IGxhc3RUcmVlU2NvcGUpCisgICAgICAgICAgICBtX3JlbGF0ZWRU
YXJnZXRNYXAuYWRkKHNjb3BlLCB3YWxrZXIuZ2V0KCkpOworICAgICAgICBsYXN0VHJlZVNjb3Bl
ID0gc2NvcGU7CisgICAgfQorCisgICAgbGFzdFRyZWVTY29wZSA9IDA7CisgICAgRXZlbnRUYXJn
ZXQqIGFkanVzdGVkUmVsYXRlZFRhcmdldCA9IDA7CisgICAgZm9yIChWZWN0b3I8RXZlbnRDb250
ZXh0Pjo6aXRlcmF0b3IgaXRlciA9IGFuY2VzdG9ycy5iZWdpbigpOyBpdGVyIDwgYW5jZXN0b3Jz
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IGl0ZXItPm5vZGUo
KS0+dHJlZVNjb3BlKCk7CisgICAgICAgIGlmIChzY29wZSA9PSBsYXN0VHJlZVNjb3BlKSB7Cisg
ICAgICAgICAgICAvLyBSZS11c2UgdGhlIHByZXZpb3VzIGFkanVzdGVkUmVsYXRlZFRhcmdldCBp
ZiB0cmVlU2NvcGUgZG9lcyBub3QgY2hhbmdlLgorICAgICAgICAgICAgaXRlci0+c2V0UmVsYXRl
ZFRhcmdldChhZGp1c3RlZFJlbGF0ZWRUYXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0ID0gZmluZFJlbGF0ZWRUYXJnZXQoc2NvcGUpOwor
ICAgICAgICAgICAgaXRlci0+c2V0UmVsYXRlZFRhcmdldChhZGp1c3RlZFJlbGF0ZWRUYXJnZXQp
OworICAgICAgICB9CisgICAgICAgIGxhc3RUcmVlU2NvcGUgPSBzY29wZTsKKyAgICAgICAgaWYg
KGl0ZXItPnRhcmdldCgpID09IGFkanVzdGVkUmVsYXRlZFRhcmdldCkgeworICAgICAgICAgICAg
Ly8gRXZlbnQgZGlzcGF0Y2hpbmcgc2hvdWxkIGJlIHN0b3BwZWQgaGVyZS4KKyAgICAgICAgICAg
IGFuY2VzdG9ycy5zaHJpbmsoaXRlciAtIGFuY2VzdG9ycy5iZWdpbigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitFdmVudFRhcmdldCogRXZlbnRSZWxhdGVk
VGFyZ2V0QWRqdXN0ZXI6OmZpbmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSogc2NvcGUpCit7Cisg
ICAgVmVjdG9yPFRyZWVTY29wZSo+IHBhcmVudFRyZWVTY29wZXM7CisgICAgRXZlbnRUYXJnZXQq
IHJlbGF0ZWRUYXJnZXQgPSAwOworICAgIHdoaWxlIChzY29wZSkgeworICAgICAgICBwYXJlbnRU
cmVlU2NvcGVzLmFwcGVuZChzY29wZSk7CisgICAgICAgIFJlbGF0ZWRUYXJnZXRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGZvdW5kID0gbV9yZWxhdGVkVGFyZ2V0TWFwLmZpbmQoc2NvcGUpOworICAgICAg
ICBpZiAoZm91bmQgIT0gbV9yZWxhdGVkVGFyZ2V0TWFwLmVuZCgpKSB7CisgICAgICAgICAgICBy
ZWxhdGVkVGFyZ2V0ID0gZm91bmQtPnNlY29uZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHNjb3BlID0gc2NvcGUtPnBhcmVudFRyZWVTY29wZSgpOworICAgIH0KKyAg
ICBmb3IgKFZlY3RvcjxUcmVlU2NvcGUqPjo6aXRlcmF0b3IgaXRlciA9IHBhcmVudFRyZWVTY29w
ZXMuYmVnaW4oKTsgaXRlciA8IHBhcmVudFRyZWVTY29wZXMuZW5kKCk7ICsraXRlcikKKyAgICAg
IG1fcmVsYXRlZFRhcmdldE1hcC5hZGQoKml0ZXIsIHJlbGF0ZWRUYXJnZXQpOworICAgIHJldHVy
biByZWxhdGVkVGFyZ2V0OworfQorCiBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gbWVkaWF0b3Ip
CiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwpAQCAtMTE2LDEwNCAr
MTc2LDE4IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5v
ZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVyCiAgICAgZ05vZGVzRGlzcGF0Y2hpbmdT
aW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gRXZlbnREaXNwYXRjaGVyOjphZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxO
b2RlPiByZWxhdGVkVGFyZ2V0LCBjb25zdCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNl
c3RvcnMpCi17Ci0gICAgVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2Vz
dENvbW1vbkJvdW5kYXJ5ID0gbV9hbmNlc3RvcnMuZW5kKCk7Ci0gICAgLy8gQXNzdW1lIGRpdmVy
Z2VudCBib3VuZGFyeSBpcyB0aGUgcmVsYXRlZFRhcmdldCBpdHNlbGYgKGluIG90aGVyIHdvcmRz
LCByZWxhdGVkIHRhcmdldCBhbmNlc3RvciBjaGFpbiBkb2VzIG5vdCBjcm9zcyBhbnkgc2hhZG93
IERPTSBib3VuZGFyaWVzKS4KLSAgICBWZWN0b3I8Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBmaXJz
dERpdmVyZ2VudEJvdW5kYXJ5ID0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpOwotCi0g
ICAgVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIHRhcmdldEFuY2VzdG9yID0g
bV9hbmNlc3RvcnMuZW5kKCk7Ci0gICAgLy8gV2FsayBkb3duIGZyb20gdGhlIHRvcCwgbG9va2lu
ZyBmb3IgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciwgYWxzbyBtb25pdG9yaW5nIHNoYWRvdyBET00g
Ym91bmRhcmllcy4KLSAgICBib29sIGRpdmVyZ2VkID0gZmFsc2U7Ci0gICAgZm9yIChWZWN0b3I8
Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpID0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5lbmQoKSAt
IDE7IGkgPj0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpOyAtLWkpIHsKLSAgICAgICAg
aWYgKGRpdmVyZ2VkKSB7Ci0gICAgICAgICAgICBpZiAoKCppKS0+aXNTaGFkb3dSb290KCkpIHsK
LSAgICAgICAgICAgICAgICBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5ID0gaSArIDE7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh0YXJnZXRBbmNlc3RvciA9PSBtX2FuY2VzdG9ycy5iZWdp
bigpKSB7Ci0gICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRhcmdldEFuY2VzdG9yLS07CiAKLSAgICAgICAgaWYg
KCgqaSktPmlzU2hhZG93Um9vdCgpKQotICAgICAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRhcnkg
PSB0YXJnZXRBbmNlc3RvcjsKLQotICAgICAgICBpZiAoKCppKSAhPSAoKnRhcmdldEFuY2VzdG9y
KS5ub2RlKCkpCi0gICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYg
KCFkaXZlcmdlZCkgewotICAgICAgICAvLyBUaGUgcmVsYXRlZFRhcmdldCBpcyBhbiBhbmNlc3Rv
ciBvciBzaGFkb3dIb3N0IG9mIHRoZSB0YXJnZXQuCi0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhlIGZpcnN0IGNoZWNrIG9uY2UgY29udmVyc2lvbiB0byBuZXcgc2hhZG93IERPTSBpcyBjb21w
bGV0ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi80ODY5OD4KLSAgICAgICAgaWYgKG1fbm9kZS0+c2hh
ZG93SG9zdCgpID09IHJlbGF0ZWRUYXJnZXQuZ2V0KCkgfHwgaXNTaGFkb3dIb3N0KHJlbGF0ZWRU
YXJnZXQuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3Rf
aXRlcmF0b3IgcmVsYXRlZFRhcmdldENoaWxkID0gdGFyZ2V0QW5jZXN0b3IgLSAxOwotICAgICAg
ICAgICAgaWYgKHJlbGF0ZWRUYXJnZXRDaGlsZCA+PSBtX2FuY2VzdG9ycy5iZWdpbigpICYmIHJl
bGF0ZWRUYXJnZXRDaGlsZC0+bm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgICAg
ICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IHJlbGF0ZWRUYXJnZXRDaGlsZDsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoKCpmaXJzdERpdmVyZ2VudEJvdW5kYXJ5KSA9PSBtX25vZGUuZ2V0KCkp
IHsKLSAgICAgICAgLy8gU2luY2UgYW5jZXN0b3JzIGRvZXMgbm90IGNvbnRhaW4gdGFyZ2V0IGl0
c2VsZiwgd2UgbXVzdCBhY2NvdW50Ci0gICAgICAgIC8vIGZvciB0aGUgcG9zc2liaWxpdHkgdGhh
dCB0YXJnZXQgaXMgYSBzaGFkb3dIb3N0IG9mIHJlbGF0ZWRUYXJnZXQKLSAgICAgICAgLy8gYW5k
IHRodXMgc2VydmVzIGFzIHRoZSBsb3dlc3RDb21tb25Cb3VuZGFyeS4KLSAgICAgICAgLy8gTHVj
a2lseSwgaW4gdGhpcyBjYXNlIHRoZSBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5IGlzIHRhcmdldC4K
LSAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSBtX2FuY2VzdG9ycy5iZWdpbigpOwotICAg
ICAgICBtX3Nob3VsZFByZXZlbnREaXNwYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGxv
d2VzdENvbW1vbkJvdW5kYXJ5ICE9IG1fYW5jZXN0b3JzLmVuZCgpKSB7Ci0gICAgICAgIC8vIFRy
aW0gYW5jZXN0b3JzIHRvIGxvd2VzdENvbW1vbkJvdW5kYXJ5IHRvIGtlZXAgZXZlbnRzIGluc2lk
ZSBvZiB0aGUgY29tbW9uIHNoYWRvdyBET00gc3VidHJlZS4KLSAgICAgICAgbV9hbmNlc3RvcnMu
c2hyaW5rKGxvd2VzdENvbW1vbkJvdW5kYXJ5IC0gbV9hbmNlc3RvcnMuYmVnaW4oKSk7Ci0gICAg
fQotICAgIC8vIFNldCBldmVudCdzIHJlbGF0ZWQgdGFyZ2V0IHRvIHRoZSBmaXJzdCBlbmNvdW50
ZXJlZCBzaGFkb3cgRE9NIGJvdW5kYXJ5IGluIHRoZSBkaXZlcmdlbnQgc3VidHJlZS4KLSAgICBy
ZXR1cm4gZmlyc3REaXZlcmdlbnRCb3VuZGFyeSAhPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJl
Z2luKCkgPyAqZmlyc3REaXZlcmdlbnRCb3VuZGFyeSA6IHJlbGF0ZWRUYXJnZXQ7Ci19Ci0KLWlu
bGluZSBzdGF0aWMgYm9vbCBhbmNlc3RvcnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMoY29uc3QgVmVj
dG9yPEV2ZW50Q29udGV4dD4mIGFuY2VzdG9ycykKLXsKLSAgICByZXR1cm4gYW5jZXN0b3JzLmlz
RW1wdHkoKSB8fCBhbmNlc3RvcnMuZmlyc3QoKS5ub2RlKCkgPT0gYW5jZXN0b3JzLmxhc3QoKS5u
b2RlKCk7Ci19Ci0KLS8vIEZJWE1FOiBPbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01Mjk2MyBsYW5kcywgdGhpcyBzaG91bGQKLS8vIGJlIGdyZWF0bHkgaW1wcm92
ZWQuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwMjUuCi1Q
YXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJn
ZXQoRXZlbnQqIGV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0
KQordm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50
LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQogewogICAgIGlmICgh
cHJwUmVsYXRlZFRhcmdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KKyAgICAgICAgcmV0dXJuOwog
ICAgIFJlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcHJwUmVsYXRlZFRhcmdldC0+dG9Ob2Rl
KCk7CiAgICAgaWYgKCFyZWxhdGVkVGFyZ2V0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE5v
ZGUqIHRhcmdldCA9IG1fbm9kZS5nZXQoKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0
dXJuIHBycFJlbGF0ZWRUYXJnZXQ7Ci0KKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9ub2Rl
LmdldCgpKQorICAgICAgICByZXR1cm47CiAgICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQp
OwotCi0gICAgLy8gQ2FsY3VsYXRlIGVhcmx5IGlmIHRoZSBjb21tb24gYm91bmRhcnkgaXMgZXZl
biBwb3NzaWJsZSBieSBsb29raW5nIGF0Ci0gICAgLy8gYW5jZXN0b3JzIHNpemUgYW5kIGlmIHRo
ZSByZXRhcmdldGluZyBoYXMgb2NjdXJlZCAoaW5kaWNhdGluZyB0aGUgcHJlc2VuY2Ugb2Ygc2hh
ZG93IERPTSBib3VuZGFyaWVzKS4KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gYm91bmRhcmllcyBk
ZXRlY3RlZCwgdGhlIHRhcmdldCBhbmQgcmVsYXRlZCB0YXJnZXQgY2FuJ3QgaGF2ZSBhIGNvbW1v
biBib3VuZGFyeS4KLSAgICBib29sIG5vQ29tbW9uQm91bmRhcnkgPSBhbmNlc3RvcnNDcm9zc1No
YWRvd0JvdW5kYXJpZXMobV9hbmNlc3RvcnMpOwotCi0gICAgVmVjdG9yPE5vZGUqPiByZWxhdGVk
VGFyZ2V0QW5jZXN0b3JzOwotICAgIE5vZGUqIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gcmVs
YXRlZFRhcmdldC5nZXQoKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBvdXRlcm1vc3RTaGFkb3dCb3Vu
ZGFyeTsgbjsgbiA9IG4tPnBhcmVudE9ySG9zdE5vZGUoKSkgewotICAgICAgICBpZiAobi0+aXNT
aGFkb3dSb290KCkpCi0gICAgICAgICAgICBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IG4tPnBh
cmVudE9ySG9zdE5vZGUoKTsKLSAgICAgICAgaWYgKCFub0NvbW1vbkJvdW5kYXJ5KQotICAgICAg
ICAgICAgcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5hcHBlbmQobik7Ci0gICAgfQotCi0gICAgLy8g
U2hvcnQtY2lyY3VpdCB0aGUgZmFzdCBjYXNlIHdoZW4gd2Uga25vdyB0aGVyZSBpcyBubyBuZWVk
IHRvIGNhbGN1bGF0ZSBhIGNvbW1vbiBib3VuZGFyeS4KLSAgICBpZiAobm9Db21tb25Cb3VuZGFy
eSkKLSAgICAgICAgcmV0dXJuIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OwotCi0gICAgcmV0dXJu
IGFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhyZWxhdGVkVGFyZ2V0LnJlbGVhc2UoKSwgcmVsYXRl
ZFRhcmdldEFuY2VzdG9ycyk7CisgICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIobV9ub2Rl
LCByZWxhdGVkVGFyZ2V0LnJlbGVhc2UoKSkuYWRqdXN0KG1fYW5jZXN0b3JzKTsKIH0KIAogRXZl
bnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKQEAgLTIyNywzMCArMjAx
LDM5IEBAIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCiAKIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCogZXZlbnQpCiB7
Ci0gICAgaWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
aWYgKG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAorICAgIENvbXBv
c2VkU2hhZG93VHJlZVdhbGtlciBhbmNlc3RvcldhbGtlcihtX25vZGUuZ2V0KCkpOworICAgIEV2
ZW50VGFyZ2V0KiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1Rhcmdl
dFJ1bGVzKGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICBtX2FuY2VzdG9ycy5hcHBlbmQoRXZl
bnRDb250ZXh0KG1fbm9kZS5nZXQoKSwgb3JpZ2luYWxUYXJnZXQsIG9yaWdpbmFsVGFyZ2V0KSk7
CiAgICAgbV9hbmNlc3RvcnNJbml0aWFsaXplZCA9IHRydWU7CiAKLSAgICBOb2RlKiBhbmNlc3Rv
ciA9IG1fbm9kZS5nZXQoKTsKLSAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnRUYXJnZXRS
ZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3IpOworICAgIGlmICghbV9ub2RlLT5pbkRv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxFdmVudFRhcmdldCo+IHRh
cmdldFN0YWNrOworICAgIHRhcmdldFN0YWNrLmFwcGVuZChvcmlnaW5hbFRhcmdldCk7CiAgICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1NoYWRvd1Jvb3QoKSkgewot
ICAgICAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQsIGFuY2VzdG9y
KSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQorICAgICAgICBpZiAoYW5jZXN0b3JXYWxrZXIuZ2V0
KCktPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hC
ZWhhdmlvcihldmVudCwgYW5jZXN0b3JXYWxrZXIuZ2V0KCkpID09IFN0YXlJbnNpZGVTaGFkb3dE
T00pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNl
c3Rvci0+c2hhZG93SG9zdCgpOwotICAgICAgICAgICAgaWYgKCFtX25vZGUtPmlzU1ZHRWxlbWVu
dCgpKQotICAgICAgICAgICAgICAgIHRhcmdldCA9IGFuY2VzdG9yOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9z
dEZyZWUoKTsKLQotICAgICAgICBpZiAoIWFuY2VzdG9yKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIG1fYW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQoYW5jZXN0b3IsIGV2ZW50
VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKSwgdGFyZ2V0KSk7CisgICAg
ICAgICAgICBhbmNlc3RvcldhbGtlci5wYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNo
YWRvd1Jvb3QoKTsKKyAgICAgICAgICAgIGlmICghYW5jZXN0b3JXYWxrZXIuZ2V0KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFtX25vZGUtPmlzU1ZHRWxlbWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgICAgIGlmICh0YXJnZXRTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAg
IHRhcmdldFN0YWNrLmFwcGVuZChhbmNlc3RvcldhbGtlci5nZXQoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbmNlc3RvcldhbGtlci5wYXJlbnRJbmNs
dWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QoKTsKKyAgICAgICAgICAgIGlmICghYW5j
ZXN0b3JXYWxrZXIuZ2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
aWYgKGlzSW5zZXJ0aW9uUG9pbnQoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpICYmIHRvSW5zZXJ0aW9u
UG9pbnQoYW5jZXN0b3JXYWxrZXIuZ2V0KCkpLT5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAg
IHRhcmdldFN0YWNrLmFwcGVuZChhbmNlc3RvcldhbGtlci5nZXQoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgbV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4dChhbmNlc3RvcldhbGtlci5nZXQo
KSwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3JXYWxrZXIuZ2V0
KCkpLCB0YXJnZXRTdGFjay5sYXN0KCkpKTsKICAgICB9CiB9CiAKQEAgLTI3MSw3ICsyNTQsNyBA
QCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKIAogICAgIC8vIEdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNvbWUg
d29yayBiZWZvcmUgRE9NIGV2ZW50IGhhbmRsZXJzIGdldCBhIGNyYWNrLgogICAgIHZvaWQqIGRh
dGEgPSBtX25vZGUtPnByZURpc3BhdGNoRXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKLSAgICBp
ZiAobV9zaG91bGRQcmV2ZW50RGlzcGF0Y2ggfHwgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgp
KQorICAgIGlmIChtX2FuY2VzdG9ycy5pc0VtcHR5KCkgfHwgbV9zaG91bGRQcmV2ZW50RGlzcGF0
Y2ggfHwgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICBnb3RvIGRvbmVEaXNw
YXRjaGluZzsKIAogICAgIC8vIFRyaWdnZXIgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzLCBzdGFy
dGluZyBhdCB0aGUgdG9wIGFuZCB3b3JraW5nIG91ciB3YXkgZG93bi4KQEAgLTI4MCw4ICsyNjMs
OCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKICAgICBpZiAod2luZG93Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5n
ZXQoKSkgJiYgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICBnb3RvIGRvbmVE
aXNwYXRjaGluZzsKIAotICAgIGZvciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9ycy5zaXplKCk7IGk7
IC0taSkgewotICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1fYW5j
ZXN0b3JzW2ktMV07CisgICAgZm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3JzLnNpemUoKSAtIDE7
IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRleHQg
PSBtX2FuY2VzdG9yc1tpXTsKICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50VGFyZ2V0
U2FtZUFzVGFyZ2V0KCkpIHsKICAgICAgICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjk2LDcgKzI3OSw3IEBAIGJvb2wgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIGV2ZW50
LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogICAgIGV2ZW50LT5zZXRUYXJnZXQo
b3JpZ2luYWxUYXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50
VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwotICAgIG1fbm9k
ZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOworICAgIG1fYW5jZXN0b3JzWzBdLmhh
bmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9u
U3RvcHBlZCgpKQogICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKIApAQCAtMzA1LDcgKzI4
OCw3IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQogICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdf
UEhBU0UpOwogCiAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3RvcnMuc2l6ZSgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgY29uc3QgRXZlbnRDb250
ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKICAgICAgICAgICAgIGlmIChldmVu
dENvbnRleHQuY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpKQogICAgICAgICAgICAgICAgIGV2
ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwpAQCAtMzM5LDcgKzMyMiw3IEBA
IGRvbmVEaXNwYXRjaGluZzoKICAgICAgICAgLy8gc2FtZSBvcmRlciBhcyB0aGUgYnViYmxpbmcg
cGhhc2UuCiAgICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKSB7CiAgICAgICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8
IHNpemU7ICsraSkgewogICAgICAgICAgICAgICAgIG1fYW5jZXN0b3JzW2ldLm5vZGUoKS0+ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFl
dmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRl
ZmF1bHRIYW5kbGVkKCkpCkBAIC0zNzksMTEgKzM2Miw2IEBAIEV2ZW50RGlzcGF0Y2hCZWhhdmlv
ciBFdmVudERpc3BhdGNoZXI6OmRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50
LCBOCiAgICAgVU5VU0VEX1BBUkFNKHNoYWRvd1Jvb3QpOwogI2VuZGlmCiAKLSAgICAvLyBQZXIg
WEJMIDIuMCBzcGVjLCBtdXRhdGlvbiBldmVudHMgc2hvdWxkIG5ldmVyIGNyb3NzIHNoYWRvdyBE
T00gYm91bmRhcnk6Ci0gICAgLy8gaHR0cDovL2Rldi53My5vcmcvMjAwNi94YmwyLyNldmVudC1m
bG93LWFuZC10YXJnZXRpbmctYWNyb3NzLXNoYWRvdy1zCi0gICAgaWYgKGV2ZW50LT5oYXNJbnRl
cmZhY2UoZXZlbnROYW1lcygpLmludGVyZmFjZUZvck11dGF0aW9uRXZlbnQpKQotICAgICAgICBy
ZXR1cm4gU3RheUluc2lkZVNoYWRvd0RPTTsKLQogICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2Vk
IHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3NzIHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4K
ICAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFrcyBleGlzdGluZyBzaXRlcy4KICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDg1YWVmYzQ5MzA0M2Q1MTdl
Yzk3NzM0ZTYyMThhYWQ4MWQxNzkwNjcuLjZmODkxYzEzNDI3YzY2YWNmZThhM2E3ZGNmMTNhMzFm
YWQ1NmIwYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTI3LDYgKzI3
LDcgQEAKICNkZWZpbmUgRXZlbnREaXNwYXRjaGVyX2gKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDEyICs0MSwyNiBAQCBjbGFzcyBOb2RlOwogY2xh
c3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OwogY2xh
c3MgUGxhdGZvcm1XaGVlbEV2ZW50OworY2xhc3MgVHJlZVNjb3BlOwogCiBlbnVtIEV2ZW50RGlz
cGF0Y2hCZWhhdmlvciB7CiAgICAgUmV0YXJnZXRFdmVudCwKICAgICBTdGF5SW5zaWRlU2hhZG93
RE9NCiB9OwogCitjbGFzcyBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlciB7CitwdWJsaWM6Cisg
ICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0
cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKKyAgICB2b2lkIGFkanVzdChWZWN0b3I8RXZlbnRDb250
ZXh0PiYpOworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8VHJlZVNjb3BlKiwgRXZlbnRU
YXJnZXQqPiBSZWxhdGVkVGFyZ2V0TWFwOworICAgIEV2ZW50VGFyZ2V0KiBmaW5kUmVsYXRlZFRh
cmdldChUcmVlU2NvcGUqKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRy
PE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKKyAgICBSZWxhdGVkVGFyZ2V0TWFwIG1fcmVsYXRlZFRh
cmdldE1hcDsKK307CisKIGNsYXNzIEV2ZW50RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgZGlzcGF0Y2hFdmVudChOb2RlKiwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVk
aWF0b3I+KTsKQEAgLTU0LDEzICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGlz
cGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2
ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spOwogCiAgICAg
Ym9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBQYXNzUmVmUHRyPEV2
ZW50VGFyZ2V0PiBhZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRh
cmdldD4pOworICAgIHZvaWQgYWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCosIFBhc3NSZWZQdHI8
RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpOwogICAgIE5vZGUqIG5vZGUoKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9kZSopOwogCi0gICAgUGFzc1JlZlB0
cjxFdmVudFRhcmdldD4gYWRqdXN0VG9TaGFkb3dCb3VuZGFyaWVzKFBhc3NSZWZQdHI8Tm9kZT4g
cmVsYXRlZFRhcmdldCwgY29uc3QgVmVjdG9yPE5vZGUqPiByZWxhdGVkVGFyZ2V0QW5jZXN0b3Jz
KTsKICAgICBFdmVudERpc3BhdGNoQmVoYXZpb3IgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihF
dmVudCosIE5vZGUqIHNoYWRvd1Jvb3QpOwogICAgIHZvaWQgZW5zdXJlRXZlbnRBbmNlc3RvcnMo
RXZlbnQqKTsKICAgICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4dCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL01vdXNlRXZlbnQuY3BwCmluZGV4IGMzNjg5YzZkZDQ2M2FlZTA1NjI4ODE3MmUyNTRk
YzNlY2ZiMjVkMGIuLmNmMmUyNjYwYTY1ZTM2MTFmNGI0N2VjZjhlY2U3YWYyNzM3ZWY1MDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKQEAgLTIwMSw4ICsyMDEsOCBAQCBib29sIE1vdXNl
RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlz
cGF0Y2hlcikgY29ucwogICAgIGlmIChldmVudCgpLT50eXBlKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIFNob3VsZG4ndCBoYXBwZW4uCiAKLSAgICBSZWZQdHI8RXZlbnRU
YXJnZXQ+IHJlbGF0ZWRUYXJnZXQgPSBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2
ZW50KCksIGV2ZW50KCktPnJlbGF0ZWRUYXJnZXQoKSk7Ci0gICAgZXZlbnQoKS0+c2V0UmVsYXRl
ZFRhcmdldChyZWxhdGVkVGFyZ2V0KTsKKyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9
IGV2ZW50KCktPnJlbGF0ZWRUYXJnZXQoKTsKKyAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVk
VGFyZ2V0KGV2ZW50KCksIHJlbGF0ZWRUYXJnZXQpOwogCiAgICAgZGlzcGF0Y2hlci0+ZGlzcGF0
Y2hFdmVudChldmVudCgpKTsKICAgICBib29sIHN3YWxsb3dFdmVudCA9IGV2ZW50KCktPmRlZmF1
bHRIYW5kbGVkKCkgfHwgZXZlbnQoKS0+ZGVmYXVsdFByZXZlbnRlZCgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDA4Zjkx
YzlmMTdkZGRhZDg5MTkwZDllMjNjNjk1ZWVkZTIyZTMwNmQuLjVhN2JkNTRlYmZhOTBiZDhkNGU4
NTVhYTI4ODQxZDNmYjRlMTAwOTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNS0xNSAg
SGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IGEg
U2hhZG93IERPTSBzcGVjJ3Mgc2VjdGlvbiA2ICdFdmVudHMnLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9t
LWV2ZW50LWRpc3BhdGNoaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmcuaHRtbDogQWRkZWQuCisKIDIw
MTItMDUtMTUgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBDcmFzaCBpbiBEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNo
aW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9t
LWV2ZW50LWRpc3BhdGNoaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjExNjc4YTE3MDli
ZjYyYzQzYjZjMjFlYjQ2MWRjOGQ3ZWQ4ZGExCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMjQ2IEBACitUZXN0cyB0byBlbnN1cmUgdGhhdCBldmVudCBkaXNwYXRj
aGluZyBiZWhhdmVzIGFzIHRoZSBTaGFkb3cgRE9NIHNwZWMgZGVzY3JpYmVzLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworCisKK0NvbXBvc2VkIFNoYWRvdyBUcmVlIHdpbGwgYmU6
CitESVYJIGlkPXNhbmRib3gKKwlESVYJIGlkPXRvcAorCQlESVYJIGlkPXNoYWRvdy1ob3N0CisJ
CQlESVYJIGlkPWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisJCQlESVYJIGlkPXNoYWRvdy1yb290
LWNoaWxkCisKKworTW92aW5nIG1vdXNlIGZyb20gc2hhZG93LWhvc3QgdG8gc2hhZG93LWhvc3Qv
c2hhZG93LXJvb3QtY2hpbGQKKworICBtb3VzZW91dAorCisgIG1vdXNlb3ZlcgorICAgICBAc2hh
ZG93LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBzaGFk
b3ctaG9zdCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAo
cmVsYXRlZDogc2hhZG93LWhvc3QpCisKK01vdmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0L3No
YWRvdy1yb290LWNoaWxkIHRvIHNoYWRvdy1ob3N0CisKKyAgbW91c2VvdXQKKyAgICAgQHNoYWRv
dy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogc2hhZG93
LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJl
bGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNlb3ZlcgorCitNb3ZpbmcgbW91c2UgZnJvbSBz
aGFkb3ctaG9zdCB0byBkaXN0cmlidXRlZC1saWdodC1jaGlsZAorCisgIG1vdXNlb3V0CisgICAg
IEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVk
LWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDog
ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91c2VvdmVyCisgICAgIEBkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6
IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDog
c2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRl
ZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0cmlidXRlZC1s
aWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6IGRp
c3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKK01vdmluZyBt
b3VzZSBmcm9tIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkIHRvIHNoYWRvdy1ob3N0CisKKyAgbW91
c2VvdXQKKyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJnZXQ6IGRpc3RyaWJ1dGVk
LWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBjb250ZW50ICh0YXJn
ZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHNoYWRvdy1yb290ICh0
YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHNoYWRvdy1ob3N0
ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3Qp
CisgICAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBz
aGFkb3ctaG9zdCkKKworICBtb3VzZW92ZXIKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNo
YWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisgICAgIEB0b3Ag
KHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkK
KworTW92aW5nIG1vdXNlIGZyb20gc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQgdG8gZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQKKworICBtb3VzZW91dAorICAgICBAc2hhZG93LXJvb3QtY2hp
bGQgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBjb250ZW50KQorICAgICBA
c2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBjb250ZW50
KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0
cmlidXRlZC1saWdodC1jaGlsZCkKKyAgICAgQHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJl
bGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorCisgIG1vdXNlb3ZlcgorICAgICBAZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChy
ZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkgKHJl
bGF0ZWQ6IHNoYWRvdy1yb290LWNoaWxkKQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29u
dGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290LWNoaWxkKQorICAgICBAc2hhZG93LWhvc3QgKHRh
cmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAg
ICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRv
dy1ob3N0KQorCitNb3ZpbmcgbW91c2UgZnJvbSBkaXN0cmlidXRlZC1saWdodC1jaGlsZCB0byBz
aGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZAorCisgIG1vdXNlb3V0CisgICAgIEBkaXN0cmli
dXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0
ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRl
ZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250ZW50
KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0
OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBA
dG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhv
c3QpCisKKyAgbW91c2VvdmVyCisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFk
b3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFy
Z2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ct
aG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNo
aWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0
ZWQtbGlnaHQtY2hpbGQpCisKKworQ29tcG9zZWQgU2hhZG93IFRyZWUgd2lsbCBiZToKK0RJVgkg
aWQ9c2FuZGJveAorCURJVgkgaWQ9dG9wCisJCURFVEFJTFMJIGlkPWRldGFpbHMKKwkJCVNVTU1B
UlkJIGlkPXN1bW1hcnkKKwkJCQlESVYJCisKKworTW92aW5nIG1vdXNlIGZyb20gZGV0YWlscyB0
byBzdW1tYXJ5CisKKyAgbW91c2VvdXQKKyAgICAgQGRldGFpbHMgKHRhcmdldDogZGV0YWlscykg
KHJlbGF0ZWQ6IHN1bW1hcnkpCisgICAgIEB0b3AgKHRhcmdldDogZGV0YWlscykgKHJlbGF0ZWQ6
IHN1bW1hcnkpCisKKyAgbW91c2VvdmVyCisgICAgIEBzdW1tYXJ5ICh0YXJnZXQ6IHN1bW1hcnkp
IChyZWxhdGVkOiBkZXRhaWxzKQorICAgICBAZGV0YWlscyAodGFyZ2V0OiBzdW1tYXJ5KSAocmVs
YXRlZDogZGV0YWlscykKKyAgICAgQHRvcCAodGFyZ2V0OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0
YWlscykKKworTW92aW5nIG1vdXNlIGZyb20gc3VtbWFyeSB0byBkZXRhaWxzCisKKyAgbW91c2Vv
dXQKKyAgICAgQHN1bW1hcnkgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisg
ICAgIEBkZXRhaWxzICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorICAgICBA
dG9wICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorCisgIG1vdXNlb3Zlcgor
ICAgICBAZGV0YWlscyAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKyAgICAg
QHRvcCAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKworCitDb21wb3NlZCBT
aGFkb3cgVHJlZSB3aWxsIGJlOgorRElWCSBpZD1zYW5kYm94CisJRElWCSBpZD10b3AKKwkJRElW
CSBpZD1BCisJCQlESVYJIGlkPUIKKwkJCQlESVYJIGlkPUcKKwkJCQkJRElWCSBpZD1KCisJCQkJ
CQlESVYJIGlkPUMKKwkJCQkJCQlESVYJIGlkPUQKKwkJCQkJRElWCSBpZD1MCisJCQkJCQlESVYJ
IGlkPUUKKwkJCQkJCQlESVYJIGlkPUYKKworCitNb3ZpbmcgbW91c2UgZnJvbSBGIHRvIEQKKwor
ICBtb3VzZW91dAorICAgICBARiAodGFyZ2V0OiBGKSAocmVsYXRlZDogRCkKKyAgICAgQEUgKHRh
cmdldDogRikgKHJlbGF0ZWQ6IEQpCisgICAgIEBJICh0YXJnZXQ6IEkpIChyZWxhdGVkOiBIKQor
ICAgICBATSAodGFyZ2V0OiBNKSAocmVsYXRlZDogSykKKyAgICAgQE8gKHRhcmdldDogTykgKHJl
bGF0ZWQ6IEspCisgICAgIEBzaGFkb3ctcm9vdC1MICh0YXJnZXQ6IE8pIChyZWxhdGVkOiBLKQor
ICAgICBATCAodGFyZ2V0OiBNKSAocmVsYXRlZDogSykKKyAgICAgQHNoYWRvdy1yb290LUcgKHRh
cmdldDogTSkgKHJlbGF0ZWQ6IEspCisgICAgIEBHICh0YXJnZXQ6IEkpIChyZWxhdGVkOiBIKQor
ICAgICBAc2hhZG93LXJvb3QtQiAodGFyZ2V0OiBJKSAocmVsYXRlZDogSCkKKyAgICAgQEIgKHRh
cmdldDogRikgKHJlbGF0ZWQ6IEQpCisgICAgIEBBICh0YXJnZXQ6IEYpIChyZWxhdGVkOiBEKQor
ICAgICBAdG9wICh0YXJnZXQ6IEYpIChyZWxhdGVkOiBEKQorCisgIG1vdXNlb3ZlcgorICAgICBA
RCAodGFyZ2V0OiBEKSAocmVsYXRlZDogRikKKyAgICAgQEMgKHRhcmdldDogRCkgKHJlbGF0ZWQ6
IEYpCisgICAgIEBIICh0YXJnZXQ6IEgpIChyZWxhdGVkOiBJKQorICAgICBASyAodGFyZ2V0OiBL
KSAocmVsYXRlZDogTSkKKyAgICAgQE4gKHRhcmdldDogTikgKHJlbGF0ZWQ6IE0pCisgICAgIEBz
aGFkb3ctcm9vdC1KICh0YXJnZXQ6IE4pIChyZWxhdGVkOiBNKQorICAgICBASiAodGFyZ2V0OiBL
KSAocmVsYXRlZDogTSkKKyAgICAgQHNoYWRvdy1yb290LUcgKHRhcmdldDogSykgKHJlbGF0ZWQ6
IE0pCisgICAgIEBHICh0YXJnZXQ6IEgpIChyZWxhdGVkOiBJKQorICAgICBAc2hhZG93LXJvb3Qt
QiAodGFyZ2V0OiBIKSAocmVsYXRlZDogSSkKKyAgICAgQEIgKHRhcmdldDogRCkgKHJlbGF0ZWQ6
IEYpCisgICAgIEBBICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBGKQorICAgICBAdG9wICh0YXJnZXQ6
IEQpIChyZWxhdGVkOiBGKQorCitNb3ZpbmcgbW91c2UgZnJvbSBCL0cvTCB0byBECisKKyAgbW91
c2VvdXQKKyAgICAgQEwgKHRhcmdldDogTCkgKHJlbGF0ZWQ6IEspCisgICAgIEBzaGFkb3ctcm9v
dC1HICh0YXJnZXQ6IEwpIChyZWxhdGVkOiBLKQorICAgICBARyAodGFyZ2V0OiBHKSAocmVsYXRl
ZDogSCkKKyAgICAgQHNoYWRvdy1yb290LUIgKHRhcmdldDogRykgKHJlbGF0ZWQ6IEgpCisgICAg
IEBCICh0YXJnZXQ6IEIpIChyZWxhdGVkOiBEKQorICAgICBAQSAodGFyZ2V0OiBCKSAocmVsYXRl
ZDogRCkKKyAgICAgQHRvcCAodGFyZ2V0OiBCKSAocmVsYXRlZDogRCkKKworICBtb3VzZW92ZXIK
KyAgICAgQEQgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEIpCisgICAgIEBDICh0YXJnZXQ6IEQpIChy
ZWxhdGVkOiBCKQorICAgICBASCAodGFyZ2V0OiBIKSAocmVsYXRlZDogRykKKyAgICAgQEsgKHRh
cmdldDogSykgKHJlbGF0ZWQ6IEwpCisgICAgIEBOICh0YXJnZXQ6IE4pIChyZWxhdGVkOiBMKQor
ICAgICBAc2hhZG93LXJvb3QtSiAodGFyZ2V0OiBOKSAocmVsYXRlZDogTCkKKyAgICAgQEogKHRh
cmdldDogSykgKHJlbGF0ZWQ6IEwpCisgICAgIEBzaGFkb3ctcm9vdC1HICh0YXJnZXQ6IEspIChy
ZWxhdGVkOiBMKQorICAgICBARyAodGFyZ2V0OiBIKSAocmVsYXRlZDogRykKKyAgICAgQHNoYWRv
dy1yb290LUIgKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEcpCisgICAgIEBCICh0YXJnZXQ6IEQpIChy
ZWxhdGVkOiBCKQorICAgICBAQSAodGFyZ2V0OiBEKSAocmVsYXRlZDogQikKKyAgICAgQHRvcCAo
dGFyZ2V0OiBEKSAocmVsYXRlZDogQikKKworTW92aW5nIG1vdXNlIGZyb20gQi9HL0wgdG8gQi9H
L0oKKworICBtb3VzZW91dAorICAgICBATCAodGFyZ2V0OiBMKSAocmVsYXRlZDogSikKKyAgICAg
QHNoYWRvdy1yb290LUcgKHRhcmdldDogTCkgKHJlbGF0ZWQ6IEopCisKKyAgbW91c2VvdmVyCisg
ICAgIEBKICh0YXJnZXQ6IEopIChyZWxhdGVkOiBMKQorICAgICBAc2hhZG93LXJvb3QtRyAodGFy
Z2V0OiBKKSAocmVsYXRlZDogTCkKKworTW92aW5nIG1vdXNlIGZyb20gQSB0byBECisKKyAgbW91
c2VvdXQKKyAgICAgQEEgKHRhcmdldDogQSkgKHJlbGF0ZWQ6IEQpCisgICAgIEB0b3AgKHRhcmdl
dDogQSkgKHJlbGF0ZWQ6IEQpCisKKyAgbW91c2VvdmVyCisgICAgIEBEICh0YXJnZXQ6IEQpIChy
ZWxhdGVkOiBBKQorICAgICBAQyAodGFyZ2V0OiBEKSAocmVsYXRlZDogQSkKKyAgICAgQEggKHRh
cmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBLICh0YXJnZXQ6IEspIChyZWxhdGVkOiBBKQor
ICAgICBATiAodGFyZ2V0OiBOKSAocmVsYXRlZDogQSkKKyAgICAgQHNoYWRvdy1yb290LUogKHRh
cmdldDogTikgKHJlbGF0ZWQ6IEEpCisgICAgIEBKICh0YXJnZXQ6IEspIChyZWxhdGVkOiBBKQor
ICAgICBAc2hhZG93LXJvb3QtRyAodGFyZ2V0OiBLKSAocmVsYXRlZDogQSkKKyAgICAgQEcgKHRh
cmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBzaGFkb3ctcm9vdC1CICh0YXJnZXQ6IEgpIChy
ZWxhdGVkOiBBKQorICAgICBAQiAodGFyZ2V0OiBEKSAocmVsYXRlZDogQSkKKyAgICAgQEEgKHRh
cmdldDogRCkgKHJlbGF0ZWQ6IEEpCisgICAgIEB0b3AgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEEp
CisKK01vdmluZyBtb3VzZSBmcm9tIEQgdG8gQQorCisgIG1vdXNlb3V0CisgICAgIEBEICh0YXJn
ZXQ6IEQpIChyZWxhdGVkOiBBKQorICAgICBAQyAodGFyZ2V0OiBEKSAocmVsYXRlZDogQSkKKyAg
ICAgQEggKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBLICh0YXJnZXQ6IEspIChyZWxh
dGVkOiBBKQorICAgICBATiAodGFyZ2V0OiBOKSAocmVsYXRlZDogQSkKKyAgICAgQHNoYWRvdy1y
b290LUogKHRhcmdldDogTikgKHJlbGF0ZWQ6IEEpCisgICAgIEBKICh0YXJnZXQ6IEspIChyZWxh
dGVkOiBBKQorICAgICBAc2hhZG93LXJvb3QtRyAodGFyZ2V0OiBLKSAocmVsYXRlZDogQSkKKyAg
ICAgQEcgKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBzaGFkb3ctcm9vdC1CICh0YXJn
ZXQ6IEgpIChyZWxhdGVkOiBBKQorICAgICBAQiAodGFyZ2V0OiBEKSAocmVsYXRlZDogQSkKKyAg
ICAgQEEgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEEpCisgICAgIEB0b3AgKHRhcmdldDogRCkgKHJl
bGF0ZWQ6IEEpCisKKyAgbW91c2VvdmVyCisgICAgIEBBICh0YXJnZXQ6IEEpIChyZWxhdGVkOiBE
KQorICAgICBAdG9wICh0YXJnZXQ6IEEpIChyZWxhdGVkOiBEKQorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFjMThjNDIwNjhjNzUxNDM2ODEwYTNlMGY3ZDA1YzMxZDA1NGFhYjcKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1l
dmVudC1kaXNwYXRjaGluZy5odG1sCkBAIC0wLDAgKzEsMjIxIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhZG93LWRvbS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0ic2FuZGJveCI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdHMgdG8gZW5zdXJlIHRoYXQgZXZlbnQgZGlzcGF0Y2hpbmcgYmVo
YXZlcyBhcyB0aGUgU2hhZG93IERPTSBzcGVjIGRlc2NyaWJlcy4iKTsKKworZnVuY3Rpb24gbW92
ZU1vdXNlT3ZlcihlbGVtZW50KQoreworICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyIHx8ICF3
aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgZGVmYXVsdFBhZGRp
bmdTaXplID0gMjA7CisgICAgdmFyIHggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9m
ZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgeTsKKyAgICBpZiAoZWxlbWVudC5oYXNDaGlsZE5vZGVz
KCkgfHwgd2luZG93LmludGVybmFscy5zaGFkb3dSb290KGVsZW1lbnQpKQorICAgICAgICB5ID0g
ZWxlbWVudC5vZmZzZXRUb3AgKyBkZWZhdWx0UGFkZGluZ1NpemU7CisgICAgZWxzZQorICAgICAg
ICB5ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7Cit9CisKK3ZhciBldmVudFJlY29yZHMgPSB7
fTsKKworZnVuY3Rpb24gY2xlYXJFdmVudFJlY29yZHMoKQoreworICAgIGV2ZW50UmVjb3JkcyA9
IHt9OworfQorCitmdW5jdGlvbiBkaXNwYXRjaGVkRXZlbnQoZXZlbnRUeXBlKQoreworICAgIHZh
ciBldmVudHMgPSBldmVudFJlY29yZHNbZXZlbnRUeXBlXTsKKyAgICBpZiAoIWV2ZW50cykKKyAg
ICAgICAgcmV0dXJuIFtdOworICAgIHJldHVybiBldmVudHM7Cit9CisKK2Z1bmN0aW9uIHJlY29y
ZEV2ZW50KGV2ZW50KQoreworICAgIHZhciBldmVudFR5cGUgPSBldmVudC50eXBlCisgICAgaWYg
KCFldmVudFJlY29yZHNbZXZlbnRUeXBlXSkgeworICAgICAgICBldmVudFJlY29yZHNbZXZlbnRU
eXBlXSA9IFtdCisgICAgfQorICAgIHZhciBldmVudFN0cmluZyA9ICcnOworICAgIGlmIChldmVu
dC5jdXJyZW50VGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAnIEAnICsgZXZlbnQuY3Vy
cmVudFRhcmdldC5pZDsKKyAgICBpZiAoZXZlbnQudGFyZ2V0KQorICAgICAgICBldmVudFN0cmlu
ZyArPSAnICh0YXJnZXQ6ICcgKyBldmVudC50YXJnZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50
LnJlbGF0ZWRUYXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHJlbGF0ZWQ6ICcgKyBl
dmVudC5yZWxhdGVkVGFyZ2V0LmlkICsgJyknOworICAgIGlmIChldmVudC5ldmVudFBoYXNlID09
IDEpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcoY2FwdHVyaW5nIHBoYXNlKSc7CisgICAgaWYg
KGV2ZW50LnRhcmdldCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5pZCA9
PSBldmVudC5jdXJyZW50VGFyZ2V0LmlkKQorICAgICAgICBzaG91bGRCZSgiZXZlbnQuZXZlbnRQ
aGFzZSIsICIyIiwgdHJ1ZSk7CisgICAgZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0ucHVzaChldmVu
dFN0cmluZyk7Cit9CisKK2Z1bmN0aW9uIGR1bXBOb2RlKG5vZGUpCit7CisgICAgdmFyIG91dHB1
dCA9IG5vZGUubm9kZU5hbWUgKyAiXHQiOworICAgIGlmIChub2RlLmlkKQorICAgICAgICBvdXRw
dXQgKz0gJyBpZD0nICsgbm9kZS5pZDsKKyAgICBpZiAobm9kZS5jbGFzc05hbWUpCisgICAgICAg
IG91dHB1dCArPSAnIGNsYXNzPScgKyBub2RlLmNsYXNzTmFtZTsKKyAgICByZXR1cm4gb3V0cHV0
OworfQorCitmdW5jdGlvbiBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKG5vZGUsIGluZGVudCkKK3sK
KyAgICBpbmRlbnQgPSBpbmRlbnQgfHwgIiI7CisgICAgdmFyIG91dHB1dCA9IGluZGVudCArIGR1
bXBOb2RlKG5vZGUpICsgIlxuIjsKKyAgICB2YXIgY2hpbGQ7CisgICAgZm9yIChjaGlsZCA9IGlu
dGVybmFscy5maXJzdENoaWxkQnlXYWxrZXIobm9kZSk7IGNoaWxkOyBjaGlsZCA9IGludGVybmFs
cy5uZXh0U2libGluZ0J5V2Fsa2VyKGNoaWxkKSkKKyAgICAgICAgIG91dHB1dCArPSBkdW1wQ29t
cG9zZWRTaGFkb3dUcmVlKGNoaWxkLCBpbmRlbnQgKyAiXHQiKTsKKyAgICByZXR1cm4gb3V0cHV0
OworfQorCitmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyhub2RlcykKK3sKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBub2RlID0gZ2V0
Tm9kZUluU2hhZG93VHJlZVN0YWNrKG5vZGVzW2ldKTsKKyAgICAgICAgbm9kZS5hZGRFdmVudExp
c3RlbmVyKCdtb3VzZW92ZXInLCByZWNvcmRFdmVudCwgZmFsc2UpOworICAgICAgICBub2RlLmFk
ZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgcmVjb3JkRXZlbnQsIGZhbHNlKTsKKyAgICAgICAg
aWYgKG5vZGUudGFnTmFtZSA9PSAnRElWJyB8fCBub2RlLnRhZ05hbWUgPT0gJ0RFVEFJTFMnIHx8
IG5vZGUudGFnTmFtZSA9PSAnU1VNTUFSWScpCisgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0
ZSgnc3R5bGUnLCAncGFkZGluZy10b3A6IDQwcHg7Jyk7CisgICAgfQorfQorCitmdW5jdGlvbiBw
cmVwYXJlRE9NVHJlZTEocGFyZW50KQoreworICAgIHBhcmVudC5hcHBlbmRDaGlsZCgKKyAgICAg
ICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ3RvcCd9LAorICAgICAgICAgICAgICAgICAgY3Jl
YXRlRE9NKCdkaXYnLCB7J2lkJzogJ3NoYWRvdy1ob3N0J30sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdjb250ZW50JywgJ3NlbGVjdCc6ICcjZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQnLH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnc2hhZG93LXJvb3QtY2hpbGQnfSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00o
J2RpdicsIHsnaWQnOiAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJ30pKSkpOworCisgICAg
YWRkRXZlbnRMaXN0ZW5lcnMoWyd0b3AnLCAnc2hhZG93LWhvc3QnLCAnc2hhZG93LWhvc3QvJywg
J3NoYWRvdy1ob3N0L2NvbnRlbnQnLCAnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnLAor
ICAgICAgICAgICAgICAgICAgICAgICAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnbm9uLWRp
c3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJ10pOworICAgIGdldE5vZGVJblNoYWRvd1RyZWVTdGFjaygn
c2hhZG93LWhvc3QvJykuaWQgPSAnc2hhZG93LXJvb3QnOworICAgIHBhcmVudC5vZmZzZXRMZWZ0
OworICAgIGRlYnVnKCdcblxuQ29tcG9zZWQgU2hhZG93IFRyZWUgd2lsbCBiZTpcbicgKyBkdW1w
Q29tcG9zZWRTaGFkb3dUcmVlKHBhcmVudCkpOworfQorCitmdW5jdGlvbiBwcmVwYXJlRE9NVHJl
ZTIocGFyZW50KQoreworICAgIHBhcmVudC5hcHBlbmRDaGlsZCgKKyAgICAgICAgY3JlYXRlRE9N
KCdkaXYnLCB7J2lkJzogJ3RvcCd9LAorICAgICAgICAgICAgICAgICAgLy8gJ2RldGFpbHMvc3Vt
bWFyeScgZWxlbWVudHMgdXNlIFNoYWRvdyBET00gaW4gaXRzIGltcGxlbWVudGF0aW9uLgorICAg
ICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkZXRhaWxzJywgeydpZCc6ICdkZXRhaWxzJywgJ29w
ZW4nOiB0cnVlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ3N1bW1h
cnknLCB7J2lkJzogJ3N1bW1hcnknfSkpKSk7CisKKyAgICBhZGRFdmVudExpc3RlbmVycyhbJ3Rv
cCcsICdkZXRhaWxzJywgJ3N1bW1hcnknXSk7CisgICAgcGFyZW50Lm9mZnNldExlZnQ7CisgICAg
ZGVidWcoJ1xuXG5Db21wb3NlZCBTaGFkb3cgVHJlZSB3aWxsIGJlOlxuJyArIGR1bXBDb21wb3Nl
ZFNoYWRvd1RyZWUocGFyZW50KSk7Cit9CisKK2Z1bmN0aW9uIHByZXBhcmVET01UcmVlMyhwYXJl
bnQpCit7CisgICAgcGFyZW50LmFwcGVuZENoaWxkKAorICAgICAgICBjcmVhdGVET00oJ2Rpdics
IHsnaWQnOiAndG9wJ30sCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQn
OiAnQSd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2Jywgeydp
ZCc6ICdCJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNo
YWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVET00oJ2RpdicsIHsnaWQnOiAnRyd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2Jywg
eydpZCc6ICdKJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZURPTSgnY29udGVudCcsIHsnaWQnOiAnTicsICdzZWxlY3QnOiAnI0snfSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdLJywgJ3NlbGVjdCc6ICcjSCd9KSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZURPTSgnZGl2JywgeydpZCc6ICdMJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnY29udGVudCcsIHsnaWQnOiAnTycsICdzZWxlY3QnOiAn
I00nfSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdNJywgJ3NlbGVj
dCc6ICcjSSd9KSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNyZWF0ZURPTSgnY29udGVudCcsIHsnaWQnOiAnSCcsICdzZWxlY3QnOiAnI0Mn
fSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdJJywgJ3NlbGVjdCc6ICcjRSd9KSkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQn
OiAnQyd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ0QnfSkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnRSd9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lk
JzogJ0YnfSkpKSkpKTsKKworICAgIGFkZEV2ZW50TGlzdGVuZXJzKFsndG9wJywgJ0EnLCAnQics
ICdDJywgJ0QnLCAnRScsICdGJywgJ0IvJywgJ0IvRycsICdCL0gnLCAnQi9JJywgJ0IvRy8nLCAn
Qi9HL0onLCAnQi9HL0snLCAnQi9HL0wnLCAnQi9HL00nLAorICAgICAgICAgICAgICAgICAgICAg
ICAnQi9HL0ovJywgJ0IvRy9KL04nLCAnQi9HL0wvJywgJ0IvRy9ML08nXSk7CisgICAgZ2V0Tm9k
ZUluU2hhZG93VHJlZVN0YWNrKCdCLycpLmlkID0gJ3NoYWRvdy1yb290LUInOworICAgIGdldE5v
ZGVJblNoYWRvd1RyZWVTdGFjaygnQi9HLycpLmlkID0gJ3NoYWRvdy1yb290LUcnOworICAgIGdl
dE5vZGVJblNoYWRvd1RyZWVTdGFjaygnQi9HL0ovJykuaWQgPSAnc2hhZG93LXJvb3QtSic7Cisg
ICAgZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCdCL0cvTC8nKS5pZCA9ICdzaGFkb3ctcm9vdC1M
JzsKKyAgICBwYXJlbnQub2Zmc2V0TGVmdDsKKyAgICBkZWJ1ZygnXG5cbkNvbXBvc2VkIFNoYWRv
dyBUcmVlIHdpbGwgYmU6XG4nICsgZHVtcENvbXBvc2VkU2hhZG93VHJlZShwYXJlbnQpKTsKK30K
KworZnVuY3Rpb24gZGVidWdEaXNwYXRjaGVkRXZlbnQoZXZlbnRUeXBlKQoreworICAgIGRlYnVn
KCdcbiAgJyArIGV2ZW50VHlwZSk7CisgICAgdmFyIGV2ZW50cyA9IGRpc3BhdGNoZWRFdmVudChl
dmVudFR5cGUpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytpKQor
ICAgICAgICBkZWJ1ZygnICAgICcgKyBldmVudHNbaV0pCit9CisKK2Z1bmN0aW9uIG1vdmVNb3Vz
ZShvbGRFbGVtZW50SWQsIG5ld0VsZW1lbnRJZCkKK3sKKyAgICBjbGVhckV2ZW50UmVjb3Jkcygp
OworICAgIGRlYnVnKCdcbicgKyAnTW92aW5nIG1vdXNlIGZyb20gJyArIG9sZEVsZW1lbnRJZCAr
ICcgdG8gJyArIG5ld0VsZW1lbnRJZCk7CisgICAgbW92ZU1vdXNlT3ZlcihnZXROb2RlSW5TaGFk
b3dUcmVlU3RhY2sob2xkRWxlbWVudElkKSk7CisgICAgLy8gZGVidWdEaXNwYXRjaGVkRXZlbnQo
J21vdXNlb3V0Jyk7CisgICAgLy8gZGVidWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNlb3ZlcicpOwor
CisgICAgY2xlYXJFdmVudFJlY29yZHMoKTsKKyAgICBtb3ZlTW91c2VPdmVyKGdldE5vZGVJblNo
YWRvd1RyZWVTdGFjayhuZXdFbGVtZW50SWQpKTsKKyAgICAvLyBpc0lubmVybW9zdEFjdGl2ZUVs
ZW1lbnQobmV3RWxlbWVudElkKTsKKworICAgIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KCdtb3VzZW91
dCcpOworICAgIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KCdtb3VzZW92ZXInKTsKK30KKworZnVuY3Rp
b24gdGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgdmFyIHNhbmRib3gg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FuZGJveCcpOworICAgIHByZXBhcmVET01UcmVl
MShzYW5kYm94KTsKKworICAgIG1vdmVNb3VzZSgnc2hhZG93LWhvc3QnLCAnc2hhZG93LWhvc3Qv
c2hhZG93LXJvb3QtY2hpbGQnKTsKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0L3NoYWRvdy1y
b290LWNoaWxkJywgJ3NoYWRvdy1ob3N0Jyk7CisKKyAgICBtb3ZlTW91c2UoJ3NoYWRvdy1ob3N0
JywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCcsICdzaGFkb3ctaG9zdCcpOworCisgICAgbW92ZU1vdXNlKCdzaGFkb3ct
aG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcsICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcpOworICAg
IG1vdmVNb3VzZSgnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hhZG93LWhvc3Qvc2hhZG93
LXJvb3QtY2hpbGQnKTsKKworICAgIHNhbmRib3guaW5uZXJIVE1MID0gJyc7CisgICAgcHJlcGFy
ZURPTVRyZWUyKHNhbmRib3gpOworCisgICAgbW92ZU1vdXNlKCdkZXRhaWxzJywgJ3N1bW1hcnkn
KTsKKyAgICBtb3ZlTW91c2UoJ3N1bW1hcnknLCAnZGV0YWlscycpOworCisgICAgc2FuZGJveC5p
bm5lckhUTUwgPSAnJzsKKyAgICBwcmVwYXJlRE9NVHJlZTMoc2FuZGJveCk7CisKKyAgICBtb3Zl
TW91c2UoJ0YnLCAnRCcpOworICAgIG1vdmVNb3VzZSgnQi9HL0wnLCAnRCcpOworICAgIG1vdmVN
b3VzZSgnQi9HL0wnLCAnQi9HL0onKTsKKyAgICBtb3ZlTW91c2UoJ0EnLCAnRCcpOworICAgIG1v
dmVNb3VzZSgnRCcsICdBJyk7Cit9CisKK3Rlc3QoKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142403</attachid>
            <date>2012-05-16 20:38:00 -0700</date>
            <delta_ts>2012-05-16 20:40:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78586-20120517123759.patch</filename>
            <type>text/plain</type>
            <size>48473</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjZmNGQ3ZjAyZTE5Y2Vi
MGM0MzQ3MWM0MmJlOGQyMmIyZGVkYmE4Mi4uN2M3YzdlNzQyZjA3ZDAxYjhlY2IzYTU1N2IyM2Jk
YTBmNDlmZjFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxMi0wNS0xNSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IGEgU2hh
ZG93IERPTSBzcGVjJ3Mgc2VjdGlvbiA2ICdFdmVudHMnLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGltcGxlbWVudHMgYSBTaGFkb3cgRE9NIHNw
ZWMncyBzZWN0aW9uIDYgJ0V2ZW50cycsIGludHJvZHVjaW5nIGEgbmV3CisgICAgICAgIGFsZ29y
aXRobSBzbyB0aGF0IGV2ZW50IGRpc3BhdGNoaW5nIHVzZSBhIGNvbXBvc2VkIHNoYWRvdyBET00g
dHJlZSwKKyAgICAgICAgaW5zdGVhZCBvZiBub3JtYWwgRE9NIHRyZWUsIGluIGRpc3BhdGNoaW5n
IGV2ZW50cyB0byBlYWNoIG5vZGUuCisKKyAgICAgICAgVGhlIHNwZWMgaXMgaGVyZTogaHR0cDov
L2R2Y3MudzMub3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2lu
ZGV4Lmh0bWwjZXZlbnRzCisKKyAgICAgICAgU3VtbWFyeSBvZiBjaGFuZ2VzOgorICAgICAgICAt
IEF0dGFjaGluZyBzaGFkb3cgRE9NIGRvZXMgbm90IGFmZmVjdCBhbiBldmVudCBkaXNwYXRjaGlu
ZworICAgICAgICBiZWhhdmlvciBvZiBlbmNsb3NpbmcgRE9NIHRyZWUuIFRoaXMgYXBwbGllcyBl
dmVuIGlmIHNvbWUgbm9kZXMKKyAgICAgICAgYXJlIGRpc3RyaWJ1dGVkIHRvIGluc2VydGlvbiBw
b2ludHMuIFdlIGtlZXAgYSBjb21wYXRpYmlsaXR5IG9mCisgICAgICAgIGV4aXN0aW5nIGV2ZW50
IGRpc3BhdGNoaW5nIG1lY2hhbmlzbSBzbyB0aGF0IHdlIHdvbid0IGJyZWFrIFdlYi4KKyAgICAg
ICAgLSBFdmVudCBhbmNlc3RvcnMsIHdoaWNoIGFyZSB1c2VkIGluIGRpc3BhdGNoaW5nIGV2ZW50
cyBpbiBjYXB0dXJlIChvcgorICAgICAgICBidWJibGUpIHBoYXNlLCBhcmUgbm93IHRoZSByZXN1
bHQgb2YgdHJhdmVyc2luZyBhbmNlc3RvcnMgaW4gY29tcG9zZWQKKyAgICAgICAgc2hhZG93IERP
TSB0cmVlIG9yZGVyLCBpbnN0ZWFkIG9mIG5vcm1hbCBET00gdHJlZSBvcmRlci4KKyAgICAgICAg
LSBFdmVudCdzIHRhcmdldCBhbmQgcmVsYXRlZC10YXJnZXQgYXJlIGNvcnJlY3RseSBhZGp1c3Rl
ZCBzbyB0aGF0CisgICAgICAgIHdlIGRvbid0IGxlYWsgYW55IG5vZGUgd2hpY2ggaXMgaW5hY2Nl
c3NpYmxlIGZyb20gdGhlIGV2ZW50J3MKKyAgICAgICAgY3VycmVudC10YXJnZXQgbm9kZS4gV2Ug
ZW5mb3JjZSBib3RoIHVwcGVyIGFuZCBsb3dlciBib3VuZGFyeQorICAgICAgICBlbmNhcHN1bGF0
aW9uIG9mIFNoYWRvdyBET00gaW4gZXZlbnQgZGlzcGF0Y2hpbmcKKworICAgICAgICBIZXJlIGlz
IGFuIGV4YW1wbGUgb2YgZXZlbnQgZGlzcGF0Y2hpbmcuIFN1cHBvc2Ugd2UgaGF2ZSB0aGUgZm9s
bG93aW5nIERPTSB0cmVlLCB3aGljaAorICAgICAgICBpbmNsdWRlcyBzb21lIG5lc3RlZCBzaGFk
b3cgaG9zdHMgYW5kIGluc2VydGlvbiBwb2ludHMKKyAgICAgICAgQQorICAgICAgICBgLS1CLS0t
LS1bU1ItQl0KKyAgICAgICAgICAgfC1DICAgICBgLS1HLS0tLS0tLS0tLS0tLS1bU1ItR10KKyAg
ICAgICAgICAgfCBgLUQgICAgICB8LTxIIHNlbGVjdD1DPiAgICB8LS1KLS0tLS0tLS0tLS0tLS0t
W1NSLUpdCisgICAgICAgICAgIGAtRSAgICAgICAgYC08SSBzZWxlY3Q9RT4gICAgfCAgYC08SyBz
ZWxlY3Q9SD4gICAgYC08TiBzZWxlY3Q9Sz4KKyAgICAgICAgICAgICBgLUYgICAgICAgICAgICAg
ICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0t
TC0tLS0tLS0tLS0tLS0tLVtTUi1MXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGAtPE0gc2VsZWN0PUk+ICAgIGAtPE8gc2VsZWN0PU0+CisKKyAgICAgICAgICBO
b3RhdGlvbjogW1NSLVhdOiBTaGFkb3cgUm9vdAorICAgICAgICAgICAgICAgICAgICA8WCBzZWxl
Y3Q9WT46IEluc2VydGlvbiBQb2ludCwgY2FsbGVkIFgsIHdoaWNoIHNlbGVjdHMgWS4KKworICAg
ICAgICBJZiBhIG1vdXNlIG1vdmVzIGZyb20gbm9kZSAnI0YnIHRvIG5vZGUgJyNEJywgdGhlIGZv
bGxvd2luZworICAgICAgICAnbW91c2VvdmVyJyBldmVudHMgYXJlIGRpc3BhdGNoZWQgaW4gZWFj
aCBhbmNlc3RvciBub2RlOgorCisgICAgICAgIFtjdXJyZW50VGFyZ2V0XSBbdGFyZ2V0XSBbcmVs
YXRlZC10YXJnZXRdCisgICAgICAgICAgI0QgICAgICAgICAgICAgI0QgICAgICAgI0YKKyAgICAg
ICAgICAjQyAgICAgICAgICAgICAjRCAgICAgICAjRgorICAgICAgICAgICNIICAgICAgICAgICAg
ICNIICAgICAgICNJCisgICAgICAgICAgI0sgICAgICAgICAgICAgI0sgICAgICAgI00KKyAgICAg
ICAgICAjTiAgICAgICAgICAgICAjTiAgICAgICAjTQorICAgICAgICAgICNTUi1KICAgICAgICAg
ICNOICAgICAgICNNCisgICAgICAgICAgI0ogICAgICAgICAgICAgI0sgICAgICAgI00KKyAgICAg
ICAgICAjU1ItRyAgICAgICAgICAjSyAgICAgICAjTQorICAgICAgICAgICNHICAgICAgICAgICAg
ICNIICAgICAgICNJCisgICAgICAgICAgI1NSLUIgICAgICAgICAgI0ggICAgICAgI0kKKyAgICAg
ICAgICAjQiAgICAgICAgICAgICAjRCAgICAgICAjRgorICAgICAgICAgICNBICAgICAgICAgICAg
ICNEICAgICAgICNGCisKKyAgICAgICAgRGV0YWlscyBhcmU6CisgICAgICAgIC0gSW5zZXJ0aW9u
IHBvaW50cywgc3VjaCBhcyA8Y29udGVudD4gb3IgPHNoYWRvdz4sIGFyZSByZXNvbHZlZCBjb3Jy
ZWN0bHkKKyAgICAgICAgaW4gY2FsY3VsYXRpbmcgZXZlbnQgYW5jZXN0b3JzLiBUaGF0IG1lYW5z
IGlmIGEgbm9kZSBpcyBkaXN0cmlidXRlZCB0bworICAgICAgICBhbiBpbnNlcnRpb24gcG9pbnQs
IHRoZSBpbnNlcnRpb24gcG9pbnQgaXMgbm93IGFuIGFuY2VzdG9yIG9mIHRoZSBub2RlIGluCisg
ICAgICAgIGJ1YmJsaW5nIChvciBjYXB0dXJpbmcpIGV2ZW50cy4KKyAgICAgICAgLSBCb3RoIGlu
c2VydGlvbiBwb2ludHMgYW5kIHNoYWRvdyByb290cyBub3cgY2FuIHJlY2VpdmUgZXZlbnRzLiBX
ZSBjYW4gYWRkCisgICAgICAgIGV2ZW50IGxpc3RlbmVycyB0byBpbnNlcnRpb24gcG9pbnRzIGFu
ZCBzaGFkb3cgcm9vdHMuCisgICAgICAgIC0gRGlzcGF0Y2hlZCBldmVudCdzIHRhcmdldCBpcyBu
b3cgYWRqdXN0ZWQgY29ycmVjdGx5IHVzaW5nIHRoZSByZS10YXJnZXRpbmcKKyAgICAgICAgYWxn
b3JpdGhtLiBUaGUgYWxnb3JpdGhtIGlzIG5vdyBmdWxseSBhd2FyZSBvZiBpbnNlcnRpb24gcG9p
bnRzLgorICAgICAgICAtIERpc3BhdGNoZWQgZXZlbnQncyByZWxhdGVkLXRhcmdldCBjYW4gbm93
IGRpZmZlciBpbiBlYWNoIHRyZWUgc2NvcGUgb2YKKyAgICAgICAgZXZlbnQgYW5jZXN0b3JzLiBX
ZSBjaG9vc2UgdGhlIG1vc3QgYXBwcm9wcmlhdGUgcmVsYXRlZC10YXJnZXQgdXNpbmcgdGhlCisg
ICAgICAgIHJlbGF0ZWQgdGFyZ2V0IHJlc29sdXRpb24gYWxnb3JpdGhtIGZvciBlYWNoIG5vZGUu
CisKKyAgICAgICAgUGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbjoKKyAgICAgICAgVGhpcyBwYXRj
aCBjYW4gYWNoaWV2ZSB0aGUgY29tcGV0aXRpdmUgcGVyZm9ybWFuY2UuIFRoZSByZXN1bHRzIG9m
CisgICAgICAgIC4vVG9vbHMvU2NyaXB0cy9ydW4tcGVyZi10ZXN0cyBQZXJmb3JtYW5jZVRlc3Rz
L0RPTS9FdmVudHMuaHRtbCBmb3IKKyAgICAgICAgYmVmb3JlL2FmdGVyIHRoaXMgcGF0Y2ggYXJl
OgorCisgICAgICAgIEJlZm9yZSBhcHBseWluZyB0aGlzIHBhdGNoOgorICAgICAgICAgICAgUnVu
bmluZyBET00vRXZlbnRzLmh0bWwgKDEgb2YgMSkKKyAgICAgICAgICAgIFJFU1VMVCBET006IEV2
ZW50cz0gMjcwLjMxMDcxNDI4NiBtcworICAgICAgICAgICAgbWVkaWFuPSAyNjkuNzUgbXMsIHN0
ZGV2PSAyLjAwNDIzOTc2NjMgbXMsIG1pbj0gMjY3LjM1NzE0Mjg1NyBtcywgbWF4PSAyNzYuNSBt
cworCisgICAgICAgIEFmdGVyIGFwcGx5aW5nIHRoaXMgcGF0Y2g6CisgICAgICAgICAgICBSdW5u
aW5nIERPTS9FdmVudHMuaHRtbCAoMSBvZiAxKQorICAgICAgICAgICAgUkVTVUxUIERPTTogRXZl
bnRzPSAyNjguMTA4MzMzMzMzIG1zCisgICAgICAgICAgICBtZWRpYW49IDI2Ny41IG1zLCBzdGRl
dj0gMi40MTg4MzE1NzE5NSBtcywgbWluPSAyNjMuNjI1IG1zLCBtYXg9IDI3My4xNDI4NTcxNDMg
bXMKKworICAgICAgICBJJ3ZlIGFsc28gY29uZHVjdGVkIGEgbWljcm8gYmVuY2htYXJrIHVzaW5n
IGJvdGgKKyAgICAgICAgU2hhZG93LUZyZWUtRE9NLVRyZWUgYW5kIERPTS1UcmVlLVdpdGgtU2hh
ZG93LUhvc3QuCisgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg1ODYjYzQwIGZvciB0aGUgcmVzdWx0cy4KKyAgICAgICAgSXQgc2VlbXMgdGhhdCB0
aGUgbmV3IGltcGxlbWVudGF0aW9uIGhhcyBtb3JlIGNhcGFiaWxpdGllcywgYnV0CisgICAgICAg
IGRvZXNuJ3Qgc2FjcmlmaWNlIGEgcGVyZm9ybWFuY2Ugb2YgZXZlbnQgZGlzcGF0Y2hpbmcgaW4g
ZWl0aGVyIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9t
LWV2ZW50LWRpc3BhdGNoaW5nLmh0bWwKKworICAgICAgICAqIGRvbS9Db21wb3NlZFNoYWRvd1Ry
ZWVXYWxrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
OjpwYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRy
YXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KToKKyAgICAg
ICAgKiBkb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg6CisgICAgICAgIChDb21wb3NlZFNo
YWRvd1RyZWVXYWxrZXIpOgorICAgICAgICAqIGRvbS9FdmVudENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0V2ZW50
Q29udGV4dC5oOgorICAgICAgICAoRXZlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldCk6CisgICAgICAgICogZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJlbGF0ZWRUYXJn
ZXRBZGp1c3Rlcjo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6YWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVs
YXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmFkanVzdFJl
bGF0ZWRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjplbnN1cmVF
dmVudEFuY2VzdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkZXRlcm1pbmVE
aXNwYXRjaEJlaGF2aW9yKToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKToKKyAg
ICAgICAgKEV2ZW50RGlzcGF0Y2hlcik6CisgICAgICAgICogZG9tL01vdXNlRXZlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZl
bnQpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b01v
dXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDUtMTYgIEtlbnRhcm8gSGFy
YSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gUGFzcyBJc29sYXRlIHRv
IHJlbWFpbmluZyB0b1Y4KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5jcHAKaW5kZXggMjM1NjgzZmVkZjhjYzY5ZTU5ODlmNDFjNjM3MWU5OTgwODdh
ZmQyNC4uMGY4NjE0NDMzY2QxNjQ4MGJiYmMwNTgyMTFkNWY5ODdkNzBjODBmOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAKQEAgLTE5Niw2
ICsxOTYsMjggQEAgdm9pZCBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnBhcmVudCgpCiAgICAg
YXNzZXJ0UG9zdGNvbmRpdGlvbigpOwogfQogCit2b2lkIENvbXBvc2VkU2hhZG93VHJlZVdhbGtl
cjo6cGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCkKK3sKKyAgICBB
U1NFUlQobV9ub2RlKTsKKyAgICBtX25vZGUgPSB0cmF2ZXJzZVBhcmVudEluY2x1ZGluZ0luc2Vy
dGlvblBvaW50QW5kU2hhZG93Um9vdChtX25vZGUpOworfQorCitOb2RlKiBDb21wb3NlZFNoYWRv
d1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFk
b3dSb290KGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgaWYgKEVsZW1lbnRTaGFkb3cq
IHNoYWRvdyA9IHNoYWRvd09mUGFyZW50KG5vZGUpKSB7CisgICAgICAgIGlmIChJbnNlcnRpb25Q
b2ludCogaW5zZXJ0aW9uUG9pbnQgPSBzaGFkb3ctPmluc2VydGlvblBvaW50Rm9yKG5vZGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGluc2VydGlvblBvaW50OworICAgIH0KKyAgICBpZiAoIW5vZGUt
PmlzU2hhZG93Um9vdCgpKQorICAgICAgICByZXR1cm4gbm9kZS0+cGFyZW50Tm9kZSgpOworICAg
IGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0b1NoYWRvd1Jvb3Qobm9kZSk7CisgICAg
aWYgKHNoYWRvd1Jvb3QtPmlzWW91bmdlc3QoKSkKKyAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Qt
Pmhvc3QoKTsKKyAgICBJbnNlcnRpb25Qb2ludCogYXNzaWduZWRJbnNlcnRpb25Qb2ludCA9IHNo
YWRvd1Jvb3QtPmFzc2lnbmVkVG8oKTsKKyAgICBBU1NFUlQoYXNzaWduZWRJbnNlcnRpb25Qb2lu
dCk7CisgICAgcmV0dXJuIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQ7Cit9CisKIE5vZGUqIENvbXBv
c2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2VQYXJlbnQoY29uc3QgTm9kZSogbm9kZSkgY29u
c3QKIHsKICAgICBpZiAoIWNhbkNyb3NzVXBwZXJCb3VuZGFyeSgpICYmIG5vZGUtPmlzU2hhZG93
Um9vdCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dU
cmVlV2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
LmgKaW5kZXggOTc2NmMxYTM2NTAxOTAwODhiOTRkYTJhNDQwYzIwNjI2ZDBkNGE5Mi4uMWE5ZDJh
OTNjNjM2NjMzYTllM2YyNDIwMWI1MGM0ZTA5M2FmN2I5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBwcmV2aW91c1NpYmxpbmcoKTsKIAogICAgIHZvaWQgcGFyZW50KCk7CisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBpZ25vcmVzIHBvbGljeSBhbmQgYWx3YXlzIGNyb3NzZXMgYW4gdXBw
ZXIgYm91bmRhcnkuCisgICAgdm9pZCBwYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNo
YWRvd1Jvb3QoKTsKIAogICAgIHZvaWQgbmV4dCgpOwogICAgIHZvaWQgcHJldmlvdXMoKTsKQEAg
LTk5LDYgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgTm9kZSogdHJhdmVyc2VMYXN0Q2hpbGQoY29u
c3QgTm9kZSopIGNvbnN0OwogICAgIE5vZGUqIHRyYXZlcnNlQ2hpbGQoY29uc3QgTm9kZSosIFRy
YXZlcnNhbERpcmVjdGlvbikgY29uc3Q7CiAgICAgTm9kZSogdHJhdmVyc2VQYXJlbnQoY29uc3Qg
Tm9kZSopIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlUGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9u
UG9pbnRBbmRTaGFkb3dSb290KGNvbnN0IE5vZGUqKSBjb25zdDsKIAogICAgIHN0YXRpYyBOb2Rl
KiB0cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnN0IE5vZGUqKTsKICAgICBzdGF0aWMgTm9kZSogdHJh
dmVyc2VQcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250
ZXh0LmNwcAppbmRleCAyYTVjNTIxMGFhZWY2Yjk0MWJiZGU1ZGUyOTVjYmEzMzlkMTQyZGY1Li44
MDk0YmEwYmIzODY1ZDM2MmU2NTgwMTFiNzlmMTAwOWYyMGVhODc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRDb250ZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zOCw2ICszOSw3IEBAIEV2ZW50Q29udGV4dDo6RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9k
ZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gY3VycmVuCiAgICAgOiBtX25vZGUobm9k
ZSkKICAgICAsIG1fY3VycmVudFRhcmdldChjdXJyZW50VGFyZ2V0KQogICAgICwgbV90YXJnZXQo
dGFyZ2V0KQorICAgICwgbV9yZWxhdGVkVGFyZ2V0KDApCiB7CiB9CiAKQEAgLTQ1LDYgKzQ3LDgg
QEAgdm9pZCBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiBldmVudCkgY29u
c3QKIHsKICAgICBldmVudC0+c2V0VGFyZ2V0KG1fdGFyZ2V0LmdldCgpKTsKICAgICBldmVudC0+
c2V0Q3VycmVudFRhcmdldChtX2N1cnJlbnRUYXJnZXQuZ2V0KCkpOworICAgIGlmIChtX3JlbGF0
ZWRUYXJnZXQuZ2V0KCkgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICB0b01vdXNl
RXZlbnQoZXZlbnQpLT5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7CiAg
ICAgbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dENvbnRleHQuaAppbmRleCA1ZTczMTdmNDVjZjU0ODU2YTMyNDlkODdkZDI3YTA4MTY2MmQ2NzQ4
Li42MzI1ODEwMDkwYzA0Mjk3MjY5Y2U1MmU3MGUyZGQxMGFkZDE0NDA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50Q29udGV4dC5oCkBAIC00MiwxMyArNDIsMTYgQEAgcHVibGljOgogCiAgICAgTm9kZSog
bm9kZSgpIGNvbnN0OwogICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQoKSBjb25zdDsKKyAgICBFdmVu
dFRhcmdldCogcmVsYXRlZFRhcmdldCgpIGNvbnN0OwogICAgIGJvb2wgY3VycmVudFRhcmdldFNh
bWVBc1RhcmdldCgpIGNvbnN0OwogICAgIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBj
b25zdDsKKyAgICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4p
OwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPEV2ZW50
VGFyZ2V0PiBtX2N1cnJlbnRUYXJnZXQ7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX3Rhcmdl
dDsKKyAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fcmVsYXRlZFRhcmdldDsKIH07CiAKIGlubGlu
ZSBOb2RlKiBFdmVudENvbnRleHQ6Om5vZGUoKSBjb25zdApAQCAtNjYsNiArNjksMTYgQEAgaW5s
aW5lIGJvb2wgRXZlbnRDb250ZXh0OjpjdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkgY29uc3QK
ICAgICByZXR1cm4gbV9jdXJyZW50VGFyZ2V0LmdldCgpID09IG1fdGFyZ2V0LmdldCgpOwogfQog
CitpbmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdldCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsKK30KKworaW5saW5lIHZvaWQg
RXZlbnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJl
bGF0ZWRUYXJnZXQpCit7CisgICAgbV9yZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdldDsKK30K
KwogfQogCiAjZW5kaWYgLy8gRXZlbnRDb250ZXh0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlz
cGF0Y2hlci5jcHAKaW5kZXggMTY4OWUwNmI4Y2E0YmYwYWI1ODNjOGYzOTFiZjk5ODkwYTk3NWJk
Yy4uZmNkYzBlNTgzMWU2MDcwYWY5NjkwMTUyMDgxNjc0NTA1MWU2NWI2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTI2LDEwICsyNiwxMyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgogCisjaW5jbHVkZSAiQ29t
cG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2lu
Y2x1ZGUgIkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRvci5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJTY29wZWRFdmVu
dFF1ZXVlLmgiCkBAIC00Nyw2ICs1MCw2MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSAwOwog
CitFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIo
UGFzc1JlZlB0cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpCisg
ICAgOiBtX25vZGUobm9kZSkKKyAgICAsIG1fcmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0KQor
eworICAgIEFTU0VSVChtX25vZGUpOworICAgIEFTU0VSVChtX3JlbGF0ZWRUYXJnZXQpOworfQor
Cit2b2lkIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjphZGp1c3QoVmVjdG9yPEV2ZW50Q29u
dGV4dD4mIGFuY2VzdG9ycykKK3sKKyAgICBUcmVlU2NvcGUqIGxhc3RUcmVlU2NvcGUgPSAwOwor
ICAgIGZvciAoQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyIHdhbGtlcihtX3JlbGF0ZWRUYXJnZXQu
Z2V0KCkpOyB3YWxrZXIuZ2V0KCk7IHdhbGtlci5wYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2lu
dEFuZFNoYWRvd1Jvb3QoKSkgeworICAgICAgICBUcmVlU2NvcGUqIHNjb3BlID0gd2Fsa2VyLmdl
dCgpLT50cmVlU2NvcGUoKTsKKyAgICAgICAgLy8gU2tpcHMgYWRkaW5nIGEgbm9kZSB0byB0aGUg
bWFwIGlmIHRyZWVTY29wZSBkb2VzIG5vdCBjaGFuZ2UuCisgICAgICAgIGlmIChzY29wZSAhPSBs
YXN0VHJlZVNjb3BlKQorICAgICAgICAgICAgbV9yZWxhdGVkVGFyZ2V0TWFwLmFkZChzY29wZSwg
d2Fsa2VyLmdldCgpKTsKKyAgICAgICAgbGFzdFRyZWVTY29wZSA9IHNjb3BlOworICAgIH0KKwor
ICAgIGxhc3RUcmVlU2NvcGUgPSAwOworICAgIEV2ZW50VGFyZ2V0KiBhZGp1c3RlZFJlbGF0ZWRU
YXJnZXQgPSAwOworICAgIGZvciAoVmVjdG9yPEV2ZW50Q29udGV4dD46Oml0ZXJhdG9yIGl0ZXIg
PSBhbmNlc3RvcnMuYmVnaW4oKTsgaXRlciA8IGFuY2VzdG9ycy5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSBpdGVyLT5ub2RlKCktPnRyZWVTY29wZSgpOworICAg
ICAgICBpZiAoc2NvcGUgPT0gbGFzdFRyZWVTY29wZSkgeworICAgICAgICAgICAgLy8gUmUtdXNl
IHRoZSBwcmV2aW91cyBhZGp1c3RlZFJlbGF0ZWRUYXJnZXQgaWYgdHJlZVNjb3BlIGRvZXMgbm90
IGNoYW5nZS4KKyAgICAgICAgICAgIGl0ZXItPnNldFJlbGF0ZWRUYXJnZXQoYWRqdXN0ZWRSZWxh
dGVkVGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkanVzdGVkUmVsYXRl
ZFRhcmdldCA9IGZpbmRSZWxhdGVkVGFyZ2V0KHNjb3BlKTsKKyAgICAgICAgICAgIGl0ZXItPnNl
dFJlbGF0ZWRUYXJnZXQoYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAg
ICBsYXN0VHJlZVNjb3BlID0gc2NvcGU7CisgICAgICAgIGlmIChpdGVyLT50YXJnZXQoKSA9PSBh
ZGp1c3RlZFJlbGF0ZWRUYXJnZXQpIHsKKyAgICAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoaW5n
IHNob3VsZCBiZSBzdG9wcGVkIGhlcmUuCisgICAgICAgICAgICBhbmNlc3RvcnMuc2hyaW5rKGl0
ZXIgLSBhbmNlc3RvcnMuYmVnaW4oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KK30KKworRXZlbnRUYXJnZXQqIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5k
UmVsYXRlZFRhcmdldChUcmVlU2NvcGUqIHNjb3BlKQoreworICAgIFZlY3RvcjxUcmVlU2NvcGUq
PiBwYXJlbnRUcmVlU2NvcGVzOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gMDsK
KyAgICB3aGlsZSAoc2NvcGUpIHsKKyAgICAgICAgcGFyZW50VHJlZVNjb3Blcy5hcHBlbmQoc2Nv
cGUpOworICAgICAgICBSZWxhdGVkVGFyZ2V0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1f
cmVsYXRlZFRhcmdldE1hcC5maW5kKHNjb3BlKTsKKyAgICAgICAgaWYgKGZvdW5kICE9IG1fcmVs
YXRlZFRhcmdldE1hcC5lbmQoKSkgeworICAgICAgICAgICAgcmVsYXRlZFRhcmdldCA9IGZvdW5k
LT5zZWNvbmQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzY29wZSA9
IHNjb3BlLT5wYXJlbnRUcmVlU2NvcGUoKTsKKyAgICB9CisgICAgZm9yIChWZWN0b3I8VHJlZVNj
b3BlKj46Oml0ZXJhdG9yIGl0ZXIgPSBwYXJlbnRUcmVlU2NvcGVzLmJlZ2luKCk7IGl0ZXIgPCBw
YXJlbnRUcmVlU2NvcGVzLmVuZCgpOyArK2l0ZXIpCisgICAgICBtX3JlbGF0ZWRUYXJnZXRNYXAu
YWRkKCppdGVyLCByZWxhdGVkVGFyZ2V0KTsKKyAgICByZXR1cm4gcmVsYXRlZFRhcmdldDsKK30K
KwogYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgUGFzc1Jl
ZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlhdG9yKQogewogICAgIEFTU0VSVCghZXZl
bnREaXNwYXRjaEZvcmJpZGRlbigpKTsKQEAgLTExNiwxMDQgKzE3NiwxOCBAQCB2b2lkIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiBub2RlLCBQYXNzUmVmUHRy
PEV2ZW50PiB1bmRlcgogICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5yZW1v
dmUobm9kZSk7CiB9CiAKLVBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6
YWRqdXN0VG9TaGFkb3dCb3VuZGFyaWVzKFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCwg
Y29uc3QgVmVjdG9yPE5vZGUqPiByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzKQotewotICAgIFZlY3Rv
cjxFdmVudENvbnRleHQ+Ojpjb25zdF9pdGVyYXRvciBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IG1f
YW5jZXN0b3JzLmVuZCgpOwotICAgIC8vIEFzc3VtZSBkaXZlcmdlbnQgYm91bmRhcnkgaXMgdGhl
IHJlbGF0ZWRUYXJnZXQgaXRzZWxmIChpbiBvdGhlciB3b3JkcywgcmVsYXRlZCB0YXJnZXQgYW5j
ZXN0b3IgY2hhaW4gZG9lcyBub3QgY3Jvc3MgYW55IHNoYWRvdyBET00gYm91bmRhcmllcykuCi0g
ICAgVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgZmlyc3REaXZlcmdlbnRCb3VuZGFyeSA9
IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsKLQotICAgIFZlY3RvcjxFdmVudENvbnRl
eHQ+Ojpjb25zdF9pdGVyYXRvciB0YXJnZXRBbmNlc3RvciA9IG1fYW5jZXN0b3JzLmVuZCgpOwot
ICAgIC8vIFdhbGsgZG93biBmcm9tIHRoZSB0b3AsIGxvb2tpbmcgZm9yIGxvd2VzdCBjb21tb24g
YW5jZXN0b3IsIGFsc28gbW9uaXRvcmluZyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMuCi0gICAgYm9v
bCBkaXZlcmdlZCA9IGZhbHNlOwotICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0
b3IgaSA9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuZW5kKCkgLSAxOyBpID49IHJlbGF0ZWRUYXJn
ZXRBbmNlc3RvcnMuYmVnaW4oKTsgLS1pKSB7Ci0gICAgICAgIGlmIChkaXZlcmdlZCkgewotICAg
ICAgICAgICAgaWYgKCgqaSktPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICAgICAgZmly
c3REaXZlcmdlbnRCb3VuZGFyeSA9IGkgKyAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAodGFyZ2V0QW5jZXN0b3IgPT0gbV9hbmNlc3RvcnMuYmVnaW4oKSkgewotICAgICAgICAgICAg
ZGl2ZXJnZWQgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0YXJnZXRBbmNlc3Rvci0tOwotCi0gICAgICAgIGlmICgoKmkpLT5pc1NoYWRvd1Jvb3Qo
KSkKLSAgICAgICAgICAgIGxvd2VzdENvbW1vbkJvdW5kYXJ5ID0gdGFyZ2V0QW5jZXN0b3I7Ci0K
LSAgICAgICAgaWYgKCgqaSkgIT0gKCp0YXJnZXRBbmNlc3Rvcikubm9kZSgpKQotICAgICAgICAg
ICAgZGl2ZXJnZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICghZGl2ZXJnZWQpIHsKLSAgICAg
ICAgLy8gVGhlIHJlbGF0ZWRUYXJnZXQgaXMgYW4gYW5jZXN0b3Igb3Igc2hhZG93SG9zdCBvZiB0
aGUgdGFyZ2V0LgotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBmaXJzdCBjaGVjayBvbmNl
IGNvbnZlcnNpb24gdG8gbmV3IHNoYWRvdyBET00gaXMgY29tcGxldGUgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvNDg2OTg+Ci0gICAgICAgIGlmIChtX25vZGUtPnNoYWRvd0hvc3QoKSA9PSByZWxhdGVk
VGFyZ2V0LmdldCgpIHx8IGlzU2hhZG93SG9zdChyZWxhdGVkVGFyZ2V0LmdldCgpKSkgewotICAg
ICAgICAgICAgVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIHJlbGF0ZWRUYXJn
ZXRDaGlsZCA9IHRhcmdldEFuY2VzdG9yIC0gMTsKLSAgICAgICAgICAgIGlmIChyZWxhdGVkVGFy
Z2V0Q2hpbGQgPj0gbV9hbmNlc3RvcnMuYmVnaW4oKSAmJiByZWxhdGVkVGFyZ2V0Q2hpbGQtPm5v
ZGUoKS0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRh
cnkgPSByZWxhdGVkVGFyZ2V0Q2hpbGQ7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCgqZmly
c3REaXZlcmdlbnRCb3VuZGFyeSkgPT0gbV9ub2RlLmdldCgpKSB7Ci0gICAgICAgIC8vIFNpbmNl
IGFuY2VzdG9ycyBkb2VzIG5vdCBjb250YWluIHRhcmdldCBpdHNlbGYsIHdlIG11c3QgYWNjb3Vu
dAotICAgICAgICAvLyBmb3IgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGFyZ2V0IGlzIGEgc2hhZG93
SG9zdCBvZiByZWxhdGVkVGFyZ2V0Ci0gICAgICAgIC8vIGFuZCB0aHVzIHNlcnZlcyBhcyB0aGUg
bG93ZXN0Q29tbW9uQm91bmRhcnkuCi0gICAgICAgIC8vIEx1Y2tpbHksIGluIHRoaXMgY2FzZSB0
aGUgZmlyc3REaXZlcmdlbnRCb3VuZGFyeSBpcyB0YXJnZXQuCi0gICAgICAgIGxvd2VzdENvbW1v
bkJvdW5kYXJ5ID0gbV9hbmNlc3RvcnMuYmVnaW4oKTsKLSAgICAgICAgbV9zaG91bGRQcmV2ZW50
RGlzcGF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChsb3dlc3RDb21tb25Cb3VuZGFyeSAh
PSBtX2FuY2VzdG9ycy5lbmQoKSkgewotICAgICAgICAvLyBUcmltIGFuY2VzdG9ycyB0byBsb3dl
c3RDb21tb25Cb3VuZGFyeSB0byBrZWVwIGV2ZW50cyBpbnNpZGUgb2YgdGhlIGNvbW1vbiBzaGFk
b3cgRE9NIHN1YnRyZWUuCi0gICAgICAgIG1fYW5jZXN0b3JzLnNocmluayhsb3dlc3RDb21tb25C
b3VuZGFyeSAtIG1fYW5jZXN0b3JzLmJlZ2luKCkpOwotICAgIH0KLSAgICAvLyBTZXQgZXZlbnQn
cyByZWxhdGVkIHRhcmdldCB0byB0aGUgZmlyc3QgZW5jb3VudGVyZWQgc2hhZG93IERPTSBib3Vu
ZGFyeSBpbiB0aGUgZGl2ZXJnZW50IHN1YnRyZWUuCi0gICAgcmV0dXJuIGZpcnN0RGl2ZXJnZW50
Qm91bmRhcnkgIT0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpID8gKmZpcnN0RGl2ZXJn
ZW50Qm91bmRhcnkgOiByZWxhdGVkVGFyZ2V0OwotfQotCi1pbmxpbmUgc3RhdGljIGJvb2wgYW5j
ZXN0b3JzQ3Jvc3NTaGFkb3dCb3VuZGFyaWVzKGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBh
bmNlc3RvcnMpCi17Ci0gICAgcmV0dXJuIGFuY2VzdG9ycy5pc0VtcHR5KCkgfHwgYW5jZXN0b3Jz
LmZpcnN0KCkubm9kZSgpID09IGFuY2VzdG9ycy5sYXN0KCkubm9kZSgpOwotfQogCi0vLyBGSVhN
RTogT25jZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI5NjMgbGFu
ZHMsIHRoaXMgc2hvdWxkCi0vLyBiZSBncmVhdGx5IGltcHJvdmVkLiBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDI1LgotUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gRXZlbnREaXNwYXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFz
c1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCkKK3ZvaWQgRXZlbnREaXNwYXRj
aGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVudFRh
cmdldD4gcHJwUmVsYXRlZFRhcmdldCkKIHsKICAgICBpZiAoIXBycFJlbGF0ZWRUYXJnZXQpCi0g
ICAgICAgIHJldHVybiAwOwotCisgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8Tm9kZT4gcmVs
YXRlZFRhcmdldCA9IHBycFJlbGF0ZWRUYXJnZXQtPnRvTm9kZSgpOwogICAgIGlmICghcmVsYXRl
ZFRhcmdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOb2RlKiB0YXJnZXQgPSBtX25vZGUu
Z2V0KCk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBwcnBSZWxhdGVkVGFyZ2V0
OwotCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fbm9kZS5nZXQoKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50KTsKLQotICAgIC8vIENhbGN1bGF0
ZSBlYXJseSBpZiB0aGUgY29tbW9uIGJvdW5kYXJ5IGlzIGV2ZW4gcG9zc2libGUgYnkgbG9va2lu
ZyBhdAotICAgIC8vIGFuY2VzdG9ycyBzaXplIGFuZCBpZiB0aGUgcmV0YXJnZXRpbmcgaGFzIG9j
Y3VyZWQgKGluZGljYXRpbmcgdGhlIHByZXNlbmNlIG9mIHNoYWRvdyBET00gYm91bmRhcmllcyku
Ci0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGJvdW5kYXJpZXMgZGV0ZWN0ZWQsIHRoZSB0YXJnZXQg
YW5kIHJlbGF0ZWQgdGFyZ2V0IGNhbid0IGhhdmUgYSBjb21tb24gYm91bmRhcnkuCi0gICAgYm9v
bCBub0NvbW1vbkJvdW5kYXJ5ID0gYW5jZXN0b3JzQ3Jvc3NTaGFkb3dCb3VuZGFyaWVzKG1fYW5j
ZXN0b3JzKTsKLQotICAgIFZlY3RvcjxOb2RlKj4gcmVsYXRlZFRhcmdldEFuY2VzdG9yczsKLSAg
ICBOb2RlKiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IHJlbGF0ZWRUYXJnZXQuZ2V0KCk7Ci0g
ICAgZm9yIChOb2RlKiBuID0gb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7IG47IG4gPSBuLT5wYXJl
bnRPckhvc3ROb2RlKCkpIHsKLSAgICAgICAgaWYgKG4tPmlzU2hhZG93Um9vdCgpKQotICAgICAg
ICAgICAgb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSBuLT5wYXJlbnRPckhvc3ROb2RlKCk7Ci0g
ICAgICAgIGlmICghbm9Db21tb25Cb3VuZGFyeSkKLSAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXRB
bmNlc3RvcnMuYXBwZW5kKG4pOwotICAgIH0KLQotICAgIC8vIFNob3J0LWNpcmN1aXQgdGhlIGZh
c3QgY2FzZSB3aGVuIHdlIGtub3cgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgYSBjb21t
b24gYm91bmRhcnkuCi0gICAgaWYgKG5vQ29tbW9uQm91bmRhcnkpCi0gICAgICAgIHJldHVybiBv
dXRlcm1vc3RTaGFkb3dCb3VuZGFyeTsKLQotICAgIHJldHVybiBhZGp1c3RUb1NoYWRvd0JvdW5k
YXJpZXMocmVsYXRlZFRhcmdldC5yZWxlYXNlKCksIHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwor
ICAgIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKG1fbm9kZSwgcmVsYXRlZFRhcmdldC5yZWxl
YXNlKCkpLmFkanVzdChtX2FuY2VzdG9ycyk7CiB9CiAKIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnRE
aXNwYXRjaGVyKE5vZGUqIG5vZGUpCkBAIC0yMjcsMzAgKzIwMSwzOSBAQCBFdmVudERpc3BhdGNo
ZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2RlKiBub2RlKQogCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6
ZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghbV9ub2RlLT5p
bkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChtX2FuY2VzdG9yc0luaXRp
YWxpemVkKQogICAgICAgICByZXR1cm47CiAKKyAgICBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIg
YW5jZXN0b3JXYWxrZXIobV9ub2RlLmdldCgpKTsKKyAgICBFdmVudFRhcmdldCogb3JpZ2luYWxU
YXJnZXQgPSBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3RvcldhbGtl
ci5nZXQoKSk7CisgICAgbV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4dChtX25vZGUuZ2V0
KCksIG9yaWdpbmFsVGFyZ2V0LCBvcmlnaW5hbFRhcmdldCkpOwogICAgIG1fYW5jZXN0b3JzSW5p
dGlhbGl6ZWQgPSB0cnVlOwogCi0gICAgTm9kZSogYW5jZXN0b3IgPSBtX25vZGUuZ2V0KCk7Ci0g
ICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1
bGVzKGFuY2VzdG9yKTsKKyAgICBpZiAoIW1fbm9kZS0+aW5Eb2N1bWVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8RXZlbnRUYXJnZXQqPiB0YXJnZXRTdGFjazsKKyAgICB0YXJn
ZXRTdGFjay5hcHBlbmQob3JpZ2luYWxUYXJnZXQpOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAg
ICAgIGlmIChhbmNlc3Rvci0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChkZXRl
cm1pbmVEaXNwYXRjaEJlaGF2aW9yKGV2ZW50LCBhbmNlc3RvcikgPT0gU3RheUluc2lkZVNoYWRv
d0RPTSkKKyAgICAgICAgaWYgKGFuY2VzdG9yV2Fsa2VyLmdldCgpLT5pc1NoYWRvd1Jvb3QoKSkg
eworICAgICAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQsIGFuY2Vz
dG9yV2Fsa2VyLmdldCgpKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQogICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnNoYWRvd0hvc3QoKTsK
LSAgICAgICAgICAgIGlmICghbV9ub2RlLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICB0YXJnZXQgPSBhbmNlc3RvcjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhbmNlc3Rv
ciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7Ci0KLSAgICAgICAg
aWYgKCFhbmNlc3RvcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2FuY2VzdG9y
cy5hcHBlbmQoRXZlbnRDb250ZXh0KGFuY2VzdG9yLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdU
YXJnZXRSdWxlcyhhbmNlc3RvciksIHRhcmdldCkpOworICAgICAgICAgICAgYW5jZXN0b3JXYWxr
ZXIucGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCk7CisgICAgICAg
ICAgICBpZiAoIWFuY2VzdG9yV2Fsa2VyLmdldCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGlmICghbV9ub2RlLT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAgICAg
ICAgIHRhcmdldFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0
U3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5hcHBlbmQo
YW5jZXN0b3JXYWxrZXIuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYW5jZXN0b3JXYWxrZXIucGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRB
bmRTaGFkb3dSb290KCk7CisgICAgICAgICAgICBpZiAoIWFuY2VzdG9yV2Fsa2VyLmdldCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChpc0luc2VydGlvblBvaW50
KGFuY2VzdG9yV2Fsa2VyLmdldCgpKSAmJiB0b0luc2VydGlvblBvaW50KGFuY2VzdG9yV2Fsa2Vy
LmdldCgpKS0+aXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5hcHBlbmQo
YW5jZXN0b3JXYWxrZXIuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIG1fYW5jZXN0b3JzLmFw
cGVuZChFdmVudENvbnRleHQoYW5jZXN0b3JXYWxrZXIuZ2V0KCksIGV2ZW50VGFyZ2V0UmVzcGVj
dGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yV2Fsa2VyLmdldCgpKSwgdGFyZ2V0U3RhY2subGFz
dCgpKSk7CiAgICAgfQogfQogCkBAIC0yNzEsNyArMjU0LDcgQEAgYm9vbCBFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBHaXZl
IHRoZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgYmVmb3JlIERPTSBldmVu
dCBoYW5kbGVycyBnZXQgYSBjcmFjay4KICAgICB2b2lkKiBkYXRhID0gbV9ub2RlLT5wcmVEaXNw
YXRjaEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7Ci0gICAgaWYgKG1fc2hvdWxkUHJldmVudERp
c3BhdGNoIHx8IGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICBpZiAobV9hbmNlc3Rv
cnMuaXNFbXB0eSgpIHx8IG1fc2hvdWxkUHJldmVudERpc3BhdGNoIHx8IGV2ZW50LT5wcm9wYWdh
dGlvblN0b3BwZWQoKSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKICAgICAvLyBU
cmlnZ2VyIGNhcHR1cmluZyBldmVudCBoYW5kbGVycywgc3RhcnRpbmcgYXQgdGhlIHRvcCBhbmQg
d29ya2luZyBvdXIgd2F5IGRvd24uCkBAIC0yODAsOCArMjYzLDggQEAgYm9vbCBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgaWYgKHdp
bmRvd0NvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpICYmIGV2ZW50LT5wcm9w
YWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKLSAgICBm
b3IgKHNpemVfdCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpOyBpOyAtLWkpIHsKLSAgICAgICAgY29u
c3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpLTFdOworICAgIGZv
ciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9ycy5zaXplKCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAg
ICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07CiAg
ICAgICAgIGlmIChldmVudENvbnRleHQuY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpKSB7CiAg
ICAgICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTI5Niw3ICsyNzksNyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVu
dDo6QVRfVEFSR0VUKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KG9yaWdpbmFsVGFyZ2V0LmdldCgp
KTsKICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdU
YXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKLSAgICBtX25vZGUtPmhhbmRsZUxvY2FsRXZlbnRz
KGV2ZW50LmdldCgpKTsKKyAgICBtX2FuY2VzdG9yc1swXS5oYW5kbGVMb2NhbEV2ZW50cyhldmVu
dC5nZXQoKSk7CiAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAg
Z290byBkb25lRGlzcGF0Y2hpbmc7CiAKQEAgLTMwNSw3ICsyODgsNyBAQCBib29sIEV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICAgICAg
ZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKIAogICAgICAgICBz
aXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXpl
OyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0g
bV9hbmNlc3RvcnNbaV07CiAgICAgICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJn
ZXRTYW1lQXNUYXJnZXQoKSkKICAgICAgICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShF
dmVudDo6QVRfVEFSR0VUKTsKQEAgLTMzOSw3ICszMjIsNyBAQCBkb25lRGlzcGF0Y2hpbmc6CiAg
ICAgICAgIC8vIHNhbWUgb3JkZXIgYXMgdGhlIGJ1YmJsaW5nIHBoYXNlLgogICAgICAgICBpZiAo
ZXZlbnQtPmJ1YmJsZXMoKSkgewogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2FuY2VzdG9y
cy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1bHRQcmV2ZW50
ZWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQpAQCAt
Mzc5LDExICszNjIsNiBAQCBFdmVudERpc3BhdGNoQmVoYXZpb3IgRXZlbnREaXNwYXRjaGVyOjpk
ZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiBldmVudCwgTgogICAgIFVOVVNFRF9QQVJB
TShzaGFkb3dSb290KTsKICNlbmRpZgogCi0gICAgLy8gUGVyIFhCTCAyLjAgc3BlYywgbXV0YXRp
b24gZXZlbnRzIHNob3VsZCBuZXZlciBjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJ5OgotICAgIC8v
IGh0dHA6Ly9kZXYudzMub3JnLzIwMDYveGJsMi8jZXZlbnQtZmxvdy1hbmQtdGFyZ2V0aW5nLWFj
cm9zcy1zaGFkb3ctcwotICAgIGlmIChldmVudC0+aGFzSW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JNdXRhdGlvbkV2ZW50KSkKLSAgICAgICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFk
b3dET007Ci0KICAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0
byBjcm9zcyB0aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCiAgICAgLy8gQ2hhbmdpbmcgdGhp
cyBicmVha3MgZXhpc3Rpbmcgc2l0ZXMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dERpc3BhdGNoZXIuaAppbmRleCA4NWFlZmM0OTMwNDNkNTE3ZWM5NzczNGU2MjE4YWFkODFkMTc5
MDY3Li42Zjg5MWMxMzQyN2M2NmFjZmU4YTNhN2RjZjEzYTMxZmFkNTZiMGMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEV2ZW50
RGlzcGF0Y2hlcl9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00MCwxMiArNDEsMjYgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVu
dDsKK2NsYXNzIFRyZWVTY29wZTsKIAogZW51bSBFdmVudERpc3BhdGNoQmVoYXZpb3IgewogICAg
IFJldGFyZ2V0RXZlbnQsCiAgICAgU3RheUluc2lkZVNoYWRvd0RPTQogfTsKIAorY2xhc3MgRXZl
bnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIgeworcHVibGljOgorICAgIEV2ZW50UmVsYXRlZFRhcmdl
dEFkanVzdGVyKFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdl
dCk7CisgICAgdm9pZCBhZGp1c3QoVmVjdG9yPEV2ZW50Q29udGV4dD4mKTsKK3ByaXZhdGU6Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFRyZWVTY29wZSosIEV2ZW50VGFyZ2V0Kj4gUmVsYXRlZFRhcmdl
dE1hcDsKKyAgICBFdmVudFRhcmdldCogZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKik7CisK
KyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBtX3JlbGF0ZWRUYXJn
ZXQ7CisgICAgUmVsYXRlZFRhcmdldE1hcCBtX3JlbGF0ZWRUYXJnZXRNYXA7Cit9OworCiBjbGFz
cyBFdmVudERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGRpc3BhdGNoRXZl
bnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPik7CkBAIC01NCwxMyAr
NjksMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2so
Tm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCwgYm9vbCBzZW5kTW91c2VF
dmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKTsKIAogICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gYWRqdXN0UmVs
YXRlZFRhcmdldChFdmVudCosIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+KTsKKyAgICB2b2lkIGFk
anVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxh
dGVkVGFyZ2V0KTsKICAgICBOb2RlKiBub2RlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRXZl
bnREaXNwYXRjaGVyKE5vZGUqKTsKIAotICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGFkanVz
dFRvU2hhZG93Qm91bmRhcmllcyhQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQsIGNvbnN0
IFZlY3RvcjxOb2RlKj4gcmVsYXRlZFRhcmdldEFuY2VzdG9ycyk7CiAgICAgRXZlbnREaXNwYXRj
aEJlaGF2aW9yIGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqLCBOb2RlKiBzaGFkb3dS
b290KTsKICAgICB2b2lkIGVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50Kik7CiAgICAgY29uc3Qg
RXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNw
cAppbmRleCBjMzY4OWM2ZGQ0NjNhZWUwNTYyODgxNzJlMjU0ZGMzZWNmYjI1ZDBiLi5jZjJlMjY2
MGE2NWUzNjExZjRiNDdlY2Y4ZWNlN2FmMjczN2VmNTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZl
bnQuY3BwCkBAIC0yMDEsOCArMjAxLDggQEAgYm9vbCBNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRv
cjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnMKICAgICBp
ZiAoZXZlbnQoKS0+dHlwZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBT
aG91bGRuJ3QgaGFwcGVuLgogCi0gICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0
ID0gZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBldmVudCgpLT5yZWxh
dGVkVGFyZ2V0KCkpOwotICAgIGV2ZW50KCktPnNldFJlbGF0ZWRUYXJnZXQocmVsYXRlZFRhcmdl
dCk7CisgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSBldmVudCgpLT5yZWxhdGVkVGFy
Z2V0KCk7CisgICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCByZWxh
dGVkVGFyZ2V0KTsKIAogICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoRXZlbnQoZXZlbnQoKSk7CiAg
ICAgYm9vbCBzd2FsbG93RXZlbnQgPSBldmVudCgpLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGV2ZW50
KCktPmRlZmF1bHRQcmV2ZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9N
b3VzZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCmluZGV4IDFmZTZm
OTAyMGJiMzE1YmRjMDEwNDYxM2E3N2I5NjM0OWNlNmRjYTEuLjU3NmI1NzM3OWQ4MjdjNzhhMGU1
YjA0OTExYzcyYWYyZjEwMjk3N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaApAQCAtMTIxLDYg
KzEyMSwxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50
RGlzcGF0Y2hlciopIGNvbnN0OwogfTsKIAoraW5saW5lIE1vdXNlRXZlbnQqIHRvTW91c2VFdmVu
dChFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKGV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZl
bnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIE1vdXNlRXZlbnRfaApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDlhZWVmOTgwYTFjZWYzYmRhMDRiNzExNjliZmY1YmY4ZDk3MTdlZWEuLmRiNGNjNmEzMmIwZTNi
N2ZiOTZjZDZkZGJjNzQ1MmJlNTQzMDdlZWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0w
NS0xNSAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVt
ZW50IGEgU2hhZG93IERPTSBzcGVjJ3Mgc2VjdGlvbiA2ICdFdmVudHMnLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFk
b3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmcuaHRtbDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZWZsL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vcXQv
U2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW5jYWlyby9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3drMi9Ta2lwcGVkOgor
CiAyMDEyLTA1LTE2ICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgQXVkaW9QYXJhbSBtdXN0IHN1cHBvcnQgZmFuLWluIChtdWx0aXBsZSBhdWRpbyBjb25uZWN0
aW9ucykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9t
LWV2ZW50LWRpc3BhdGNoaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3No
YWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iYjExNjc4YTE3MDliZjYyYzQzYjZjMjFlYjQ2MWRjOGQ3ZWQ4ZGExCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0
Y2hpbmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQ2IEBACitUZXN0cyB0byBlbnN1cmUgdGhh
dCBldmVudCBkaXNwYXRjaGluZyBiZWhhdmVzIGFzIHRoZSBTaGFkb3cgRE9NIHNwZWMgZGVzY3Jp
YmVzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCisKK0NvbXBvc2VkIFNoYWRv
dyBUcmVlIHdpbGwgYmU6CitESVYJIGlkPXNhbmRib3gKKwlESVYJIGlkPXRvcAorCQlESVYJIGlk
PXNoYWRvdy1ob3N0CisJCQlESVYJIGlkPWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisJCQlESVYJ
IGlkPXNoYWRvdy1yb290LWNoaWxkCisKKworTW92aW5nIG1vdXNlIGZyb20gc2hhZG93LWhvc3Qg
dG8gc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQKKworICBtb3VzZW91dAorCisgIG1vdXNl
b3ZlcgorICAgICBAc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQp
IChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRv
dy1yb290LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKK01vdmluZyBtb3VzZSBmcm9t
IHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkIHRvIHNoYWRvdy1ob3N0CisKKyAgbW91c2Vv
dXQKKyAgICAgQHNoYWRvdy1yb290LWNoaWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAo
cmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ct
cm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNlb3ZlcgorCitNb3Zp
bmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdCB0byBkaXN0cmlidXRlZC1saWdodC1jaGlsZAorCisg
IG1vdXNlb3V0CisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0
ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1o
b3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91c2VvdmVyCisg
ICAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250
ZW50KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBj
b250ZW50KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0
OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBA
dG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhv
c3QpCisKK01vdmluZyBtb3VzZSBmcm9tIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkIHRvIHNoYWRv
dy1ob3N0CisKKyAgbW91c2VvdXQKKyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJn
ZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAg
IEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAg
QHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAg
ICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRl
ZDogc2hhZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hp
bGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBtb3VzZW92ZXIKKyAgICAgQHNoYWRvdy1o
b3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hp
bGQpCisgICAgIEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCkKKworTW92aW5nIG1vdXNlIGZyb20gc2hhZG93LWhvc3Qvc2hhZG93LXJv
b3QtY2hpbGQgdG8gZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQKKworICBtb3VzZW91dAorICAgICBA
c2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBj
b250ZW50KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQpIChy
ZWxhdGVkOiBjb250ZW50KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3Qp
IChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKyAgICAgQHRvcCAodGFyZ2V0OiBz
aGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorCisgIG1vdXNl
b3ZlcgorICAgICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgKHRhcmdldDogZGlzdHJpYnV0ZWQt
bGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQGNvbnRlbnQgKHRhcmdl
dDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290LWNoaWxkKQorICAgICBAc2hhZG93LXJv
b3QgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1yb290LWNoaWxkKQorICAgICBA
c2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBz
aGFkb3ctaG9zdCkKKyAgICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkg
KHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCitNb3ZpbmcgbW91c2UgZnJvbSBkaXN0cmlidXRlZC1s
aWdodC1jaGlsZCB0byBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZAorCisgIG1vdXNlb3V0
CisgICAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFyZ2V0OiBj
b250ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ctcm9vdCAo
dGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFk
b3ctaG9zdCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRv
dy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVs
YXRlZDogc2hhZG93LWhvc3QpCisKKyAgbW91c2VvdmVyCisgICAgIEBzaGFkb3ctcm9vdC1jaGls
ZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBz
aGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6IGNvbnRlbnQp
CisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3Ry
aWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVs
YXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKworQ29tcG9zZWQgU2hhZG93IFRyZWUg
d2lsbCBiZToKK0RJVgkgaWQ9c2FuZGJveAorCURJVgkgaWQ9dG9wCisJCURFVEFJTFMJIGlkPWRl
dGFpbHMKKwkJCVNVTU1BUlkJIGlkPXN1bW1hcnkKKwkJCQlESVYJCisKKworTW92aW5nIG1vdXNl
IGZyb20gZGV0YWlscyB0byBzdW1tYXJ5CisKKyAgbW91c2VvdXQKKyAgICAgQGRldGFpbHMgKHRh
cmdldDogZGV0YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisgICAgIEB0b3AgKHRhcmdldDogZGV0
YWlscykgKHJlbGF0ZWQ6IHN1bW1hcnkpCisKKyAgbW91c2VvdmVyCisgICAgIEBzdW1tYXJ5ICh0
YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorICAgICBAZGV0YWlscyAodGFyZ2V0
OiBzdW1tYXJ5KSAocmVsYXRlZDogZGV0YWlscykKKyAgICAgQHRvcCAodGFyZ2V0OiBzdW1tYXJ5
KSAocmVsYXRlZDogZGV0YWlscykKKworTW92aW5nIG1vdXNlIGZyb20gc3VtbWFyeSB0byBkZXRh
aWxzCisKKyAgbW91c2VvdXQKKyAgICAgQHN1bW1hcnkgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0
ZWQ6IGRldGFpbHMpCisgICAgIEBkZXRhaWxzICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBk
ZXRhaWxzKQorICAgICBAdG9wICh0YXJnZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQor
CisgIG1vdXNlb3ZlcgorICAgICBAZGV0YWlscyAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDog
c3VtbWFyeSkKKyAgICAgQHRvcCAodGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkK
KworCitDb21wb3NlZCBTaGFkb3cgVHJlZSB3aWxsIGJlOgorRElWCSBpZD1zYW5kYm94CisJRElW
CSBpZD10b3AKKwkJRElWCSBpZD1BCisJCQlESVYJIGlkPUIKKwkJCQlESVYJIGlkPUcKKwkJCQkJ
RElWCSBpZD1KCisJCQkJCQlESVYJIGlkPUMKKwkJCQkJCQlESVYJIGlkPUQKKwkJCQkJRElWCSBp
ZD1MCisJCQkJCQlESVYJIGlkPUUKKwkJCQkJCQlESVYJIGlkPUYKKworCitNb3ZpbmcgbW91c2Ug
ZnJvbSBGIHRvIEQKKworICBtb3VzZW91dAorICAgICBARiAodGFyZ2V0OiBGKSAocmVsYXRlZDog
RCkKKyAgICAgQEUgKHRhcmdldDogRikgKHJlbGF0ZWQ6IEQpCisgICAgIEBJICh0YXJnZXQ6IEkp
IChyZWxhdGVkOiBIKQorICAgICBATSAodGFyZ2V0OiBNKSAocmVsYXRlZDogSykKKyAgICAgQE8g
KHRhcmdldDogTykgKHJlbGF0ZWQ6IEspCisgICAgIEBzaGFkb3ctcm9vdC1MICh0YXJnZXQ6IE8p
IChyZWxhdGVkOiBLKQorICAgICBATCAodGFyZ2V0OiBNKSAocmVsYXRlZDogSykKKyAgICAgQHNo
YWRvdy1yb290LUcgKHRhcmdldDogTSkgKHJlbGF0ZWQ6IEspCisgICAgIEBHICh0YXJnZXQ6IEkp
IChyZWxhdGVkOiBIKQorICAgICBAc2hhZG93LXJvb3QtQiAodGFyZ2V0OiBJKSAocmVsYXRlZDog
SCkKKyAgICAgQEIgKHRhcmdldDogRikgKHJlbGF0ZWQ6IEQpCisgICAgIEBBICh0YXJnZXQ6IEYp
IChyZWxhdGVkOiBEKQorICAgICBAdG9wICh0YXJnZXQ6IEYpIChyZWxhdGVkOiBEKQorCisgIG1v
dXNlb3ZlcgorICAgICBARCAodGFyZ2V0OiBEKSAocmVsYXRlZDogRikKKyAgICAgQEMgKHRhcmdl
dDogRCkgKHJlbGF0ZWQ6IEYpCisgICAgIEBIICh0YXJnZXQ6IEgpIChyZWxhdGVkOiBJKQorICAg
ICBASyAodGFyZ2V0OiBLKSAocmVsYXRlZDogTSkKKyAgICAgQE4gKHRhcmdldDogTikgKHJlbGF0
ZWQ6IE0pCisgICAgIEBzaGFkb3ctcm9vdC1KICh0YXJnZXQ6IE4pIChyZWxhdGVkOiBNKQorICAg
ICBASiAodGFyZ2V0OiBLKSAocmVsYXRlZDogTSkKKyAgICAgQHNoYWRvdy1yb290LUcgKHRhcmdl
dDogSykgKHJlbGF0ZWQ6IE0pCisgICAgIEBHICh0YXJnZXQ6IEgpIChyZWxhdGVkOiBJKQorICAg
ICBAc2hhZG93LXJvb3QtQiAodGFyZ2V0OiBIKSAocmVsYXRlZDogSSkKKyAgICAgQEIgKHRhcmdl
dDogRCkgKHJlbGF0ZWQ6IEYpCisgICAgIEBBICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBGKQorICAg
ICBAdG9wICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBGKQorCitNb3ZpbmcgbW91c2UgZnJvbSBCL0cv
TCB0byBECisKKyAgbW91c2VvdXQKKyAgICAgQEwgKHRhcmdldDogTCkgKHJlbGF0ZWQ6IEspCisg
ICAgIEBzaGFkb3ctcm9vdC1HICh0YXJnZXQ6IEwpIChyZWxhdGVkOiBLKQorICAgICBARyAodGFy
Z2V0OiBHKSAocmVsYXRlZDogSCkKKyAgICAgQHNoYWRvdy1yb290LUIgKHRhcmdldDogRykgKHJl
bGF0ZWQ6IEgpCisgICAgIEBCICh0YXJnZXQ6IEIpIChyZWxhdGVkOiBEKQorICAgICBAQSAodGFy
Z2V0OiBCKSAocmVsYXRlZDogRCkKKyAgICAgQHRvcCAodGFyZ2V0OiBCKSAocmVsYXRlZDogRCkK
KworICBtb3VzZW92ZXIKKyAgICAgQEQgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEIpCisgICAgIEBD
ICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBCKQorICAgICBASCAodGFyZ2V0OiBIKSAocmVsYXRlZDog
RykKKyAgICAgQEsgKHRhcmdldDogSykgKHJlbGF0ZWQ6IEwpCisgICAgIEBOICh0YXJnZXQ6IE4p
IChyZWxhdGVkOiBMKQorICAgICBAc2hhZG93LXJvb3QtSiAodGFyZ2V0OiBOKSAocmVsYXRlZDog
TCkKKyAgICAgQEogKHRhcmdldDogSykgKHJlbGF0ZWQ6IEwpCisgICAgIEBzaGFkb3ctcm9vdC1H
ICh0YXJnZXQ6IEspIChyZWxhdGVkOiBMKQorICAgICBARyAodGFyZ2V0OiBIKSAocmVsYXRlZDog
RykKKyAgICAgQHNoYWRvdy1yb290LUIgKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEcpCisgICAgIEBC
ICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBCKQorICAgICBAQSAodGFyZ2V0OiBEKSAocmVsYXRlZDog
QikKKyAgICAgQHRvcCAodGFyZ2V0OiBEKSAocmVsYXRlZDogQikKKworTW92aW5nIG1vdXNlIGZy
b20gQi9HL0wgdG8gQi9HL0oKKworICBtb3VzZW91dAorICAgICBATCAodGFyZ2V0OiBMKSAocmVs
YXRlZDogSikKKyAgICAgQHNoYWRvdy1yb290LUcgKHRhcmdldDogTCkgKHJlbGF0ZWQ6IEopCisK
KyAgbW91c2VvdmVyCisgICAgIEBKICh0YXJnZXQ6IEopIChyZWxhdGVkOiBMKQorICAgICBAc2hh
ZG93LXJvb3QtRyAodGFyZ2V0OiBKKSAocmVsYXRlZDogTCkKKworTW92aW5nIG1vdXNlIGZyb20g
QSB0byBECisKKyAgbW91c2VvdXQKKyAgICAgQEEgKHRhcmdldDogQSkgKHJlbGF0ZWQ6IEQpCisg
ICAgIEB0b3AgKHRhcmdldDogQSkgKHJlbGF0ZWQ6IEQpCisKKyAgbW91c2VvdmVyCisgICAgIEBE
ICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBBKQorICAgICBAQyAodGFyZ2V0OiBEKSAocmVsYXRlZDog
QSkKKyAgICAgQEggKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBLICh0YXJnZXQ6IEsp
IChyZWxhdGVkOiBBKQorICAgICBATiAodGFyZ2V0OiBOKSAocmVsYXRlZDogQSkKKyAgICAgQHNo
YWRvdy1yb290LUogKHRhcmdldDogTikgKHJlbGF0ZWQ6IEEpCisgICAgIEBKICh0YXJnZXQ6IEsp
IChyZWxhdGVkOiBBKQorICAgICBAc2hhZG93LXJvb3QtRyAodGFyZ2V0OiBLKSAocmVsYXRlZDog
QSkKKyAgICAgQEcgKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBzaGFkb3ctcm9vdC1C
ICh0YXJnZXQ6IEgpIChyZWxhdGVkOiBBKQorICAgICBAQiAodGFyZ2V0OiBEKSAocmVsYXRlZDog
QSkKKyAgICAgQEEgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEEpCisgICAgIEB0b3AgKHRhcmdldDog
RCkgKHJlbGF0ZWQ6IEEpCisKK01vdmluZyBtb3VzZSBmcm9tIEQgdG8gQQorCisgIG1vdXNlb3V0
CisgICAgIEBEICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBBKQorICAgICBAQyAodGFyZ2V0OiBEKSAo
cmVsYXRlZDogQSkKKyAgICAgQEggKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBLICh0
YXJnZXQ6IEspIChyZWxhdGVkOiBBKQorICAgICBATiAodGFyZ2V0OiBOKSAocmVsYXRlZDogQSkK
KyAgICAgQHNoYWRvdy1yb290LUogKHRhcmdldDogTikgKHJlbGF0ZWQ6IEEpCisgICAgIEBKICh0
YXJnZXQ6IEspIChyZWxhdGVkOiBBKQorICAgICBAc2hhZG93LXJvb3QtRyAodGFyZ2V0OiBLKSAo
cmVsYXRlZDogQSkKKyAgICAgQEcgKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBzaGFk
b3ctcm9vdC1CICh0YXJnZXQ6IEgpIChyZWxhdGVkOiBBKQorICAgICBAQiAodGFyZ2V0OiBEKSAo
cmVsYXRlZDogQSkKKyAgICAgQEEgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEEpCisgICAgIEB0b3Ag
KHRhcmdldDogRCkgKHJlbGF0ZWQ6IEEpCisKKyAgbW91c2VvdmVyCisgICAgIEBBICh0YXJnZXQ6
IEEpIChyZWxhdGVkOiBEKQorICAgICBAdG9wICh0YXJnZXQ6IEEpIChyZWxhdGVkOiBEKQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNo
aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1k
aXNwYXRjaGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjMThjNDIwNjhjNzUxNDM2ODEwYTNlMGY3ZDA1
YzMxZDA1NGFhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy5odG1sCkBAIC0wLDAgKzEsMjIxIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
c2hhZG93LWRvbS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0ic2FuZGJveCI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj48
L3ByZT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdG8gZW5zdXJlIHRoYXQgZXZlbnQg
ZGlzcGF0Y2hpbmcgYmVoYXZlcyBhcyB0aGUgU2hhZG93IERPTSBzcGVjIGRlc2NyaWJlcy4iKTsK
KworZnVuY3Rpb24gbW92ZU1vdXNlT3ZlcihlbGVtZW50KQoreworICAgIGlmICghd2luZG93LmV2
ZW50U2VuZGVyIHx8ICF3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICByZXR1cm47CisKKyAgICB2
YXIgZGVmYXVsdFBhZGRpbmdTaXplID0gMjA7CisgICAgdmFyIHggPSBlbGVtZW50Lm9mZnNldExl
ZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgeTsKKyAgICBpZiAoZWxlbWVu
dC5oYXNDaGlsZE5vZGVzKCkgfHwgd2luZG93LmludGVybmFscy5zaGFkb3dSb290KGVsZW1lbnQp
KQorICAgICAgICB5ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBkZWZhdWx0UGFkZGluZ1NpemU7Cisg
ICAgZWxzZQorICAgICAgICB5ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhl
aWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7Cit9CisKK3ZhciBl
dmVudFJlY29yZHMgPSB7fTsKKworZnVuY3Rpb24gY2xlYXJFdmVudFJlY29yZHMoKQoreworICAg
IGV2ZW50UmVjb3JkcyA9IHt9OworfQorCitmdW5jdGlvbiBkaXNwYXRjaGVkRXZlbnQoZXZlbnRU
eXBlKQoreworICAgIHZhciBldmVudHMgPSBldmVudFJlY29yZHNbZXZlbnRUeXBlXTsKKyAgICBp
ZiAoIWV2ZW50cykKKyAgICAgICAgcmV0dXJuIFtdOworICAgIHJldHVybiBldmVudHM7Cit9CisK
K2Z1bmN0aW9uIHJlY29yZEV2ZW50KGV2ZW50KQoreworICAgIHZhciBldmVudFR5cGUgPSBldmVu
dC50eXBlCisgICAgaWYgKCFldmVudFJlY29yZHNbZXZlbnRUeXBlXSkgeworICAgICAgICBldmVu
dFJlY29yZHNbZXZlbnRUeXBlXSA9IFtdCisgICAgfQorICAgIHZhciBldmVudFN0cmluZyA9ICcn
OworICAgIGlmIChldmVudC5jdXJyZW50VGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAn
IEAnICsgZXZlbnQuY3VycmVudFRhcmdldC5pZDsKKyAgICBpZiAoZXZlbnQudGFyZ2V0KQorICAg
ICAgICBldmVudFN0cmluZyArPSAnICh0YXJnZXQ6ICcgKyBldmVudC50YXJnZXQuaWQgKyAnKSc7
CisgICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcg
KHJlbGF0ZWQ6ICcgKyBldmVudC5yZWxhdGVkVGFyZ2V0LmlkICsgJyknOworICAgIGlmIChldmVu
dC5ldmVudFBoYXNlID09IDEpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcoY2FwdHVyaW5nIHBo
YXNlKSc7CisgICAgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGV2
ZW50LnRhcmdldC5pZCA9PSBldmVudC5jdXJyZW50VGFyZ2V0LmlkKQorICAgICAgICBzaG91bGRC
ZSgiZXZlbnQuZXZlbnRQaGFzZSIsICIyIiwgdHJ1ZSk7CisgICAgZXZlbnRSZWNvcmRzW2V2ZW50
VHlwZV0ucHVzaChldmVudFN0cmluZyk7Cit9CisKK2Z1bmN0aW9uIGR1bXBOb2RlKG5vZGUpCit7
CisgICAgdmFyIG91dHB1dCA9IG5vZGUubm9kZU5hbWUgKyAiXHQiOworICAgIGlmIChub2RlLmlk
KQorICAgICAgICBvdXRwdXQgKz0gJyBpZD0nICsgbm9kZS5pZDsKKyAgICBpZiAobm9kZS5jbGFz
c05hbWUpCisgICAgICAgIG91dHB1dCArPSAnIGNsYXNzPScgKyBub2RlLmNsYXNzTmFtZTsKKyAg
ICByZXR1cm4gb3V0cHV0OworfQorCitmdW5jdGlvbiBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKG5v
ZGUsIGluZGVudCkKK3sKKyAgICBpbmRlbnQgPSBpbmRlbnQgfHwgIiI7CisgICAgdmFyIG91dHB1
dCA9IGluZGVudCArIGR1bXBOb2RlKG5vZGUpICsgIlxuIjsKKyAgICB2YXIgY2hpbGQ7CisgICAg
Zm9yIChjaGlsZCA9IGludGVybmFscy5maXJzdENoaWxkQnlXYWxrZXIobm9kZSk7IGNoaWxkOyBj
aGlsZCA9IGludGVybmFscy5uZXh0U2libGluZ0J5V2Fsa2VyKGNoaWxkKSkKKyAgICAgICAgIG91
dHB1dCArPSBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKGNoaWxkLCBpbmRlbnQgKyAiXHQiKTsKKyAg
ICByZXR1cm4gb3V0cHV0OworfQorCitmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyhub2RlcykK
K3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
IHZhciBub2RlID0gZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG5vZGVzW2ldKTsKKyAgICAgICAg
bm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCByZWNvcmRFdmVudCwgZmFsc2UpOwor
ICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgcmVjb3JkRXZlbnQsIGZh
bHNlKTsKKyAgICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PSAnRElWJyB8fCBub2RlLnRhZ05hbWUg
PT0gJ0RFVEFJTFMnIHx8IG5vZGUudGFnTmFtZSA9PSAnU1VNTUFSWScpCisgICAgICAgICAgICBu
b2RlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAncGFkZGluZy10b3A6IDQwcHg7Jyk7CisgICAgfQor
fQorCitmdW5jdGlvbiBwcmVwYXJlRE9NVHJlZTEocGFyZW50KQoreworICAgIHBhcmVudC5hcHBl
bmRDaGlsZCgKKyAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ3RvcCd9LAorICAgICAg
ICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ3NoYWRvdy1ob3N0J30sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdjb250ZW50Jywg
J3NlbGVjdCc6ICcjZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLH0pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnc2hhZG93LXJvb3QtY2hp
bGQnfSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2Jywgeydp
ZCc6ICdkaXN0cmlidXRlZC1saWdodC1jaGlsZCd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
J30pKSkpOworCisgICAgYWRkRXZlbnRMaXN0ZW5lcnMoWyd0b3AnLCAnc2hhZG93LWhvc3QnLCAn
c2hhZG93LWhvc3QvJywgJ3NoYWRvdy1ob3N0L2NvbnRlbnQnLCAnc2hhZG93LWhvc3Qvc2hhZG93
LXJvb3QtY2hpbGQnLAorICAgICAgICAgICAgICAgICAgICAgICAnZGlzdHJpYnV0ZWQtbGlnaHQt
Y2hpbGQnLCAnbm9uLWRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJ10pOworICAgIGdldE5vZGVJblNo
YWRvd1RyZWVTdGFjaygnc2hhZG93LWhvc3QvJykuaWQgPSAnc2hhZG93LXJvb3QnOworICAgIHBh
cmVudC5vZmZzZXRMZWZ0OworICAgIGRlYnVnKCdcblxuQ29tcG9zZWQgU2hhZG93IFRyZWUgd2ls
bCBiZTpcbicgKyBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKHBhcmVudCkpOworfQorCitmdW5jdGlv
biBwcmVwYXJlRE9NVHJlZTIocGFyZW50KQoreworICAgIHBhcmVudC5hcHBlbmRDaGlsZCgKKyAg
ICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ3RvcCd9LAorICAgICAgICAgICAgICAgICAg
Ly8gJ2RldGFpbHMvc3VtbWFyeScgZWxlbWVudHMgdXNlIFNoYWRvdyBET00gaW4gaXRzIGltcGxl
bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkZXRhaWxzJywgeydpZCc6
ICdkZXRhaWxzJywgJ29wZW4nOiB0cnVlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVET00oJ3N1bW1hcnknLCB7J2lkJzogJ3N1bW1hcnknfSkpKSk7CisKKyAgICBhZGRFdmVu
dExpc3RlbmVycyhbJ3RvcCcsICdkZXRhaWxzJywgJ3N1bW1hcnknXSk7CisgICAgcGFyZW50Lm9m
ZnNldExlZnQ7CisgICAgZGVidWcoJ1xuXG5Db21wb3NlZCBTaGFkb3cgVHJlZSB3aWxsIGJlOlxu
JyArIGR1bXBDb21wb3NlZFNoYWRvd1RyZWUocGFyZW50KSk7Cit9CisKK2Z1bmN0aW9uIHByZXBh
cmVET01UcmVlMyhwYXJlbnQpCit7CisgICAgcGFyZW50LmFwcGVuZENoaWxkKAorICAgICAgICBj
cmVhdGVET00oJ2RpdicsIHsnaWQnOiAndG9wJ30sCisgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2RpdicsIHsnaWQnOiAnQSd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0
ZURPTSgnZGl2JywgeydpZCc6ICdCJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnRyd9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZURPTSgnZGl2JywgeydpZCc6ICdKJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnY29udGVudCcsIHsnaWQnOiAnTicsICdzZWxlY3QnOiAn
I0snfSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdLJywgJ3NlbGVj
dCc6ICcjSCd9KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdMJ30sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnY29udGVudCcsIHsnaWQnOiAn
TycsICdzZWxlY3QnOiAnI00nfSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50Jywgeydp
ZCc6ICdNJywgJ3NlbGVjdCc6ICcjSSd9KSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnY29udGVudCcsIHsnaWQnOiAnSCcs
ICdzZWxlY3QnOiAnI0MnfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdJJywgJ3NlbGVjdCc6
ICcjRSd9KSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2RpdicsIHsnaWQnOiAnQyd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ0QnfSkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnRSd9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
RE9NKCdkaXYnLCB7J2lkJzogJ0YnfSkpKSkpKTsKKworICAgIGFkZEV2ZW50TGlzdGVuZXJzKFsn
dG9wJywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0IvJywgJ0IvRycsICdCL0gnLCAn
Qi9JJywgJ0IvRy8nLCAnQi9HL0onLCAnQi9HL0snLCAnQi9HL0wnLCAnQi9HL00nLAorICAgICAg
ICAgICAgICAgICAgICAgICAnQi9HL0ovJywgJ0IvRy9KL04nLCAnQi9HL0wvJywgJ0IvRy9ML08n
XSk7CisgICAgZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCdCLycpLmlkID0gJ3NoYWRvdy1yb290
LUInOworICAgIGdldE5vZGVJblNoYWRvd1RyZWVTdGFjaygnQi9HLycpLmlkID0gJ3NoYWRvdy1y
b290LUcnOworICAgIGdldE5vZGVJblNoYWRvd1RyZWVTdGFjaygnQi9HL0ovJykuaWQgPSAnc2hh
ZG93LXJvb3QtSic7CisgICAgZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCdCL0cvTC8nKS5pZCA9
ICdzaGFkb3ctcm9vdC1MJzsKKyAgICBwYXJlbnQub2Zmc2V0TGVmdDsKKyAgICBkZWJ1ZygnXG5c
bkNvbXBvc2VkIFNoYWRvdyBUcmVlIHdpbGwgYmU6XG4nICsgZHVtcENvbXBvc2VkU2hhZG93VHJl
ZShwYXJlbnQpKTsKK30KKworZnVuY3Rpb24gZGVidWdEaXNwYXRjaGVkRXZlbnQoZXZlbnRUeXBl
KQoreworICAgIGRlYnVnKCdcbiAgJyArIGV2ZW50VHlwZSk7CisgICAgdmFyIGV2ZW50cyA9IGRp
c3BhdGNoZWRFdmVudChldmVudFR5cGUpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRz
Lmxlbmd0aDsgKytpKQorICAgICAgICBkZWJ1ZygnICAgICcgKyBldmVudHNbaV0pCit9CisKK2Z1
bmN0aW9uIG1vdmVNb3VzZShvbGRFbGVtZW50SWQsIG5ld0VsZW1lbnRJZCkKK3sKKyAgICBjbGVh
ckV2ZW50UmVjb3JkcygpOworICAgIGRlYnVnKCdcbicgKyAnTW92aW5nIG1vdXNlIGZyb20gJyAr
IG9sZEVsZW1lbnRJZCArICcgdG8gJyArIG5ld0VsZW1lbnRJZCk7CisgICAgbW92ZU1vdXNlT3Zl
cihnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2sob2xkRWxlbWVudElkKSk7CisgICAgLy8gZGVidWdE
aXNwYXRjaGVkRXZlbnQoJ21vdXNlb3V0Jyk7CisgICAgLy8gZGVidWdEaXNwYXRjaGVkRXZlbnQo
J21vdXNlb3ZlcicpOworCisgICAgY2xlYXJFdmVudFJlY29yZHMoKTsKKyAgICBtb3ZlTW91c2VP
dmVyKGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhuZXdFbGVtZW50SWQpKTsKKyAgICAvLyBpc0lu
bmVybW9zdEFjdGl2ZUVsZW1lbnQobmV3RWxlbWVudElkKTsKKworICAgIGRlYnVnRGlzcGF0Y2hl
ZEV2ZW50KCdtb3VzZW91dCcpOworICAgIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KCdtb3VzZW92ZXIn
KTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisg
ICAgdmFyIHNhbmRib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FuZGJveCcpOworICAg
IHByZXBhcmVET01UcmVlMShzYW5kYm94KTsKKworICAgIG1vdmVNb3VzZSgnc2hhZG93LWhvc3Qn
LCAnc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnKTsKKyAgICBtb3ZlTW91c2UoJ3NoYWRv
dy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJywgJ3NoYWRvdy1ob3N0Jyk7CisKKyAgICBtb3ZlTW91
c2UoJ3NoYWRvdy1ob3N0JywgJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJyk7CisgICAgbW92ZU1v
dXNlKCdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdzaGFkb3ctaG9zdCcpOworCisgICAgbW92
ZU1vdXNlKCdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcsICdkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCcpOworICAgIG1vdmVNb3VzZSgnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnLCAnc2hh
ZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnKTsKKworICAgIHNhbmRib3guaW5uZXJIVE1MID0g
Jyc7CisgICAgcHJlcGFyZURPTVRyZWUyKHNhbmRib3gpOworCisgICAgbW92ZU1vdXNlKCdkZXRh
aWxzJywgJ3N1bW1hcnknKTsKKyAgICBtb3ZlTW91c2UoJ3N1bW1hcnknLCAnZGV0YWlscycpOwor
CisgICAgc2FuZGJveC5pbm5lckhUTUwgPSAnJzsKKyAgICBwcmVwYXJlRE9NVHJlZTMoc2FuZGJv
eCk7CisKKyAgICBtb3ZlTW91c2UoJ0YnLCAnRCcpOworICAgIG1vdmVNb3VzZSgnQi9HL0wnLCAn
RCcpOworICAgIG1vdmVNb3VzZSgnQi9HL0wnLCAnQi9HL0onKTsKKyAgICBtb3ZlTW91c2UoJ0En
LCAnRCcpOworICAgIG1vdmVNb3VzZSgnRCcsICdBJyk7Cit9CisKK3Rlc3QoKTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
ZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAppbmRleCBkOGFh
M2ZmYzM4ZDAwZmJmNWRhMTlmZDNiNjY5MTFiYzM2MjRlNTU5Li4xNDM0M2NiZGQ3MWQzMmIxZmVi
MDljOWY2NDc5MGIyNWU5ODA2NGRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9l
ZmwvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAtMTEw
Miw2ICsxMTAyLDcgQEAgZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1pbi1tZXRlci1l
bGVtZW50Lmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9nZXQtZWxlbWVudC1ieS1pZC1pbi1zaGFkb3ct
cm9vdC5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtanMtYXBpLmh0bWwKIGZhc3Qv
ZG9tL3NoYWRvdy9zaGFkb3ctZGlzYWJsZS5odG1sCitmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRv
bS1ldmVudC1kaXNwYXRjaGluZy5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtYXR0
YWNoZWQuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290LW5ldy5odG1sCiBmYXN0L2Rv
bS9zaGFkb3cvc2hhZG93LXJvb3QtYXBwZW5kLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmlu
ZGV4IGQ1MTQ4YjMyOTM1YzQ5OTFhZmFhNzdkNGE2OTdmOTE5YzVlNTk1ZjguLjM1ZjIwMmQ3OWIw
OTUwOGUzMWRmZDZhMjQ4MTQ4ZDhlYzRhYmQ2YWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApA
QCAtMTkyLDYgKzE5Miw3IEBAIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYm91bmRhcnktZXZlbnRz
Lmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctY29udGVudC1jcmFzaC5odG1sCiBmYXN0L2Rv
bS9zaGFkb3cvc2hhZG93LWNvbnRlbnRzLWZhbGxiYWNrLWR5bmFtaWMuaHRtbAogZmFzdC9kb20v
c2hhZG93L3NoYWRvdy1jb250ZW50cy1mYWxsYmFjay5odG1sCitmYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWR5
bmFtaWMtc3R5bGUtY2hhbmdlLXZpYS1tdXRhdGlvbi1hbmQtc2VsZWN0b3IuaHRtbAogZmFzdC9k
b20vc2hhZG93L3NoYWRvdy1kaXNhYmxlLmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZWxl
bWVudC1yZW5kZXJpbmctc2luZ2xlLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5kZXgg
ZDU2NWQ1NjlhODFjM2M5YmJjYzkzZDUyYzM2ODRlZTE2MjRlNzBjNi4uY2MxYzk4ZTFiMDUwYjJl
MDgwY2Q1ZWVhZDFmNzg1M2M4ZWVhMWViOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAg
LTE0ODcsNiArMTQ4Nyw3IEBAIGZhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtaW4tbWV0
ZXItZWxlbWVudC5odG1sCiBmYXN0L2RvbS9zaGFkb3cvZ2V0LWVsZW1lbnQtYnktaWQtaW4tc2hh
ZG93LXJvb3QuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290LWpzLWFwaS5odG1sCiBm
YXN0L2RvbS9zaGFkb3cvc2hhZG93LWRpc2FibGUuaHRtbAorZmFzdC9kb20vc2hhZG93L3NoYWRv
dy1kb20tZXZlbnQtZGlzcGF0Y2hpbmcuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290
LWFjdGl2ZUVsZW1lbnQuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290LWF0dGFjaGVk
Lmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctcm9vdC1pbm5lckhUTUwuaHRtbApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZCBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKaW5kZXggNTI1OTZhOTYwN2FlNmE3NGM2NzVlYmM0
ZDQ1MDAzYWE5ZGU2MDZhNC4uYjZjNjdjOGM2YzNhNzE0OWI1MzUyOWExNThjMTI0Y2EzNDViMjBm
YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCkBAIC0xOTkwLDYgKzE5OTAs
NyBAQCBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW91dHNpZGUtc2hhZG93Lmh0bWwK
IGZhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtaW4tbWVkaWEtZWxlbWVudC5odG1sCiBm
YXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LWluLW1ldGVyLWVsZW1lbnQuaHRtbAogZmFz
dC9kb20vc2hhZG93L2dldC1lbGVtZW50LWJ5LWlkLWluLXNoYWRvdy1yb290Lmh0bWwKK2Zhc3Qv
ZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLmh0bWwKIGZhc3QvZG9tL3No
YWRvdy9zaGFkb3ctcm9vdC1qcy1hcGkuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kaXNh
YmxlLmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctcm9vdC1hY3RpdmVFbGVtZW50Lmh0bWwK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2syL1NraXBwZWQKaW5kZXggMWE0NTAzMmIwMjg2MGM0YzUxZTAxMGIwYmIz
MzkxNDNhZWZmZTk4MS4uNDhiODMxN2I0MDFjMzUzZTI5OGJjZTI2MTY4ZDFmMmVlN2Q2MTQ5ZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQKQEAgLTExMDgsNiArMTEwOCw3IEBAIGZhc3QvZG9t
L3NoYWRvdy9jb250ZW50LWVsZW1lbnQtaW4tbWVkaWEtZWxlbWVudC5odG1sCiBmYXN0L2RvbS9z
aGFkb3cvY29udGVudC1lbGVtZW50LWluLW1ldGVyLWVsZW1lbnQuaHRtbAogZmFzdC9kb20vc2hh
ZG93L3NoYWRvdy1yb290LWpzLWFwaS5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRpc2Fi
bGUuaHRtbAorZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmcuaHRt
bAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290LWFjdGl2ZUVsZW1lbnQuaHRtbAogZmFzdC9k
b20vc2hhZG93L3NoYWRvdy1yb290LWF0dGFjaGVkLmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFk
b3ctcm9vdC1pbm5lckhUTUwuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142404</attachid>
            <date>2012-05-16 20:40:51 -0700</date>
            <delta_ts>2012-05-16 21:37:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78586-20120517124050.patch</filename>
            <type>text/plain</type>
            <size>48475</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjZmNGQ3ZjAyZTE5Y2Vi
MGM0MzQ3MWM0MmJlOGQyMmIyZGVkYmE4Mi4uYmJhM2NkMjJkZWNjYmUyNzY0MzMwNjZkNGMyNGMw
ZmQ4YzFjNGI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxMi0wNS0xNSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IGEgU2hh
ZG93IERPTSBzcGVjJ3Mgc2VjdGlvbiA2ICdFdmVudHMnLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1ODYKKworICAgICAgICBSZXZpZXdlZCBieSBE
aW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIGEgU2hhZG93IERPTSBz
cGVjJ3Mgc2VjdGlvbiA2ICdFdmVudHMnLCBpbnRyb2R1Y2luZyBhIG5ldworICAgICAgICBhbGdv
cml0aG0gc28gdGhhdCBldmVudCBkaXNwYXRjaGluZyB1c2UgYSBjb21wb3NlZCBzaGFkb3cgRE9N
IHRyZWUsCisgICAgICAgIGluc3RlYWQgb2Ygbm9ybWFsIERPTSB0cmVlLCBpbiBkaXNwYXRjaGlu
ZyBldmVudHMgdG8gZWFjaCBub2RlLgorCisgICAgICAgIFRoZSBzcGVjIGlzIGhlcmU6IGh0dHA6
Ly9kdmNzLnczLm9yZy9oZy93ZWJjb21wb25lbnRzL3Jhdy1maWxlL3RpcC9zcGVjL3NoYWRvdy9p
bmRleC5odG1sI2V2ZW50cworCisgICAgICAgIFN1bW1hcnkgb2YgY2hhbmdlczoKKyAgICAgICAg
LSBBdHRhY2hpbmcgc2hhZG93IERPTSBkb2VzIG5vdCBhZmZlY3QgYW4gZXZlbnQgZGlzcGF0Y2hp
bmcKKyAgICAgICAgYmVoYXZpb3Igb2YgZW5jbG9zaW5nIERPTSB0cmVlLiBUaGlzIGFwcGxpZXMg
ZXZlbiBpZiBzb21lIG5vZGVzCisgICAgICAgIGFyZSBkaXN0cmlidXRlZCB0byBpbnNlcnRpb24g
cG9pbnRzLiBXZSBrZWVwIGEgY29tcGF0aWJpbGl0eSBvZgorICAgICAgICBleGlzdGluZyBldmVu
dCBkaXNwYXRjaGluZyBtZWNoYW5pc20gc28gdGhhdCB3ZSB3b24ndCBicmVhayBXZWIuCisgICAg
ICAgIC0gRXZlbnQgYW5jZXN0b3JzLCB3aGljaCBhcmUgdXNlZCBpbiBkaXNwYXRjaGluZyBldmVu
dHMgaW4gY2FwdHVyZSAob3IKKyAgICAgICAgYnViYmxlKSBwaGFzZSwgYXJlIG5vdyB0aGUgcmVz
dWx0IG9mIHRyYXZlcnNpbmcgYW5jZXN0b3JzIGluIGNvbXBvc2VkCisgICAgICAgIHNoYWRvdyBE
T00gdHJlZSBvcmRlciwgaW5zdGVhZCBvZiBub3JtYWwgRE9NIHRyZWUgb3JkZXIuCisgICAgICAg
IC0gRXZlbnQncyB0YXJnZXQgYW5kIHJlbGF0ZWQtdGFyZ2V0IGFyZSBjb3JyZWN0bHkgYWRqdXN0
ZWQgc28gdGhhdAorICAgICAgICB3ZSBkb24ndCBsZWFrIGFueSBub2RlIHdoaWNoIGlzIGluYWNj
ZXNzaWJsZSBmcm9tIHRoZSBldmVudCdzCisgICAgICAgIGN1cnJlbnQtdGFyZ2V0IG5vZGUuIFdl
IGVuZm9yY2UgYm90aCB1cHBlciBhbmQgbG93ZXIgYm91bmRhcnkKKyAgICAgICAgZW5jYXBzdWxh
dGlvbiBvZiBTaGFkb3cgRE9NIGluIGV2ZW50IGRpc3BhdGNoaW5nCisKKyAgICAgICAgSGVyZSBp
cyBhbiBleGFtcGxlIG9mIGV2ZW50IGRpc3BhdGNoaW5nLiBTdXBwb3NlIHdlIGhhdmUgdGhlIGZv
bGxvd2luZyBET00gdHJlZSwgd2hpY2gKKyAgICAgICAgaW5jbHVkZXMgc29tZSBuZXN0ZWQgc2hh
ZG93IGhvc3RzIGFuZCBpbnNlcnRpb24gcG9pbnRzCisgICAgICAgIEEKKyAgICAgICAgYC0tQi0t
LS0tW1NSLUJdCisgICAgICAgICAgIHwtQyAgICAgYC0tRy0tLS0tLS0tLS0tLS0tW1NSLUddCisg
ICAgICAgICAgIHwgYC1EICAgICAgfC08SCBzZWxlY3Q9Qz4gICAgfC0tSi0tLS0tLS0tLS0tLS0t
LVtTUi1KXQorICAgICAgICAgICBgLUUgICAgICAgIGAtPEkgc2VsZWN0PUU+ICAgIHwgIGAtPEsg
c2VsZWN0PUg+ICAgIGAtPE4gc2VsZWN0PUs+CisgICAgICAgICAgICAgYC1GICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAt
LUwtLS0tLS0tLS0tLS0tLS1bU1ItTF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBgLTxNIHNlbGVjdD1JPiAgICBgLTxPIHNlbGVjdD1NPgorCisgICAgICAgICAg
Tm90YXRpb246IFtTUi1YXTogU2hhZG93IFJvb3QKKyAgICAgICAgICAgICAgICAgICAgPFggc2Vs
ZWN0PVk+OiBJbnNlcnRpb24gUG9pbnQsIGNhbGxlZCBYLCB3aGljaCBzZWxlY3RzIFkuCisKKyAg
ICAgICAgSWYgYSBtb3VzZSBtb3ZlcyBmcm9tIG5vZGUgJyNGJyB0byBub2RlICcjRCcsIHRoZSBm
b2xsb3dpbmcKKyAgICAgICAgJ21vdXNlb3ZlcicgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGluIGVh
Y2ggYW5jZXN0b3Igbm9kZToKKworICAgICAgICBbY3VycmVudFRhcmdldF0gW3RhcmdldF0gW3Jl
bGF0ZWQtdGFyZ2V0XQorICAgICAgICAgICNEICAgICAgICAgICAgICNEICAgICAgICNGCisgICAg
ICAgICAgI0MgICAgICAgICAgICAgI0QgICAgICAgI0YKKyAgICAgICAgICAjSCAgICAgICAgICAg
ICAjSCAgICAgICAjSQorICAgICAgICAgICNLICAgICAgICAgICAgICNLICAgICAgICNNCisgICAg
ICAgICAgI04gICAgICAgICAgICAgI04gICAgICAgI00KKyAgICAgICAgICAjU1ItSiAgICAgICAg
ICAjTiAgICAgICAjTQorICAgICAgICAgICNKICAgICAgICAgICAgICNLICAgICAgICNNCisgICAg
ICAgICAgI1NSLUcgICAgICAgICAgI0sgICAgICAgI00KKyAgICAgICAgICAjRyAgICAgICAgICAg
ICAjSCAgICAgICAjSQorICAgICAgICAgICNTUi1CICAgICAgICAgICNIICAgICAgICNJCisgICAg
ICAgICAgI0IgICAgICAgICAgICAgI0QgICAgICAgI0YKKyAgICAgICAgICAjQSAgICAgICAgICAg
ICAjRCAgICAgICAjRgorCisgICAgICAgIERldGFpbHMgYXJlOgorICAgICAgICAtIEluc2VydGlv
biBwb2ludHMsIHN1Y2ggYXMgPGNvbnRlbnQ+IG9yIDxzaGFkb3c+LCBhcmUgcmVzb2x2ZWQgY29y
cmVjdGx5CisgICAgICAgIGluIGNhbGN1bGF0aW5nIGV2ZW50IGFuY2VzdG9ycy4gVGhhdCBtZWFu
cyBpZiBhIG5vZGUgaXMgZGlzdHJpYnV0ZWQgdG8KKyAgICAgICAgYW4gaW5zZXJ0aW9uIHBvaW50
LCB0aGUgaW5zZXJ0aW9uIHBvaW50IGlzIG5vdyBhbiBhbmNlc3RvciBvZiB0aGUgbm9kZSBpbgor
ICAgICAgICBidWJibGluZyAob3IgY2FwdHVyaW5nKSBldmVudHMuCisgICAgICAgIC0gQm90aCBp
bnNlcnRpb24gcG9pbnRzIGFuZCBzaGFkb3cgcm9vdHMgbm93IGNhbiByZWNlaXZlIGV2ZW50cy4g
V2UgY2FuIGFkZAorICAgICAgICBldmVudCBsaXN0ZW5lcnMgdG8gaW5zZXJ0aW9uIHBvaW50cyBh
bmQgc2hhZG93IHJvb3RzLgorICAgICAgICAtIERpc3BhdGNoZWQgZXZlbnQncyB0YXJnZXQgaXMg
bm93IGFkanVzdGVkIGNvcnJlY3RseSB1c2luZyB0aGUgcmUtdGFyZ2V0aW5nCisgICAgICAgIGFs
Z29yaXRobS4gVGhlIGFsZ29yaXRobSBpcyBub3cgZnVsbHkgYXdhcmUgb2YgaW5zZXJ0aW9uIHBv
aW50cy4KKyAgICAgICAgLSBEaXNwYXRjaGVkIGV2ZW50J3MgcmVsYXRlZC10YXJnZXQgY2FuIG5v
dyBkaWZmZXIgaW4gZWFjaCB0cmVlIHNjb3BlIG9mCisgICAgICAgIGV2ZW50IGFuY2VzdG9ycy4g
V2UgY2hvb3NlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHJlbGF0ZWQtdGFyZ2V0IHVzaW5nIHRoZQor
ICAgICAgICByZWxhdGVkIHRhcmdldCByZXNvbHV0aW9uIGFsZ29yaXRobSBmb3IgZWFjaCBub2Rl
LgorCisgICAgICAgIFBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb246CisgICAgICAgIFRoaXMgcGF0
Y2ggY2FuIGFjaGlldmUgdGhlIGNvbXBldGl0aXZlIHBlcmZvcm1hbmNlLiBUaGUgcmVzdWx0cyBv
ZgorICAgICAgICAuL1Rvb2xzL1NjcmlwdHMvcnVuLXBlcmYtdGVzdHMgUGVyZm9ybWFuY2VUZXN0
cy9ET00vRXZlbnRzLmh0bWwgZm9yCisgICAgICAgIGJlZm9yZS9hZnRlciB0aGlzIHBhdGNoIGFy
ZToKKworICAgICAgICBCZWZvcmUgYXBwbHlpbmcgdGhpcyBwYXRjaDoKKyAgICAgICAgICAgIFJ1
bm5pbmcgRE9NL0V2ZW50cy5odG1sICgxIG9mIDEpCisgICAgICAgICAgICBSRVNVTFQgRE9NOiBF
dmVudHM9IDI3MC4zMTA3MTQyODYgbXMKKyAgICAgICAgICAgIG1lZGlhbj0gMjY5Ljc1IG1zLCBz
dGRldj0gMi4wMDQyMzk3NjYzIG1zLCBtaW49IDI2Ny4zNTcxNDI4NTcgbXMsIG1heD0gMjc2LjUg
bXMKKworICAgICAgICBBZnRlciBhcHBseWluZyB0aGlzIHBhdGNoOgorICAgICAgICAgICAgUnVu
bmluZyBET00vRXZlbnRzLmh0bWwgKDEgb2YgMSkKKyAgICAgICAgICAgIFJFU1VMVCBET006IEV2
ZW50cz0gMjY4LjEwODMzMzMzMyBtcworICAgICAgICAgICAgbWVkaWFuPSAyNjcuNSBtcywgc3Rk
ZXY9IDIuNDE4ODMxNTcxOTUgbXMsIG1pbj0gMjYzLjYyNSBtcywgbWF4PSAyNzMuMTQyODU3MTQz
IG1zCisKKyAgICAgICAgSSd2ZSBhbHNvIGNvbmR1Y3RlZCBhIG1pY3JvIGJlbmNobWFyayB1c2lu
ZyBib3RoCisgICAgICAgIFNoYWRvdy1GcmVlLURPTS1UcmVlIGFuZCBET00tVHJlZS1XaXRoLVNo
YWRvdy1Ib3N0LgorICAgICAgICBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4NTg2I2M0MCBmb3IgdGhlIHJlc3VsdHMuCisgICAgICAgIEl0IHNlZW1zIHRoYXQg
dGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBoYXMgbW9yZSBjYXBhYmlsaXRpZXMsIGJ1dAorICAgICAg
ICBkb2Vzbid0IHNhY3JpZmljZSBhIHBlcmZvcm1hbmNlIG9mIGV2ZW50IGRpc3BhdGNoaW5nIGlu
IGVpdGhlciBjYXNlcy4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRv
bS1ldmVudC1kaXNwYXRjaGluZy5odG1sCisKKyAgICAgICAgKiBkb20vQ29tcG9zZWRTaGFkb3dU
cmVlV2Fsa2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2VkU2hhZG93VHJlZVdhbGtl
cjo6cGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0
cmF2ZXJzZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCk6CisgICAg
ICAgICogZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oOgorICAgICAgICAoQ29tcG9zZWRT
aGFkb3dUcmVlV2Fsa2VyKToKKyAgICAgICAgKiBkb20vRXZlbnRDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6RXZlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMpOgorICAgICAgICAqIGRvbS9FdmVu
dENvbnRleHQuaDoKKyAgICAgICAgKEV2ZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudENvbnRleHQ6OnJlbGF0ZWRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQpOgorICAgICAgICAqIGRv
bS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRSZWxhdGVkVGFy
Z2V0QWRqdXN0ZXI6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmFkanVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6ZmluZFJl
bGF0ZWRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjphZGp1c3RS
ZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJl
RXZlbnRBbmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJtaW5l
RGlzcGF0Y2hCZWhhdmlvcik6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcik6Cisg
ICAgICAgIChFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2
ZW50KToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9N
b3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTA1LTE2ICBLZW50YXJvIEhh
cmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFBhc3MgSXNvbGF0ZSB0
byByZW1haW5pbmcgdG9WOCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRv
d1RyZWVXYWxrZXIuY3BwCmluZGV4IDIzNTY4M2ZlZGY4Y2M2OWU1OTg5ZjQxYzYzNzFlOTk4MDg3
YWZkMjQuLjBmODYxNDQzM2NkMTY0ODBiYmJjMDU4MjExZDVmOTg3ZDcwYzgwZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwCkBAIC0xOTYs
NiArMTk2LDI4IEBAIHZvaWQgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjpwYXJlbnQoKQogICAg
IGFzc2VydFBvc3Rjb25kaXRpb24oKTsKIH0KIAordm9pZCBDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI6OnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpCit7CisgICAg
QVNTRVJUKG1fbm9kZSk7CisgICAgbV9ub2RlID0gdHJhdmVyc2VQYXJlbnRJbmNsdWRpbmdJbnNl
cnRpb25Qb2ludEFuZFNoYWRvd1Jvb3QobV9ub2RlKTsKK30KKworTm9kZSogQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hh
ZG93Um9vdChjb25zdCBOb2RlKiBub2RlKSBjb25zdAoreworICAgIGlmIChFbGVtZW50U2hhZG93
KiBzaGFkb3cgPSBzaGFkb3dPZlBhcmVudChub2RlKSkgeworICAgICAgICBpZiAoSW5zZXJ0aW9u
UG9pbnQqIGluc2VydGlvblBvaW50ID0gc2hhZG93LT5pbnNlcnRpb25Qb2ludEZvcihub2RlKSkK
KyAgICAgICAgICAgIHJldHVybiBpbnNlcnRpb25Qb2ludDsKKyAgICB9CisgICAgaWYgKCFub2Rl
LT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIG5vZGUtPnBhcmVudE5vZGUoKTsKKyAg
ICBjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gdG9TaGFkb3dSb290KG5vZGUpOworICAg
IGlmIChzaGFkb3dSb290LT5pc1lvdW5nZXN0KCkpCisgICAgICAgIHJldHVybiBzaGFkb3dSb290
LT5ob3N0KCk7CisgICAgSW5zZXJ0aW9uUG9pbnQqIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQgPSBz
aGFkb3dSb290LT5hc3NpZ25lZFRvKCk7CisgICAgQVNTRVJUKGFzc2lnbmVkSW5zZXJ0aW9uUG9p
bnQpOworICAgIHJldHVybiBhc3NpZ25lZEluc2VydGlvblBvaW50OworfQorCiBOb2RlKiBDb21w
b3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50KGNvbnN0IE5vZGUqIG5vZGUpIGNv
bnN0CiB7CiAgICAgaWYgKCFjYW5Dcm9zc1VwcGVyQm91bmRhcnkoKSAmJiBub2RlLT5pc1NoYWRv
d1Jvb3QoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93
VHJlZVdhbGtlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtl
ci5oCmluZGV4IDk3NjZjMWEzNjUwMTkwMDg4Yjk0ZGEyYTQ0MGMyMDYyNmQwZDRhOTIuLjFhOWQy
YTkzYzYzNjYzM2E5ZTNmMjQyMDFiNTBjNGUwOTNhZjdiOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKQEAgLTU4LDYgKzU4LDggQEAgcHVibGlj
OgogICAgIHZvaWQgcHJldmlvdXNTaWJsaW5nKCk7CiAKICAgICB2b2lkIHBhcmVudCgpOworICAg
IC8vIFRoaXMgZnVuY3Rpb24gaWdub3JlcyBwb2xpY3kgYW5kIGFsd2F5cyBjcm9zc2VzIGFuIHVw
cGVyIGJvdW5kYXJ5LgorICAgIHZvaWQgcGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRT
aGFkb3dSb290KCk7CiAKICAgICB2b2lkIG5leHQoKTsKICAgICB2b2lkIHByZXZpb3VzKCk7CkBA
IC05OSw2ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIE5vZGUqIHRyYXZlcnNlTGFzdENoaWxkKGNv
bnN0IE5vZGUqKSBjb25zdDsKICAgICBOb2RlKiB0cmF2ZXJzZUNoaWxkKGNvbnN0IE5vZGUqLCBU
cmF2ZXJzYWxEaXJlY3Rpb24pIGNvbnN0OwogICAgIE5vZGUqIHRyYXZlcnNlUGFyZW50KGNvbnN0
IE5vZGUqKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJzZVBhcmVudEluY2x1ZGluZ0luc2VydGlv
blBvaW50QW5kU2hhZG93Um9vdChjb25zdCBOb2RlKikgY29uc3Q7CiAKICAgICBzdGF0aWMgTm9k
ZSogdHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2RlKik7CiAgICAgc3RhdGljIE5vZGUqIHRy
YXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29u
dGV4dC5jcHAKaW5kZXggMmE1YzUyMTBhYWVmNmI5NDFiYmRlNWRlMjk1Y2JhMzM5ZDE0MmRmNS4u
ODA5NGJhMGJiMzg2NWQzNjJlNjU4MDExYjc5ZjEwMDlmMjBlYTg3NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50Q29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAi
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzgsNiArMzksNyBAQCBFdmVudENvbnRleHQ6OkV2ZW50Q29udGV4dChQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGN1cnJlbgogICAgIDogbV9ub2RlKG5v
ZGUpCiAgICAgLCBtX2N1cnJlbnRUYXJnZXQoY3VycmVudFRhcmdldCkKICAgICAsIG1fdGFyZ2V0
KHRhcmdldCkKKyAgICAsIG1fcmVsYXRlZFRhcmdldCgwKQogewogfQogCkBAIC00NSw2ICs0Nyw4
IEBAIHZvaWQgRXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCogZXZlbnQpIGNv
bnN0CiB7CiAgICAgZXZlbnQtPnNldFRhcmdldChtX3RhcmdldC5nZXQoKSk7CiAgICAgZXZlbnQt
PnNldEN1cnJlbnRUYXJnZXQobV9jdXJyZW50VGFyZ2V0LmdldCgpKTsKKyAgICBpZiAobV9yZWxh
dGVkVGFyZ2V0LmdldCgpICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgdG9Nb3Vz
ZUV2ZW50KGV2ZW50KS0+c2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkpOwog
ICAgIG1fbm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRDb250ZXh0LmgKaW5kZXggNWU3MzE3ZjQ1Y2Y1NDg1NmEzMjQ5ZDg3ZGQyN2EwODE2NjJkNjc0
OC4uNjMyNTgxMDA5MGMwNDI5NzI2OWNlNTJlNzBlMmRkMTBhZGQxNDQwOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudENvbnRleHQuaApAQCAtNDIsMTMgKzQyLDE2IEBAIHB1YmxpYzoKIAogICAgIE5vZGUq
IG5vZGUoKSBjb25zdDsKICAgICBFdmVudFRhcmdldCogdGFyZ2V0KCkgY29uc3Q7CisgICAgRXZl
bnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQoKSBjb25zdDsKICAgICBib29sIGN1cnJlbnRUYXJnZXRT
YW1lQXNUYXJnZXQoKSBjb25zdDsKICAgICB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50Kikg
Y29uc3Q7CisgICAgdm9pZCBzZXRSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+
KTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAgIFJlZlB0cjxFdmVu
dFRhcmdldD4gbV9jdXJyZW50VGFyZ2V0OwogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV90YXJn
ZXQ7CisgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX3JlbGF0ZWRUYXJnZXQ7CiB9OwogCiBpbmxp
bmUgTm9kZSogRXZlbnRDb250ZXh0Ojpub2RlKCkgY29uc3QKQEAgLTY2LDYgKzY5LDE2IEBAIGlu
bGluZSBib29sIEV2ZW50Q29udGV4dDo6Y3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fY3VycmVudFRhcmdldC5nZXQoKSA9PSBtX3RhcmdldC5nZXQoKTsKIH0K
IAoraW5saW5lIEV2ZW50VGFyZ2V0KiBFdmVudENvbnRleHQ6OnJlbGF0ZWRUYXJnZXQoKSBjb25z
dAoreworICAgIHJldHVybiBtX3JlbGF0ZWRUYXJnZXQuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lk
IEV2ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBy
ZWxhdGVkVGFyZ2V0KQoreworICAgIG1fcmVsYXRlZFRhcmdldCA9IHJlbGF0ZWRUYXJnZXQ7Cit9
CisKIH0KIAogI2VuZGlmIC8vIEV2ZW50Q29udGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuY3BwCmluZGV4IDE2ODllMDZiOGNhNGJmMGFiNTgzYzhmMzkxYmY5OTg5MGE5NzVi
ZGMuLmZjZGMwZTU4MzFlNjA3MGFmOTY5MDE1MjA4MTY3NDUwNTFlNjViNjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0yNiwxMCArMjYsMTMgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKIAorI2luY2x1ZGUgIkNv
bXBvc2VkU2hhZG93VHJlZVdhbGtlci5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKICNp
bmNsdWRlICJFdmVudENvbnRleHQuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoTWVkaWF0b3Iu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZl
bnRRdWV1ZS5oIgpAQCAtNDcsNiArNTAsNjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0
aWMgSGFzaFNldDxOb2RlKj4qIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsK
IAorRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVy
KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KQor
ICAgIDogbV9ub2RlKG5vZGUpCisgICAgLCBtX3JlbGF0ZWRUYXJnZXQocmVsYXRlZFRhcmdldCkK
K3sKKyAgICBBU1NFUlQobV9ub2RlKTsKKyAgICBBU1NFUlQobV9yZWxhdGVkVGFyZ2V0KTsKK30K
Kwordm9pZCBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6YWRqdXN0KFZlY3RvcjxFdmVudENv
bnRleHQ+JiBhbmNlc3RvcnMpCit7CisgICAgVHJlZVNjb3BlKiBsYXN0VHJlZVNjb3BlID0gMDsK
KyAgICBmb3IgKENvbXBvc2VkU2hhZG93VHJlZVdhbGtlciB3YWxrZXIobV9yZWxhdGVkVGFyZ2V0
LmdldCgpKTsgd2Fsa2VyLmdldCgpOyB3YWxrZXIucGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9p
bnRBbmRTaGFkb3dSb290KCkpIHsKKyAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IHdhbGtlci5n
ZXQoKS0+dHJlZVNjb3BlKCk7CisgICAgICAgIC8vIFNraXBzIGFkZGluZyBhIG5vZGUgdG8gdGhl
IG1hcCBpZiB0cmVlU2NvcGUgZG9lcyBub3QgY2hhbmdlLgorICAgICAgICBpZiAoc2NvcGUgIT0g
bGFzdFRyZWVTY29wZSkKKyAgICAgICAgICAgIG1fcmVsYXRlZFRhcmdldE1hcC5hZGQoc2NvcGUs
IHdhbGtlci5nZXQoKSk7CisgICAgICAgIGxhc3RUcmVlU2NvcGUgPSBzY29wZTsKKyAgICB9CisK
KyAgICBsYXN0VHJlZVNjb3BlID0gMDsKKyAgICBFdmVudFRhcmdldCogYWRqdXN0ZWRSZWxhdGVk
VGFyZ2V0ID0gMDsKKyAgICBmb3IgKFZlY3RvcjxFdmVudENvbnRleHQ+OjppdGVyYXRvciBpdGVy
ID0gYW5jZXN0b3JzLmJlZ2luKCk7IGl0ZXIgPCBhbmNlc3RvcnMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBUcmVlU2NvcGUqIHNjb3BlID0gaXRlci0+bm9kZSgpLT50cmVlU2NvcGUoKTsKKyAg
ICAgICAgaWYgKHNjb3BlID09IGxhc3RUcmVlU2NvcGUpIHsKKyAgICAgICAgICAgIC8vIFJlLXVz
ZSB0aGUgcHJldmlvdXMgYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0IGlmIHRyZWVTY29wZSBkb2VzIG5v
dCBjaGFuZ2UuCisgICAgICAgICAgICBpdGVyLT5zZXRSZWxhdGVkVGFyZ2V0KGFkanVzdGVkUmVs
YXRlZFRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGp1c3RlZFJlbGF0
ZWRUYXJnZXQgPSBmaW5kUmVsYXRlZFRhcmdldChzY29wZSk7CisgICAgICAgICAgICBpdGVyLT5z
ZXRSZWxhdGVkVGFyZ2V0KGFkanVzdGVkUmVsYXRlZFRhcmdldCk7CisgICAgICAgIH0KKyAgICAg
ICAgbGFzdFRyZWVTY29wZSA9IHNjb3BlOworICAgICAgICBpZiAoaXRlci0+dGFyZ2V0KCkgPT0g
YWRqdXN0ZWRSZWxhdGVkVGFyZ2V0KSB7CisgICAgICAgICAgICAvLyBFdmVudCBkaXNwYXRjaGlu
ZyBzaG91bGQgYmUgc3RvcHBlZCBoZXJlLgorICAgICAgICAgICAgYW5jZXN0b3JzLnNocmluayhp
dGVyIC0gYW5jZXN0b3JzLmJlZ2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK0V2ZW50VGFyZ2V0KiBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6Zmlu
ZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKiBzY29wZSkKK3sKKyAgICBWZWN0b3I8VHJlZVNjb3Bl
Kj4gcGFyZW50VHJlZVNjb3BlczsKKyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IDA7
CisgICAgd2hpbGUgKHNjb3BlKSB7CisgICAgICAgIHBhcmVudFRyZWVTY29wZXMuYXBwZW5kKHNj
b3BlKTsKKyAgICAgICAgUmVsYXRlZFRhcmdldE1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBt
X3JlbGF0ZWRUYXJnZXRNYXAuZmluZChzY29wZSk7CisgICAgICAgIGlmIChmb3VuZCAhPSBtX3Jl
bGF0ZWRUYXJnZXRNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBmb3Vu
ZC0+c2Vjb25kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUg
PSBzY29wZS0+cGFyZW50VHJlZVNjb3BlKCk7CisgICAgfQorICAgIGZvciAoVmVjdG9yPFRyZWVT
Y29wZSo+OjppdGVyYXRvciBpdGVyID0gcGFyZW50VHJlZVNjb3Blcy5iZWdpbigpOyBpdGVyIDwg
cGFyZW50VHJlZVNjb3Blcy5lbmQoKTsgKytpdGVyKQorICAgICAgbV9yZWxhdGVkVGFyZ2V0TWFw
LmFkZCgqaXRlciwgcmVsYXRlZFRhcmdldCk7CisgICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQ7Cit9
CisKIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBhc3NS
ZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKIHsKICAgICBBU1NFUlQoIWV2
ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBAIC0xMTYsMTA0ICsxNzYsMTggQEAgdm9pZCBFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1JlZlB0
cjxFdmVudD4gdW5kZXIKICAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+cmVt
b3ZlKG5vZGUpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNoZXI6
OmFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQs
IGNvbnN0IFZlY3RvcjxOb2RlKj4gcmVsYXRlZFRhcmdldEFuY2VzdG9ycykKLXsKLSAgICBWZWN0
b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSBt
X2FuY2VzdG9ycy5lbmQoKTsKLSAgICAvLyBBc3N1bWUgZGl2ZXJnZW50IGJvdW5kYXJ5IGlzIHRo
ZSByZWxhdGVkVGFyZ2V0IGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIHJlbGF0ZWQgdGFyZ2V0IGFu
Y2VzdG9yIGNoYWluIGRvZXMgbm90IGNyb3NzIGFueSBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgot
ICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkg
PSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7Ci0KLSAgICBWZWN0b3I8RXZlbnRDb250
ZXh0Pjo6Y29uc3RfaXRlcmF0b3IgdGFyZ2V0QW5jZXN0b3IgPSBtX2FuY2VzdG9ycy5lbmQoKTsK
LSAgICAvLyBXYWxrIGRvd24gZnJvbSB0aGUgdG9wLCBsb29raW5nIGZvciBsb3dlc3QgY29tbW9u
IGFuY2VzdG9yLCBhbHNvIG1vbml0b3Jpbmcgc2hhZG93IERPTSBib3VuZGFyaWVzLgotICAgIGJv
b2wgZGl2ZXJnZWQgPSBmYWxzZTsKLSAgICBmb3IgKFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJh
dG9yIGkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmVuZCgpIC0gMTsgaSA+PSByZWxhdGVkVGFy
Z2V0QW5jZXN0b3JzLmJlZ2luKCk7IC0taSkgewotICAgICAgICBpZiAoZGl2ZXJnZWQpIHsKLSAg
ICAgICAgICAgIGlmICgoKmkpLT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAgIGZp
cnN0RGl2ZXJnZW50Qm91bmRhcnkgPSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHRhcmdldEFuY2VzdG9yID09IG1fYW5jZXN0b3JzLmJlZ2luKCkpIHsKLSAgICAgICAgICAg
IGRpdmVyZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdGFyZ2V0QW5jZXN0b3ItLTsKLQotICAgICAgICBpZiAoKCppKS0+aXNTaGFkb3dSb290
KCkpCi0gICAgICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IHRhcmdldEFuY2VzdG9yOwot
Ci0gICAgICAgIGlmICgoKmkpICE9ICgqdGFyZ2V0QW5jZXN0b3IpLm5vZGUoKSkKLSAgICAgICAg
ICAgIGRpdmVyZ2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpdmVyZ2VkKSB7Ci0gICAg
ICAgIC8vIFRoZSByZWxhdGVkVGFyZ2V0IGlzIGFuIGFuY2VzdG9yIG9yIHNoYWRvd0hvc3Qgb2Yg
dGhlIHRhcmdldC4KLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgZmlyc3QgY2hlY2sgb25j
ZSBjb252ZXJzaW9uIHRvIG5ldyBzaGFkb3cgRE9NIGlzIGNvbXBsZXRlIDxodHRwOi8vd2Via2l0
Lm9yZy9iLzQ4Njk4PgotICAgICAgICBpZiAobV9ub2RlLT5zaGFkb3dIb3N0KCkgPT0gcmVsYXRl
ZFRhcmdldC5nZXQoKSB8fCBpc1NoYWRvd0hvc3QocmVsYXRlZFRhcmdldC5nZXQoKSkpIHsKLSAg
ICAgICAgICAgIFZlY3RvcjxFdmVudENvbnRleHQ+Ojpjb25zdF9pdGVyYXRvciByZWxhdGVkVGFy
Z2V0Q2hpbGQgPSB0YXJnZXRBbmNlc3RvciAtIDE7Ci0gICAgICAgICAgICBpZiAocmVsYXRlZFRh
cmdldENoaWxkID49IG1fYW5jZXN0b3JzLmJlZ2luKCkgJiYgcmVsYXRlZFRhcmdldENoaWxkLT5u
b2RlKCktPmlzU2hhZG93Um9vdCgpKQotICAgICAgICAgICAgICAgIGxvd2VzdENvbW1vbkJvdW5k
YXJ5ID0gcmVsYXRlZFRhcmdldENoaWxkOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgoKmZp
cnN0RGl2ZXJnZW50Qm91bmRhcnkpID09IG1fbm9kZS5nZXQoKSkgewotICAgICAgICAvLyBTaW5j
ZSBhbmNlc3RvcnMgZG9lcyBub3QgY29udGFpbiB0YXJnZXQgaXRzZWxmLCB3ZSBtdXN0IGFjY291
bnQKLSAgICAgICAgLy8gZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRhcmdldCBpcyBhIHNoYWRv
d0hvc3Qgb2YgcmVsYXRlZFRhcmdldAotICAgICAgICAvLyBhbmQgdGh1cyBzZXJ2ZXMgYXMgdGhl
IGxvd2VzdENvbW1vbkJvdW5kYXJ5LgotICAgICAgICAvLyBMdWNraWx5LCBpbiB0aGlzIGNhc2Ug
dGhlIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgaXMgdGFyZ2V0LgotICAgICAgICBsb3dlc3RDb21t
b25Cb3VuZGFyeSA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7Ci0gICAgICAgIG1fc2hvdWxkUHJldmVu
dERpc3BhdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobG93ZXN0Q29tbW9uQm91bmRhcnkg
IT0gbV9hbmNlc3RvcnMuZW5kKCkpIHsKLSAgICAgICAgLy8gVHJpbSBhbmNlc3RvcnMgdG8gbG93
ZXN0Q29tbW9uQm91bmRhcnkgdG8ga2VlcCBldmVudHMgaW5zaWRlIG9mIHRoZSBjb21tb24gc2hh
ZG93IERPTSBzdWJ0cmVlLgotICAgICAgICBtX2FuY2VzdG9ycy5zaHJpbmsobG93ZXN0Q29tbW9u
Qm91bmRhcnkgLSBtX2FuY2VzdG9ycy5iZWdpbigpKTsKLSAgICB9Ci0gICAgLy8gU2V0IGV2ZW50
J3MgcmVsYXRlZCB0YXJnZXQgdG8gdGhlIGZpcnN0IGVuY291bnRlcmVkIHNoYWRvdyBET00gYm91
bmRhcnkgaW4gdGhlIGRpdmVyZ2VudCBzdWJ0cmVlLgotICAgIHJldHVybiBmaXJzdERpdmVyZ2Vu
dEJvdW5kYXJ5ICE9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKSA/ICpmaXJzdERpdmVy
Z2VudEJvdW5kYXJ5IDogcmVsYXRlZFRhcmdldDsKLX0KLQotaW5saW5lIHN0YXRpYyBib29sIGFu
Y2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyhjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYg
YW5jZXN0b3JzKQotewotICAgIHJldHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGFuY2VzdG9y
cy5maXJzdCgpLm5vZGUoKSA9PSBhbmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKLX0KIAotLy8gRklY
TUU6IE9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTYzIGxh
bmRzLCB0aGlzIHNob3VsZAotLy8gYmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDAyNS4KLVBhc3NSZWZQdHI8RXZlbnRUYXJn
ZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit2b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRU
YXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCiB7CiAgICAgaWYgKCFwcnBSZWxhdGVkVGFyZ2V0KQot
ICAgICAgICByZXR1cm4gMDsKLQorICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPE5vZGU+IHJl
bGF0ZWRUYXJnZXQgPSBwcnBSZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKICAgICBpZiAoIXJlbGF0
ZWRUYXJnZXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTm9kZSogdGFyZ2V0ID0gbV9ub2Rl
LmdldCgpOwotICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm4gcHJwUmVsYXRlZFRhcmdl
dDsKLQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX25vZGUuZ2V0KCkpCisgICAgICAgIHJl
dHVybjsKICAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7Ci0KLSAgICAvLyBDYWxjdWxh
dGUgZWFybHkgaWYgdGhlIGNvbW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxlIGJ5IGxvb2tp
bmcgYXQKLSAgICAvLyBhbmNlc3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0aW5nIGhhcyBv
Y2N1cmVkIChpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJvdW5kYXJpZXMp
LgotICAgIC8vIElmIHRoZXJlIGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0aGUgdGFyZ2V0
IGFuZCByZWxhdGVkIHRhcmdldCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5LgotICAgIGJv
b2wgbm9Db21tb25Cb3VuZGFyeSA9IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmllcyhtX2Fu
Y2VzdG9ycyk7Ci0KLSAgICBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnM7Ci0g
ICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0LmdldCgpOwot
ICAgIGZvciAoTm9kZSogbiA9IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBuID0gbi0+cGFy
ZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAg
ICAgICAgIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpOwot
ICAgICAgICBpZiAoIW5vQ29tbW9uQm91bmRhcnkpCi0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0
QW5jZXN0b3JzLmFwcGVuZChuKTsKLSAgICB9Ci0KLSAgICAvLyBTaG9ydC1jaXJjdWl0IHRoZSBm
YXN0IGNhc2Ugd2hlbiB3ZSBrbm93IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3VsYXRlIGEgY29t
bW9uIGJvdW5kYXJ5LgotICAgIGlmIChub0NvbW1vbkJvdW5kYXJ5KQotICAgICAgICByZXR1cm4g
b3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7Ci0KLSAgICByZXR1cm4gYWRqdXN0VG9TaGFkb3dCb3Vu
ZGFyaWVzKHJlbGF0ZWRUYXJnZXQucmVsZWFzZSgpLCByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzKTsK
KyAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihtX25vZGUsIHJlbGF0ZWRUYXJnZXQucmVs
ZWFzZSgpKS5hZGp1c3QobV9hbmNlc3RvcnMpOwogfQogCiBFdmVudERpc3BhdGNoZXI6OkV2ZW50
RGlzcGF0Y2hlcihOb2RlKiBub2RlKQpAQCAtMjI3LDMwICsyMDEsMzkgQEAgRXZlbnREaXNwYXRj
aGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKIAogdm9pZCBFdmVudERpc3BhdGNoZXI6
OmVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIW1fbm9kZS0+
aW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9hbmNlc3RvcnNJbml0
aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
IGFuY2VzdG9yV2Fsa2VyKG1fbm9kZS5nZXQoKSk7CisgICAgRXZlbnRUYXJnZXQqIG9yaWdpbmFs
VGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5jZXN0b3JXYWxr
ZXIuZ2V0KCkpOworICAgIG1fYW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQobV9ub2RlLmdl
dCgpLCBvcmlnaW5hbFRhcmdldCwgb3JpZ2luYWxUYXJnZXQpKTsKICAgICBtX2FuY2VzdG9yc0lu
aXRpYWxpemVkID0gdHJ1ZTsKIAotICAgIE5vZGUqIGFuY2VzdG9yID0gbV9ub2RlLmdldCgpOwot
ICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRS
dWxlcyhhbmNlc3Rvcik7CisgICAgaWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4gdGFyZ2V0U3RhY2s7CisgICAgdGFy
Z2V0U3RhY2suYXBwZW5kKG9yaWdpbmFsVGFyZ2V0KTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICBpZiAoYW5jZXN0b3ItPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoZGV0
ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgYW5jZXN0b3IpID09IFN0YXlJbnNpZGVTaGFk
b3dET00pCisgICAgICAgIGlmIChhbmNlc3RvcldhbGtlci5nZXQoKS0+aXNTaGFkb3dSb290KCkp
IHsKKyAgICAgICAgICAgIGlmIChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKGV2ZW50LCBhbmNl
c3RvcldhbGtlci5nZXQoKSkgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkKICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5zaGFkb3dIb3N0KCk7
Ci0gICAgICAgICAgICBpZiAoIW1fbm9kZS0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgICAgICAg
ICAgdGFyZ2V0ID0gYW5jZXN0b3I7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYW5jZXN0
b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotCi0gICAgICAg
IGlmICghYW5jZXN0b3IpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9hbmNlc3Rv
cnMuYXBwZW5kKEV2ZW50Q29udGV4dChhbmNlc3RvciwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZH
VGFyZ2V0UnVsZXMoYW5jZXN0b3IpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgIGFuY2VzdG9yV2Fs
a2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50QW5kU2hhZG93Um9vdCgpOworICAgICAg
ICAgICAgaWYgKCFhbmNlc3RvcldhbGtlci5nZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICB0YXJnZXRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgaWYgKHRhcmdl
dFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBwZW5k
KGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGFuY2VzdG9yV2Fsa2VyLnBhcmVudEluY2x1ZGluZ0luc2VydGlvblBvaW50
QW5kU2hhZG93Um9vdCgpOworICAgICAgICAgICAgaWYgKCFhbmNlc3RvcldhbGtlci5nZXQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoaXNJbnNlcnRpb25Qb2lu
dChhbmNlc3RvcldhbGtlci5nZXQoKSkgJiYgdG9JbnNlcnRpb25Qb2ludChhbmNlc3RvcldhbGtl
ci5nZXQoKSktPmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBwZW5k
KGFuY2VzdG9yV2Fsa2VyLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBtX2FuY2VzdG9ycy5h
cHBlbmQoRXZlbnRDb250ZXh0KGFuY2VzdG9yV2Fsa2VyLmdldCgpLCBldmVudFRhcmdldFJlc3Bl
Y3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3RvcldhbGtlci5nZXQoKSksIHRhcmdldFN0YWNrLmxh
c3QoKSkpOwogICAgIH0KIH0KIApAQCAtMjcxLDcgKzI1NCw3IEBAIGJvb2wgRXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgLy8gR2l2
ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIGJlZm9yZSBET00gZXZl
bnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2suCiAgICAgdm9pZCogZGF0YSA9IG1fbm9kZS0+cHJlRGlz
cGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwotICAgIGlmIChtX3Nob3VsZFByZXZlbnRE
aXNwYXRjaCB8fCBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgaWYgKG1fYW5jZXN0
b3JzLmlzRW1wdHkoKSB8fCBtX3Nob3VsZFByZXZlbnREaXNwYXRjaCB8fCBldmVudC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCiAgICAgLy8g
VHJpZ2dlciBjYXB0dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSB0b3AgYW5k
IHdvcmtpbmcgb3VyIHdheSBkb3duLgpAQCAtMjgwLDggKzI2Myw4IEBAIGJvb2wgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIGlmICh3
aW5kb3dDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKSAmJiBldmVudC0+cHJv
cGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCi0gICAg
Zm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3JzLnNpemUoKTsgaTsgLS1pKSB7Ci0gICAgICAgIGNv
bnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaS0xXTsKKyAgICBm
b3IgKHNpemVfdCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpIC0gMTsgaSA+IDA7IC0taSkgeworICAg
ICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1fYW5jZXN0b3JzW2ldOwog
ICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkgewog
ICAgICAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CkBAIC0yOTYsNyArMjc5LDcgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkFUX1RBUkdFVCk7CiAgICAgZXZlbnQtPnNldFRhcmdldChvcmlnaW5hbFRhcmdldC5nZXQo
KSk7CiAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZH
VGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7Ci0gICAgbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50
cyhldmVudC5nZXQoKSk7CisgICAgbV9hbmNlc3RvcnNbMF0uaGFuZGxlTG9jYWxFdmVudHMoZXZl
bnQuZ2V0KCkpOwogICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAg
IGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCkBAIC0zMDUsNyArMjg4LDcgQEAgYm9vbCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgICAg
IGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CiAKICAgICAgICAg
c2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6
ZTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9
IG1fYW5jZXN0b3JzW2ldOwogICAgICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50VGFy
Z2V0U2FtZUFzVGFyZ2V0KCkpCiAgICAgICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2Uo
RXZlbnQ6OkFUX1RBUkdFVCk7CkBAIC0zMzksNyArMzIyLDcgQEAgZG9uZURpc3BhdGNoaW5nOgog
ICAgICAgICAvLyBzYW1lIG9yZGVyIGFzIHRoZSBidWJibGluZyBwaGFzZS4KICAgICAgICAgaWYg
KGV2ZW50LT5idWJibGVzKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3Rv
cnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgbV9hbmNlc3RvcnNbaV0ubm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2
ZW50LmdldCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCkpOwogICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKQEAg
LTM3OSwxMSArMzYyLDYgQEAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6
ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQsIE4KICAgICBVTlVTRURfUEFS
QU0oc2hhZG93Um9vdCk7CiAjZW5kaWYKIAotICAgIC8vIFBlciBYQkwgMi4wIHNwZWMsIG11dGF0
aW9uIGV2ZW50cyBzaG91bGQgbmV2ZXIgY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyeToKLSAgICAv
LyBodHRwOi8vZGV2LnczLm9yZy8yMDA2L3hibDIvI2V2ZW50LWZsb3ctYW5kLXRhcmdldGluZy1h
Y3Jvc3Mtc2hhZG93LXMKLSAgICBpZiAoZXZlbnQtPmhhc0ludGVyZmFjZShldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yTXV0YXRpb25FdmVudCkpCi0gICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hh
ZG93RE9NOwotCiAgICAgLy8gV2ViS2l0IG5ldmVyIGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQg
dG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cgRE9NIGJvdW5kYXJ5LgogICAgIC8vIENoYW5naW5nIHRo
aXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxOTUgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnREaXNwYXRjaGVyLmgKaW5kZXggODVhZWZjNDkzMDQzZDUxN2VjOTc3MzRlNjIxOGFhZDgxZDE3
OTA2Ny4uNmY4OTFjMTM0MjdjNjZhY2ZlOGEzYTdkY2YxM2EzMWZhZDU2YjBjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBFdmVu
dERpc3BhdGNoZXJfaAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDAsMTIgKzQxLDI2IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZl
bnQ7CitjbGFzcyBUcmVlU2NvcGU7CiAKIGVudW0gRXZlbnREaXNwYXRjaEJlaGF2aW9yIHsKICAg
ICBSZXRhcmdldEV2ZW50LAogICAgIFN0YXlJbnNpZGVTaGFkb3dET00KIH07CiAKK2NsYXNzIEV2
ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKK3B1YmxpYzoKKyAgICBFdmVudFJlbGF0ZWRUYXJn
ZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJn
ZXQpOworICAgIHZvaWQgYWRqdXN0KFZlY3RvcjxFdmVudENvbnRleHQ+Jik7Citwcml2YXRlOgor
ICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVudFRhcmdldCo+IFJlbGF0ZWRUYXJn
ZXRNYXA7CisgICAgRXZlbnRUYXJnZXQqIGZpbmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSopOwor
CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVkVGFy
Z2V0OworICAgIFJlbGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVkVGFyZ2V0TWFwOworfTsKKwogY2xh
c3MgRXZlbnREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEV2
ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4pOwpAQCAtNTQsMTMg
KzY5LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNr
KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNl
RXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vayk7CiAKICAgICBib29sIGRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pOwotICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGFkanVzdFJl
bGF0ZWRUYXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBh
ZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVs
YXRlZFRhcmdldCk7CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEV2
ZW50RGlzcGF0Y2hlcihOb2RlKik7CiAKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBhZGp1
c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0LCBjb25z
dCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpOwogICAgIEV2ZW50RGlzcGF0
Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgTm9kZSogc2hhZG93
Um9vdCk7CiAgICAgdm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwogICAgIGNvbnN0
IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5j
cHAKaW5kZXggYzM2ODljNmRkNDYzYWVlMDU2Mjg4MTcyZTI1NGRjM2VjZmIyNWQwYi4uY2YyZTI2
NjBhNjVlMzYxMWY0YjQ3ZWNmOGVjZTdhZjI3MzdlZjUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2
ZW50LmNwcApAQCAtMjAxLDggKzIwMSw4IEBAIGJvb2wgTW91c2VFdmVudERpc3BhdGNoTWVkaWF0
b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zCiAgICAg
aWYgKGV2ZW50KCktPnR5cGUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
U2hvdWxkbid0IGhhcHBlbi4KIAotICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdl
dCA9IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZlbnQoKS0+cmVs
YXRlZFRhcmdldCgpKTsKLSAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJn
ZXQpOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQoKS0+cmVsYXRlZFRh
cmdldCgpOworICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgcmVs
YXRlZFRhcmdldCk7CiAKICAgICBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2ZW50KGV2ZW50KCkpOwog
ICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZXZlbnQoKS0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBldmVu
dCgpLT5kZWZhdWx0UHJldmVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TW91c2VFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAppbmRleCAxZmU2
ZjkwMjBiYjMxNWJkYzAxMDQ2MTNhNzdiOTYzNDljZTZkY2ExLi41NzZiNTczNzlkODI3Yzc4YTBl
NWIwNDkxMWM3MmFmMmYxMDI5NzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91
c2VFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKQEAgLTEyMSw2
ICsxMjEsMTIgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dERpc3BhdGNoZXIqKSBjb25zdDsKIH07CiAKK2lubGluZSBNb3VzZUV2ZW50KiB0b01vdXNlRXZl
bnQoRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChldmVudCAmJiBldmVudC0+aXNNb3VzZUV2
ZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBNb3VzZUV2ZW50X2gKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA5YWVlZjk4MGExY2VmM2JkYTA0YjcxMTY5YmZmNWJmOGQ5NzE3ZWVhLi5jMjcyNjMzMzkxOWRl
MzU4M2U3NTlkNGQyOTNlNmE4YjBlYzY0OTdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTIt
MDUtMTUgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEltcGxl
bWVudCBhIFNoYWRvdyBET00gc3BlYydzIHNlY3Rpb24gNiAnRXZlbnRzJy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTg2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3No
YWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbmNhaXJvL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2syL1NraXBwZWQ6
CisKIDIwMTItMDUtMTYgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBBdWRpb1BhcmFtIG11c3Qgc3VwcG9ydCBmYW4taW4gKG11bHRpcGxlIGF1ZGlvIGNvbm5l
Y3Rpb25zKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1k
b20tZXZlbnQtZGlzcGF0Y2hpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJiMTE2NzhhMTcwOWJmNjJjNDNiNmMyMWViNDYxZGM4ZDdlZDhkYTEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNw
YXRjaGluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNDYgQEAKK1Rlc3RzIHRvIGVuc3VyZSB0
aGF0IGV2ZW50IGRpc3BhdGNoaW5nIGJlaGF2ZXMgYXMgdGhlIFNoYWRvdyBET00gc3BlYyBkZXNj
cmliZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKKworQ29tcG9zZWQgU2hh
ZG93IFRyZWUgd2lsbCBiZToKK0RJVgkgaWQ9c2FuZGJveAorCURJVgkgaWQ9dG9wCisJCURJVgkg
aWQ9c2hhZG93LWhvc3QKKwkJCURJVgkgaWQ9ZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQKKwkJCURJ
VgkgaWQ9c2hhZG93LXJvb3QtY2hpbGQKKworCitNb3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9z
dCB0byBzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZAorCisgIG1vdXNlb3V0CisKKyAgbW91
c2VvdmVyCisgICAgIEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGls
ZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogc2hh
ZG93LXJvb3QtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworTW92aW5nIG1vdXNlIGZy
b20gc2hhZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQgdG8gc2hhZG93LWhvc3QKKworICBtb3Vz
ZW91dAorICAgICBAc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogc2hhZG93LXJvb3QtY2hpbGQp
IChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRv
dy1yb290LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKKyAgbW91c2VvdmVyCisKK01v
dmluZyBtb3VzZSBmcm9tIHNoYWRvdy1ob3N0IHRvIGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkCisK
KyAgbW91c2VvdXQKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVs
YXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisgICAgIEB0b3AgKHRhcmdldDogc2hhZG93
LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKworICBtb3VzZW92ZXIK
KyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0
LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBjb250ZW50ICh0YXJnZXQ6IGNv
bnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6
IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJn
ZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAg
IEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ct
aG9zdCkKKworTW92aW5nIG1vdXNlIGZyb20gZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgdG8gc2hh
ZG93LWhvc3QKKworICBtb3VzZW91dAorICAgICBAZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQgKHRh
cmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKKyAg
ICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAg
ICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQor
ICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChyZWxh
dGVkOiBzaGFkb3ctaG9zdCkKKyAgICAgQHRvcCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorCisgIG1vdXNlb3ZlcgorICAgICBAc2hhZG93
LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpIChyZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1j
aGlsZCkKKyAgICAgQHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1
dGVkLWxpZ2h0LWNoaWxkKQorCitNb3ZpbmcgbW91c2UgZnJvbSBzaGFkb3ctaG9zdC9zaGFkb3ct
cm9vdC1jaGlsZCB0byBkaXN0cmlidXRlZC1saWdodC1jaGlsZAorCisgIG1vdXNlb3V0CisgICAg
IEBzaGFkb3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkgKHJlbGF0ZWQ6
IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdC1jaGlsZCkg
KHJlbGF0ZWQ6IGNvbnRlbnQpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9z
dCkgKHJlbGF0ZWQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKQorICAgICBAdG9wICh0YXJnZXQ6
IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisKKyAgbW91
c2VvdmVyCisgICAgIEBkaXN0cmlidXRlZC1saWdodC1jaGlsZCAodGFyZ2V0OiBkaXN0cmlidXRl
ZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQorICAgICBAY29udGVudCAodGFy
Z2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAgIEBzaGFkb3ct
cm9vdCAodGFyZ2V0OiBjb250ZW50KSAocmVsYXRlZDogc2hhZG93LXJvb3QtY2hpbGQpCisgICAg
IEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkgKHJlbGF0ZWQ6
IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxk
KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisKK01vdmluZyBtb3VzZSBmcm9tIGRpc3RyaWJ1dGVk
LWxpZ2h0LWNoaWxkIHRvIHNoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkCisKKyAgbW91c2Vv
dXQKKyAgICAgQGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkKSAocmVsYXRlZDogc2hhZG93LWhvc3QpCisgICAgIEBjb250ZW50ICh0YXJnZXQ6
IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctcm9vdC1jaGlsZCkKKyAgICAgQHNoYWRvdy1yb290
ICh0YXJnZXQ6IGNvbnRlbnQpIChyZWxhdGVkOiBzaGFkb3ctcm9vdC1jaGlsZCkKKyAgICAgQHNo
YWRvdy1ob3N0ICh0YXJnZXQ6IGRpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkKSAocmVsYXRlZDogc2hh
ZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQpIChy
ZWxhdGVkOiBzaGFkb3ctaG9zdCkKKworICBtb3VzZW92ZXIKKyAgICAgQHNoYWRvdy1yb290LWNo
aWxkICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogY29udGVudCkKKyAgICAg
QHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1yb290LWNoaWxkKSAocmVsYXRlZDogY29udGVu
dCkKKyAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAocmVsYXRlZDogZGlz
dHJpYnV0ZWQtbGlnaHQtY2hpbGQpCisgICAgIEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3QpIChy
ZWxhdGVkOiBkaXN0cmlidXRlZC1saWdodC1jaGlsZCkKKworCitDb21wb3NlZCBTaGFkb3cgVHJl
ZSB3aWxsIGJlOgorRElWCSBpZD1zYW5kYm94CisJRElWCSBpZD10b3AKKwkJREVUQUlMUwkgaWQ9
ZGV0YWlscworCQkJU1VNTUFSWQkgaWQ9c3VtbWFyeQorCQkJCURJVgkKKworCitNb3ZpbmcgbW91
c2UgZnJvbSBkZXRhaWxzIHRvIHN1bW1hcnkKKworICBtb3VzZW91dAorICAgICBAZGV0YWlscyAo
dGFyZ2V0OiBkZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKyAgICAgQHRvcCAodGFyZ2V0OiBk
ZXRhaWxzKSAocmVsYXRlZDogc3VtbWFyeSkKKworICBtb3VzZW92ZXIKKyAgICAgQHN1bW1hcnkg
KHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMpCisgICAgIEBkZXRhaWxzICh0YXJn
ZXQ6IHN1bW1hcnkpIChyZWxhdGVkOiBkZXRhaWxzKQorICAgICBAdG9wICh0YXJnZXQ6IHN1bW1h
cnkpIChyZWxhdGVkOiBkZXRhaWxzKQorCitNb3ZpbmcgbW91c2UgZnJvbSBzdW1tYXJ5IHRvIGRl
dGFpbHMKKworICBtb3VzZW91dAorICAgICBAc3VtbWFyeSAodGFyZ2V0OiBzdW1tYXJ5KSAocmVs
YXRlZDogZGV0YWlscykKKyAgICAgQGRldGFpbHMgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6
IGRldGFpbHMpCisgICAgIEB0b3AgKHRhcmdldDogc3VtbWFyeSkgKHJlbGF0ZWQ6IGRldGFpbHMp
CisKKyAgbW91c2VvdmVyCisgICAgIEBkZXRhaWxzICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVk
OiBzdW1tYXJ5KQorICAgICBAdG9wICh0YXJnZXQ6IGRldGFpbHMpIChyZWxhdGVkOiBzdW1tYXJ5
KQorCisKK0NvbXBvc2VkIFNoYWRvdyBUcmVlIHdpbGwgYmU6CitESVYJIGlkPXNhbmRib3gKKwlE
SVYJIGlkPXRvcAorCQlESVYJIGlkPUEKKwkJCURJVgkgaWQ9QgorCQkJCURJVgkgaWQ9RworCQkJ
CQlESVYJIGlkPUoKKwkJCQkJCURJVgkgaWQ9QworCQkJCQkJCURJVgkgaWQ9RAorCQkJCQlESVYJ
IGlkPUwKKwkJCQkJCURJVgkgaWQ9RQorCQkJCQkJCURJVgkgaWQ9RgorCisKK01vdmluZyBtb3Vz
ZSBmcm9tIEYgdG8gRAorCisgIG1vdXNlb3V0CisgICAgIEBGICh0YXJnZXQ6IEYpIChyZWxhdGVk
OiBEKQorICAgICBARSAodGFyZ2V0OiBGKSAocmVsYXRlZDogRCkKKyAgICAgQEkgKHRhcmdldDog
SSkgKHJlbGF0ZWQ6IEgpCisgICAgIEBNICh0YXJnZXQ6IE0pIChyZWxhdGVkOiBLKQorICAgICBA
TyAodGFyZ2V0OiBPKSAocmVsYXRlZDogSykKKyAgICAgQHNoYWRvdy1yb290LUwgKHRhcmdldDog
TykgKHJlbGF0ZWQ6IEspCisgICAgIEBMICh0YXJnZXQ6IE0pIChyZWxhdGVkOiBLKQorICAgICBA
c2hhZG93LXJvb3QtRyAodGFyZ2V0OiBNKSAocmVsYXRlZDogSykKKyAgICAgQEcgKHRhcmdldDog
SSkgKHJlbGF0ZWQ6IEgpCisgICAgIEBzaGFkb3ctcm9vdC1CICh0YXJnZXQ6IEkpIChyZWxhdGVk
OiBIKQorICAgICBAQiAodGFyZ2V0OiBGKSAocmVsYXRlZDogRCkKKyAgICAgQEEgKHRhcmdldDog
RikgKHJlbGF0ZWQ6IEQpCisgICAgIEB0b3AgKHRhcmdldDogRikgKHJlbGF0ZWQ6IEQpCisKKyAg
bW91c2VvdmVyCisgICAgIEBEICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBGKQorICAgICBAQyAodGFy
Z2V0OiBEKSAocmVsYXRlZDogRikKKyAgICAgQEggKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEkpCisg
ICAgIEBLICh0YXJnZXQ6IEspIChyZWxhdGVkOiBNKQorICAgICBATiAodGFyZ2V0OiBOKSAocmVs
YXRlZDogTSkKKyAgICAgQHNoYWRvdy1yb290LUogKHRhcmdldDogTikgKHJlbGF0ZWQ6IE0pCisg
ICAgIEBKICh0YXJnZXQ6IEspIChyZWxhdGVkOiBNKQorICAgICBAc2hhZG93LXJvb3QtRyAodGFy
Z2V0OiBLKSAocmVsYXRlZDogTSkKKyAgICAgQEcgKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEkpCisg
ICAgIEBzaGFkb3ctcm9vdC1CICh0YXJnZXQ6IEgpIChyZWxhdGVkOiBJKQorICAgICBAQiAodGFy
Z2V0OiBEKSAocmVsYXRlZDogRikKKyAgICAgQEEgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEYpCisg
ICAgIEB0b3AgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEYpCisKK01vdmluZyBtb3VzZSBmcm9tIEIv
Ry9MIHRvIEQKKworICBtb3VzZW91dAorICAgICBATCAodGFyZ2V0OiBMKSAocmVsYXRlZDogSykK
KyAgICAgQHNoYWRvdy1yb290LUcgKHRhcmdldDogTCkgKHJlbGF0ZWQ6IEspCisgICAgIEBHICh0
YXJnZXQ6IEcpIChyZWxhdGVkOiBIKQorICAgICBAc2hhZG93LXJvb3QtQiAodGFyZ2V0OiBHKSAo
cmVsYXRlZDogSCkKKyAgICAgQEIgKHRhcmdldDogQikgKHJlbGF0ZWQ6IEQpCisgICAgIEBBICh0
YXJnZXQ6IEIpIChyZWxhdGVkOiBEKQorICAgICBAdG9wICh0YXJnZXQ6IEIpIChyZWxhdGVkOiBE
KQorCisgIG1vdXNlb3ZlcgorICAgICBARCAodGFyZ2V0OiBEKSAocmVsYXRlZDogQikKKyAgICAg
QEMgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEIpCisgICAgIEBIICh0YXJnZXQ6IEgpIChyZWxhdGVk
OiBHKQorICAgICBASyAodGFyZ2V0OiBLKSAocmVsYXRlZDogTCkKKyAgICAgQE4gKHRhcmdldDog
TikgKHJlbGF0ZWQ6IEwpCisgICAgIEBzaGFkb3ctcm9vdC1KICh0YXJnZXQ6IE4pIChyZWxhdGVk
OiBMKQorICAgICBASiAodGFyZ2V0OiBLKSAocmVsYXRlZDogTCkKKyAgICAgQHNoYWRvdy1yb290
LUcgKHRhcmdldDogSykgKHJlbGF0ZWQ6IEwpCisgICAgIEBHICh0YXJnZXQ6IEgpIChyZWxhdGVk
OiBHKQorICAgICBAc2hhZG93LXJvb3QtQiAodGFyZ2V0OiBIKSAocmVsYXRlZDogRykKKyAgICAg
QEIgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEIpCisgICAgIEBBICh0YXJnZXQ6IEQpIChyZWxhdGVk
OiBCKQorICAgICBAdG9wICh0YXJnZXQ6IEQpIChyZWxhdGVkOiBCKQorCitNb3ZpbmcgbW91c2Ug
ZnJvbSBCL0cvTCB0byBCL0cvSgorCisgIG1vdXNlb3V0CisgICAgIEBMICh0YXJnZXQ6IEwpIChy
ZWxhdGVkOiBKKQorICAgICBAc2hhZG93LXJvb3QtRyAodGFyZ2V0OiBMKSAocmVsYXRlZDogSikK
KworICBtb3VzZW92ZXIKKyAgICAgQEogKHRhcmdldDogSikgKHJlbGF0ZWQ6IEwpCisgICAgIEBz
aGFkb3ctcm9vdC1HICh0YXJnZXQ6IEopIChyZWxhdGVkOiBMKQorCitNb3ZpbmcgbW91c2UgZnJv
bSBBIHRvIEQKKworICBtb3VzZW91dAorICAgICBAQSAodGFyZ2V0OiBBKSAocmVsYXRlZDogRCkK
KyAgICAgQHRvcCAodGFyZ2V0OiBBKSAocmVsYXRlZDogRCkKKworICBtb3VzZW92ZXIKKyAgICAg
QEQgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBDICh0YXJnZXQ6IEQpIChyZWxhdGVk
OiBBKQorICAgICBASCAodGFyZ2V0OiBIKSAocmVsYXRlZDogQSkKKyAgICAgQEsgKHRhcmdldDog
SykgKHJlbGF0ZWQ6IEEpCisgICAgIEBOICh0YXJnZXQ6IE4pIChyZWxhdGVkOiBBKQorICAgICBA
c2hhZG93LXJvb3QtSiAodGFyZ2V0OiBOKSAocmVsYXRlZDogQSkKKyAgICAgQEogKHRhcmdldDog
SykgKHJlbGF0ZWQ6IEEpCisgICAgIEBzaGFkb3ctcm9vdC1HICh0YXJnZXQ6IEspIChyZWxhdGVk
OiBBKQorICAgICBARyAodGFyZ2V0OiBIKSAocmVsYXRlZDogQSkKKyAgICAgQHNoYWRvdy1yb290
LUIgKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBCICh0YXJnZXQ6IEQpIChyZWxhdGVk
OiBBKQorICAgICBAQSAodGFyZ2V0OiBEKSAocmVsYXRlZDogQSkKKyAgICAgQHRvcCAodGFyZ2V0
OiBEKSAocmVsYXRlZDogQSkKKworTW92aW5nIG1vdXNlIGZyb20gRCB0byBBCisKKyAgbW91c2Vv
dXQKKyAgICAgQEQgKHRhcmdldDogRCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBDICh0YXJnZXQ6IEQp
IChyZWxhdGVkOiBBKQorICAgICBASCAodGFyZ2V0OiBIKSAocmVsYXRlZDogQSkKKyAgICAgQEsg
KHRhcmdldDogSykgKHJlbGF0ZWQ6IEEpCisgICAgIEBOICh0YXJnZXQ6IE4pIChyZWxhdGVkOiBB
KQorICAgICBAc2hhZG93LXJvb3QtSiAodGFyZ2V0OiBOKSAocmVsYXRlZDogQSkKKyAgICAgQEog
KHRhcmdldDogSykgKHJlbGF0ZWQ6IEEpCisgICAgIEBzaGFkb3ctcm9vdC1HICh0YXJnZXQ6IEsp
IChyZWxhdGVkOiBBKQorICAgICBARyAodGFyZ2V0OiBIKSAocmVsYXRlZDogQSkKKyAgICAgQHNo
YWRvdy1yb290LUIgKHRhcmdldDogSCkgKHJlbGF0ZWQ6IEEpCisgICAgIEBCICh0YXJnZXQ6IEQp
IChyZWxhdGVkOiBBKQorICAgICBAQSAodGFyZ2V0OiBEKSAocmVsYXRlZDogQSkKKyAgICAgQHRv
cCAodGFyZ2V0OiBEKSAocmVsYXRlZDogQSkKKworICBtb3VzZW92ZXIKKyAgICAgQEEgKHRhcmdl
dDogQSkgKHJlbGF0ZWQ6IEQpCisgICAgIEB0b3AgKHRhcmdldDogQSkgKHJlbGF0ZWQ6IEQpCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0
Y2hpbmcuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50
LWRpc3BhdGNoaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMxOGM0MjA2OGM3NTE0MzY4MTBhM2UwZjdk
MDVjMzFkMDU0YWFiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3No
YWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLmh0bWwKQEAgLTAsMCArMSwyMjEgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9zaGFkb3ctZG9tLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJzYW5kYm94Ij48L2Rpdj4KKzxwcmUgaWQ9ImNvbnNvbGUi
PjwvcHJlPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0byBlbnN1cmUgdGhhdCBldmVu
dCBkaXNwYXRjaGluZyBiZWhhdmVzIGFzIHRoZSBTaGFkb3cgRE9NIHNwZWMgZGVzY3JpYmVzLiIp
OworCitmdW5jdGlvbiBtb3ZlTW91c2VPdmVyKGVsZW1lbnQpCit7CisgICAgaWYgKCF3aW5kb3cu
ZXZlbnRTZW5kZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHJldHVybjsKKworICAg
IHZhciBkZWZhdWx0UGFkZGluZ1NpemUgPSAyMDsKKyAgICB2YXIgeCA9IGVsZW1lbnQub2Zmc2V0
TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciB5OworICAgIGlmIChlbGVt
ZW50Lmhhc0NoaWxkTm9kZXMoKSB8fCB3aW5kb3cuaW50ZXJuYWxzLnNoYWRvd1Jvb3QoZWxlbWVu
dCkpCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGRlZmF1bHRQYWRkaW5nU2l6ZTsK
KyAgICBlbHNlCisgICAgICAgIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0
SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKK30KKwordmFy
IGV2ZW50UmVjb3JkcyA9IHt9OworCitmdW5jdGlvbiBjbGVhckV2ZW50UmVjb3JkcygpCit7Cisg
ICAgZXZlbnRSZWNvcmRzID0ge307Cit9CisKK2Z1bmN0aW9uIGRpc3BhdGNoZWRFdmVudChldmVu
dFR5cGUpCit7CisgICAgdmFyIGV2ZW50cyA9IGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdOworICAg
IGlmICghZXZlbnRzKQorICAgICAgICByZXR1cm4gW107CisgICAgcmV0dXJuIGV2ZW50czsKK30K
KworZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQpCit7CisgICAgdmFyIGV2ZW50VHlwZSA9IGV2
ZW50LnR5cGUKKyAgICBpZiAoIWV2ZW50UmVjb3Jkc1tldmVudFR5cGVdKSB7CisgICAgICAgIGV2
ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW10KKyAgICB9CisgICAgdmFyIGV2ZW50U3RyaW5nID0g
Jyc7CisgICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9
ICcgQCcgKyBldmVudC5jdXJyZW50VGFyZ2V0LmlkOworICAgIGlmIChldmVudC50YXJnZXQpCisg
ICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdldDogJyArIGV2ZW50LnRhcmdldC5pZCArICcp
JzsKKyAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0g
JyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0ZWRUYXJnZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2
ZW50LmV2ZW50UGhhc2UgPT0gMSkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyhjYXB0dXJpbmcg
cGhhc2UpJzsKKyAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYg
ZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQpCisgICAgICAgIHNob3Vs
ZEJlKCJldmVudC5ldmVudFBoYXNlIiwgIjIiLCB0cnVlKTsKKyAgICBldmVudFJlY29yZHNbZXZl
bnRUeXBlXS5wdXNoKGV2ZW50U3RyaW5nKTsKK30KKworZnVuY3Rpb24gZHVtcE5vZGUobm9kZSkK
K3sKKyAgICB2YXIgb3V0cHV0ID0gbm9kZS5ub2RlTmFtZSArICJcdCI7CisgICAgaWYgKG5vZGUu
aWQpCisgICAgICAgIG91dHB1dCArPSAnIGlkPScgKyBub2RlLmlkOworICAgIGlmIChub2RlLmNs
YXNzTmFtZSkKKyAgICAgICAgb3V0cHV0ICs9ICcgY2xhc3M9JyArIG5vZGUuY2xhc3NOYW1lOwor
ICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIGR1bXBDb21wb3NlZFNoYWRvd1RyZWUo
bm9kZSwgaW5kZW50KQoreworICAgIGluZGVudCA9IGluZGVudCB8fCAiIjsKKyAgICB2YXIgb3V0
cHV0ID0gaW5kZW50ICsgZHVtcE5vZGUobm9kZSkgKyAiXG4iOworICAgIHZhciBjaGlsZDsKKyAg
ICBmb3IgKGNoaWxkID0gaW50ZXJuYWxzLmZpcnN0Q2hpbGRCeVdhbGtlcihub2RlKTsgY2hpbGQ7
IGNoaWxkID0gaW50ZXJuYWxzLm5leHRTaWJsaW5nQnlXYWxrZXIoY2hpbGQpKQorICAgICAgICAg
b3V0cHV0ICs9IGR1bXBDb21wb3NlZFNoYWRvd1RyZWUoY2hpbGQsIGluZGVudCArICJcdCIpOwor
ICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJzKG5vZGVz
KQoreworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgdmFyIG5vZGUgPSBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2sobm9kZXNbaV0pOworICAgICAg
ICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHJlY29yZEV2ZW50LCBmYWxzZSk7
CisgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCByZWNvcmRFdmVudCwg
ZmFsc2UpOworICAgICAgICBpZiAobm9kZS50YWdOYW1lID09ICdESVYnIHx8IG5vZGUudGFnTmFt
ZSA9PSAnREVUQUlMUycgfHwgbm9kZS50YWdOYW1lID09ICdTVU1NQVJZJykKKyAgICAgICAgICAg
IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsICdwYWRkaW5nLXRvcDogNDBweDsnKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHByZXBhcmVET01UcmVlMShwYXJlbnQpCit7CisgICAgcGFyZW50LmFw
cGVuZENoaWxkKAorICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAndG9wJ30sCisgICAg
ICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnc2hhZG93LWhvc3QnfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2NvbnRlbnQnLCB7J2lkJzogJ2NvbnRlbnQn
LCAnc2VsZWN0JzogJyNkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsfSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdzaGFkb3ctcm9vdC1j
aGlsZCd9KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7
J2lkJzogJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJ30pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hp
bGQnfSkpKSk7CisKKyAgICBhZGRFdmVudExpc3RlbmVycyhbJ3RvcCcsICdzaGFkb3ctaG9zdCcs
ICdzaGFkb3ctaG9zdC8nLCAnc2hhZG93LWhvc3QvY29udGVudCcsICdzaGFkb3ctaG9zdC9zaGFk
b3ctcm9vdC1jaGlsZCcsCisgICAgICAgICAgICAgICAgICAgICAgICdkaXN0cmlidXRlZC1saWdo
dC1jaGlsZCcsICdub24tZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnXSk7CisgICAgZ2V0Tm9kZUlu
U2hhZG93VHJlZVN0YWNrKCdzaGFkb3ctaG9zdC8nKS5pZCA9ICdzaGFkb3ctcm9vdCc7CisgICAg
cGFyZW50Lm9mZnNldExlZnQ7CisgICAgZGVidWcoJ1xuXG5Db21wb3NlZCBTaGFkb3cgVHJlZSB3
aWxsIGJlOlxuJyArIGR1bXBDb21wb3NlZFNoYWRvd1RyZWUocGFyZW50KSk7Cit9CisKK2Z1bmN0
aW9uIHByZXBhcmVET01UcmVlMihwYXJlbnQpCit7CisgICAgcGFyZW50LmFwcGVuZENoaWxkKAor
ICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAndG9wJ30sCisgICAgICAgICAgICAgICAg
ICAvLyAnZGV0YWlscy9zdW1tYXJ5JyBlbGVtZW50cyB1c2UgU2hhZG93IERPTSBpbiBpdHMgaW1w
bGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RldGFpbHMnLCB7J2lk
JzogJ2RldGFpbHMnLCAnb3Blbic6IHRydWV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZURPTSgnc3VtbWFyeScsIHsnaWQnOiAnc3VtbWFyeSd9KSkpKTsKKworICAgIGFkZEV2
ZW50TGlzdGVuZXJzKFsndG9wJywgJ2RldGFpbHMnLCAnc3VtbWFyeSddKTsKKyAgICBwYXJlbnQu
b2Zmc2V0TGVmdDsKKyAgICBkZWJ1ZygnXG5cbkNvbXBvc2VkIFNoYWRvdyBUcmVlIHdpbGwgYmU6
XG4nICsgZHVtcENvbXBvc2VkU2hhZG93VHJlZShwYXJlbnQpKTsKK30KKworZnVuY3Rpb24gcHJl
cGFyZURPTVRyZWUzKHBhcmVudCkKK3sKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoCisgICAgICAg
IGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICd0b3AnfSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0
ZURPTSgnZGl2JywgeydpZCc6ICdBJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlRE9NKCdkaXYnLCB7J2lkJzogJ0InfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdHJ30sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ0onfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3Qo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdOJywgJ3NlbGVjdCc6
ICcjSyd9KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2NvbnRlbnQnLCB7J2lkJzogJ0snLCAnc2Vs
ZWN0JzogJyNIJ30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ0wnfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6
ICdPJywgJ3NlbGVjdCc6ICcjTSd9KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2NvbnRlbnQnLCB7
J2lkJzogJ00nLCAnc2VsZWN0JzogJyNJJ30pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydpZCc6ICdI
JywgJ3NlbGVjdCc6ICcjQyd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2NvbnRlbnQnLCB7J2lkJzogJ0knLCAnc2VsZWN0
JzogJyNFJ30pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0
ZURPTSgnZGl2JywgeydpZCc6ICdDJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnRCd9KSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdF
J30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVET00oJ2RpdicsIHsnaWQnOiAnRid9KSkpKSkpOworCisgICAgYWRkRXZlbnRMaXN0ZW5lcnMo
Wyd0b3AnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnQi8nLCAnQi9HJywgJ0IvSCcs
ICdCL0knLCAnQi9HLycsICdCL0cvSicsICdCL0cvSycsICdCL0cvTCcsICdCL0cvTScsCisgICAg
ICAgICAgICAgICAgICAgICAgICdCL0cvSi8nLCAnQi9HL0ovTicsICdCL0cvTC8nLCAnQi9HL0wv
TyddKTsKKyAgICBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2soJ0IvJykuaWQgPSAnc2hhZG93LXJv
b3QtQic7CisgICAgZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCdCL0cvJykuaWQgPSAnc2hhZG93
LXJvb3QtRyc7CisgICAgZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCdCL0cvSi8nKS5pZCA9ICdz
aGFkb3ctcm9vdC1KJzsKKyAgICBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2soJ0IvRy9MLycpLmlk
ID0gJ3NoYWRvdy1yb290LUwnOworICAgIHBhcmVudC5vZmZzZXRMZWZ0OworICAgIGRlYnVnKCdc
blxuQ29tcG9zZWQgU2hhZG93IFRyZWUgd2lsbCBiZTpcbicgKyBkdW1wQ29tcG9zZWRTaGFkb3dU
cmVlKHBhcmVudCkpOworfQorCitmdW5jdGlvbiBkZWJ1Z0Rpc3BhdGNoZWRFdmVudChldmVudFR5
cGUpCit7CisgICAgZGVidWcoJ1xuICAnICsgZXZlbnRUeXBlKTsKKyAgICB2YXIgZXZlbnRzID0g
ZGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVu
dHMubGVuZ3RoOyArK2kpCisgICAgICAgIGRlYnVnKCcgICAgJyArIGV2ZW50c1tpXSkKK30KKwor
ZnVuY3Rpb24gbW92ZU1vdXNlKG9sZEVsZW1lbnRJZCwgbmV3RWxlbWVudElkKQoreworICAgIGNs
ZWFyRXZlbnRSZWNvcmRzKCk7CisgICAgZGVidWcoJ1xuJyArICdNb3ZpbmcgbW91c2UgZnJvbSAn
ICsgb2xkRWxlbWVudElkICsgJyB0byAnICsgbmV3RWxlbWVudElkKTsKKyAgICBtb3ZlTW91c2VP
dmVyKGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhvbGRFbGVtZW50SWQpKTsKKyAgICAvLyBkZWJ1
Z0Rpc3BhdGNoZWRFdmVudCgnbW91c2VvdXQnKTsKKyAgICAvLyBkZWJ1Z0Rpc3BhdGNoZWRFdmVu
dCgnbW91c2VvdmVyJyk7CisKKyAgICBjbGVhckV2ZW50UmVjb3JkcygpOworICAgIG1vdmVNb3Vz
ZU92ZXIoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKG5ld0VsZW1lbnRJZCkpOworICAgIC8vIGlz
SW5uZXJtb3N0QWN0aXZlRWxlbWVudChuZXdFbGVtZW50SWQpOworCisgICAgZGVidWdEaXNwYXRj
aGVkRXZlbnQoJ21vdXNlb3V0Jyk7CisgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNlb3Zl
cicpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisK
KyAgICB2YXIgc2FuZGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW5kYm94Jyk7Cisg
ICAgcHJlcGFyZURPTVRyZWUxKHNhbmRib3gpOworCisgICAgbW92ZU1vdXNlKCdzaGFkb3ctaG9z
dCcsICdzaGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcpOworICAgIG1vdmVNb3VzZSgnc2hh
ZG93LWhvc3Qvc2hhZG93LXJvb3QtY2hpbGQnLCAnc2hhZG93LWhvc3QnKTsKKworICAgIG1vdmVN
b3VzZSgnc2hhZG93LWhvc3QnLCAnZGlzdHJpYnV0ZWQtbGlnaHQtY2hpbGQnKTsKKyAgICBtb3Zl
TW91c2UoJ2Rpc3RyaWJ1dGVkLWxpZ2h0LWNoaWxkJywgJ3NoYWRvdy1ob3N0Jyk7CisKKyAgICBt
b3ZlTW91c2UoJ3NoYWRvdy1ob3N0L3NoYWRvdy1yb290LWNoaWxkJywgJ2Rpc3RyaWJ1dGVkLWxp
Z2h0LWNoaWxkJyk7CisgICAgbW92ZU1vdXNlKCdkaXN0cmlidXRlZC1saWdodC1jaGlsZCcsICdz
aGFkb3ctaG9zdC9zaGFkb3ctcm9vdC1jaGlsZCcpOworCisgICAgc2FuZGJveC5pbm5lckhUTUwg
PSAnJzsKKyAgICBwcmVwYXJlRE9NVHJlZTIoc2FuZGJveCk7CisKKyAgICBtb3ZlTW91c2UoJ2Rl
dGFpbHMnLCAnc3VtbWFyeScpOworICAgIG1vdmVNb3VzZSgnc3VtbWFyeScsICdkZXRhaWxzJyk7
CisKKyAgICBzYW5kYm94LmlubmVySFRNTCA9ICcnOworICAgIHByZXBhcmVET01UcmVlMyhzYW5k
Ym94KTsKKworICAgIG1vdmVNb3VzZSgnRicsICdEJyk7CisgICAgbW92ZU1vdXNlKCdCL0cvTCcs
ICdEJyk7CisgICAgbW92ZU1vdXNlKCdCL0cvTCcsICdCL0cvSicpOworICAgIG1vdmVNb3VzZSgn
QScsICdEJyk7CisgICAgbW92ZU1vdXNlKCdEJywgJ0EnKTsKK30KKwordGVzdCgpOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9lZmwvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCmluZGV4IGQ4
YWEzZmZjMzhkMDBmYmY1ZGExOWZkM2I2NjkxMWJjMzYyNGU1NTkuLjE0MzQzY2JkZDcxZDMyYjFm
ZWIwOWM5ZjY0NzkwYjI1ZTk4MDY0ZGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2VmbC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC0x
MTAyLDYgKzExMDIsNyBAQCBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LWluLW1ldGVy
LWVsZW1lbnQuaHRtbAogZmFzdC9kb20vc2hhZG93L2dldC1lbGVtZW50LWJ5LWlkLWluLXNoYWRv
dy1yb290Lmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctcm9vdC1qcy1hcGkuaHRtbAogZmFz
dC9kb20vc2hhZG93L3NoYWRvdy1kaXNhYmxlLmh0bWwKK2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ct
ZG9tLWV2ZW50LWRpc3BhdGNoaW5nLmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctcm9vdC1h
dHRhY2hlZC5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtbmV3Lmh0bWwKIGZhc3Qv
ZG9tL3NoYWRvdy9zaGFkb3ctcm9vdC1hcHBlbmQuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQK
aW5kZXggZDUxNDhiMzI5MzVjNDk5MWFmYWE3N2Q0YTY5N2Y5MTljNWU1OTVmOC4uMzVmMjAyZDc5
YjA5NTA4ZTMxZGZkNmEyNDgxNDhkOGVjNGFiZDZhZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVk
CkBAIC0xOTIsNiArMTkyLDcgQEAgZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ib3VuZGFyeS1ldmVu
dHMuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1jb250ZW50LWNyYXNoLmh0bWwKIGZhc3Qv
ZG9tL3NoYWRvdy9zaGFkb3ctY29udGVudHMtZmFsbGJhY2stZHluYW1pYy5odG1sCiBmYXN0L2Rv
bS9zaGFkb3cvc2hhZG93LWNvbnRlbnRzLWZhbGxiYWNrLmh0bWwKK2Zhc3QvZG9tL3NoYWRvdy9z
aGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ct
ZHluYW1pYy1zdHlsZS1jaGFuZ2UtdmlhLW11dGF0aW9uLWFuZC1zZWxlY3Rvci5odG1sCiBmYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWRpc2FibGUuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1l
bGVtZW50LXJlbmRlcmluZy1zaW5nbGUuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRl
eCBkNTY1ZDU2OWE4MWMzYzliYmNjOTNkNTJjMzY4NGVlMTYyNGU3MGM2Li5jYzFjOThlMWIwNTBi
MmUwODBjZDVlZWFkMWY3ODUzYzhlZWExZWI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApA
QCAtMTQ4Nyw2ICsxNDg3LDcgQEAgZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1pbi1t
ZXRlci1lbGVtZW50Lmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9nZXQtZWxlbWVudC1ieS1pZC1pbi1z
aGFkb3ctcm9vdC5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtanMtYXBpLmh0bWwK
IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZGlzYWJsZS5odG1sCitmYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJv
b3QtYWN0aXZlRWxlbWVudC5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtYXR0YWNo
ZWQuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290LWlubmVySFRNTC5odG1sCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAppbmRleCA1MjU5NmE5NjA3YWU2YTc0YzY3NWVi
YzRkNDUwMDNhYTlkZTYwNmE0Li5iNmM2N2M4YzZjM2E3MTQ5YjUzNTI5YTE1OGMxMjRjYTM0NWIy
MGZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKQEAgLTE5OTAsNiArMTk5
MCw3IEBAIGZhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtb3V0c2lkZS1zaGFkb3cuaHRt
bAogZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1pbi1tZWRpYS1lbGVtZW50Lmh0bWwK
IGZhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtaW4tbWV0ZXItZWxlbWVudC5odG1sCiBm
YXN0L2RvbS9zaGFkb3cvZ2V0LWVsZW1lbnQtYnktaWQtaW4tc2hhZG93LXJvb3QuaHRtbAorZmFz
dC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmcuaHRtbAogZmFzdC9kb20v
c2hhZG93L3NoYWRvdy1yb290LWpzLWFwaS5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRp
c2FibGUuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290LWFjdGl2ZUVsZW1lbnQuaHRt
bApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93azIvU2tpcHBlZAppbmRleCAxYTQ1MDMyYjAyODYwYzRjNTFlMDEwYjBi
YjMzOTE0M2FlZmZlOTgxLi40OGI4MzE3YjQwMWMzNTNlMjk4YmNlMjYxNjhkMWYyZWU3ZDYxNDll
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvU2tpcHBlZAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93azIvU2tpcHBlZApAQCAtMTEwOCw2ICsxMTA4LDcgQEAgZmFzdC9k
b20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1pbi1tZWRpYS1lbGVtZW50Lmh0bWwKIGZhc3QvZG9t
L3NoYWRvdy9jb250ZW50LWVsZW1lbnQtaW4tbWV0ZXItZWxlbWVudC5odG1sCiBmYXN0L2RvbS9z
aGFkb3cvc2hhZG93LXJvb3QtanMtYXBpLmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZGlz
YWJsZS5odG1sCitmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy5o
dG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtYWN0aXZlRWxlbWVudC5odG1sCiBmYXN0
L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtYXR0YWNoZWQuaHRtbAogZmFzdC9kb20vc2hhZG93L3No
YWRvdy1yb290LWlubmVySFRNTC5odG1sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>