<?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>74708</bug_id>
          
          <creation_ts>2011-12-16 05:21:34 -0800</creation_ts>
          <short_desc>Optimize access to block-scoped local variables</short_desc>
          <delta_ts>2013-10-31 13:12:32 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>74718</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Andy Wingo">wingo</reporter>
          <assigned_to name="Andy Wingo">wingo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>oliver</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>522697</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-12-16 05:21:34 -0800</bug_when>
    <thetext>The patch to be attached has a changelog, thusly:

        This commit changes the bytecompiler to track static scope
        objects, allowing statically scoped (block-scoped) variables to be
        resolved at compile-time.  (Currently, only the exception
        identifier in catch blocks is block-scoped, in ES5.)

        The implementation is complicated by having to consider whether or
        not a function has a scope chain in the activation record or not.
        To get around this, we indicate that a negative depth, returned
        from findScopedProperty, indicates a local, block-scoped variable.
        The logic to check for a scope chain in the activation record or
        not only happens when looking for lexically captured variables --
        those with non-negative depth.

        This will allow block-scoped locals to be optimized by the
        baseline and DFG JITs.  A future patch will add support for ES6
        block locals, behind an #ifdef, using the same mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522699</commentid>
    <comment_count>1</comment_count>
      <attachid>119603</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-12-16 05:23:31 -0800</bug_when>
    <thetext>Created attachment 119603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524345</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-19 18:05:04 -0800</bug_when>
    <thetext>In-band signaling is error-prone. It&apos;s not great that you had to add an explanatory comment to every call site.

I&apos;d prefer to see some refactoring here:

(1) Rename findScopedProperty to resolve;

(2) Change resolve to return an object, ResolveResult, describing what it found.

(3) Add &quot;I found a block-scoped variable&quot; as a feature to ResolveResult.

(4) Add optimizations to take advantage of (3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525575</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-12-21 14:14:51 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; In-band signaling is error-prone. It&apos;s not great that you had to add an explanatory comment to every call site.
&gt; 
&gt; I&apos;d prefer to see some refactoring here:
&gt; 
&gt; (1) Rename findScopedProperty to resolve;
&gt; 
&gt; (2) Change resolve to return an object, ResolveResult, describing what it found.
&gt; 
&gt; (3) Add &quot;I found a block-scoped variable&quot; as a feature to ResolveResult.
&gt; 
&gt; (4) Add optimizations to take advantage of (3).

Thanks for the review.  I will work on a new patch that does this.  Incidentally, V8&apos;s implementation of block-scoped lexicals drove a similar refactor within V8.

Andy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537978</commentid>
    <comment_count>4</comment_count>
      <attachid>122960</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-01-18 10:33:45 -0800</bug_when>
    <thetext>Created attachment 122960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582081</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-19 12:50:41 -0700</bug_when>
    <thetext>I have a new patch that includes the work from bug 74633, and significantly improves on this one, according to feedback.  It happens to be based on the scopenode/codenode separation from bug 74509, which I still think is a good idea, but is not essential to this patch.

More details when I upload the thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582083</commentid>
    <comment_count>6</comment_count>
      <attachid>132634</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-19 12:53:37 -0700</bug_when>
    <thetext>Created attachment 132634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582088</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-19 12:58:54 -0700</bug_when>
    <thetext>OK, attached the new patch.  It uses a visitor to compute the block scope depth, though perhaps it could reserve temporaries instead as Oliver suggested.  It is not tested enough.  It passes run-javascriptcore-tests with debugging settings, but I have not tried it with the classic interpreter, or the LLInt which doesn&apos;t yet work on my platform.

But, I think it is a great base for ES6 block scope.

What do you think about the opcode changes?  Would you prefer branching instructions for the barriers?  With some work we should be able to remove some barriers in the parser, and all possible barriers in the DFG.

Do we need an additional flag on symboltable entries indicating the need for r/w barriers?

I&apos;m sure there are many open questions that you still might have.  I&apos;m all ears!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582925</commentid>
    <comment_count>8</comment_count>
      <attachid>132796</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-20 04:21:27 -0700</bug_when>
    <thetext>Created attachment 132796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582929</commentid>
    <comment_count>9</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-20 04:25:42 -0700</bug_when>
    <thetext>Just uploaded a new patch in response to some informal review by Oliver.

Changes:
  * Removed the nodevisitor stuff and the separate pre-pass.
  * Added an arg to op_reify_scope to explicitly give the base register.
  * Rebased on top of ToT instead of bug 74509.

Still untested with the classic interpreter.  Still no DFG support for the new opcodes.  Still untested with LLInt, and I still haven&apos;t run all the layout tests yet.  But it&apos;s a clean patch and review is welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582948</commentid>
    <comment_count>10</comment_count>
      <attachid>132796</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-20 04:49:26 -0700</bug_when>
    <thetext>Comment on attachment 132796
Patch

Attachment 132796 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12005223</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582987</commentid>
    <comment_count>11</comment_count>
      <attachid>132796</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-20 05:54:03 -0700</bug_when>
    <thetext>Comment on attachment 132796
Patch

Attachment 132796 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12005238</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582991</commentid>
    <comment_count>12</comment_count>
      <attachid>132810</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-20 06:01:06 -0700</bug_when>
    <thetext>Created attachment 132810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582994</commentid>
    <comment_count>13</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-20 06:06:39 -0700</bug_when>
    <thetext>Updated patch changes:

  * Turns out, op_unset is the same as op_init_lazy_reg.  So I removed op_unset and changed the compiler to emit init_lazy_reg instead.
  * Better baseline JIT code for the isEmpty / !isEmpty() checks.
  * Complete but untested llint implementation.

Problems:
  * I&apos;m pretty sure that BytecodeCompiler::resolve is doing the wrong thing in the presence of lazy unreified block scopes.  It would be cleanest if we could count from the scope chain that was current when the function was entered.
  * The error messages you would get when falling afoul of the temporal dead zone are pretty bad.  I need to figure out something better.
  * Still haven&apos;t run the full tests.
  * Probably there are some symbol table files to update for the changes in opcodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582997</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 06:14:55 -0700</bug_when>
    <thetext>Attachment 132810 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2323:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583008</commentid>
    <comment_count>15</comment_count>
      <attachid>132810</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-20 06:26:50 -0700</bug_when>
    <thetext>Comment on attachment 132810
Patch

Attachment 132810 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12005245</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583016</commentid>
    <comment_count>16</comment_count>
      <attachid>132810</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-20 06:42:36 -0700</bug_when>
    <thetext>Comment on attachment 132810
Patch

Attachment 132810 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12009153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583040</commentid>
    <comment_count>17</comment_count>
      <attachid>132810</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-20 07:17:03 -0700</bug_when>
    <thetext>Comment on attachment 132810
Patch

Attachment 132810 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/11994305</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583044</commentid>
    <comment_count>18</comment_count>
      <attachid>132810</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-20 07:19:56 -0700</bug_when>
    <thetext>Comment on attachment 132810
Patch

Attachment 132810 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12000300</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583106</commentid>
    <comment_count>19</comment_count>
      <attachid>132810</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-20 08:44:14 -0700</bug_when>
    <thetext>Comment on attachment 132810
Patch

Attachment 132810 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12000314</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583137</commentid>
    <comment_count>20</comment_count>
      <attachid>132839</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-20 09:29:28 -0700</bug_when>
    <thetext>Created attachment 132839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583151</commentid>
    <comment_count>21</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-20 09:42:15 -0700</bug_when>
    <thetext>Changes in the new patch:

  * Possibly fix 32_64 builds.
  * Add a flag to SymbolTableEntry to indicate variables that need the temporal dead zone.  Only emit the assert_lazy_var_init / assert_lazy_var_not_init opcodes for block-scoped locals that need the TDZ.


To see what sort of code this produces:


&gt; try { foo; } catch (e) { e; }
28 m_instructions; 224 bytes at 0x1bcb310; 1 parameter(s); 4 callee register(s); 0 variable(s)

[   0] enter
[   1] mov		 r0, Undefined(@k0)
[   4] resolve_global	 r0, foo(@id0)
[  10] jmp		 16(-&gt;26)
[  12] catch		 r1
[  14] init_lazy_reg	 r2
[  16] init_lazy_reg	 r3
[  18] mov		 r2, r1
[  21] mov		 r0, r2
[  24] tear_off_scope	 r3
[  26] end		 r0


Here r2 is for the one block-scoped identifier, &quot;e&quot;, and r3 is the lazy register for the reified scope.  In this case the block scope does not get reified, as there is no nested function expression or call to eval.


&gt; try { foo; } catch (e) { (function(s){return eval(s);}) }
32 m_instructions; 256 bytes at 0x1bd5550; 1 parameter(s); 4 callee register(s); 0 variable(s)

[   0] enter
[   1] mov		 r0, Undefined(@k0)
[   4] resolve_global	 r0, foo(@id0)
[  10] jmp		 20(-&gt;30)
[  12] catch		 r1
[  14] init_lazy_reg	 r2
[  16] init_lazy_reg	 r3
[  18] mov		 r2, r1
[  21] reify_scope	 r3, Cell: 0x7f660d17fca0(@k1), r2
[  25] new_func_exp	 r0, f0
[  28] tear_off_scope	 r3
[  30] end		 r0

In this case we do get a reified scope, before the new_func_exp.  It is torn off afterwards.


&gt; (function () {try { foo; } catch (e) { (function(s){return eval(s);})}})()
[...]
40 m_instructions; 320 bytes at 0x1bd8aa0; 1 parameter(s); 7 callee register(s); 3 variable(s)

[   0] enter
[   1] init_lazy_reg	 r0
[   3] init_lazy_reg	 r2
[   5] init_lazy_reg	 r1
[   7] create_activation r0
[   9] convert_this	 r-7
[  11] resolve		 r3, foo(@id0)
[  15] jmp		 20(-&gt;35)
[  17] catch		 r3
[  19] init_lazy_reg	 r4
[  21] init_lazy_reg	 r5
[  23] mov		 r4, r3
[  26] reify_scope	 r5, Cell: 0x7f660d17fbe0(@k0), r4
[  30] new_func_exp	 r6, f0
[  33] tear_off_scope	 r5
[  35] tear_off_activation	 r0, r2
[  38] ret		 Undefined(@k1)

Here is the same thing but in function code instead of global code.  We see that the function activation was created eagerly, though that is only because of the use of eval.



A different example:

&gt; (function () {var a = 10; try { throw 20; } catch (b) { return (function(s){return a + b;})()}})()
[...]
60 m_instructions; 480 bytes at 0x1be0760; 1 parameter(s); 15 callee register(s); 4 variable(s)

[   0] enter
[   1] init_lazy_reg	 r0
[   3] init_lazy_reg	 r2
[   5] init_lazy_reg	 r1
[   7] mov		 r3, Int32: 10(@k0)
[  10] throw		 Int32: 20(@k1)
[  12] jmp		 43(-&gt;55)
[  14] catch		 r4
[  16] init_lazy_reg	 r5
[  18] init_lazy_reg	 r6
[  20] mov		 r5, r4
[  23] create_activation r0
[  25] reify_scope	 r6, Cell: 0x7f660d17f8e0(@k2), r5
[  29] new_func_exp	 r7, f0
[  32] mov		 r8, Undefined(@k3)
[  35] call	 r7, 1, 15
[  41] op_call_put_result		 r7
[  44] tear_off_scope	 r6
[  46] jmp		 2(-&gt;48)
[  48] tear_off_activation	 r0, r2
[  51] ret		 r7
[  53] tear_off_scope	 r6
[  55] tear_off_activation	 r0, r2
[  58] ret		 Undefined(@k3)

Constants:
   k0 = Int32: 10
   k1 = Int32: 20
   k2 = Cell: 0x7f660d17f8e0
   k3 = Undefined
[...]
30

Here we see lazy reification of the activation and of the scope, and corresponding tearoff.  There is no more jmp_scopes because things are getting too complicated for an opcode: better to emit what the opcode should do, directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583172</commentid>
    <comment_count>22</comment_count>
      <attachid>132839</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-20 10:03:16 -0700</bug_when>
    <thetext>Comment on attachment 132839
Patch

Attachment 132839 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11994360</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583998</commentid>
    <comment_count>23</comment_count>
      <attachid>133011</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-21 04:47:44 -0700</bug_when>
    <thetext>Created attachment 133011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583999</commentid>
    <comment_count>24</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-21 04:51:46 -0700</bug_when>
    <thetext>Changes in updated patch:

  * Remove op_assert_lazy_reg_not_init.  I was under the mistaken impression that it was permitted to assign to const variables.  No write barrier is needed, because the compiler should throw an error on an attempt to mutate a read-only binding.  If it goes through the generic path the runtime will see isReadOnly() on the symboltableentry.

  * Attempt to fix the llint.

  * We no longer clear registers when leaving a block scope.

  * An attempt to tame the combinatoric explosion of ResolveResult::type() by separating type in to type proper and attributes (e.g. read-only, needs-barrier, is-arguments, etc).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584004</commentid>
    <comment_count>25</comment_count>
      <attachid>133011</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-21 05:01:53 -0700</bug_when>
    <thetext>Comment on attachment 133011
Patch

Attachment 133011 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12035396</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584005</commentid>
    <comment_count>26</comment_count>
      <attachid>133011</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-21 05:02:37 -0700</bug_when>
    <thetext>Comment on attachment 133011
Patch

Attachment 133011 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12086336</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584010</commentid>
    <comment_count>27</comment_count>
      <attachid>133011</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-21 05:06:47 -0700</bug_when>
    <thetext>Comment on attachment 133011
Patch

Attachment 133011 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12034367</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584011</commentid>
    <comment_count>28</comment_count>
      <attachid>133014</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-21 05:08:55 -0700</bug_when>
    <thetext>Created attachment 133014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584012</commentid>
    <comment_count>29</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-21 05:09:49 -0700</bug_when>
    <thetext>The last patch was b0rken.  Uploading again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587682</commentid>
    <comment_count>30</comment_count>
      <attachid>133795</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-26 07:00:10 -0700</bug_when>
    <thetext>Created attachment 133795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587687</commentid>
    <comment_count>31</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-26 07:02:17 -0700</bug_when>
    <thetext>The new patch gives good errors when a user tries to access an uninitialized block-scoped local.

Next up is to fix the scope depth stuff, and then this patch will be fully baked.  Review in advance is appreciated though :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587785</commentid>
    <comment_count>32</comment_count>
      <attachid>133822</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-26 08:47:37 -0700</bug_when>
    <thetext>Created attachment 133822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587787</commentid>
    <comment_count>33</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-26 08:49:28 -0700</bug_when>
    <thetext>Latest patch avoids init_lazy_reg for block-scoped locals that don&apos;t need the TDZ.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945610</commentid>
    <comment_count>34</comment_count>
      <attachid>133822</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-31 11:37:11 -0700</bug_when>
    <thetext>Comment on attachment 133822
Patch

This looks like it needs a massive rebase.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119603</attachid>
            <date>2011-12-16 05:23:31 -0800</date>
            <delta_ts>2012-01-18 10:33:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20111216142329.patch</filename>
            <type>text/plain</type>
            <size>40608</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YzM1YmQxODBmNGQ1MDRlMjMzYzYwYWZkYjIzNTBmODQ5MzliZGUxLi4yZTEyNGQ2MDA5YWEwN2Ri
NmQxZmE0ZGUxZDk3MGE3YWQ4MzJlNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxMS0xMi0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CisK
KyAgICAgICAgT3B0aW1pemUgYWNjZXNzIHRvIGJsb2NrLXNjb3BlZCBsb2NhbCB2YXJpYWJsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzA4CisK
KyAgICAgICAgVGhpcyBjb21taXQgY2hhbmdlcyB0aGUgYnl0ZWNvbXBpbGVyIHRvIHRyYWNrIHN0
YXRpYyBzY29wZQorICAgICAgICBvYmplY3RzLCBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUKKyAgICAgICAgcmVzb2x2ZWQgYXQgY29tcGls
ZS10aW1lLiAgKEN1cnJlbnRseSwgb25seSB0aGUgZXhjZXB0aW9uCisgICAgICAgIGlkZW50aWZp
ZXIgaW4gY2F0Y2ggYmxvY2tzIGlzIGJsb2NrLXNjb3BlZCwgaW4gRVM1LikKKworICAgICAgICBU
aGUgaW1wbGVtZW50YXRpb24gaXMgY29tcGxpY2F0ZWQgYnkgaGF2aW5nIHRvIGNvbnNpZGVyIHdo
ZXRoZXIgb3IKKyAgICAgICAgbm90IGEgZnVuY3Rpb24gaGFzIGEgc2NvcGUgY2hhaW4gaW4gdGhl
IGFjdGl2YXRpb24gcmVjb3JkIG9yIG5vdC4KKyAgICAgICAgVG8gZ2V0IGFyb3VuZCB0aGlzLCB3
ZSBpbmRpY2F0ZSB0aGF0IGEgbmVnYXRpdmUgZGVwdGgsIHJldHVybmVkCisgICAgICAgIGZyb20g
ZmluZFNjb3BlZFByb3BlcnR5LCBpbmRpY2F0ZXMgYSBsb2NhbCwgYmxvY2stc2NvcGVkIHZhcmlh
YmxlLgorICAgICAgICBUaGUgbG9naWMgdG8gY2hlY2sgZm9yIGEgc2NvcGUgY2hhaW4gaW4gdGhl
IGFjdGl2YXRpb24gcmVjb3JkIG9yCisgICAgICAgIG5vdCBvbmx5IGhhcHBlbnMgd2hlbiBsb29r
aW5nIGZvciBsZXhpY2FsbHkgY2FwdHVyZWQgdmFyaWFibGVzIC0tCisgICAgICAgIHRob3NlIHdp
dGggbm9uLW5lZ2F0aXZlIGRlcHRoLgorCisgICAgICAgIFRoaXMgd2lsbCBhbGxvdyBibG9jay1z
Y29wZWQgbG9jYWxzIHRvIGJlIG9wdGltaXplZCBieSB0aGUKKyAgICAgICAgYmFzZWxpbmUgYW5k
IERGRyBKSVRzLiAgQSBmdXR1cmUgcGF0Y2ggd2lsbCBhZGQgc3VwcG9ydCBmb3IgRVM2CisgICAg
ICAgIGJsb2NrIGxvY2FscywgYmVoaW5kIGFuICNpZmRlZiwgdXNpbmcgdGhlIHNhbWUgbWVjaGFu
aXNtLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6IENoYW5nZSBDb250cm9sRmxvd0NvbnRl
eHQgdG8KKyAgICAgICAgaGF2ZSBhbiBlbnVtIEJsb2NrVHlwZSBpbnN0ZWFkIG9mIGEgYm9vbGVh
biBpc0ZpbmFsbHlCbG9jayBmbGFnLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
c2NvcGVEZXB0aCk6IEFkZCBtX2Jsb2NrU2NvcGVEZXB0aC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOiBBZGQgbmV3CisgICAgICAgIG1fYmxvY2tTY29wZURlcHRo
IG1lbWJlci4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9yKTog
TG9vayBmb3IgYSBibG9jay1zY29wZWQKKyAgICAgICAgbG9jYWwgYmVmb3JlIHJldHVybmluZyBh
IGZ1bmN0aW9uLXNjb3BlZCByZWdpc3Rlci4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmZpbmRTY29wZWRQcm9wZXJ0eSk6IE5vdyB0aGF0CisgICAgICAgIHB1c2hOZXdTY29wZSAv
IHB1c2hCbG9ja1Njb3BlIGRvZXNuJ3QgYWRkIHRvIG1fZHluYW1pY1Njb3BlRGVwdGgsCisgICAg
ICAgIHdlIHdpbGwgc2VlIHN0YXRpY2FsbHkgc2NvcGVkIHZhcmlhYmxlcyBoZXJlLiAgSWYgdGhl
IGRlcHRoIGlzCisgICAgICAgIGxlc3MgdGhhbiB0aGUgbV9ibG9ja1Njb3BlRGVwdGgsIHdlIGhh
dmUgYSBibG9jay1zY29wZWQgbG9jYWwuCisgICAgICAgIFJldHVybiBhIG5lZ2F0aXZlIGluZGV4
IGZvciB0aGF0IGNhc2UuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVz
b2x2ZSk6IEN1dCBvdXQgZWFybHkgZm9yCisgICAgICAgIGJsb2NrLXNjb3BlZCBsb2NhbHMuCisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U2NvcGVkVmFyKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTY29wZWRWYXIpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNlKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZUZvclB1dCk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aFRoaXMpOiBBbGxvdyBmb3IgbmVnYXRp
dmUKKyAgICAgICAgaW5kaWNlcy4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRQdXNoU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFBvcFNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleEp1bXBTY29wZXMp
OiBBZGFwdCB0bworICAgICAgICBCbG9ja1R5cGUgY2hhbmdlLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKTogQWRhcHQgdG8gbV9keW5hbWljU2NvcGVEZXB0aAor
ICAgICAgICAvIG1fYmxvY2tTY29wZURlcHRoIGNoYW5nZS4KKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRQdXNoQmxvY2tTY29wZSk6IFJlbmFtZSBmcm9tCisgICAgICAgIHB1
c2hOZXdTY29wZSwgYW5kIHRha2UgdGhlIHNjb3BlIHRlbXBsYXRlIGRpcmVjdGx5LCBzbyB3ZSBj
YW4gcHVzaAorICAgICAgICBpdCBvbiB0aGUgY29tcGlsZS10aW1lIHNjb3BlIGNoYWluLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFBvcEJsb2NrU2NvcGUpOiBOZXcgZnVu
Y3Rpb247IGNhbGwgaXQKKyAgICAgICAgaW5zdGVhZCBvZiBwb3BTY29wZSwgYXMgaXQgYWxzbyBw
b3BzIHRoZSBjb21waWxlLXRpbWUgc2NvcGUKKyAgICAgICAgY2hhaW4uCisgICAgICAgICogYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJl
c29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpQb3N0Zml4UmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlByZWZpeFJlc29sdmVOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOiBB
bGxvdyBuZWdhdGl2ZSBkZXB0aHMuCisgICAgICAgIChKU0M6OlRyeU5vZGU6OmVtaXRCeXRlY29k
ZSk6IEFkYXB0IHRvIHB1c2hCbG9ja1Njb3BlIC8KKyAgICAgICAgcG9wQmxvY2tTY29wZSBjaGFu
Z2UuCisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OmdldFNjb3BlQ2hhaW5Mb2FkRWxpbWluYXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZWRfdmFyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVk
X3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3Zhcik6IEFkZCBz
dXBwb3J0IGZvciBuZWdhdGl2ZQorICAgICAgICBkZXB0aHMuCisKIDIwMTEtMTItMTUgIEFuZHkg
V2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEFsbG93IEpTU3RhdGljU2NvcGUg
dG8gYmluZCBtb3JlIHRoYW4gb25lIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDUyNzA3
MTZjZGU1NThjYTA0ZjY3NjE5NDVmODBmNTEyZTE1MzlhNGQuLjI1Y2RiNThkMjQzMGYxZjM5ZjAx
MmM4ZjRkYzc1MjI2YTkxYTIwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAKICNpbmNsdWRlICJCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCiAjaW5jbHVkZSAiU3Ryb25n
SW5saW5lcy5oIgpAQCAtMTkyLDYgKzE5Myw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzCiAg
ICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQogICAg
ICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAs
IG1fYmxvY2tTY29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBt
X2NvZGVUeXBlKEdsb2JhbENvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQpAQCAt
MjYzLDYgKzI2NSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5j
dGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIFNjb3BlQ2hhaW5OCiAgICAgLCBtX2FjdGl2YXRp
b25SZWdpc3RlcigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Nj
b3BlRGVwdGgoMCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29w
ZURlcHRoKDApCiAgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkKICAgICAsIG1fbmV4dENv
bnN0YW50T2Zmc2V0KDApCkBAIC00MjQsNiArNDI3LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2gKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkp
CiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQor
ICAgICwgbV9ibG9ja1Njb3BlRGVwdGgoMCkKICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoY29kZUJs
b2NrLT5iYXNlU2NvcGVEZXB0aCgpKQogICAgICwgbV9jb2RlVHlwZShFdmFsQ29kZSkKICAgICAs
IG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCkBAIC01MDEsNiArNTA1LDE2IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWdpc3RlckZvcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
ICAgICBpZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkpCiAgICAgICAgIHJldHVybiAwOwogCisg
ICAgaWYgKG1fYmxvY2tTY29wZURlcHRoKSB7CisgICAgICAgIGludCBkZXB0aCA9IDA7CisgICAg
ICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QgPSAwOwor
ICAgICAgICBib29sIHJlcXVpcmVzRHluYW1pY0NoZWNrcyA9IGZhbHNlOworICAgICAgICBpZiAo
ZmluZFNjb3BlZFByb3BlcnR5KGlkZW50LCBpbmRleCwgZGVwdGgsIGZhbHNlLCByZXF1aXJlc0R5
bmFtaWNDaGVja3MsIGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICYmIGRlcHRoIDwgMCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkg
PSBzeW1ib2xUYWJsZSgpLmdldChpZGVudC5pbXBsKCkpOwogICAgIGlmIChlbnRyeS5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTQ2LDcgKzExNjAsNyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlIHYpCiAg
ICAgcmV0dXJuIGNvbnN0YW50SUQ7CiB9CiAKLWJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRT
Y29wZWRQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgaW50JiBpbmRleCwgc2l6
ZV90JiBzdGFja0RlcHRoLCBib29sIGZvcldyaXRpbmcsIGJvb2wmIHJlcXVpcmVzRHluYW1pY0No
ZWNrcywgSlNPYmplY3QqJiBnbG9iYWxPYmplY3QpCitib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU2NvcGVkUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIGludCYgaW5kZXgs
IGludCYgc3RhY2tEZXB0aCwgYm9vbCBmb3JXcml0aW5nLCBib29sJiByZXF1aXJlc0R5bmFtaWND
aGVja3MsIEpTT2JqZWN0KiYgZ2xvYmFsT2JqZWN0KQogewogICAgIC8vIENhc2VzIHdoZXJlIHdl
IGNhbm5vdCBzdGF0aWNhbGx5IG9wdGltaXplIHRoZSBsb29rdXAuCiAgICAgaWYgKHByb3BlcnR5
ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMgfHwgIWNhbk9wdGltaXplTm9uTG9jYWxzKCkp
IHsKQEAgLTExNjEsNyArMTE3NSw3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRTY29w
ZWRQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgaW50JiBpbmRlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzaXplX3QgZGVwdGggPSAwOworICAgIGludCBk
ZXB0aCA9IDA7CiAgICAgcmVxdWlyZXNEeW5hbWljQ2hlY2tzID0gZmFsc2U7CiAgICAgU2NvcGVD
aGFpbkl0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7CiAgICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGVuZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7CkBAIC0xMTgxLDcgKzExOTUsMTQg
QEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFNjb3BlZFByb3BlcnR5KGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5LCBpbnQmIGluZGUKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0ID0gY3VycmVudFZhcmlhYmxlT2JqZWN0OwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YWNrRGVwdGggPSBkZXB0aCArIG1fY29k
ZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CisgICAgICAgICAgICBpZiAoZGVwdGggPCBt
X2Jsb2NrU2NvcGVEZXB0aCkKKyAgICAgICAgICAgICAgICAvLyBOZWdhdGl2ZSBza2lwIG1lYW5z
IGEgbG9jYWwgYmxvY2stc2NvcGVkIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIHN0YWNrRGVw
dGggPSAtZGVwdGggLSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIC8vIElm
IHdlIGhhdmUgdG8gc2tpcCBvdXQgb2YgdGhpcyBmdW5jdGlvbiwgd2UgbWF5IG9yIG1heSBub3QK
KyAgICAgICAgICAgICAgICAvLyBoYXZlIGEgcmVpZmllZCBhY3RpdmF0aW9uIHJlY29yZCwgc28g
dGhlIGxvZ2ljIHdpbGwgYmUgYSBiaXQKKyAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQuCisg
ICAgICAgICAgICAgICAgc3RhY2tEZXB0aCA9IGRlcHRoICsgbV9jb2RlQmxvY2stPm5lZWRzRnVs
bFNjb3BlQ2hhaW4oKTsKICAgICAgICAgICAgIGluZGV4ID0gZW50cnkuZ2V0SW5kZXgoKTsKICAg
ICAgICAgICAgIGlmICgrK2l0ZXIgPT0gZW5kKQogICAgICAgICAgICAgICAgIGdsb2JhbE9iamVj
dCA9IGN1cnJlbnRWYXJpYWJsZU9iamVjdDsKQEAgLTEyMjYsNyArMTI0Nyw3IEBAIGJvb2wgQnl0
ZWNvZGVHZW5lcmF0b3I6OnNob3VsZEF2b2lkUmVzb2x2ZUdsb2JhbCgpCiAKIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5KQogewotICAgIHNpemVfdCBkZXB0aCA9IDA7CisgICAgaW50IGRl
cHRoID0gMDsKICAgICBpbnQgaW5kZXggPSAwOwogICAgIEpTT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSAwOwogICAgIGJvb2wgcmVxdWlyZXNEeW5hbWljQ2hlY2tzID0gZmFsc2U7CkBAIC0xMjM3LDYg
KzEyNTgsMTEgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKFJl
Z2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHIKICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAg
ICAgfQorCisgICAgaWYgKGRlcHRoIDwgMCkKKyAgICAgICAgLy8gQSBsb2NhbCwgYmxvY2stc2Nv
cGVkIHZhcmlhYmxlLgorICAgICAgICByZXR1cm4gZW1pdEdldFNjb3BlZFZhcihkc3QsIGRlcHRo
LCBpbmRleCwgZ2xvYmFsT2JqZWN0KTsKKwogICAgIGlmIChzaG91bGRBdm9pZFJlc29sdmVHbG9i
YWwoKSkgewogICAgICAgICBnbG9iYWxPYmplY3QgPSAwOwogICAgICAgICByZXF1aXJlc0R5bmFt
aWNDaGVja3MgPSB0cnVlOwpAQCAtMTI4Niw3ICsxMzEyLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmll
ciYgcHIKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEdldFNjb3BlZFZhcihSZWdpc3RlcklEKiBkc3QsIHNpemVfdCBkZXB0aCwgaW50IGlu
ZGV4LCBKU1ZhbHVlIGdsb2JhbE9iamVjdCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0R2V0U2NvcGVkVmFyKFJlZ2lzdGVySUQqIGRzdCwgaW50IGRlcHRoLCBpbnQgaW5kZXgs
IEpTVmFsdWUgZ2xvYmFsT2JqZWN0KQogewogICAgIGlmIChnbG9iYWxPYmplY3QpIHsKICAgICAg
ICAgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX3B1dF9nbG9iYWxfdmFyKSB7CkBAIC0xMzExLDcg
KzEzMzcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFNjb3BlZFZh
cihSZWdpc3RlcklEKiBkc3QsIHNpemVfdCBkZXB0aCwgaQogICAgIHJldHVybiBkc3Q7CiB9CiAK
LVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0U2NvcGVkVmFyKHNpemVfdCBk
ZXB0aCwgaW50IGluZGV4LCBSZWdpc3RlcklEKiB2YWx1ZSwgSlNWYWx1ZSBnbG9iYWxPYmplY3Qp
CitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNjb3BlZFZhcihpbnQgZGVw
dGgsIGludCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsdWUsIEpTVmFsdWUgZ2xvYmFsT2JqZWN0KQog
ewogICAgIGlmIChnbG9iYWxPYmplY3QpIHsKICAgICAgICAgZW1pdE9wY29kZShvcF9wdXRfZ2xv
YmFsX3Zhcik7CkBAIC0xMzI4LDcgKzEzNTQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFB1dFNjb3BlZFZhcihzaXplX3QgZGVwdGgsIGludCBpbmRleCwgUmVnaXN0ZQog
CiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNlKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7Ci0gICAgc2l6ZV90IGRlcHRo
ID0gMDsKKyAgICBpbnQgZGVwdGggPSAwOwogICAgIGludCBpbmRleCA9IDA7CiAgICAgSlNPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IDA7CiAgICAgYm9vbCByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBm
YWxzZTsKQEAgLTEzNTAsNyArMTM3Niw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVzb2x2ZUJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVuCiB7CiAg
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIHJldHVybiBlbWl0
UmVzb2x2ZUJhc2UoZHN0LCBwcm9wZXJ0eSk7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsKKyAgICBp
bnQgZGVwdGggPSAwOwogICAgIGludCBpbmRleCA9IDA7CiAgICAgSlNPYmplY3QqIGdsb2JhbE9i
amVjdCA9IDA7CiAgICAgYm9vbCByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBmYWxzZTsKQEAgLTEz
NzQsNyArMTQwMCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2
ZUJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVuCiAKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlKFJlZ2lzdGVySUQqIGJhc2VEc3Qs
IFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogewotICAg
IHNpemVfdCBkZXB0aCA9IDA7CisgICAgaW50IGRlcHRoID0gMDsKICAgICBpbnQgaW5kZXggPSAw
OwogICAgIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QgPSAwOwogICAgIGJvb2wgcmVxdWlyZXNEeW5h
bWljQ2hlY2tzID0gZmFsc2U7CkBAIC0xNDIxLDcgKzE0NDcsNyBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRoQmFzZShSZWdpc3RlcklEKiBiYXNlRHN0LCBS
ZWdpc3RlcgogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRo
VGhpcyhSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcklEKiBwcm9wRHN0LCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBzaXplX3QgZGVwdGggPSAwOworICAgIGludCBkZXB0
aCA9IDA7CiAgICAgaW50IGluZGV4ID0gMDsKICAgICBKU09iamVjdCogZ2xvYmFsT2JqZWN0ID0g
MDsKICAgICBib29sIHJlcXVpcmVzRHluYW1pY0NoZWNrcyA9IGZhbHNlOwpAQCAtMTk0Miw3ICsx
OTY4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoU2NvcGUoUmVn
aXN0ZXJJRCogc2NvcGUpCiB7CiAgICAgQVNTRVJUKHNjb3BlLT5pc1RlbXBvcmFyeSgpKTsKICAg
ICBDb250cm9sRmxvd0NvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0LmlzRmluYWxseUJsb2Nr
ID0gZmFsc2U7CisgICAgY29udGV4dC5ibG9ja1R5cGUgPSBXaXRoQmxvY2s7CiAgICAgbV9zY29w
ZUNvbnRleHRTdGFjay5hcHBlbmQoY29udGV4dCk7CiAgICAgbV9keW5hbWljU2NvcGVEZXB0aCsr
OwogCkBAIC0xOTUyLDcgKzE5NzgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFB1c2hTY29wZShSZWdpc3RlcklEKiBzY29wZSkKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRQb3BTY29wZSgpCiB7CiAgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgp
KTsKLSAgICBBU1NFUlQoIW1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmlzRmluYWxseUJsb2Nr
KTsKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkuYmxvY2tUeXBlID09IFdp
dGhCbG9jayk7CiAKICAgICBlbWl0T3Bjb2RlKG9wX3BvcF9zY29wZSk7CiAKQEAgLTE5NzgsNyAr
MjAwNCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWJ1Z0hvb2soRGVidWdIb29r
SUQgZGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGluCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjpwdXNoRmluYWxseUNvbnRleHQoTGFiZWwqIHRhcmdldCwgUmVnaXN0ZXJJRCogcmV0QWRkckRz
dCkKIHsKICAgICBDb250cm9sRmxvd0NvbnRleHQgc2NvcGU7Ci0gICAgc2NvcGUuaXNGaW5hbGx5
QmxvY2sgPSB0cnVlOworICAgIHNjb3BlLmJsb2NrVHlwZSA9IEZpbmFsbHlCbG9jazsKICAgICBG
aW5hbGx5Q29udGV4dCBjb250ZXh0ID0geyB0YXJnZXQsIHJldEFkZHJEc3QgfTsKICAgICBzY29w
ZS5maW5hbGx5Q29udGV4dCA9IGNvbnRleHQ7CiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5hcHBl
bmQoc2NvcGUpOwpAQCAtMTk4OCw3ICsyMDE0LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaEZpbmFsbHlDb250ZXh0KExhYmVsKiB0YXJnZXQsIFJlZ2lzdGVySUQqIHJldEFkZHJEc3QK
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZpbmFsbHlDb250ZXh0KCkKIHsKICAgICBBU1NF
UlQobV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOwotICAgIEFTU0VSVChtX3Njb3BlQ29udGV4
dFN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlCbG9jayk7CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0
U3RhY2subGFzdCgpLmJsb2NrVHlwZSA9PSBGaW5hbGx5QmxvY2spOwogICAgIEFTU0VSVChtX2Zp
bmFsbHlEZXB0aCA+IDApOwogICAgIG1fc2NvcGVDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwog
ICAgIG1fZmluYWxseURlcHRoLS07CkBAIC0yMDc4LDcgKzIxMDQsNyBAQCBQYXNzUmVmUHRyPExh
YmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhKdW1wU2NvcGVzKExhYmVsKiB0YXJn
ZXQsIENvbnRybwogICAgICAgICAvLyB0byBhIGZpbmFsbHkgYmxvY2suCiAgICAgICAgIGludCBu
Tm9ybWFsU2NvcGVzID0gMDsKICAgICAgICAgd2hpbGUgKHRvcFNjb3BlID4gYm90dG9tU2NvcGUp
IHsKLSAgICAgICAgICAgIGlmICh0b3BTY29wZS0+aXNGaW5hbGx5QmxvY2spCisgICAgICAgICAg
ICBpZiAodG9wU2NvcGUtPmJsb2NrVHlwZSA9PSBGaW5hbGx5QmxvY2spCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICArK25Ob3JtYWxTY29wZXM7CiAgICAgICAgICAgICAtLXRv
cFNjb3BlOwpAQCAtMjEwNiw3ICsyMTMyLDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBDb250cm8KICAg
ICAgICAgICAgIGVtaXRMYWJlbChuZXh0SW5zbi5nZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21TY29wZSAmJiB0b3BTY29wZS0+aXNGaW5hbGx5Qmxv
Y2spIHsKKyAgICAgICAgd2hpbGUgKHRvcFNjb3BlID4gYm90dG9tU2NvcGUgJiYgdG9wU2NvcGUt
PmJsb2NrVHlwZSA9PSBGaW5hbGx5QmxvY2spIHsKICAgICAgICAgICAgIGVtaXRKdW1wU3Vicm91
dGluZSh0b3BTY29wZS0+ZmluYWxseUNvbnRleHQucmV0QWRkckRzdCwgdG9wU2NvcGUtPmZpbmFs
bHlDb250ZXh0LmZpbmFsbHlBZGRyKTsKICAgICAgICAgICAgIC0tdG9wU2NvcGU7CiAgICAgICAg
IH0KQEAgLTIxNjYsOSArMjE5Miw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q2F0Y2goUmVnaXN0ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBzdGFyCiB7CiAgICAg
bV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBIYW5kbGVySW5m
byBpbmZvID0geyBzdGFydC0+YmluZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlv
bnMoKS5zaXplKCksIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2Rl
TG9jYXRpb25MYWJlbCgpIH07CisgICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQo
MCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNT
Y29wZURlcHRoICsgbV9ibG9ja1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9j
YXRpb25MYWJlbCgpIH07CiAjZWxzZQotICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5i
aW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9keW5h
bWljU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGggfTsKKyAgICBIYW5kbGVySW5mbyBpbmZv
ID0geyBzdGFydC0+YmluZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5z
aXplKCksIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Jsb2NrU2NvcGVEZXB0aCArIG1fYmFzZVNj
b3BlRGVwdGggfTsKICNlbmRpZgogCiAgICAgbV9jb2RlQmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRs
ZXIoaW5mbyk7CkBAIC0yMjAwLDIwICsyMjI2LDM0IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRTdWJyb3V0aW5lUmV0dXJuKFJlZ2lzdGVySUQqIHJldEFkZHJTcmMpCiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHJldEFkZHJTcmMtPmluZGV4KCkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UHVzaE5ld1Njb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCAq
c2NvcGVUZW1wbGF0ZSwgUmVnaXN0ZXJJRCogdmFsdWUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHVzaEJsb2NrU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBKU1N0YXRpY1Njb3BlT2JqZWN0
ICpzY29wZVRlbXBsYXRlLCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKLSAgICAvLyBGSVhNRTogVHJh
Y2sgdGhlIHNjb3BlIHNvIHRoYXQgZmluZFNjb3BlZFByb3BlcnR5IGNhbiBEVFJULgogICAgIENv
bnRyb2xGbG93Q29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQuaXNGaW5hbGx5QmxvY2sgPSBm
YWxzZTsKKyAgICBjb250ZXh0LmJsb2NrVHlwZSA9IFNjb3BlQmxvY2s7CiAgICAgbV9zY29wZUNv
bnRleHRTdGFjay5hcHBlbmQoY29udGV4dCk7Ci0gICAgbV9keW5hbWljU2NvcGVEZXB0aCsrOwor
ICAgIG1fc2NvcGVDaGFpbi5zZXQoKm1fc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgbV9zY29wZUNo
YWluLT5wdXNoKHNjb3BlVGVtcGxhdGUpKTsKKyAgICBtX2Jsb2NrU2NvcGVEZXB0aCsrOwogCisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBsID0gZW1pdExvYWQoMCwgSlNWYWx1ZShzY29wZVRl
bXBsYXRlKSk7CiAgICAgZW1pdE9wY29kZShvcF9wdXNoX25ld19zY29wZSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHNjb3BlVGVtcGxhdGUtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0ZW1w
bC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsK
IH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFBvcEJsb2NrU2NvcGUoKQoreworICAg
IEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7CisgICAgQVNTRVJUKG1fc2NvcGVD
b250ZXh0U3RhY2subGFzdCgpLmJsb2NrVHlwZSA9PSBTY29wZUJsb2NrKTsKKyAgICBBU1NFUlQo
bV9zY29wZUNoYWluLT5vYmplY3QuZ2V0KCktPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisKKyAg
ICBlbWl0T3Bjb2RlKG9wX3BvcF9zY29wZSk7CisKKyAgICBtX3Njb3BlQ2hhaW4uc2V0KCptX3Nj
b3BlQ2hhaW4tPmdsb2JhbERhdGEsIG1fc2NvcGVDaGFpbi0+cG9wKCkpOworICAgIG1fYmxvY2tT
Y29wZURlcHRoLS07CisgICAgbV9zY29wZUNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisK
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmJlZ2luU3dpdGNoKFJlZ2lzdGVySUQqIHNjcnV0aW5l
ZVJlZ2lzdGVyLCBTd2l0Y2hJbmZvOjpTd2l0Y2hUeXBlIHR5cGUpCiB7CiAgICAgU3dpdGNoSW5m
byBpbmZvID0geyBpbnN0cnVjdGlvbnMoKS5zaXplKCksIHR5cGUgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRl
eCA1ZmYyZTU3MDQ3MGZjZDUwMzU0MGZiZGFlOWUwZGExZGQ4ZDc3Yzk0Li4zZWY4ODViMzZiNzk4
MGIyNzcyOTgzOThmZmQ5YzBhNjlmZjExYmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC00OCw2ICs0OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSWRlbnRpZmllcjsKICAgICBjbGFzcyBT
Y29wZUNoYWluTm9kZTsKKyAgICBjbGFzcyBKU1N0YXRpY1Njb3BlT2JqZWN0OwogCiAgICAgY2xh
c3MgQ2FsbEFyZ3VtZW50cyB7CiAgICAgcHVibGljOgpAQCAtNzMsOCArNzQsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIHJldEFkZHJEc3Q7CiAgICAgfTsKIAorICAg
IGVudW0gQmxvY2tUeXBlIHsgV2l0aEJsb2NrLCBGaW5hbGx5QmxvY2ssIFNjb3BlQmxvY2sgfTsK
KyAgICAgICAgCiAgICAgc3RydWN0IENvbnRyb2xGbG93Q29udGV4dCB7Ci0gICAgICAgIGJvb2wg
aXNGaW5hbGx5QmxvY2s7CisgICAgICAgIGVudW0gQmxvY2tUeXBlIGJsb2NrVHlwZTsKICAgICAg
ICAgRmluYWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CiAgICAgfTsKIApAQCAtMTIzLDEyICsx
MjYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGNvbnN0UmVnaXN0
ZXJGb3IoY29uc3QgSWRlbnRpZmllciYpOwogCiAgICAgICAgIC8vIFNlYXJjaGVzIHRoZSBzY29w
ZSBjaGFpbiBpbiBhbiBhdHRlbXB0IHRvICBzdGF0aWNhbGx5IGxvY2F0ZSB0aGUgcmVxdWVzdGVk
Ci0gICAgICAgIC8vIHByb3BlcnR5LiAgUmV0dXJucyBmYWxzZSBpZiBmb3IgYW55IHJlYXNvbiB0
aGUgcHJvcGVydHkgY2Fubm90IGJlIHNhZmVseQotICAgICAgICAvLyBvcHRpbWlzZWQgYXQgYWxs
LiAgT3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRoZSBpbmRleCBhbmQgZGVwdGggb2YgdGhlCi0g
ICAgICAgIC8vIFZhcmlhYmxlT2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcHJvcGVydHkuICBJZiB0
aGUgcHJvcGVydHkgY2Fubm90IGJlIGZvdW5kCi0gICAgICAgIC8vIHN0YXRpY2FsbHksIGRlcHRo
IHdpbGwgY29udGFpbiB0aGUgZGVwdGggb2YgdGhlIHNjb3BlIGNoYWluIHdoZXJlIGR5bmFtaWMK
LSAgICAgICAgLy8gbG9va3VwIG11c3QgYmVnaW4uCi0gICAgICAgIGJvb2wgZmluZFNjb3BlZFBy
b3BlcnR5KGNvbnN0IElkZW50aWZpZXImLCBpbnQmIGluZGV4LCBzaXplX3QmIGRlcHRoLCBib29s
IGZvcldyaXRpbmcsIGJvb2wmIGluY2x1ZGVzRHluYW1pY1Njb3BlcywgSlNPYmplY3QqJiBnbG9i
YWxPYmplY3QpOworICAgICAgICAvLyBwcm9wZXJ0eS4gUmV0dXJucyBmYWxzZSBpZiBmb3IgYW55
IHJlYXNvbiB0aGUgcHJvcGVydHkgY2Fubm90IGJlIHNhZmVseQorICAgICAgICAvLyBvcHRpbWlz
ZWQgYXQgYWxsLiBPdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gdGhlIGluZGV4IGFuZCBkZXB0aCBv
ZiB0aGUKKyAgICAgICAgLy8gVmFyaWFibGVPYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBwcm9wZXJ0
eS4gSWYgdGhlIHByb3BlcnR5IGlzIGEgbG9jYWwKKyAgICAgICAgLy8gYmxvY2stc2NvcGVkIHZh
cmlhYmxlLCBkZXB0aCB3aWxsIGJlIG5lZ2F0aXZlLiBPdGhlcndpc2UsIGlmIHRoZQorICAgICAg
ICAvLyBwcm9wZXJ0eSBjYW5ub3QgYmUgZm91bmQgc3RhdGljYWxseSwgZGVwdGggd2lsbCBjb250
YWluIHRoZSBkZXB0aCBvZgorICAgICAgICAvLyB0aGUgc2NvcGUgY2hhaW4gd2hlcmUgZHluYW1p
YyBsb29rdXAgbXVzdCBiZWdpbi4KKyAgICAgICAgYm9vbCBmaW5kU2NvcGVkUHJvcGVydHkoY29u
c3QgSWRlbnRpZmllciYsIGludCYgaW5kZXgsIGludCYgZGVwdGgsIGJvb2wgZm9yV3JpdGluZywg
Ym9vbCYgaW5jbHVkZXNEeW5hbWljU2NvcGVzLCBKU09iamVjdComIGdsb2JhbE9iamVjdCk7CiAK
ICAgICAgICAgLy8gUmV0dXJucyB0aGUgcmVnaXN0ZXIgc3RvcmluZyAidGhpcyIKICAgICAgICAg
UmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyKCkgeyByZXR1cm4gJm1fdGhpc1JlZ2lzdGVyOyB9CkBA
IC0zMDksOCArMzEzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRJbihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHByb3BlcnR5LCBSZWdpc3RlcklEKiBi
YXNlKSB7IHJldHVybiBlbWl0QmluYXJ5T3Aob3BfaW4sIGRzdCwgcHJvcGVydHksIGJhc2UsIE9w
ZXJhbmRUeXBlcygpKTsgfQogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlKFJlZ2lz
dGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0R2V0U2NvcGVkVmFyKFJlZ2lzdGVySUQqIGRzdCwgc2l6ZV90IHNraXAsIGludCBp
bmRleCwgSlNWYWx1ZSBnbG9iYWxPYmplY3QpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0
U2NvcGVkVmFyKHNpemVfdCBza2lwLCBpbnQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbHVlLCBKU1Zh
bHVlIGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTY29wZWRWYXIo
UmVnaXN0ZXJJRCogZHN0LCBpbnQgc2tpcCwgaW50IGluZGV4LCBKU1ZhbHVlIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRTY29wZWRWYXIoaW50IHNraXAsIGludCBp
bmRleCwgUmVnaXN0ZXJJRCogdmFsdWUsIEpTVmFsdWUgZ2xvYmFsT2JqZWN0KTsKIAogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZUJhc2UoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlQmFzZUZv
clB1dChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KTsKQEAgLTM2
OCwxNCArMzcyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFRocm93
UmVmZXJlbmNlRXJyb3IoY29uc3QgVVN0cmluZyYgbWVzc2FnZSk7CiAKLSAgICAgICAgdm9pZCBl
bWl0UHVzaE5ld1Njb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCAqc2NvcGVUZW1wbGF0
ZSwgUmVnaXN0ZXJJRCogdmFsdWUpOworICAgICAgICB2b2lkIGVtaXRQdXNoQmxvY2tTY29wZShS
ZWdpc3RlcklEKiBkc3QsIEpTU3RhdGljU2NvcGVPYmplY3QgKnNjb3BlVGVtcGxhdGUsIFJlZ2lz
dGVySUQqIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0UG9wQmxvY2tTY29wZSgpOwogCiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRQdXNoU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUpOwogICAgICAg
ICB2b2lkIGVtaXRQb3BTY29wZSgpOwogCiAgICAgICAgIHZvaWQgZW1pdERlYnVnSG9vayhEZWJ1
Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKTsKIAotICAgICAgICBpbnQgc2Nv
cGVEZXB0aCgpIHsgcmV0dXJuIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2ZpbmFsbHlEZXB0aDsg
fQorICAgICAgICBpbnQgc2NvcGVEZXB0aCgpIHsgcmV0dXJuIG1fZHluYW1pY1Njb3BlRGVwdGgg
KyBtX2Jsb2NrU2NvcGVEZXB0aCArIG1fZmluYWxseURlcHRoOyB9CiAgICAgICAgIGJvb2wgaGFz
RmluYWxpc2VyKCkgeyByZXR1cm4gbV9maW5hbGx5RGVwdGggIT0gMDsgfQogCiAgICAgICAgIHZv
aWQgcHVzaEZpbmFsbHlDb250ZXh0KExhYmVsKiB0YXJnZXQsIFJlZ2lzdGVySUQqIHJldHVybkFk
ZHJEc3QpOwpAQCAtNTQzLDYgKzU0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gbV9sYXN0VmFyOwogICAgICAgICBpbnQgbV9maW5hbGx5RGVwdGg7CiAg
ICAgICAgIGludCBtX2R5bmFtaWNTY29wZURlcHRoOworICAgICAgICBpbnQgbV9ibG9ja1Njb3Bl
RGVwdGg7CiAgICAgICAgIGludCBtX2Jhc2VTY29wZURlcHRoOwogICAgICAgICBDb2RlVHlwZSBt
X2NvZGVUeXBlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAKaW5kZXggNGM0NTYyN2Y5ZWI2NDBjODg5NmFmY2VjNWY3MjYzY2Q3
YTE0ODhiNi4uYmVkNzJkMzQwNzdmOGJkNmI0ZjM4YTI3MGJlYmI3NTU4M2U3MTk5YiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cApAQCAtMzcxLDcgKzM3MSw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICB9CiAKICAg
ICBpbnQgaW5kZXggPSAwOwotICAgIHNpemVfdCBkZXB0aCA9IDA7CisgICAgaW50IGRlcHRoID0g
MDsKICAgICBKU09iamVjdCogZ2xvYmFsT2JqZWN0ID0gMDsKICAgICBib29sIHJlcXVpcmVzRHlu
YW1pY0NoZWNrcyA9IGZhbHNlOwogICAgIGlmIChnZW5lcmF0b3IuZmluZFNjb3BlZFByb3BlcnR5
KG1faWRlbnQsIGluZGV4LCBkZXB0aCwgZmFsc2UsIHJlcXVpcmVzRHluYW1pY0NoZWNrcywgZ2xv
YmFsT2JqZWN0KSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkgJiYgIXJlcXVpcmVz
RHluYW1pY0NoZWNrcykgewpAQCAtNTYxLDcgKzU2MSw3IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhS
ZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzCiAgICAgfQogCiAgICAgaW50IGluZGV4ID0gMDsKLSAgICBzaXplX3QgZGVwdGggPSAwOwor
ICAgIGludCBkZXB0aCA9IDA7CiAgICAgSlNPYmplY3QqIGdsb2JhbE9iamVjdCA9IDA7CiAgICAg
Ym9vbCByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBmYWxzZTsKICAgICBpZiAoZ2VuZXJhdG9yLmZp
bmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVwdGgsIHRydWUsIHJlcXVpcmVzRHlu
YW1pY0NoZWNrcywgZ2xvYmFsT2JqZWN0KSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2Vy
KCkgJiYgIXJlcXVpcmVzRHluYW1pY0NoZWNrcykgewpAQCAtNzQ4LDcgKzc0OCw3IEBAIFJlZ2lz
dGVySUQqIFByZWZpeFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0CiAgICAgfQogCiAgICAgaW50IGluZGV4ID0gMDsKLSAgICBzaXpl
X3QgZGVwdGggPSAwOworICAgIGludCBkZXB0aCA9IDA7CiAgICAgSlNPYmplY3QqIGdsb2JhbE9i
amVjdCA9IDA7CiAgICAgYm9vbCByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBmYWxzZTsKICAgICBp
ZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVwdGgsIHRy
dWUsIHJlcXVpcmVzRHluYW1pY0NoZWNrcywgZ2xvYmFsT2JqZWN0KSAmJiBpbmRleCAhPSBtaXNz
aW5nU3ltYm9sTWFya2VyKCkgJiYgIXJlcXVpcmVzRHluYW1pY0NoZWNrcykgewpAQCAtMTE2Niw3
ICsxMTY2LDcgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmUKICAgICB9CiAKICAgICBpbnQgaW5k
ZXggPSAwOwotICAgIHNpemVfdCBkZXB0aCA9IDA7CisgICAgaW50IGRlcHRoID0gMDsKICAgICBK
U09iamVjdCogZ2xvYmFsT2JqZWN0ID0gMDsKICAgICBib29sIHJlcXVpcmVzRHluYW1pY0NoZWNr
cyA9IGZhbHNlOwogICAgIGlmIChnZW5lcmF0b3IuZmluZFNjb3BlZFByb3BlcnR5KG1faWRlbnQs
IGluZGV4LCBkZXB0aCwgdHJ1ZSwgcmVxdWlyZXNEeW5hbWljQ2hlY2tzLCBnbG9iYWxPYmplY3Qp
ICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSAmJiAhcmVxdWlyZXNEeW5hbWljQ2hl
Y2tzKSB7CkBAIC0xMTk2LDcgKzExOTYsNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25SZXNvbHZlTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogICAg
IH0KIAogICAgIGludCBpbmRleCA9IDA7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsKKyAgICBpbnQg
ZGVwdGggPSAwOwogICAgIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QgPSAwOwogICAgIGJvb2wgcmVx
dWlyZXNEeW5hbWljQ2hlY2tzID0gZmFsc2U7CiAgICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVk
UHJvcGVydHkobV9pZGVudCwgaW5kZXgsIGRlcHRoLCB0cnVlLCByZXF1aXJlc0R5bmFtaWNDaGVj
a3MsIGdsb2JhbE9iamVjdCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpICYmICFy
ZXF1aXJlc0R5bmFtaWNDaGVja3MpIHsKQEAgLTE5NDEsMTEgKzE5NDEsMTMgQEAgUmVnaXN0ZXJJ
RCogVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTU3RhdGljU2Nv
cGVPYmplY3QqIHNjb3BlVGVtcGxhdGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZ2Vu
ZXJhdG9yLnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogICAgICAg
ICAgICAgc2NvcGVUZW1wbGF0ZS0+YWRkVmFyaWFibGUobV9leGNlcHRpb25JZGVudCwgRG9udERl
bGV0ZSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcGwgPSBnZW5lcmF0b3Iu
ZW1pdExvYWQoMCwgSlNWYWx1ZShzY29wZVRlbXBsYXRlKSk7Ci0gICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1c2hOZXdTY29wZShleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgdGVtcGwuZ2V0KCks
IGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHVz
aEJsb2NrU2NvcGUoZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIHNjb3BlVGVtcGxhdGUsIGV4Y2Vw
dGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5v
ZGUoZHN0LCBtX2NhdGNoQmxvY2spOwotICAgICAgICBnZW5lcmF0b3IuZW1pdFBvcFNjb3BlKCk7
CisgICAgICAgIGlmIChtX2NhdGNoSGFzRXZhbCkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
UG9wU2NvcGUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BC
bG9ja1Njb3BlKCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoY2F0Y2hFbmRMYWJlbC5n
ZXQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb3BhZ2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9y
LmNwcAppbmRleCBkYTI2N2RjYzFlMjY5MzIwOGY5ZWU5N2U2OGMwN2MxNTZiMTg0NGNiLi4zNmJm
MzIyZTc0Y2ZlMjVkZmMzNDkyMzE5NmU5MjY2MDQ2NzZiYjJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKQEAgLTEzODEsOCArMTM4MSwxMyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXgg
Z2V0U2NvcGVDaGFpbkxvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBkZXB0aCkKKyAgICBOb2RlSW5k
ZXggZ2V0U2NvcGVDaGFpbkxvYWRFbGltaW5hdGlvbihpbnQgZGVwdGgpCiAgICAgeworICAgICAg
ICBpZiAoZGVwdGggPCAwKQorICAgICAgICAgICAgLy8gRklYTUU6IHByb3BhZ2F0ZSB1bnRpbCB0
byB0aGUgbmV4dCBvcF9wdXNoX25ld19zY29wZSwKKyAgICAgICAgICAgIC8vIG9wX3B1c2hfc2Nv
cGUsIG9yIG9wX3BvcF9zY29wZS4KKyAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisKICAgICAg
ICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKCk7CiAgICAgICAgIGZv
ciAoTm9kZUluZGV4IGluZGV4ID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGluZGV4LS0gPiBzdGFy
dDspIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmlu
ZGV4IDc1ZjFkNWQ3ZjNmNmY0NjhlMDkxZjIzNzE1YmUyMmU3MDJhMmZhNzYuLjIwYTgzZjgzNWNi
YmM0YTFhMjE3OTFmMzFiM2MzYTc0NDg2MzgwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMzM4MywxNiArMzM4
MywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgYm9vbCBjaGVja1RvcExldmVsID0gbV9qaXQuY29kZUJsb2NrKCktPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlICYmIG1faml0LmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7
CiAgICAgICAgIGludCBza2lwID0gbm9kZS5zY29wZUNoYWluRGVwdGgoKTsKLSAgICAgICAgQVNT
RVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCAm
JiBza2lwLS0pIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RD
cmVhdGVkOwotICAgICAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCi0gICAgICAgICAgICAgICAg
YWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpa
ZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG1faml0LmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpKTsKLSAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGFj
dGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsoJm1faml0KTsKLSAgICAgICAgfQotICAgICAgICB3aGls
ZSAoc2tpcC0tKQotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZXN1
bHRHUFIpOworICAgICAgICBpZiAoc2tpcCA8IDApIHsKKyAgICAgICAgICAgIC8vIExvY2FsIGJs
b2NrLXNjb3BlZCB2YXIuCisgICAgICAgICAgICB3aGlsZSAoKytza2lwKQorICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKKyAgICAg
ICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgeworICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOworICAgICAgICAgICAgICAgIGlm
IChjaGVja1RvcExldmVsKQorICAgICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRl
ZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9qaXQuY29kZUJsb2NrKCkt
PmFjdGl2YXRpb25SZWdpc3RlcigpKSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFp
bk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBhY3RpdmF0aW9uTm90
Q3JlYXRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAo
c2tpcC0tKQorICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9k
ZSwgb2JqZWN0KSksIHJlc3VsdEdQUik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDk3YjUxMmFlNDYwZTNiMTA5MDY3MGIz
MDExNDcxMmI0MWVhZjJjODYuLjBjZWY4NmNhYTkxODVhNTQwNzI0Y2YxYTQxNjc5NTAzN2ZmMDc1
ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcApAQCAtMzM0NCwxNiArMzM0NCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihSZWdpc3RlckZpbGU6OlNjb3BlQ2hh
aW4pKSwgcmVzdWx0R1BSKTsKICAgICAgICAgYm9vbCBjaGVja1RvcExldmVsID0gbV9qaXQuY29k
ZUJsb2NrKCktPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG1faml0LmNvZGVCbG9jaygp
LT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CiAgICAgICAgIGludCBza2lwID0gbm9kZS5zY29wZUNo
YWluRGVwdGgoKTsKLSAgICAgICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAg
ICAgICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOwotICAgICAgICAgICAgaWYgKGNoZWNrVG9w
TGV2ZWwpCi0gICAgICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBtX2ppdC5icmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1faml0LmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVn
aXN0ZXIoKSkpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsoJm1faml0KTsK
LSAgICAgICAgfQotICAgICAgICB3aGlsZSAoc2tpcC0tKQotICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihTY29w
ZUNoYWluTm9kZSwgbmV4dCkpLCByZXN1bHRHUFIpOworICAgICAgICBpZiAoc2tpcCA8IDApIHsK
KyAgICAgICAgICAgIC8vIExvY2FsIGJsb2NrLXNjb3BlZCB2YXIuCisgICAgICAgICAgICB3aGls
ZSAoKytza2lwKQorICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChza2lwIHx8
ICFjaGVja1RvcExldmVsKTsKKyAgICAgICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAt
LSkgeworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RDcmVh
dGVkOworICAgICAgICAgICAgICAgIGlmIChjaGVja1RvcExldmVsKQorICAgICAgICAgICAgICAg
ICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGls
ZXI6Olplcm8sIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4obV9qaXQuY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKSkpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB3aGlsZSAoc2tpcC0tKQorICAgICAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2Nv
cGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVD
VF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgb2JqZWN0KSksIHJlc3VsdEdQUik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4
IDMxMGY4YjY4YWZkMzZkZWU1MTJmNThkNmU3YjNiYWJlNjdjZTJjNGMuLjA1MzY0ZDdjZWQ1YWY2
ZDI1Njc4NTY3ODYyYzEzNzgyY2U0NzYzMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMjY2MCwxNSArMjY2MCwyMyBAQCBK
U1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcsIFJl
Z2lzdGVyRmlsZSogcmVnaXN0ZXJGaQogICAgICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0g
c2NvcGVDaGFpbi0+ZW5kKCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVu
ZCk7CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7
Ci0gICAgICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7Ci0gICAgICAg
IEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAgICAgICAgaWYgKGNoZWNrVG9wTGV2
ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+
YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSkKKyAgICAgICAgaWYgKHNraXAgPCAwKSB7
CisgICAgICAgICAgICAvLyBCbG9jay1zY29wZWQgdmFyLgorICAgICAgICAgICAgd2hpbGUgKCsr
c2tpcCkgewogICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB3aGls
ZSAoc2tpcC0tKSB7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZW5k
LCBpdGVyICE9IGVuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOworICAgICAgICAgICAg
QVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOworICAgICAgICAgICAgaWYgKGNoZWNrVG9w
TGV2ZWwgJiYgc2tpcC0tKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb2Rl
QmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpCisgICAgICAgICAgICAgICAg
ICAgICsraXRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChza2lwLS0pIHsK
KyAgICAgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChl
bmQsIGl0ZXIgIT0gZW5kKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBBU1NF
UlQoKCppdGVyKS0+aXNWYXJpYWJsZU9iamVjdCgpKTsKICAgICAgICAgSlNWYXJpYWJsZU9iamVj
dCogc2NvcGUgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oaXRlci0+Z2V0KCkpOwpA
QCAtMjY5MCwxNyArMjY5OCwyNCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpb25GbGFnIGZsYWcsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaQogICAgICAgICBT
Y29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CiAgICAgICAgIEFTU0VS
VChjb2RlQmxvY2sgPT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7Ci0gICAgICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IGNv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgY29kZUJsb2NrLT5uZWVkc0Z1
bGxTY29wZUNoYWluKCk7Ci0gICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsK
LSAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgICAgICBpZiAo
Y2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSkK
KyAgICAgICAgaWYgKHNraXAgPCAwKSB7CisgICAgICAgICAgICAvLyBCbG9jay1zY29wZWQgdmFy
LgorICAgICAgICAgICAgd2hpbGUgKCsrc2tpcCkgewogICAgICAgICAgICAgICAgICsraXRlcjsK
KyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCBjaGVja1RvcExldmVs
ID0gY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBjb2RlQmxvY2stPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4oKTsKKyAgICAgICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1Rv
cExldmVsKTsKKyAgICAgICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgeworICAg
ICAgICAgICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0
ZXIoKSkuanNWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB3aGlsZSAoc2tpcC0tKSB7CisgICAgICAgICAgICAgICAgKytpdGVy
OworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKHNraXAtLSkgewotICAgICAgICAg
ICAgKytpdGVyOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChlbmQsIGl0ZXIgIT0gZW5kKTsK
LSAgICAgICAgfQotCiAgICAgICAgIEFTU0VSVCgoKml0ZXIpLT5pc1ZhcmlhYmxlT2JqZWN0KCkp
OwogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBzY29wZSA9IHN0YXRpY19jYXN0PEpTVmFyaWFi
bGVPYmplY3QqPihpdGVyLT5nZXQoKSk7CiAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPnIodmFs
dWUpLmpzVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCmluZGV4IDY3MTdhMTBiY2JjNzhmMmI1NGEzMjE4MzY0YTdhZGNkNmNiYzYz
MWQuLjc0ZWQ2M2RhMDczZmQ4NTJmMDc0ZTM1NjIxMmJlOGUxMmMzYTMyMGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC05NzgsMTcg
Kzk3OCwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVkX3ZhcihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGludCBza2lwID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKIAogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVy
RmlsZTo6U2NvcGVDaGFpbiwgcmVnVDApOwotICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IG1fY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+bmVlZHNG
dWxsU2NvcGVDaGFpbigpOwotICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAg
ICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgSnVtcCBhY3RpdmF0aW9u
Tm90Q3JlYXRlZDsKLSAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCi0gICAgICAgICAgICBhY3Rp
dmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgYWRkcmVzc0ZvcihtX2NvZGVC
bG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVnVDApOwotICAg
ICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworCisgICAgaWYgKHNraXAgPCAw
KSB7CisgICAgICAgIC8vIEJsb2NrLXNjb3BlZCB2YXIuCisgICAgICAgIHdoaWxlICgrK3NraXAp
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihTY29w
ZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYm9vbCBj
aGVja1RvcExldmVsID0gbV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CisgICAgICAgIEFTU0VSVChza2lw
IHx8ICFjaGVja1RvcExldmVsKTsKKyAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0t
KSB7CisgICAgICAgICAgICBKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOworICAgICAgICAgICAg
aWYgKGNoZWNrVG9wTGV2ZWwpCisgICAgICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQg
PSBicmFuY2hUZXN0UHRyKFplcm8sIGFkZHJlc3NGb3IobV9jb2RlQmxvY2stPmFjdGl2YXRpb25S
ZWdpc3RlcigpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9P
RkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMCk7CisgICAgICAgICAgICBhY3Rp
dmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChz
a2lwLS0pCisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRP
RihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMCk7CiAgICAgfQotICAgIHdoaWxlIChza2lw
LS0pCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKFNjb3Bl
Q2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QwKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpKSwgcmVnVDApOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMo
KSksIHJlZ1QwKTsKQEAgLTEwMDQsMjEgKzEwMTEsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3Njb3BlZF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQsIHJlZ1QwKTsK
IAogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVD
aGFpbiwgcmVnVDEpOwotICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IG1fY29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFp
bigpOwotICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAgICBpZiAoY2hlY2tU
b3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZDsK
LSAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCi0gICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3Jl
YXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgYWRkcmVzc0ZvcihtX2NvZGVCbG9jay0+YWN0aXZh
dGlvblJlZ2lzdGVyKCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1Rf
T0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVnVDEpOwotICAgICAgICBhY3RpdmF0
aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworICAgIGlmIChza2lwIDwgMCkgeworICAgICAgICAv
LyBCbG9jay1zY29wZWQgdmFyLgorICAgICAgICB3aGlsZSAoKytza2lwKQorICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5l
eHQpKSwgcmVnVDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9
IG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+
bmVlZHNGdWxsU2NvcGVDaGFpbigpOworICAgICAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BM
ZXZlbCk7CisgICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgeworICAgICAgICAg
ICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZDsKKyAgICAgICAgICAgIGlmIChjaGVja1RvcExl
dmVsKQorICAgICAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoVGVzdFB0
cihaZXJvLCBhZGRyZXNzRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVD
aGFpbk5vZGUsIG5leHQpKSwgcmVnVDEpOworICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0
ZWQubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoc2tpcC0tKQorICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5v
ZGUsIG5leHQpKSwgcmVnVDEpOwogICAgIH0KLSAgICB3aGlsZSAoc2tpcC0tKQotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4
dCkpLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMSk7CiAKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgb2JqZWN0KSksIHJlZ1QxKTsK
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QxLCByZWdUMCwgcmVnVDIsIHJlZ1QzLCBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7Ci0KICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJz
KCkpLCByZWdUMSk7CiAgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3MocmVnVDEsIGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApp
bmRleCBmZWFmOGI4OWRlOTQ0ZWU0MTZjN2E4M2QyMjM3ODRjMGI5ZGQ3NDIwLi44MDI1ZWVlNDcz
MGM5M2E1OTIxYzBjYTg0Y2ZjNTNlMDBkMDg4MzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTEwMjcsMTcgKzEw
MjcsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlZF92YXIoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CiAKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZp
bGU6OlNjb3BlQ2hhaW4sIHJlZ1QyKTsKLSAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBtX2NvZGVC
bG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPm5lZWRzRnVs
bFNjb3BlQ2hhaW4oKTsKLSAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BMZXZlbCk7Ci0gICAg
aWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgIEp1bXAgYWN0aXZhdGlvbk5v
dENyZWF0ZWQ7Ci0gICAgICAgIGlmIChjaGVja1RvcExldmVsKQotICAgICAgICAgICAgYWN0aXZh
dGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwgdGFnRm9yKG1fY29kZUJsb2NrLT5hY3Rp
dmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hh
aW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKLSAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQubGlu
ayh0aGlzKTsKKyAgICBpZiAoc2tpcCA8IDApIHsKKyAgICAgICAgLy8gQmxvY2stc2NvcGVkIHZh
ci4KKyAgICAgICAgd2hpbGUgKCsrc2tpcCkKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBtX2NvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hh
aW4oKTsKKyAgICAgICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOworICAgICAgICBp
ZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKKyAgICAgICAgICAgIEp1bXAgYWN0aXZhdGlv
bk5vdENyZWF0ZWQ7CisgICAgICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKKyAgICAgICAgICAg
ICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaDMyKEVxdWFsLCB0YWdGb3IobV9jb2Rl
QmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKKyAgICAgICAgICAgIGFjdGl2
YXRpb25Ob3RDcmVhdGVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHNr
aXAtLSkKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9G
KFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKICAgICB9Ci0gICAgd2hpbGUgKHNraXAt
LSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVD
aGFpbk5vZGUsIG5leHQpKSwgcmVnVDIpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBP
QkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMik7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygp
KSwgcmVnVDIpOwpAQCAtMTA1NywxOSArMTA2MywyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2NvcGVkX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRMb2Fk
KHZhbHVlLCByZWdUMSwgcmVnVDApOwogCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCByZWdUMik7Ci0gICAgYm9vbCBjaGVja1RvcExl
dmVsID0gbV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7Ci0gICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9w
TGV2ZWwpOwotICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgewotICAgICAgICBKdW1w
IGFjdGl2YXRpb25Ob3RDcmVhdGVkOwotICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKLSAgICAg
ICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoMzIoRXF1YWwsIHRhZ0ZvcihtX2Nv
ZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZT
RVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMik7Ci0gICAgICAgIGFjdGl2YXRpb25O
b3RDcmVhdGVkLmxpbmsodGhpcyk7CisgICAgaWYgKHNraXAgPCAwKSB7CisgICAgICAgIC8vIEJs
b2NrLXNjb3BlZCB2YXIuCisgICAgICAgIHdoaWxlICgrK3NraXApCisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkp
LCByZWdUMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYm9vbCBjaGVja1RvcExldmVsID0gbV9j
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJsb2NrLT5uZWVk
c0Z1bGxTY29wZUNoYWluKCk7CisgICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVs
KTsKKyAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7CisgICAgICAgICAgICBK
dW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOworICAgICAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwp
CisgICAgICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwg
dGFnRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMik7CisgICAg
ICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHdoaWxlIChza2lwLS0pCisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9C
SkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMik7CiAgICAgfQotICAg
IHdoaWxlIChza2lwLS0pCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgb2JqZWN0KSksIHJlZ1Qy
KTsKIAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hh
aW5Ob2RlLCBvYmplY3QpKSwgcmVnVDIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNW
YXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlZ1QzKTsKICAgICBlbWl0U3Rv
cmUoaW5kZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDMpOwogICAgIGVtaXRXcml0ZUJhcnJpZXIocmVn
VDIsIHJlZ1QxLCByZWdUMCwgcmVnVDEsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFy
cmllckZvclZhcmlhYmxlQWNjZXNzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122960</attachid>
            <date>2012-01-18 10:33:45 -0800</date>
            <delta_ts>2012-03-19 12:53:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20120118193343.patch</filename>
            <type>text/plain</type>
            <size>45225</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MzU2NTM2ZWYzOGRmZTU4MDUwNzkxNjA4MzM4NWU3ODE4OWJmNDExLi5lMGEwMWJiYWJmNTVlMjZi
YjJmZTIzY2E1YTFhNWNiMjE4YjgwYTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MyBAQAorMjAxMS0xMi0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CisK
KyAgICAgICAgT3B0aW1pemUgYWNjZXNzIHRvIGJsb2NrLXNjb3BlZCBsb2NhbCB2YXJpYWJsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzA4CisK
KyAgICAgICAgVGhpcyBjb21taXQgY2hhbmdlcyB0aGUgYnl0ZWNvbXBpbGVyIHRvIHRyYWNrIHN0
YXRpYyBzY29wZQorICAgICAgICBvYmplY3RzLCBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUKKyAgICAgICAgcmVzb2x2ZWQgYXQgY29tcGls
ZS10aW1lLiAgKEN1cnJlbnRseSwgb25seSB0aGUgZXhjZXB0aW9uCisgICAgICAgIGlkZW50aWZp
ZXIgaW4gY2F0Y2ggYmxvY2tzIGlzIGJsb2NrLXNjb3BlZCwgaW4gRVM1LikKKworICAgICAgICBU
aGUgcnVudGltZSBzdXBwb3J0IGlzIGNvbXBsaWNhdGVkIGJ5IGhhdmluZyB0byBjb25zaWRlciB3
aGV0aGVyCisgICAgICAgIG9yIG5vdCBhIGZ1bmN0aW9uIGhhcyBhIHNjb3BlIGNoYWluIGluIHRo
ZSBhY3RpdmF0aW9uIHJlY29yZCBvcgorICAgICAgICBub3QuICBUbyBnZXQgYXJvdW5kIHRoaXMs
IHdlIGluZGljYXRlIHRoYXQgYSBuZWdhdGl2ZSBkZXB0aCBpbiBhCisgICAgICAgIGdldF9zY29w
ZWRfdmFyIG9wY29kZSBpbmRpY2F0ZXMgYSBsb2NhbCwgYmxvY2stc2NvcGVkIHZhcmlhYmxlLgor
ICAgICAgICBUaGUgbG9naWMgdG8gY2hlY2sgZm9yIGEgc2NvcGUgY2hhaW4gaW4gdGhlIGFjdGl2
YXRpb24gcmVjb3JkIG9yCisgICAgICAgIG5vdCBvbmx5IGhhcHBlbnMgd2hlbiBsb29raW5nIGZv
ciBsZXhpY2FsbHkgY2FwdHVyZWQgdmFyaWFibGVzIC0tCisgICAgICAgIHRob3NlIHdpdGggbm9u
LW5lZ2F0aXZlIGRlcHRoLgorCisgICAgICAgIFRoaXMgd2lsbCBhbGxvdyBibG9jay1zY29wZWQg
bG9jYWxzIHRvIGJlIG9wdGltaXplZCBieSB0aGUKKyAgICAgICAgYmFzZWxpbmUgYW5kIERGRyBK
SVRzLiAgQSBmdXR1cmUgcGF0Y2ggd2lsbCBhZGQgc3VwcG9ydCBmb3IgRVM2CisgICAgICAgIGJs
b2NrIGxvY2FscywgYmVoaW5kIGFuICNpZmRlZiwgdXNpbmcgdGhlIHNhbWUgbWVjaGFuaXNtLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkNvbnRyb2xGbG93Q29u
dGV4dCk6IENoYW5nZSB0byBoYXZlIGFuIGVudW0gQmxvY2tUeXBlCisgICAgICAgIGluc3RlYWQg
b2YgYSBib29sZWFuIGlzRmluYWxseUJsb2NrIGZsYWcuCisgICAgICAgIChKU0M6OlJlc29sdmVS
ZXN1bHQpOiBBZGQgYSBmbGFnIGFuZCB0eXBlcyBmb3IgYmxvY2stc2NvcGVkCisgICAgICAgIGJp
bmRpbmdzLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6c2NvcGVEZXB0aCk6IEFk
ZCBtX2Jsb2NrU2NvcGVEZXB0aC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNh
bk9wdGltaXplTm9uTG9jYWxzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNo
b3VsZE9wdGltaXplTG9jYWxzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNy
ZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmlzTG9jYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aXNMb2NhbENv
bnN0YW50KTogUmVtb3ZlIG5vdy11bnVzZWQKKyAgICAgICAgbWV0aG9kcy4KKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOiBBZGQgbmV3CisgICAgICAgIG1fYmxvY2tT
Y29wZURlcHRoIG1lbWJlci4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OndpbGxS
ZXNvbHZlVG9Bcmd1bWVudHMpOiBSZWltcGxlbWVudAorICAgICAgICBiYXNlZCBvbiBSZXNvbHZl
UmVzdWx0Ojppc0FyZ3VtZW50cygpLCBub3cgdGhhdCByZXNvbHZlKCkgaXMKKyAgICAgICAgaWRl
bXBvdGVudC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9yKTog
RW5zdXJlIHRoYXQgdGhlIGFyZ3VtZW50cworICAgICAgICByZWdpc3RlciBpcyBsYXppbHkgY3Jl
YXRlZCwgaW4gbm9uLXN0cmljdCBtb2RlLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6cmVzb2x2ZSk6IFNlYXJjaCBibG9jayBzY29wZXMgYmVmb3JlCisgICAgICAgIGxvb2tpbmcg
aW4gdGhlIGxvY2FsIHN5bWJvbCB0YWJsZSBmb3IgcmVnaXN0ZXJzLiAgSWYgYW4gaWRlbnRpZmll
cgorICAgICAgICByZXNvbHZlcyB0byBhbiBhcmd1bWVudHMgb2JqZWN0LCBmbGFnIHRoZSByZXN1
bHQsIGluc3RlYWQgb2YKKyAgICAgICAgZW1pdHRpbmcgb3Bjb2RlcyB0byBpbml0IHRoZSBhcmd1
bWVudC4gIChUaGUgZ2V0dGVycyB3aWxsIGVtaXQKKyAgICAgICAgdGhvc2Ugb3Bjb2Rlcy4pICBJ
bmxpbmUgY2FuT3B0aW1pemVOb25Mb2NhbHMgYW5kCisgICAgICAgIHNob3VsZE9wdGltaXplTG9j
YWxzLCBhbmQgZm9sZCBzb21lIGNvbnN0YW50cy4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRHZXRTdGF0aWNWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1dFN0YXRpY1Zhcik6IEFkZCBjYXNlcyBmb3IgYmxvY2sKKyAgICAgICAgdmFyaWFi
bGVzIGFuZCAiYXJndW1lbnRzIi4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRQdXNoU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFBvcFNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleEp1bXBTY29wZXMp
OiBBZGFwdCB0bworICAgICAgICBCbG9ja1R5cGUgY2hhbmdlLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKTogQWRhcHQgdG8gbV9keW5hbWljU2NvcGVEZXB0aAor
ICAgICAgICAvIG1fYmxvY2tTY29wZURlcHRoIGNoYW5nZS4KKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRQdXNoQmxvY2tTY29wZSk6IFJlbmFtZSBmcm9tCisgICAgICAgIHB1
c2hOZXdTY29wZSwgYW5kIHRha2UgdGhlIHNjb3BlIHRlbXBsYXRlIGRpcmVjdGx5LCBzbyB3ZSBj
YW4gcHVzaAorICAgICAgICBpdCBvbiB0aGUgY29tcGlsZS10aW1lIHNjb3BlIGNoYWluLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFBvcEJsb2NrU2NvcGUpOiBOZXcgZnVu
Y3Rpb247IGNhbGwgaXQKKyAgICAgICAgaW5zdGVhZCBvZiBwb3BTY29wZSwgYXMgaXQgYWxzbyBw
b3BzIHRoZSBjb21waWxlLXRpbWUgc2NvcGUKKyAgICAgICAgY2hhaW4uCisgICAgICAgICogYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlJlc29sdmVOb2RlOjpp
c1B1cmUpOiBVc2UgdGhlIFJlc29sdmVSZXN1bHQgbWVjaGFuaXNtCisgICAgICAgIGluc3RlYWQg
b2YgaXNMb2NhbC4KKyAgICAgICAgKEpTQzo6UHJlZml4UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29k
ZSk6IFVzZSBpc0ltbXV0YWJsZSBvbiB0aGUKKyAgICAgICAgbG9jYXRpb24gaW5zdGVhZCBvZiBp
c0xvY2FsQ29uc3RhbnQuCisgICAgICAgIChKU0M6OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6IEFk
YXB0IHRvIHB1c2hCbG9ja1Njb3BlIC8KKyAgICAgICAgcG9wQmxvY2tTY29wZSBjaGFuZ2UuCisg
ICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OmdldFNjb3BlQ2hhaW5Mb2FkRWxpbWluYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2
YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZWRfdmFyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9zY29wZWRfdmFyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVkX3Zhcik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3Zhcik6IEFkZCBzdXBwb3J0
IGZvciBuZWdhdGl2ZQorICAgICAgICBkZXB0aHMuCisKIDIwMTEtMTItMTUgIEFuZHkgV2luZ28g
IDx3aW5nb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEFsbG93IEpTU3RhdGljU2NvcGUgdG8gYmlu
ZCBtb3JlIHRoYW4gb25lIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDI1MTI5M2NkOWNj
NDY5N2YyMWU5OGYxZmE4YTJlMzU2NjA1MDgzMTYuLmE1ZmNjYjg5M2Y5YzA2OTRlODZhMmM4MTg1
NDJkMjZmYjIzNjRmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAKICNp
bmNsdWRlICJCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJw
cmV0ZXIuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5l
cy5oIgpAQCAtMjA2LDYgKzIwNyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzCiAgICAgLCBt
X3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQogICAgICwgbV9m
aW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fYmxv
Y2tTY29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVU
eXBlKEdsb2JhbENvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQpAQCAtMjc3LDYg
KzI3OSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJv
ZHlOb2RlKiBmdW5jdGlvbkJvZHksIFNjb3BlQ2hhaW5OCiAgICAgLCBtX2FjdGl2YXRpb25SZWdp
c3RlcigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVw
dGgoMCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRo
KDApCiAgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50
T2Zmc2V0KDApCkBAIC00MzgsNiArNDQxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2gKICAg
ICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAg
LCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQorICAgICwg
bV9ibG9ja1Njb3BlRGVwdGgoMCkKICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoY29kZUJsb2NrLT5i
YXNlU2NvcGVEZXB0aCgpKQogICAgICwgbV9jb2RlVHlwZShFdmFsQ29kZSkKICAgICAsIG1fbmV4
dENvbnN0YW50T2Zmc2V0KDApCkBAIC01MDksMjUgKzUxMywxNyBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6cmVnaXN0ZXJGb3IoY29uc3QgUmVzb2x2ZVJlc3VsdCYgbG9jYXRpb24p
CiAgICAgaWYgKCFsb2NhdGlvbi5pc1JlZ2lzdGVyKCkpCiAgICAgICAgIHJldHVybiAwOwogCisg
ICAgaWYgKGxvY2F0aW9uLmlzQXJndW1lbnRzKCkgJiYgIW1fY29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSkgeworICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVudHMpOworICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkp
OworICAgIH0KKwogICAgIHJldHVybiBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVn
aXN0ZXJGb3IobG9jYXRpb24uaW5kZXgpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6
d2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKLSAgICBp
ZiAoaWRlbnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJs
ZSgpLmdldChpZGVudC5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygp
ICYmIG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlc29sdmUoaWRlbnQpLmlzQXJndW1l
bnRzKCk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjp1bmNoZWNrZWRSZWdp
c3RlckZvckFyZ3VtZW50cygpCkBAIC01NDcsMTkgKzU0Myw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjpjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKiBy
ZWcpCiAgICAgcmV0dXJuIHJlZzsKIH0KIAotYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aXNMb2Nh
bChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICBpZiAoaWRlbnQgPT0gcHJvcGVydHlO
YW1lcygpLnRoaXNJZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBy
ZXR1cm4gc2hvdWxkT3B0aW1pemVMb2NhbHMoKSAmJiBzeW1ib2xUYWJsZSgpLmNvbnRhaW5zKGlk
ZW50LmltcGwoKSk7Ci19Ci0KLWJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmlzTG9jYWxDb25zdGFu
dChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICByZXR1cm4gc3ltYm9sVGFibGUoKS5n
ZXQoaWRlbnQuaW1wbCgpKS5pc1JlYWRPbmx5KCk7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpuZXdSZWdpc3RlcigpCiB7CiAgICAgbV9jYWxsZWVSZWdpc3RlcnMuYXBwZW5k
KG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSk7CkBAIC0xMTQyLDEzICsxMTI1LDQ3IEBAIFJlc29s
dmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHkpCiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCisgICAgU2NvcGVDaGFpbkl0ZXJh
dG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9y
IGVuZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7CisKKyAgICBmb3IgKGludCBkZXB0aCA9IHNjb3Bl
RGVwdGgoKTsgZGVwdGg7IC0tZGVwdGgpIHsKKyAgICAgICAgc3dpdGNoIChtX3Njb3BlQ29udGV4
dFN0YWNrW2RlcHRoLTFdLmJsb2NrVHlwZSkgeworICAgICAgICBjYXNlIFdpdGhCbG9jazoKKyAg
ICAgICAgICAgIHJldC50eXBlID0gUmVzb2x2ZVJlc3VsdDo6RHluYW1pYzsKKyAgICAgICAgICAg
IHJldC5pbmRleCA9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXQ7CisgICAgICAgIGNhc2UgRmluYWxseUJsb2NrOgorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGNhc2UgU2NvcGVCbG9jazoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAg
ICAgICBKU09iamVjdCogY3VycmVudFNjb3BlID0gaXRlci0+Z2V0KCk7CisgICAgICAgIEFTU0VS
VChjdXJyZW50U2NvcGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgICAgIEpTVmFyaWFi
bGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVP
YmplY3QqPihjdXJyZW50U2NvcGUpOworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0g
Y3VycmVudFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkp
OworCisgICAgICAgIC8vIEZvdW5kIHRoZSBwcm9wZXJ0eQorICAgICAgICBpZiAoIWVudHJ5Lmlz
TnVsbCgpKSB7CisgICAgICAgICAgICByZXQudHlwZSA9IFJlc29sdmVSZXN1bHQ6OkJsb2NrOwor
ICAgICAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgICAgICByZXQu
dHlwZSB8PSBSZXNvbHZlUmVzdWx0OjpJbW11dGFibGVGbGFnOworICAgICAgICAgICAgcmV0Lmlu
ZGV4ID0gZW50cnkuZ2V0SW5kZXgoKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAg
IH0KKyAgICAgICAgKytyZXQuZGVwdGg7CisgICAgICAgICsraXRlcjsKKyAgICB9CisKICAgICAv
LyBDaGVjayBpZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGFsbG9jYXRlZCBpbiBhIHJlZ2lzdGVy
LgotICAgIGlmIChtX2NvZGVUeXBlICE9IEdsb2JhbENvZGUgJiYgc2hvdWxkT3B0aW1pemVMb2Nh
bHMoKSkgeworICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBT
eW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgp
KTsKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKHByb3Bl
cnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgY3JlYXRl
QXJndW1lbnRzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgICAgIHJldC50eXBlID0gUmVzb2x2ZVJl
c3VsdDo6UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cyAmJiBtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKQorICAgICAgICAg
ICAgICAgIHJldC50eXBlIHw9IFJlc29sdmVSZXN1bHQ6OkFyZ3VtZW50c0ZsYWc7CiAgICAgICAg
ICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKQogICAgICAgICAgICAgICAgIHJldC50eXBlIHw9
IFJlc29sdmVSZXN1bHQ6OkltbXV0YWJsZUZsYWc7CiAgICAgICAgICAgICByZXQuaW5kZXggPSBl
bnRyeS5nZXRJbmRleCgpOwpAQCAtMTE1NywyMiArMTE3NCwxNiBAQCBSZXNvbHZlUmVzdWx0IEJ5
dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogICAg
IH0KIAogICAgIC8vIENhc2VzIHdoZXJlIHdlIGNhbm5vdCBzdGF0aWNhbGx5IG9wdGltaXplIHRo
ZSBsb29rdXAuCi0gICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMg
fHwgIWNhbk9wdGltaXplTm9uTG9jYWxzKCkpIHsKKyAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVy
dHlOYW1lcygpLmFyZ3VtZW50cworICAgICAgICB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2RlCisg
ICAgICAgIHx8IChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+dXNl
c0V2YWwoKSAmJiAhbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSkgeworICAgICAgICByZXQu
dHlwZSA9IFJlc29sdmVSZXN1bHQ6OkR5bmFtaWM7CiAgICAgICAgIHJldC5pbmRleCA9IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKTsKICAgICAgICAgcmV0LmRlcHRoID0gMDsKLSAgICAgICAgaWYgKHNo
b3VsZE9wdGltaXplTG9jYWxzKCkgJiYgbV9jb2RlVHlwZSA9PSBHbG9iYWxDb2RlKSB7Ci0gICAg
ICAgICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IG1fc2NvcGVDaGFpbi0+YmVnaW4oKTsK
LSAgICAgICAgICAgIHJldC50eXBlID0gUmVzb2x2ZVJlc3VsdDo6R2xvYmFsOwotICAgICAgICAg
ICAgcmV0Lmdsb2JhbE9iamVjdCA9IGl0ZXItPmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKCgr
K2l0ZXIpID09IG1fc2NvcGVDaGFpbi0+ZW5kKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcmV0LnR5cGUgPSBSZXNvbHZlUmVzdWx0OjpEeW5hbWljOwotICAgICAgICB9CiAgICAg
ICAgIHJldHVybiByZXQ7CiAgICAgfQogCi0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBt
X3Njb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IG1fc2Nv
cGVDaGFpbi0+ZW5kKCk7CisgICAgcmV0LmRlcHRoICs9IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxT
Y29wZUNoYWluKCk7CiAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsrcmV0LmRlcHRo
KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQoKTsKICAgICAg
ICAgaWYgKCFjdXJyZW50U2NvcGUtPmlzVmFyaWFibGVPYmplY3QoKSkgewpAQCAtMTE5MCwxMCAr
MTIwMSw4IEBAIFJlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUoY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHkpCiAgICAgICAgICAgICBpZiAoKytpdGVyID09IGVuZCkgewog
ICAgICAgICAgICAgICAgIHJldC50eXBlIHw9IFJlc29sdmVSZXN1bHQ6Okdsb2JhbEZsYWc7CiAg
ICAgICAgICAgICAgICAgcmV0Lmdsb2JhbE9iamVjdCA9IGN1cnJlbnRTY29wZTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZXQudHlw
ZSB8PSBSZXNvbHZlUmVzdWx0OjpTY29wZUZsYWc7Ci0gICAgICAgICAgICAgICAgcmV0LmRlcHRo
ICs9IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7Ci0gICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoIXJldC5pc0R5bmFtaWMoKSkKICAgICAgICAgICAgICAgICByZXQudHlw
ZSB8PSBSZXNvbHZlUmVzdWx0OjpTdGF0aWNGbGFnOwogICAgICAgICAgICAgcmV0LmluZGV4ID0g
ZW50cnkuZ2V0SW5kZXgoKTsKQEAgLTEyMDgsNyArMTIxNyw2IEBAIFJlc29sdmVSZXN1bHQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiAKICAg
ICAvLyBDYW4ndCBsb2NhdGUgdGhlIHByb3BlcnR5IGJ1dCB3ZSdyZSBhYmxlIHRvIGF2b2lkIGEg
ZmV3IGxvb2t1cHMuCiAgICAgSlNPYmplY3QqIHNjb3BlID0gaXRlci0+Z2V0KCk7Ci0gICAgcmV0
LmRlcHRoICs9IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CiAgICAgaWYgKCsr
aXRlciA9PSBlbmQpIHsKICAgICAgICAgcmV0LnR5cGUgPSByZXQuaXNEeW5hbWljKCkgPyBSZXNv
bHZlUmVzdWx0OjpEeW5hbWljR2xvYmFsIDogUmVzb2x2ZVJlc3VsdDo6R2xvYmFsOwogICAgICAg
ICByZXQuZ2xvYmFsT2JqZWN0ID0gc2NvcGU7CkBAIC0xNDMxLDYgKzE0MzksOCBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFN0YXRpY1ZhcihSZWdpc3RlcklEKiBkc3Qs
IGNvbnN0IFJlc29sdmVSZQogICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gMDsKIAogICAgIHN3aXRj
aCAobG9jYXRpb24udHlwZSkgeworICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6QXJndW1lbnRzOgor
ICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6SW1tdXRhYmxlQXJndW1lbnRzOgogICAgIGNhc2UgUmVz
b2x2ZVJlc3VsdDo6UmVnaXN0ZXI6CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpJbW11dGFibGVS
ZWdpc3RlcjoKICAgICAgICAgbG9jYWwgPSByZWdpc3RlckZvcihsb2NhdGlvbik7CkBAIC0xNDM4
LDYgKzE0NDgsMTQgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdGF0
aWNWYXIoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmUKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICByZXR1cm4gbW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGxvY2Fs
KTsKIAorICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6QmxvY2s6CisgICAgY2FzZSBSZXNvbHZlUmVz
dWx0OjpJbW11dGFibGVCbG9jazoKKyAgICAgICAgZW1pdE9wY29kZShvcF9nZXRfc2NvcGVkX3Zh
cik7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobG9jYXRpb24uaW5kZXgpOworICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoLWxvY2F0aW9uLmRlcHRoIC0gMSk7CisgICAgICAgIHJldHVybiBkc3Q7
CisKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkxleGljYWw6CiAgICAgY2FzZSBSZXNvbHZlUmVz
dWx0OjpJbW11dGFibGVMZXhpY2FsOgogICAgICAgICBlbWl0T3Bjb2RlKG9wX2dldF9zY29wZWRf
dmFyKTsKQEAgLTE0NzAsMTAgKzE0ODgsMjIgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRHZXRTdGF0aWNWYXIoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmUKIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0U3RhdGljVmFyKGNvbnN0IFJlc29s
dmVSZXN1bHQmIGxvY2F0aW9uLCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKGxv
Y2F0aW9uLnR5cGUpIHsKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkltbXV0YWJsZUFyZ3VtZW50
czoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBjYXNlIFJlc29sdmVSZXN1
bHQ6OkFyZ3VtZW50czoKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlZ2lzdGVyOgogICAgIGNh
c2UgUmVzb2x2ZVJlc3VsdDo6SW1tdXRhYmxlUmVnaXN0ZXI6CiAgICAgICAgIHJldHVybiBtb3Zl
VG9EZXN0aW5hdGlvbklmTmVlZGVkKHJlZ2lzdGVyRm9yKGxvY2F0aW9uKSwgdmFsdWUpOwogCisg
ICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpCbG9jazoKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6Oklt
bXV0YWJsZUJsb2NrOgorICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9zY29wZWRfdmFyKTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGxvY2F0aW9uLmluZGV4KTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKC1sb2NhdGlvbi5kZXB0aCAtIDEpOworICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisK
ICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkxleGljYWw6CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0
OjpJbW11dGFibGVMZXhpY2FsOgogICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9zY29wZWRfdmFy
KTsKQEAgLTE3NzQsMjQgKzE4MDQsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQQogICAgIHJl
dHVybiBlbWl0Q2FsbChvcF9jYWxsLCBkc3QsIGZ1bmMsIGNhbGxBcmd1bWVudHMsIGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3Jl
YXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0
aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbV9jb2RlQmxvY2stPnVz
ZXNBcmd1bWVudHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UncmUgaW4gc3Ry
aWN0IG1vZGUgd2UgdGVhciBvZmYgdGhlIGFyZ3VtZW50cyBvbiBmdW5jdGlvbgotICAgIC8vIGVu
dHJ5LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgaWYgd2UgbmVlZCB0byBjcmVhdGUgdGhl
bQotICAgIC8vIG5vdwotICAgIGlmIChtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsK
LX0KLQogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5
KCkKIHsKICAgICBpZiAobV9oYXNDcmVhdGVkQWN0aXZhdGlvbikKQEAgLTE5NzUsNyArMTk4Nyw3
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaFNjb3BlKFJlZ2lzdGVy
SUQqIHNjb3BlKQogewogICAgIEFTU0VSVChzY29wZS0+aXNUZW1wb3JhcnkoKSk7CiAgICAgQ29u
dHJvbEZsb3dDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5pc0ZpbmFsbHlCbG9jayA9IGZh
bHNlOworICAgIGNvbnRleHQuYmxvY2tUeXBlID0gV2l0aEJsb2NrOwogICAgIG1fc2NvcGVDb250
ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwogICAgIG1fZHluYW1pY1Njb3BlRGVwdGgrKzsKIApA
QCAtMTk4NSw3ICsxOTk3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQ
dXNoU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUpCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UG9wU2NvcGUoKQogewogICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7Ci0g
ICAgQVNTRVJUKCFtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlCbG9jayk7Cisg
ICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmJsb2NrVHlwZSA9PSBXaXRoQmxv
Y2spOwogCiAgICAgZW1pdE9wY29kZShvcF9wb3Bfc2NvcGUpOwogCkBAIC0yMDExLDcgKzIwMjMs
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVidWdIb29rKERlYnVnSG9va0lEIGRl
YnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbgogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVz
aEZpbmFsbHlDb250ZXh0KExhYmVsKiB0YXJnZXQsIFJlZ2lzdGVySUQqIHJldEFkZHJEc3QpCiB7
CiAgICAgQ29udHJvbEZsb3dDb250ZXh0IHNjb3BlOwotICAgIHNjb3BlLmlzRmluYWxseUJsb2Nr
ID0gdHJ1ZTsKKyAgICBzY29wZS5ibG9ja1R5cGUgPSBGaW5hbGx5QmxvY2s7CiAgICAgRmluYWxs
eUNvbnRleHQgY29udGV4dCA9IHsgdGFyZ2V0LCByZXRBZGRyRHN0IH07CiAgICAgc2NvcGUuZmlu
YWxseUNvbnRleHQgPSBjb250ZXh0OwogICAgIG1fc2NvcGVDb250ZXh0U3RhY2suYXBwZW5kKHNj
b3BlKTsKQEAgLTIwMjEsNyArMjAzMyw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hG
aW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0LCBSZWdpc3RlcklEKiByZXRBZGRyRHN0CiB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCgpCiB7CiAgICAgQVNTRVJUKG1f
c2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKLSAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFj
ay5sYXN0KCkuaXNGaW5hbGx5QmxvY2spOworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNr
Lmxhc3QoKS5ibG9ja1R5cGUgPT0gRmluYWxseUJsb2NrKTsKICAgICBBU1NFUlQobV9maW5hbGx5
RGVwdGggPiAwKTsKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICBt
X2ZpbmFsbHlEZXB0aC0tOwpAQCAtMjExMSw3ICsyMTIzLDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4g
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBD
b250cm8KICAgICAgICAgLy8gdG8gYSBmaW5hbGx5IGJsb2NrLgogICAgICAgICBpbnQgbk5vcm1h
bFNjb3BlcyA9IDA7CiAgICAgICAgIHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3BlKSB7Ci0g
ICAgICAgICAgICBpZiAodG9wU2NvcGUtPmlzRmluYWxseUJsb2NrKQorICAgICAgICAgICAgaWYg
KHRvcFNjb3BlLT5ibG9ja1R5cGUgPT0gRmluYWxseUJsb2NrKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgKytuTm9ybWFsU2NvcGVzOwogICAgICAgICAgICAgLS10b3BTY29w
ZTsKQEAgLTIxMzksNyArMjE1MSw3IEBAIFBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0Q29tcGxleEp1bXBTY29wZXMoTGFiZWwqIHRhcmdldCwgQ29udHJvCiAgICAgICAg
ICAgICBlbWl0TGFiZWwobmV4dEluc24uZ2V0KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgd2hp
bGUgKHRvcFNjb3BlID4gYm90dG9tU2NvcGUgJiYgdG9wU2NvcGUtPmlzRmluYWxseUJsb2NrKSB7
CisgICAgICAgIHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3BlICYmIHRvcFNjb3BlLT5ibG9j
a1R5cGUgPT0gRmluYWxseUJsb2NrKSB7CiAgICAgICAgICAgICBlbWl0SnVtcFN1YnJvdXRpbmUo
dG9wU2NvcGUtPmZpbmFsbHlDb250ZXh0LnJldEFkZHJEc3QsIHRvcFNjb3BlLT5maW5hbGx5Q29u
dGV4dC5maW5hbGx5QWRkcik7CiAgICAgICAgICAgICAtLXRvcFNjb3BlOwogICAgICAgICB9CkBA
IC0yMTk5LDkgKzIyMTEsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENh
dGNoKFJlZ2lzdGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogc3RhcgogewogICAgIG1fdXNl
c0V4Y2VwdGlvbnMgPSB0cnVlOwogI2lmIEVOQUJMRShKSVQpCi0gICAgSGFuZGxlckluZm8gaW5m
byA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCwgQ29kZUxvY2F0
aW9uTGFiZWwoKSB9OworICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDAp
LCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVE
ZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCwgQ29kZUxvY2F0aW9u
TGFiZWwoKSB9OwogI2Vsc2UKLSAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+YmluZCgw
LCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1pY1Nj
b3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoIH07CisgICAgSGFuZGxlckluZm8gaW5mbyA9IHsg
c3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
LCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9ibG9ja1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURl
cHRoIH07CiAjZW5kaWYKIAogICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKGlu
Zm8pOwpAQCAtMjIzMywyMCArMjI0NSwzNCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
U3Vicm91dGluZVJldHVybihSZWdpc3RlcklEKiByZXRBZGRyU3JjKQogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyZXRBZGRyU3JjLT5pbmRleCgpKTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQgKnNjb3Bl
VGVtcGxhdGUsIFJlZ2lzdGVySUQqIHZhbHVlKQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFB1c2hCbG9ja1Njb3BlKFJlZ2lzdGVySUQqIGRzdCwgSlNTdGF0aWNTY29wZU9iamVjdCAqc2Nv
cGVUZW1wbGF0ZSwgUmVnaXN0ZXJJRCogdmFsdWUpCiB7Ci0gICAgLy8gRklYTUU6IFRyYWNrIHRo
ZSBzY29wZSBzbyB0aGF0IGZpbmRTY29wZWRQcm9wZXJ0eSBjYW4gRFRSVC4KICAgICBDb250cm9s
Rmxvd0NvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0LmlzRmluYWxseUJsb2NrID0gZmFsc2U7
CisgICAgY29udGV4dC5ibG9ja1R5cGUgPSBTY29wZUJsb2NrOwogICAgIG1fc2NvcGVDb250ZXh0
U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgIG1fZHluYW1pY1Njb3BlRGVwdGgrKzsKKyAgICBt
X3Njb3BlQ2hhaW4uc2V0KCptX3Njb3BlQ2hhaW4tPmdsb2JhbERhdGEsIG1fc2NvcGVDaGFpbi0+
cHVzaChzY29wZVRlbXBsYXRlKSk7CisgICAgbV9ibG9ja1Njb3BlRGVwdGgrKzsKIAorICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiB0ZW1wbCA9IGVtaXRMb2FkKDAsIEpTVmFsdWUoc2NvcGVUZW1wbGF0
ZSkpOwogICAgIGVtaXRPcGNvZGUob3BfcHVzaF9uZXdfc2NvcGUpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29w
ZVRlbXBsYXRlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGVtcGwtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CiB9CiAK
K3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BCbG9ja1Njb3BlKCkKK3sKKyAgICBBU1NF
UlQobV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4
dFN0YWNrLmxhc3QoKS5ibG9ja1R5cGUgPT0gU2NvcGVCbG9jayk7CisgICAgQVNTRVJUKG1fc2Nv
cGVDaGFpbi0+b2JqZWN0LmdldCgpLT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworCisgICAgZW1p
dE9wY29kZShvcF9wb3Bfc2NvcGUpOworCisgICAgbV9zY29wZUNoYWluLnNldCgqbV9zY29wZUNo
YWluLT5nbG9iYWxEYXRhLCBtX3Njb3BlQ2hhaW4tPnBvcCgpKTsKKyAgICBtX2Jsb2NrU2NvcGVE
ZXB0aC0tOworICAgIG1fc2NvcGVDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCiB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpiZWdpblN3aXRjaChSZWdpc3RlcklEKiBzY3J1dGluZWVSZWdp
c3RlciwgU3dpdGNoSW5mbzo6U3dpdGNoVHlwZSB0eXBlKQogewogICAgIFN3aXRjaEluZm8gaW5m
byA9IHsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCB0eXBlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggNjdi
MzExNjQyYjZhMDJkYjAxZDA2ZDRhZGIxMGIyYzc3MzFkYzU4My4uYmU4NzFlZDU2ZjRmNWFlNmZh
OTRjYzNmZThhYjliODA5NmYyMzU1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNDksNiArNDksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIElkZW50aWZpZXI7CiAgICAgY2xhc3MgU2NvcGVD
aGFpbk5vZGU7CisgICAgY2xhc3MgSlNTdGF0aWNTY29wZU9iamVjdDsKIAogICAgIGNsYXNzIENh
bGxBcmd1bWVudHMgewogICAgIHB1YmxpYzoKQEAgLTc0LDggKzc1LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBSZWdpc3RlcklEKiByZXRBZGRyRHN0OwogICAgIH07CiAKKyAgICBlbnVt
IEJsb2NrVHlwZSB7IFdpdGhCbG9jaywgRmluYWxseUJsb2NrLCBTY29wZUJsb2NrIH07CisKICAg
ICBzdHJ1Y3QgQ29udHJvbEZsb3dDb250ZXh0IHsKLSAgICAgICAgYm9vbCBpc0ZpbmFsbHlCbG9j
azsKKyAgICAgICAgZW51bSBCbG9ja1R5cGUgYmxvY2tUeXBlOwogICAgICAgICBGaW5hbGx5Q29u
dGV4dCBmaW5hbGx5Q29udGV4dDsKICAgICB9OwogCkBAIC0xMDAsMjIgKzEwMywzNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIC8vIGtub3duIGluZGV4LgogICAgICAgICAgICAgSW5k
ZXhlZEZsYWcgPSAweDgsCiAgICAgICAgICAgICAvLyBTa2lwIHNvbWUgbnVtYmVyIG9mIG9iamVj
dHMgaW4gdGhlIHNjb3BlIGNoYWluLCBnaXZlbiBieSAiZGVwdGgiLgotICAgICAgICAgICAgU2Nv
cGVGbGFnID0gMHgxMCwKKyAgICAgICAgICAgIEJsb2NrRmxhZyA9IDB4MTAsCisgICAgICAgICAg
ICAvLyBTa2lwIHNvbWUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNjb3BlIGNoYWluLCBnaXZl
biBieSAiZGVwdGgiLgorICAgICAgICAgICAgU2NvcGVGbGFnID0gMHgyMCwKICAgICAgICAgICAg
IC8vIFRoZSByZXNvbHZlZCBiaW5kaW5nIGlzIGltbXV0YWJsZS4KLSAgICAgICAgICAgIEltbXV0
YWJsZUZsYWcgPSAweDIwLAorICAgICAgICAgICAgSW1tdXRhYmxlRmxhZyA9IDB4NDAsCiAgICAg
ICAgICAgICAvLyBUaGUgYmFzZSBvYmplY3QgaXMgdGhlIGdsb2JhbCBvYmplY3QuCi0gICAgICAg
ICAgICBHbG9iYWxGbGFnID0gMHg0MAorICAgICAgICAgICAgR2xvYmFsRmxhZyA9IDB4ODAsCisg
ICAgICAgICAgICAvLyBUaGUgaWRlbnRpZmllciBpcyBhY3R1YWxseSB0aGUgYXJndW1lbnRzIG9i
amVjdC4KKyAgICAgICAgICAgIEFyZ3VtZW50c0ZsYWcgPSAweDEwMAogICAgICAgICB9OwogICAg
ICAgICBlbnVtIFR5cGUgewogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IGlzIGxvY2FsLCBh
bmQgc3RvcmVkIGluIGEgcmVnaXN0ZXIuCiAgICAgICAgICAgICBSZWdpc3RlciA9IFJlZ2lzdGVy
RmxhZyB8IFN0YXRpY0ZsYWcsCiAgICAgICAgICAgICAvLyBBIHJlYWQtb25seSBsb2NhbCwgY3Jl
YXRlZCBieSAiY29uc3QiLgogICAgICAgICAgICAgSW1tdXRhYmxlUmVnaXN0ZXIgPSBSZWdpc3Rl
ckZsYWcgfCBJbW11dGFibGVGbGFnIHwgU3RhdGljRmxhZywKKyAgICAgICAgICAgIC8vIFRoZSAi
YXJndW1lbnRzIiBvYmplY3QuCisgICAgICAgICAgICBBcmd1bWVudHMgPSBBcmd1bWVudHNGbGFn
IHwgUmVnaXN0ZXJGbGFnIHwgU3RhdGljRmxhZywKKyAgICAgICAgICAgIEltbXV0YWJsZUFyZ3Vt
ZW50cyA9IEFyZ3VtZW50c0ZsYWcgfCBSZWdpc3RlckZsYWcgfCBJbW11dGFibGVGbGFnIHwgU3Rh
dGljRmxhZywKICAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBpcyBzdGF0aWNhbGx5IHNjb3Bl
ZCBmcmVlIHZhcmlhYmxlLiBJdHMgY29vcmRpbmF0ZXMKICAgICAgICAgICAgIC8vIGFyZSBpbiAi
aW5kZXgiIGFuZCAiZGVwdGgiLgogICAgICAgICAgICAgTGV4aWNhbCA9IEluZGV4ZWRGbGFnIHwg
U2NvcGVGbGFnIHwgU3RhdGljRmxhZywKICAgICAgICAgICAgIC8vIEEgcmVhZC1vbmx5IExleGlj
YWwsIGNyZWF0ZWQgYnkgImNvbnN0Ii4KICAgICAgICAgICAgIEltbXV0YWJsZUxleGljYWwgPSBJ
bmRleGVkRmxhZyB8IFNjb3BlRmxhZyB8IEltbXV0YWJsZUZsYWcgfCBTdGF0aWNGbGFnLAorICAg
ICAgICAgICAgLy8gVGhlIHByb3BlcnR5IGlzIGJsb2NrLXNjb3BlZCBmcmVlIHZhcmlhYmxlLiBJ
dHMgY29vcmRpbmF0ZXMKKyAgICAgICAgICAgIC8vIGFyZSBpbiAiaW5kZXgiIGFuZCAiZGVwdGgi
LgorICAgICAgICAgICAgQmxvY2sgPSBCbG9ja0ZsYWcgfCBJbmRleGVkRmxhZyB8IFNjb3BlRmxh
ZyB8IFN0YXRpY0ZsYWcsCisgICAgICAgICAgICAvLyBBIHJlYWQtb25seSBCbG9jaywgY3JlYXRl
ZCBieSBFUzYgImNvbnN0Ii4KKyAgICAgICAgICAgIEltbXV0YWJsZUJsb2NrID0gQmxvY2tGbGFn
IHwgSW5kZXhlZEZsYWcgfCBTY29wZUZsYWcgfCBJbW11dGFibGVGbGFnIHwgU3RhdGljRmxhZywK
ICAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSB3YXMgbm90IGJvdW5kIGxleGljYWxseSwgc28g
YXQgcnVudGltZSB3ZSBzaG91bGQKICAgICAgICAgICAgIC8vIGxvb2sgZGlyZWN0bHkgaW4gdGhl
IGdsb2JhbCBvYmplY3QuCiAgICAgICAgICAgICBHbG9iYWwgPSBHbG9iYWxGbGFnLApAQCAtMTU0
LDEzICsxNjksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBpc1JlZ2lzdGVy
KCkgY29uc3QgeyByZXR1cm4gdHlwZSAmIFJlZ2lzdGVyRmxhZzsgfQogICAgICAgICBib29sIGlz
RHluYW1pYygpIGNvbnN0IHsgcmV0dXJuIHR5cGUgJiBEeW5hbWljRmxhZzsgfQorICAgICAgICBi
b29sIGlzQmxvY2soKSBjb25zdCB7IHJldHVybiB0eXBlICYgQmxvY2tGbGFnOyB9CiAgICAgICAg
IGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiB0eXBlICYgU3RhdGljRmxhZzsgfQogICAg
ICAgICBib29sIGlzSW1tdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSAmIEltbXV0YWJsZUZs
YWc7IH0KICAgICAgICAgYm9vbCBpc0dsb2JhbCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUgJiBHbG9i
YWxGbGFnOyB9CisgICAgICAgIGJvb2wgaXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiB0eXBl
ICYgQXJndW1lbnRzRmxhZzsgfQogCiAgICAgICAgIHVuc2lnbmVkIHR5cGU7CiAgICAgICAgIGlu
dCBpbmRleDsgLy8gSW5kZXggaW4gc2NvcGUsIGlmIEluZGV4ZWRGbGFnIGlzIHNldCwgb3IgaW4g
cmVnaXN0ZXJzLCBpZiBSZWdpc3RlckZsYWcgaXMgc2V0LgotICAgICAgICBzaXplX3QgZGVwdGg7
IC8vIERlcHRoIGluIHNjb3BlIGNoYWluLCBpZiBTY29wZUZsYWcgaXMgc2V0CisgICAgICAgIGlu
dCBkZXB0aDsgLy8gRGVwdGggaW4gc2NvcGUgY2hhaW4sIGlmIFNjb3BlRmxhZyBpcyBzZXQKICAg
ICAgICAgSlNPYmplY3QqIGdsb2JhbE9iamVjdDsgLy8gSWYgR2xvYmFsRmxhZyBpcyBzZXQuCiAg
ICAgfTsKIApAQCAtMjA3LDkgKzIyNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBS
ZXR1cm5zIHRoZSByZWdpc3RlciBzdG9yaW5nICJ0aGlzIgogICAgICAgICBSZWdpc3RlcklEKiB0
aGlzUmVnaXN0ZXIoKSB7IHJldHVybiAmbV90aGlzUmVnaXN0ZXI7IH0KIAotICAgICAgICBib29s
IGlzTG9jYWwoY29uc3QgSWRlbnRpZmllciYpOwotICAgICAgICBib29sIGlzTG9jYWxDb25zdGFu
dChjb25zdCBJZGVudGlmaWVyJik7Ci0KICAgICAgICAgLy8gUmV0dXJucyB0aGUgbmV4dCBhdmFp
bGFibGUgdGVtcG9yYXJ5IHJlZ2lzdGVyLiBSZWdpc3RlcnMgcmV0dXJuZWQgYnkKICAgICAgICAg
Ly8gbmV3VGVtcG9yYXJ5IHJlcXVpcmUgYSBtb2RpZmllZCBmb3JtIG9mIHJlZmVyZW5jZSBjb3Vu
dGluZzogYW55CiAgICAgICAgIC8vIHJlZ2lzdGVyIHdpdGggYSByZWZjb3VudCBvZiAwIGlzIGNv
bnNpZGVyZWQgImF2YWlsYWJsZSIsIG1lYW5pbmcgdGhhdApAQCAtNDQyLDE0ICs0NTYsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihj
b25zdCBVU3RyaW5nJiBtZXNzYWdlKTsKIAotICAgICAgICB2b2lkIGVtaXRQdXNoTmV3U2NvcGUo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEICpzY29wZVRlbXBsYXRlLCBSZWdpc3RlcklEKiB2
YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFB1c2hCbG9ja1Njb3BlKFJlZ2lzdGVySUQqIGRzdCwg
SlNTdGF0aWNTY29wZU9iamVjdCAqc2NvcGVUZW1wbGF0ZSwgUmVnaXN0ZXJJRCogdmFsdWUpOwor
ICAgICAgICB2b2lkIGVtaXRQb3BCbG9ja1Njb3BlKCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdFB1c2hTY29wZShSZWdpc3RlcklEKiBzY29wZSk7CiAgICAgICAgIHZvaWQgZW1pdFBvcFNj
b3BlKCk7CiAKICAgICAgICAgdm9pZCBlbWl0RGVidWdIb29rKERlYnVnSG9va0lELCBpbnQgZmly
c3RMaW5lLCBpbnQgbGFzdExpbmUpOwogCi0gICAgICAgIGludCBzY29wZURlcHRoKCkgeyByZXR1
cm4gbV9keW5hbWljU2NvcGVEZXB0aCArIG1fZmluYWxseURlcHRoOyB9CisgICAgICAgIGludCBz
Y29wZURlcHRoKCkgeyByZXR1cm4gbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURl
cHRoICsgbV9maW5hbGx5RGVwdGg7IH0KICAgICAgICAgYm9vbCBoYXNGaW5hbGlzZXIoKSB7IHJl
dHVybiBtX2ZpbmFsbHlEZXB0aCAhPSAwOyB9CiAKICAgICAgICAgdm9pZCBwdXNoRmluYWxseUNv
bnRleHQoTGFiZWwqIHRhcmdldCwgUmVnaXN0ZXJJRCogcmV0dXJuQWRkckRzdCk7CkBAIC01NjIs
MzQgKzU3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+
JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7IH0K
ICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFi
bGU7IH0KIAotICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAobV9jb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuT3B0aW1pemVOb25Mb2NhbHMoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobV9keW5hbWljU2NvcGVEZXB0aCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChtX2NvZGVUeXBlID09IEV2YWxD
b2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1f
Y29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJsb2NrLT51c2VzRXZhbCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVl
cEV4Y2VwdGlvbigpOwogCi0gICAgICAgIHZvaWQgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3Nhcnko
KTsKICAgICAgICAgdm9pZCBjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCopOwog
CkBAIC02MTcsNiArNjA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBtX2xhc3RWYXI7CiAgICAgICAgIGludCBtX2ZpbmFsbHlEZXB0aDsKICAgICAgICAg
aW50IG1fZHluYW1pY1Njb3BlRGVwdGg7CisgICAgICAgIGludCBtX2Jsb2NrU2NvcGVEZXB0aDsK
ICAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7CiAgICAgICAgIENvZGVUeXBlIG1fY29kZVR5
cGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAppbmRleCA2YTc0YWQ3Zjc0YmJkYjNlNzVjNWNhNzViZDQxODM5MTBlYTEzNTM0
Li4wMjljNjgwZjQ5MWRlMGRjNGRhMjIzMmJmZDFjNmM1NTA2NWUyNzMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0x
NDIsNyArMTQyLDggQEAgUmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QKIAogYm9vbCBSZXNvbHZlTm9k
ZTo6aXNQdXJlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5pc0xvY2FsKG1faWRlbnQpOworICAgIFJlc29sdmVSZXN1bHQgbG9jYXRp
b24gPSBnZW5lcmF0b3IucmVzb2x2ZShtX2lkZW50KTsKKyAgICByZXR1cm4gbG9jYXRpb24uaXNT
dGF0aWMoKTsKIH0KIAogUmVnaXN0ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC03NDAsNyArNzQx
LDcgQEAgUmVnaXN0ZXJJRCogUHJlZml4UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3QKIHsKICAgICBSZXNvbHZlUmVzdWx0IGxvY2F0
aW9uID0gZ2VuZXJhdG9yLnJlc29sdmUobV9pZGVudCk7CiAgICAgaWYgKFJlZ2lzdGVySUQqIGxv
Y2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yKGxvY2F0aW9uKSkgewotICAgICAgICBpZiAoZ2Vu
ZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkgeworICAgICAgICBpZiAobG9jYXRpb24u
aXNJbW11dGFibGUoKSkgewogICAgICAgICAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3Jl
ZFJlc3VsdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCksIChtX29wZXJhdG9yID09IE9wUGx1c1BsdXMpID8gMS4wIDogLTEuMCk7CkBA
IC0xOTI1LDExICsxOTI2LDEzIEBAIFJlZ2lzdGVySUQqIFRyeU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZVRlbXBsYXRlID0g
SlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGdlbmVyYXRvci5zY29wZUNoYWluKCktPmdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKICAgICAgICAgICAgIHNjb3BlVGVtcGxhdGUtPmFkZFZh
cmlhYmxlKG1fZXhjZXB0aW9uSWRlbnQsIERvbnREZWxldGUpOwotICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHRlbXBsID0gZ2VuZXJhdG9yLmVtaXRMb2FkKDAsIEpTVmFsdWUoc2NvcGVU
ZW1wbGF0ZSkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXNoTmV3U2NvcGUoZXhjZXB0
aW9uUmVnaXN0ZXIuZ2V0KCksIHRlbXBsLmdldCgpLCBleGNlcHRpb25SZWdpc3Rlci5nZXQoKSk7
CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1c2hCbG9ja1Njb3BlKGV4Y2VwdGlvblJlZ2lz
dGVyLmdldCgpLCBzY29wZVRlbXBsYXRlLCBleGNlcHRpb25SZWdpc3Rlci5nZXQoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9jYXRjaEJsb2NrKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZSgpOworICAgICAgICBpZiAobV9jYXRjaEhhc0V2
YWwpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFBvcFNjb3BlKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UG9wQmxvY2tTY29wZSgpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKGNhdGNoRW5kTGFiZWwuZ2V0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAppbmRleCA3MzY2YzFjNDBkMmNjYTIwN2M4NjVlYzU1MDZjMmE1
YjdkMTQwMDkwLi5kY2RlMDM4MzEzNGYzMGIxZmQ2YjY3MGZjYWQwMTBiMWIxYWIwNTI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNjM1LDcgKzYzNSw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgcmV0dXJuIG9wID09IEdldFNjb3BlQ2hhaW47CiAgICAgfQogICAgIAot
ICAgIHVuc2lnbmVkIHNjb3BlQ2hhaW5EZXB0aCgpCisgICAgaW50IHNjb3BlQ2hhaW5EZXB0aCgp
CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzU2NvcGVDaGFpbkRlcHRoKCkpOwogICAgICAgICBy
ZXR1cm4gbV9vcEluZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb3BhZ2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9y
LmNwcAppbmRleCA2NWFjNGU2MDgyNzE5NTY3M2QyOGMzYmNhM2VlOTllMGY4MmFiODkzLi45N2Fh
NTk5M2U4MTYwZGRjZTNmOWU5NDlhZTJhMTllZWQ0YjlmMDI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKQEAgLTE0MDgsOCArMTQwOCwxMyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXgg
Z2V0U2NvcGVDaGFpbkxvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBkZXB0aCkKKyAgICBOb2RlSW5k
ZXggZ2V0U2NvcGVDaGFpbkxvYWRFbGltaW5hdGlvbihpbnQgZGVwdGgpCiAgICAgeworICAgICAg
ICBpZiAoZGVwdGggPCAwKQorICAgICAgICAgICAgLy8gRklYTUU6IHByb3BhZ2F0ZSB1bnRpbCB0
byB0aGUgbmV4dCBvcF9wdXNoX25ld19zY29wZSwKKyAgICAgICAgICAgIC8vIG9wX3B1c2hfc2Nv
cGUsIG9yIG9wX3BvcF9zY29wZS4KKyAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisKICAgICAg
ICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKCk7CiAgICAgICAgIGZv
ciAoTm9kZUluZGV4IGluZGV4ID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGluZGV4LS0gPiBzdGFy
dDspIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmlu
ZGV4IDNiM2EyYTY5ODYzYjJjMDdkYzA4MzM1NGFiMDZlZjM1NGI5Yjc3MzcuLmQ1ZWY5NzcyMTE3
NzQxZGQ3MDY3YjhhMzlhNmEwMGNiMTU3NDdlY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMzA4NSwxNiArMzA4
NSwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgYm9vbCBjaGVja1RvcExldmVsID0gbV9qaXQuY29kZUJsb2NrKCktPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlICYmIG1faml0LmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7
CiAgICAgICAgIGludCBza2lwID0gbm9kZS5zY29wZUNoYWluRGVwdGgoKTsKLSAgICAgICAgQVNT
RVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCAm
JiBza2lwLS0pIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RD
cmVhdGVkOwotICAgICAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCi0gICAgICAgICAgICAgICAg
YWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpa
ZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG1faml0LmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpKTsKLSAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGFj
dGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsoJm1faml0KTsKLSAgICAgICAgfQotICAgICAgICB3aGls
ZSAoc2tpcC0tKQotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZXN1
bHRHUFIpOworICAgICAgICBpZiAoc2tpcCA8IDApIHsKKyAgICAgICAgICAgIC8vIExvY2FsIGJs
b2NrLXNjb3BlZCB2YXIuCisgICAgICAgICAgICB3aGlsZSAoKytza2lwKQorICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKKyAgICAg
ICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgeworICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOworICAgICAgICAgICAgICAgIGlm
IChjaGVja1RvcExldmVsKQorICAgICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRl
ZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9qaXQuY29kZUJsb2NrKCkt
PmFjdGl2YXRpb25SZWdpc3RlcigpKSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFp
bk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBhY3RpdmF0aW9uTm90
Q3JlYXRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAo
c2tpcC0tKQorICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9k
ZSwgb2JqZWN0KSksIHJlc3VsdEdQUik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDczNDk3Mzc4NmMwZjJhYzFjMGU5MTBm
ODcxNDVhNDRlNGJhOGIyNjEuLjNhNjk0MzM0NjZiOTdlNTEwZmUxMjRkNjk5YjNhN2Y3ZTY5NTY4
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcApAQCAtMzA4NywxNiArMzA4NywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihSZWdpc3RlckZpbGU6OlNjb3BlQ2hh
aW4pKSwgcmVzdWx0R1BSKTsKICAgICAgICAgYm9vbCBjaGVja1RvcExldmVsID0gbV9qaXQuY29k
ZUJsb2NrKCktPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG1faml0LmNvZGVCbG9jaygp
LT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CiAgICAgICAgIGludCBza2lwID0gbm9kZS5zY29wZUNo
YWluRGVwdGgoKTsKLSAgICAgICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAg
ICAgICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOwotICAgICAgICAgICAgaWYgKGNoZWNrVG9w
TGV2ZWwpCi0gICAgICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBtX2ppdC5icmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1faml0LmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVn
aXN0ZXIoKSkpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsoJm1faml0KTsK
LSAgICAgICAgfQotICAgICAgICB3aGlsZSAoc2tpcC0tKQotICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihTY29w
ZUNoYWluTm9kZSwgbmV4dCkpLCByZXN1bHRHUFIpOworICAgICAgICBpZiAoc2tpcCA8IDApIHsK
KyAgICAgICAgICAgIC8vIExvY2FsIGJsb2NrLXNjb3BlZCB2YXIuCisgICAgICAgICAgICB3aGls
ZSAoKytza2lwKQorICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChza2lwIHx8
ICFjaGVja1RvcExldmVsKTsKKyAgICAgICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAt
LSkgeworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RDcmVh
dGVkOworICAgICAgICAgICAgICAgIGlmIChjaGVja1RvcExldmVsKQorICAgICAgICAgICAgICAg
ICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGls
ZXI6Olplcm8sIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4obV9qaXQuY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKSkpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB3aGlsZSAoc2tpcC0tKQorICAgICAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2Nv
cGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVD
VF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgb2JqZWN0KSksIHJlc3VsdEdQUik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4
IGU5OGExMmM3Mjg2NWUzNjhlMDM0ZTg4ODkzOTMxZDliZDZlNjdmOTguLjEwYzg1ZmQ3M2MyNzJk
NWQ2YzAzNjNiY2I2Mjk1MGY3Njg0YjM4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMjY5MywxNSArMjY5MywyMyBAQCBK
U1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcsIFJl
Z2lzdGVyRmlsZSogcmVnaXN0ZXJGaQogICAgICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0g
c2NvcGVDaGFpbi0+ZW5kKCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVu
ZCk7CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7
Ci0gICAgICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7Ci0gICAgICAg
IEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAgICAgICAgaWYgKGNoZWNrVG9wTGV2
ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+
YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSkKKyAgICAgICAgaWYgKHNraXAgPCAwKSB7
CisgICAgICAgICAgICAvLyBCbG9jay1zY29wZWQgdmFyLgorICAgICAgICAgICAgd2hpbGUgKCsr
c2tpcCkgewogICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB3aGls
ZSAoc2tpcC0tKSB7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZW5k
LCBpdGVyICE9IGVuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOworICAgICAgICAgICAg
QVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOworICAgICAgICAgICAgaWYgKGNoZWNrVG9w
TGV2ZWwgJiYgc2tpcC0tKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb2Rl
QmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpCisgICAgICAgICAgICAgICAg
ICAgICsraXRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChza2lwLS0pIHsK
KyAgICAgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChl
bmQsIGl0ZXIgIT0gZW5kKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBBU1NF
UlQoKCppdGVyKS0+aXNWYXJpYWJsZU9iamVjdCgpKTsKICAgICAgICAgSlNWYXJpYWJsZU9iamVj
dCogc2NvcGUgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oaXRlci0+Z2V0KCkpOwpA
QCAtMjcyMywxNyArMjczMSwyNCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpb25GbGFnIGZsYWcsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaQogICAgICAgICBT
Y29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CiAgICAgICAgIEFTU0VS
VChjb2RlQmxvY2sgPT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7Ci0gICAgICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IGNv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgY29kZUJsb2NrLT5uZWVkc0Z1
bGxTY29wZUNoYWluKCk7Ci0gICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsK
LSAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgICAgICBpZiAo
Y2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSkK
KyAgICAgICAgaWYgKHNraXAgPCAwKSB7CisgICAgICAgICAgICAvLyBCbG9jay1zY29wZWQgdmFy
LgorICAgICAgICAgICAgd2hpbGUgKCsrc2tpcCkgewogICAgICAgICAgICAgICAgICsraXRlcjsK
KyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCBjaGVja1RvcExldmVs
ID0gY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBjb2RlQmxvY2stPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4oKTsKKyAgICAgICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1Rv
cExldmVsKTsKKyAgICAgICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgeworICAg
ICAgICAgICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0
ZXIoKSkuanNWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB3aGlsZSAoc2tpcC0tKSB7CisgICAgICAgICAgICAgICAgKytpdGVy
OworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKHNraXAtLSkgewotICAgICAgICAg
ICAgKytpdGVyOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChlbmQsIGl0ZXIgIT0gZW5kKTsK
LSAgICAgICAgfQotCiAgICAgICAgIEFTU0VSVCgoKml0ZXIpLT5pc1ZhcmlhYmxlT2JqZWN0KCkp
OwogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBzY29wZSA9IHN0YXRpY19jYXN0PEpTVmFyaWFi
bGVPYmplY3QqPihpdGVyLT5nZXQoKSk7CiAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPnIodmFs
dWUpLmpzVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCmluZGV4IDQ4OTUxZTg3OTM0YjA0YzAyNDVmMzA4MWJhODM4OTM1OTRlMjI4
NzcuLmZlNGViNWY4OTIzOTRhYzM1OWFiMWNmNjQyM2RjYzkzOTJiOTIxZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC05NzksMTcg
Kzk3OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVkX3ZhcihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGludCBza2lwID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKIAogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVy
RmlsZTo6U2NvcGVDaGFpbiwgcmVnVDApOwotICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IG1fY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+bmVlZHNG
dWxsU2NvcGVDaGFpbigpOwotICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAg
ICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgSnVtcCBhY3RpdmF0aW9u
Tm90Q3JlYXRlZDsKLSAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCi0gICAgICAgICAgICBhY3Rp
dmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgYWRkcmVzc0ZvcihtX2NvZGVC
bG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVnVDApOwotICAg
ICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworCisgICAgaWYgKHNraXAgPCAw
KSB7CisgICAgICAgIC8vIEJsb2NrLXNjb3BlZCB2YXIuCisgICAgICAgIHdoaWxlICgrK3NraXAp
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihTY29w
ZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYm9vbCBj
aGVja1RvcExldmVsID0gbV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CisgICAgICAgIEFTU0VSVChza2lw
IHx8ICFjaGVja1RvcExldmVsKTsKKyAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0t
KSB7CisgICAgICAgICAgICBKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOworICAgICAgICAgICAg
aWYgKGNoZWNrVG9wTGV2ZWwpCisgICAgICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQg
PSBicmFuY2hUZXN0UHRyKFplcm8sIGFkZHJlc3NGb3IobV9jb2RlQmxvY2stPmFjdGl2YXRpb25S
ZWdpc3RlcigpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9P
RkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMCk7CisgICAgICAgICAgICBhY3Rp
dmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChz
a2lwLS0pCisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRP
RihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMCk7CiAgICAgfQotICAgIHdoaWxlIChza2lw
LS0pCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKFNjb3Bl
Q2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QwKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpKSwgcmVnVDApOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMo
KSksIHJlZ1QwKTsKQEAgLTEwMDUsMjEgKzEwMTIsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3Njb3BlZF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQsIHJlZ1QwKTsK
IAogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVD
aGFpbiwgcmVnVDEpOwotICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IG1fY29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFp
bigpOwotICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAgICBpZiAoY2hlY2tU
b3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZDsK
LSAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCi0gICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3Jl
YXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgYWRkcmVzc0ZvcihtX2NvZGVCbG9jay0+YWN0aXZh
dGlvblJlZ2lzdGVyKCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1Rf
T0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVnVDEpOwotICAgICAgICBhY3RpdmF0
aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworICAgIGlmIChza2lwIDwgMCkgeworICAgICAgICAv
LyBCbG9jay1zY29wZWQgdmFyLgorICAgICAgICB3aGlsZSAoKytza2lwKQorICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5l
eHQpKSwgcmVnVDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9
IG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+
bmVlZHNGdWxsU2NvcGVDaGFpbigpOworICAgICAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BM
ZXZlbCk7CisgICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgeworICAgICAgICAg
ICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZDsKKyAgICAgICAgICAgIGlmIChjaGVja1RvcExl
dmVsKQorICAgICAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoVGVzdFB0
cihaZXJvLCBhZGRyZXNzRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVD
aGFpbk5vZGUsIG5leHQpKSwgcmVnVDEpOworICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0
ZWQubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoc2tpcC0tKQorICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5v
ZGUsIG5leHQpKSwgcmVnVDEpOwogICAgIH0KLSAgICB3aGlsZSAoc2tpcC0tKQotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4
dCkpLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMSk7CiAKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgb2JqZWN0KSksIHJlZ1QxKTsK
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QxLCByZWdUMCwgcmVnVDIsIHJlZ1QzLCBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7Ci0KICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJz
KCkpLCByZWdUMSk7CiAgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3MocmVnVDEsIGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApp
bmRleCBiNzNkN2FiNzUxNjIyMTVhMzNkNzM1Y2VlOTdmOTdiYTNkN2ZiMmI1Li45ZTQ2OTc2NDcx
Mzk4MTNmNjI5N2Q4YzExMDUyMTg4NmE5MDQ5YzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTEwMjcsMTcgKzEw
MjcsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlZF92YXIoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CiAKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZp
bGU6OlNjb3BlQ2hhaW4sIHJlZ1QyKTsKLSAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBtX2NvZGVC
bG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPm5lZWRzRnVs
bFNjb3BlQ2hhaW4oKTsKLSAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BMZXZlbCk7Ci0gICAg
aWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgIEp1bXAgYWN0aXZhdGlvbk5v
dENyZWF0ZWQ7Ci0gICAgICAgIGlmIChjaGVja1RvcExldmVsKQotICAgICAgICAgICAgYWN0aXZh
dGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwgdGFnRm9yKG1fY29kZUJsb2NrLT5hY3Rp
dmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hh
aW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKLSAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQubGlu
ayh0aGlzKTsKKyAgICBpZiAoc2tpcCA8IDApIHsKKyAgICAgICAgLy8gQmxvY2stc2NvcGVkIHZh
ci4KKyAgICAgICAgd2hpbGUgKCsrc2tpcCkKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBtX2NvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hh
aW4oKTsKKyAgICAgICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOworICAgICAgICBp
ZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKKyAgICAgICAgICAgIEp1bXAgYWN0aXZhdGlv
bk5vdENyZWF0ZWQ7CisgICAgICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKKyAgICAgICAgICAg
ICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaDMyKEVxdWFsLCB0YWdGb3IobV9jb2Rl
QmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKKyAgICAgICAgICAgIGFjdGl2
YXRpb25Ob3RDcmVhdGVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHNr
aXAtLSkKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9G
KFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKICAgICB9Ci0gICAgd2hpbGUgKHNraXAt
LSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVD
aGFpbk5vZGUsIG5leHQpKSwgcmVnVDIpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBP
QkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMik7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygp
KSwgcmVnVDIpOwpAQCAtMTA1NywxOSArMTA2MywyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2NvcGVkX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRMb2Fk
KHZhbHVlLCByZWdUMSwgcmVnVDApOwogCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCByZWdUMik7Ci0gICAgYm9vbCBjaGVja1RvcExl
dmVsID0gbV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7Ci0gICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9w
TGV2ZWwpOwotICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgewotICAgICAgICBKdW1w
IGFjdGl2YXRpb25Ob3RDcmVhdGVkOwotICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKLSAgICAg
ICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoMzIoRXF1YWwsIHRhZ0ZvcihtX2Nv
ZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZT
RVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMik7Ci0gICAgICAgIGFjdGl2YXRpb25O
b3RDcmVhdGVkLmxpbmsodGhpcyk7CisgICAgaWYgKHNraXAgPCAwKSB7CisgICAgICAgIC8vIEJs
b2NrLXNjb3BlZCB2YXIuCisgICAgICAgIHdoaWxlICgrK3NraXApCisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkp
LCByZWdUMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYm9vbCBjaGVja1RvcExldmVsID0gbV9j
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJsb2NrLT5uZWVk
c0Z1bGxTY29wZUNoYWluKCk7CisgICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVs
KTsKKyAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7CisgICAgICAgICAgICBK
dW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOworICAgICAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwp
CisgICAgICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwg
dGFnRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMik7CisgICAg
ICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHdoaWxlIChza2lwLS0pCisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9C
SkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMik7CiAgICAgfQotICAg
IHdoaWxlIChza2lwLS0pCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgb2JqZWN0KSksIHJlZ1Qy
KTsKIAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hh
aW5Ob2RlLCBvYmplY3QpKSwgcmVnVDIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNW
YXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlZ1QzKTsKICAgICBlbWl0U3Rv
cmUoaW5kZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDMpOwogICAgIGVtaXRXcml0ZUJhcnJpZXIocmVn
VDIsIHJlZ1QxLCByZWdUMCwgcmVnVDEsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFy
cmllckZvclZhcmlhYmxlQWNjZXNzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132634</attachid>
            <date>2012-03-19 12:53:37 -0700</date>
            <delta_ts>2012-03-20 04:21:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20120319205335.patch</filename>
            <type>text/plain</type>
            <size>130077</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
N2QwY2M2N2NlNWNmOGIwM2M1ODVhYjZlMDRjM2U5NjNiYzk2NjYyLi42ZDMwYjdlMGNmOTAyYmMw
ZDZlZTBhMmYwNzhhOTVmMWFjYTA0MzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTggQEAKKzIwMTEtMDMtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIE9wdGltaXplIGFjY2VzcyB0byBibG9jay1zY29wZWQgbG9jYWwgdmFyaWFibGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcwOAor
CisgICAgICAgIFRoaXMgY29tbWl0IGNoYW5nZXMgdGhlIGJ5dGVjb21waWxlciB0byB0cmFjayBi
bG9jayBzY29wZSBvYmplY3RzLAorICAgICAgICBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUgcmVzb2x2ZWQKKyAgICAgICAgYXQgY29tcGls
ZS10aW1lIHRvIHJlZ2lzdGVycy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBpcyB0bwor
ICAgICAgICByZS11c2UgSlNTdGF0aWNTY29wZSwgYWRkaW5nIGxhenkgdGVhci1vZmYgYW5kIHRo
ZSBhYmlsaXR5IHRvIGJpbmQKKyAgICAgICAgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KKworICAg
ICAgICBDdXJyZW50bHksIGluIEVTNSwgb25seSBjYXRjaCBibG9ja3MgZnVuY3Rpb24gYXMgYmxv
Y2sgc2NvcGVzLCBmb3IKKyAgICAgICAgdGhlaXIgZXhjZXB0aW9uIGlkZW50aWZpZXIuICAoTmFt
ZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYWxzbworICAgICAgICBpbnRyb2R1Y2UgYSBraW5kIG9m
IGJsb2NrIHNjb3BlLCBidXQgc2luY2UgdGhleSBhcmUgZXhwcmVzc2lvbnMKKyAgICAgICAgYW5k
IG5vdCBzdGF0ZW1lbnRzIHRoZSBjb21waWxlciBpcyBub3QgYXMgaW52b2x2ZWQuKQorCisgICAg
ICAgIEdpdmVuIHRoYXQgY2F0Y2ggYmxvY2tzIGFyZSBub3QgdmVyeSBjb21tb24gaW4gSlMsIGFu
ZCB0aGV5IGNhbgorICAgICAgICBvbmx5IGJpbmQgb25lIHZhcmlhYmxlLCB0aGlzIHBhdGNoIGlz
IG1vcmUgYSBwcm9vZiBvZiBjb3JyZWN0bmVzcworICAgICAgICBhbmQgYSBiYXNlIGZvciBhIHN1
YnNlcXVlbnQgYmxvY2sgc2NvcGluZyBwYXRjaCB0aGFuIGEgZ2VuZXJhbAorICAgICAgICBvcHRp
bWl6YXRpb24uICBBcyBzdWNoLCBpbiBhbnRpY2lwYXRpb24gb2YgRVM2IGJsb2NrLXNjb3BlZAor
ICAgICAgICBsb2NhbHMsIHRoaXMgcGF0Y2ggYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHJlYWQtIGFu
ZCB3cml0ZS1iYXJyaWVycworICAgICAgICBvbiBibG9jay1zY29wZWQgbG9jYWxzLCB0byBpbXBs
ZW1lbnQgdGhlIHRlbXBvcmFsIGRlYWQgem9uZS4KKworICAgICAgICBUaGVyZSBhcmUgZml2ZSBu
ZXcgb3Bjb2Rlcy4gIFdoaWxlIHdlJ3JlIGF0IGl0LCB3ZSByZW1vdmUKKyAgICAgICAgam1wX3Nj
b3BlcywgYXMgaXQgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgY2xlYXJseSBpbiB0aGUgcHJlc2VuY2Ug
b2YKKyAgICAgICAgbGF6aWx5LXRvcm4tb2ZmIGJsb2NrIHNjb3Blcy4gIEluc3RlYWQgdGhlIGNv
bXBpbGVyIGVtaXRzIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSB1bndpbmRpbmdzIGRpcmVjdGx5
LiAgV2UgYWxzbyByZW1vdmUgcHVzaF9uZXdfc2NvcGUgaW4KKyAgICAgICAgZmF2b3Igb2YgdGhl
IG1vcmUgZ2VuZXJpYyBhbmQgZWZmaWNpZW50IGxhemlseSByZWlmaWVkIHN0YXRpYworICAgICAg
ICBzY29wZXMuCisKKyAgICAgICAgVGhlIGNvbXBpbGVyIHByZS1hbGxvY2F0ZXMgYSBzZWN0aW9u
IG9mIHRoZSByZWdpc3RlcnMgZm9yIGJsb2NrCisgICAgICAgIHNjb3Blcy4gIEJsb2NrIHNjb3Bl
cyB0aGF0IG1heSBiZSByZWlmaWVkIChjYXB0dXJlZCBpbiBhIHNjb3BlCisgICAgICAgIGNoYWlu
KSBhbHNvIG9jY3VweSBhbiBhZGRpdGlvbmFsIHJlZ2lzdGVyLCBmb3IgdGhlIHNjb3BlIG9iamVj
dAorICAgICAgICBpdHNlbGYuICBUaGUgc3ltYm9sIHRhYmxlcyBmb3IgdGhlIGJsb2NrIHNjb3Bl
cyBjb21lIGZyb20gInNjb3BlCisgICAgICAgIHRlbXBsYXRlcyIsIHdoaWNoIGxpdmUgaW4gdGhl
IGNvbnN0YW50cyBzZWN0aW9uLiAgVG8gY29tcHV0ZSB0aGUKKyAgICAgICAgbnVtYmVyIG9mIHJl
Z2lzdGVycyB0byBhbGxvY2F0ZSB0byBibG9jayBzY29wZXMsIHdlIGRvIGEgcG9zdC1wYXNzCisg
ICAgICAgIG9uIHRoZSBub2RlIGdyYXBoIHRvIGRldGVybWluZSB0aGUgbWF4aW11bSBuZXN0aW5n
IGRlcHRoLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkNvbnRy
b2xGbG93Q29udGV4dCk6IEluIGFkZGl0aW9uIHRvIGZpbmFsbHkgYW5kIHdpdGggYmxvY2tzLAor
ICAgICAgICBzdXBwb3J0IGJsb2NrLXNjb3BlIGNvbnRyb2wgZmxvdyBjb250ZXh0cy4KKyAgICAg
ICAgKEpTQzo6UmVzb2x2ZVJlc3VsdCk6IEFkZCBhIEJhcnJpZXJGbGFnIGFuZCBhc3NvY2lhdGVk
IHR5cGVzIGZvcgorICAgICAgICBibG9jay1zY29wZWQgYmluZGluZ3MgdGhhdCBuZWVkIHJlYWQt
IG9yIHdyaXRlLSBiYXJyaWVycy4gIEFkZCBhCisgICAgICAgIGZsYWcgZm9yICJhcmd1bWVudHMi
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6c2NvcGVEZXB0aCk6IEFkZCBtX2Js
b2NrU2NvcGVEZXB0aC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNhbk9wdGlt
aXplTm9uTG9jYWxzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNob3VsZE9w
dGltaXplTG9jYWxzKToKKyAgICAgICAgUmVtb3ZlIG5vdy11bnVzZWQgbWV0aG9kcy4KKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOiBBZGQgbmV3CisgICAgICAgIG1f
YmxvY2tTY29wZURlcHRoIG1lbWJlci4KKyAgICAgICAgKEpTQzo6QmxvY2tTY29wZVZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWxsb2NhdGVCbG9ja1Njb3BlZFZh
cmlhYmxlcyk6IERlZmluZSBhbmQKKyAgICAgICAgdXNlIGEgbmV3IHZpc2l0b3IgdG8gZG8gYSBw
b3N0LXBhc3Mgb24gdGhlIHN0YXRlbWVudHMgdG8gY29tcHV0ZQorICAgICAgICB0aGUgbWluaW11
bSBzaXplIG9mIHJlZ2lzdGVycyB0byBob2xkIGJsb2NrLXNjb3BpbmcgdmFyaWFibGVzIGFuZAor
ICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIHNjb3Blcywgd2hlcmUgYXBwcm9wcmlhdGUuCisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjp3aWxsUmVzb2x2ZVRvQXJndW1lbnRzKTog
UmVtb3ZlLiAgQ2FsbGVycworICAgICAgICB1c2UgUmVzb2x2ZVJlc3VsdDo6aXNBcmd1bWVudHMo
KSwgcG9zc2libHkgd2l0aCB0aGUgbmV3CisgICAgICAgIERvbnRDcmVhdGVBcmd1bWVudHNGbGFn
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVnaXN0ZXJGb3IpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZSk6IFNlYXJjaCBibG9jayBzY29wZXMg
YmVmb3JlCisgICAgICAgIGxvb2tpbmcgaW4gdGhlIGxvY2FsIHN5bWJvbCB0YWJsZSBmb3IgcmVn
aXN0ZXJzLiAgSGFuZGxlIGxhenkKKyAgICAgICAgcmVpZmljYXRpb24gb2YgImFyZ3VtZW50cyIg
aGVyZS4gIElubGluZSBjYW5PcHRpbWl6ZU5vbkxvY2FscyBhbmQKKyAgICAgICAgc2hvdWxkT3B0
aW1pemVMb2NhbHMsIGFuZCBmb2xkIHNvbWUgY29uc3RhbnRzLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEdldFN0YXRpY1Zhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UHV0U3RhdGljVmFyKTogQWRkIGNhc2VzIGZvcgorICAgICAgICAiYXJn
dW1lbnRzIi4gIEFkZCByZWFkL3dyaXRlIGJhcnJpZXJzIGZvciBsb2NhbHMgaWYgbmVjZXNzYXJ5
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQXJndW1lbnRzSWZOZWNl
c3NhcnkpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlv
bklmTmVjZXNzYXJ5KToKKyAgICAgICAgUmVtb3ZlIG5vdy11bnVzZWQgbWV0aG9kcy4KKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hCbG9ja1Njb3BlKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEJsb2NrU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6cmVpZnlTY29wZXMpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFB1c2hTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0UG9wU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZpbmFs
bHlDb250ZXh0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZpbmFsbHlD
b250ZXh0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wU2NvcGVz
KTogUmVmYWN0b3IgdG8gaGFuZGxlIGJsb2NrCisgICAgICAgIHNjb3BlcyBvbiB0aGUgQ29udHJv
bEZsb3dDb250ZXh0IHN0YWNrLiAgV2hlbiBwdXNoaW5nIGEgc2NvcGUgdGhhdAorICAgICAgICBy
ZXF1aXJlcyBhIHNjb3BlIGNoYWluLCByZWlmeVNjb3BlcyBpcyBjYWxsZWQsIHdoaWNoIGVuc3Vy
ZXMgdGhhdAorICAgICAgICB0aGUgc2NvcGUgY2hhaW4gaGFzIGJlZW4gY3JlYXRlZC4gIFdoZW4g
Y29udHJvbCBsZWF2ZXMgYSBibG9jaworICAgICAgICBzY29wZSB3aG9zZSBzY29wZSBtYXkgaGF2
ZSBiZWVuIHJlaWZpZWQsIHRlYXJfb2ZmX3Njb3BlIHdpbGwgdGVhcgorICAgICAgICBvZmYgdGhv
c2UgbG9jYWxzIGZyb20gdGhlIHN0YWNrIHRvIHRoZSBoZWFwLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbik6IENhbGwKKyAgICAg
ICAgcmVpZnlTY29wZXMgaW5zdGVhZCBvZiBjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkuCisK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6
QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNj
ZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGFwdCB0bworICAgICAgICB3aWxsUmVzb2x2ZVRv
QXJndW1lbnRzIGNoYW5nZS4KKyAgICAgICAgKEpTQzo6QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbWl0Qnl0ZWNvZGUpOiBBZGFwdCB0bworICAgICAgICBKU1N0YXRpY1Njb3BlIHRha2luZyBh
IEpTR2xvYmFsRGF0YSBpbnN0ZWFkIG9mIGFuIEV4ZWNTdGF0ZS4KKyAgICAgICAgKEpTQzo6VHJ5
Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRhcHQgdG8gdXNlIHB1c2hCbG9ja1Njb3BlIGFuZAorICAg
ICAgICBwb3BCbG9ja1Njb3BlLgorCisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6IEFkZCBu
ZXcgdW5zZXQsIGFzc2VydF9zZXQsIGFzc2VydF91bnNldCwKKyAgICAgICAgcmVpZnlfc2NvcGUs
IGFuZCB0ZWFyX29mZl9zY29wZSBvcGNvZGVzLiAgUmVtb3ZlIHB1c2hfbmV3X3Njb3BlCisgICAg
ICAgIGFuZCBqbXBfc2NvcGVzLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAgKEpT
Qzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdW5zZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYXNzZXJ0X3Nl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hc3NlcnRfdW5zZXQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcmVpZnlfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdGVhcl9vZmZfc2NvcGUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfYXNzZXJ0X3NldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hc3NlcnRfdW5z
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVpZnlfc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfc2NvcGUpOgorICAgICAgICAqIGppdC9KSVRTdHVi
cy5jcHA6CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwOiBVcGRhdGUgd2l0aCBzdXBwb3J0IGZvciB0aGUgbmV3CisgICAgICAg
IG9wY29kZXMuICBUaGUgTExJbnQgYml0cyBhcmUgcHJlbGltaW5hcnkgYW5kIHVudGVzdGVkLgor
CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6bmVl
ZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMpOgorICAgICAgICAqIHBhcnNlci9QYXJz
ZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6Om5lZWRzRnVsbEFjdGl2YXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxl
OjpuZWVkc0FjdGl2YXRpb24pOiAiQ2F0Y2giIGNsYXVzZXMgbm8KKyAgICAgICAgbG9uZ2VyIGZv
cmNlIHRoZWlyIGZ1bmN0aW9ucyB0byBoYXZlIGFjdGl2YXRpb25zLgorCisgICAgICAgICogcnVu
dGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29w
ZU9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU1N0YXRpY1Njb3Bl
T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU1N0YXRpY1Njb3BlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29w
ZU9iamVjdDo6YWRkVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0
OjpyZWlmeSk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnRlYXJPZmYpOgor
ICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpKU1N0YXRpY1Njb3BlT2JqZWN0KTog
QWRhcHQgdG8gc3VwcG9ydAorICAgICAgICBsYXp5IHRlYXItb2ZmLCBhbmQgdGhlIGFiaWxpdHkg
dG8gYmluZCBtb3JlIHRoYW4gb25lIHZhcmlhYmxlLgorCisgICAgICAgICogcGFyc2VyL05vZGVz
LmNwcDogSW1wbGVtZW50IGFuIGFjY2VwdCgpIG1ldGhvZCBmb3IgZWFjaCBjb25jcmV0ZQorICAg
ICAgICBub2RlIHR5cGUsIGUuZy4gRm9vLCB0aGF0IGRpc3BhdGNoZXMgdG8gYSBzcGVjaWZpYyB2
aXNpdEZvbygpCisgICAgICAgIG1ldGhvZCBvbiB0aGUgdmlzaXRvci4KKyAgICAgICAgKiBwYXJz
ZXIvTm9kZXMuaCAoRk9SX0VBQ0hfQ09OQ1JFVEVfTk9ERV9UWVBFKTogTmV3IG1hY3JvLCBleHBh
bmRzCisgICAgICAgIGEgbWFjcm8gZm9yIGVhY2ggY29uY3JldGUgbm9kZSB0eXBlLgorICAgICAg
ICAoSlNDOjpOb2RlOjphY2NlcHQpOiBBZGQgdmlydHVhbCBtZXRob2QgZm9yIGRvaW5nIHRoZSBW
aXNpdG9yCisgICAgICAgIGRhbmNlLiAgKEl0J3MgYSBob2tleS1wb2tleS4pCisgICAgICAgIChE
RUNMQVJFX05PREVfVFlQRSk6IE5ldyBtYWNybywgZGVmaW5lcyBzcGVjaWZpYyBhY2NlcHQoKSBt
ZXRob2RzCisgICAgICAgIGZvciBhIGNsYXNzLiAgQWRkIGl0IHRvIGFsbCBjb25jcmV0ZSBjbGFz
c2VzLiAgQWRkZWQgc29tZQorICAgICAgICBhY2Nlc3NvcnMgdGhhdCB3ZXJlIG5lY2Vzc2FyeSB0
byB0cmF2ZXJzZSBhbGwgc3RhdGVtZW50cy4KKyAgICAgICAgKE5vZGVWaXNpdG9yKTogTmV3IGFi
c3RyYWN0IGJhc2UgY2xhc3MuCisKIDIwMTEtMDMtMDcgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIEludGVycG9zZSBDb2RlTm9kZSBiZXR3ZWVuIFNjb3BlTm9kZSBh
bmQgUHJvZ3JhbU5vZGUgZXQgYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKaW5kZXggMjA5NzJjYzYzYjVhZmQ0Y2E5YzFmODUyMjdmM2JmZTAwZTYyNWQ4
NC4uMDgwZjk3NDNmZTYzMDFlMWIxZmViYTU0NjNmMTEyNTc3MGQwMzdkNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTEyMjAsMTcgKzEyMjAs
MzAgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8
SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGRhdGFMb2coIlslNGRd
IHBvcF9zY29wZVxuIiwgbG9jYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9wdXNoX25ld19zY29wZTogeworICAgICAgICBjYXNlIG9wX3Vuc2V0
OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGRhdGFMb2coIlslNGRdIHVuc2V0XHRcdCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShl
eGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfYXNzZXJ0X3NldDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBhc3NlcnRfc2V0XHQgJXNcbiIsIGxv
Y2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2Fzc2VydF91bnNldDogeworICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRk
XSBhc3NlcnRfdW5zZXRcdCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
cmVpZnlfc2NvcGU6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBwdXNo
X25ld19zY29wZSBcdCVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywg
cjApLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShleGVjLCByMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHJl
aWZ5X3Njb3BlXHQgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam1wX3Njb3BlczogewotICAgICAgICAgICAg
aW50IHNjb3BlRGVsdGEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZz
ZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGptcF9z
Y29wZXNcdF4lZCwgJWQoLT4lZClcbiIsIGxvY2F0aW9uLCBzY29wZURlbHRhLCBvZmZzZXQsIGxv
Y2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9zY29wZTogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9n
KCJbJTRkXSB0ZWFyX29mZl9zY29wZVx0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9jYXRjaDogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmlu
ZGV4IDQ1NTk4Zjg5OTQ4MGZkNTM4N2RmOTQ1ZWIwOWQ2Y2M0ZDY4Y2I3YzYuLjRlYzE3OTU0ZTZm
ZWUzMmQwMjljMWYzZjhiY2NjMThlNjE2MjRlOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3Bjb2RlLmgKQEAgLTE0OSw3ICsxNDksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgbWFjcm8ob3Bfam5sZXNzZXEsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfam5ncmVhdGVyLCA0
KSBcCiAgICAgICAgIG1hY3JvKG9wX2puZ3JlYXRlcmVxLCA0KSBcCi0gICAgICAgIG1hY3JvKG9w
X2ptcF9zY29wZXMsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcCwgMikgXAogICAgICAgICBt
YWNybyhvcF9sb29wX2lmX3RydWUsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl9mYWxz
ZSwgMykgXApAQCAtMTgzLDcgKzE4MiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgXAog
ICAgICAgICBtYWNybyhvcF9wdXNoX3Njb3BlLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX3BvcF9z
Y29wZSwgMSkgXAotICAgICAgICBtYWNybyhvcF9wdXNoX25ld19zY29wZSwgNCkgXAorICAgICAg
ICBcCisgICAgICAgIG1hY3JvKG9wX3Vuc2V0LCAyKSBcCisgICAgICAgIG1hY3JvKG9wX2Fzc2Vy
dF9zZXQsIDIpIFwKKyAgICAgICAgbWFjcm8ob3BfYXNzZXJ0X3Vuc2V0LCAyKSBcCisgICAgICAg
IFwKKyAgICAgICAgbWFjcm8ob3BfcmVpZnlfc2NvcGUsIDMpIFwKKyAgICAgICAgbWFjcm8ob3Bf
dGVhcl9vZmZfc2NvcGUsIDIpIFwKICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9jYXRjaCwg
MikgXAogICAgICAgICBtYWNybyhvcF90aHJvdywgMikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCAy
NTkxM2Q5ZDAwMGIyNGNhM2MzYzZiOGUyMzY5ZDEwMzA5NTQ0MDMzLi4zYmQ3NWQyMjkyMmY1ZTVj
Y2VjZjAyNTU4NWZlOGNhYjhiNjZkYmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgiCiAjaW5jbHVkZSAi
SlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTU3Rh
dGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkxv
d0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCkBAIC0xMzIsMTQg
KzEzMywyMiBAQCB2b2lkIExhYmVsOjpzZXRMb2NhdGlvbih1bnNpZ25lZCBsb2NhdGlvbikKIHZv
aWQgUmVzb2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB7CiAgICAgc3dpdGNoIChtX3R5cGUp
IHsKKyAgICBjYXNlIEFyZ3VtZW50czoKKyAgICBjYXNlIFJlYWRPbmx5QXJndW1lbnRzOgogICAg
IGNhc2UgUmVnaXN0ZXI6CiAgICAgY2FzZSBSZWFkT25seVJlZ2lzdGVyOgorICAgIGNhc2UgQmFy
cmllclJlZ2lzdGVyOgorICAgIGNhc2UgUmVhZE9ubHlCYXJyaWVyUmVnaXN0ZXI6CiAgICAgICAg
IEFTU0VSVChtX2xvY2FsKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGV4aWNhbDoKICAg
ICBjYXNlIFJlYWRPbmx5TGV4aWNhbDoKKyAgICBjYXNlIEJhcnJpZXJMZXhpY2FsOgorICAgIGNh
c2UgUmVhZE9ubHlCYXJyaWVyTGV4aWNhbDoKICAgICBjYXNlIER5bmFtaWNMZXhpY2FsOgogICAg
IGNhc2UgRHluYW1pY1JlYWRPbmx5TGV4aWNhbDoKKyAgICBjYXNlIER5bmFtaWNCYXJyaWVyTGV4
aWNhbDoKKyAgICBjYXNlIER5bmFtaWNSZWFkT25seUJhcnJpZXJMZXhpY2FsOgogICAgICAgICBB
U1NFUlQobV9pbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBHbG9iYWw6CkBAIC0xNjEsNiArMTcwLDExNCBAQCB2b2lkIFJlc29sdmVSZXN1
bHQ6OmNoZWNrVmFsaWRpdHkoKQogfQogI2VuZGlmCiAKK2NsYXNzIEJsb2NrU2NvcGVWaXNpdG9y
IDogcHVibGljIE5vZGVWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBCbG9ja1Njb3BlVmlzaXRvcigp
IDogTm9kZVZpc2l0b3IoKQorICAgICAgICAgICAgICAgICAgICAgICAgLCBtX21heFNjb3BlRGVw
dGgoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICwgbV9jdXJyZW50U2NvcGVEZXB0aCgwKQor
ICAgIHsgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVNYXhpbXVtQmxvY2tTY29wZURl
cHRoKE5vZGUgKm5vZGUpCisgICAgeworICAgICAgICBCbG9ja1Njb3BlVmlzaXRvciB2aXNpdG9y
OworICAgICAgICBub2RlLT5hY2NlcHQoJnZpc2l0b3IpOworICAgICAgICBBU1NFUlQoIXZpc2l0
b3IubV9jdXJyZW50U2NvcGVEZXB0aCk7CisgICAgICAgIHJldHVybiB2aXNpdG9yLm1fbWF4U2Nv
cGVEZXB0aDsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbnRlckJsb2NrU2NvcGUodW5zaWduZWQg
bikKKyAgICB7CisgICAgICAgIG1fY3VycmVudFNjb3BlRGVwdGggKz0gbiArIDE7IC8vIE9uZSBt
b3JlLCBmb3IgdGhlIGFjdGl2YXRpb24gaXRzZWxmLgorICAgIH0KKworICAgIHZvaWQgbGVhdmVC
bG9ja1Njb3BlKHVuc2lnbmVkIG4pCisgICAgeworICAgICAgICBpZiAobV9tYXhTY29wZURlcHRo
IDwgbV9jdXJyZW50U2NvcGVEZXB0aCkKKyAgICAgICAgICAgIG1fbWF4U2NvcGVEZXB0aCA9IG1f
Y3VycmVudFNjb3BlRGVwdGg7CisgICAgICAgIG1fY3VycmVudFNjb3BlRGVwdGggLT0gbiArIDE7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdENvbnN0U3RhdGVtZW50Tm9kZShDb25zdFN0YXRlbWVu
dE5vZGUgKm5vZGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ug
c2hvdWxkIGJsb2NrLXNjb3BlIHRoZXNlIGJpbmRpbmdzLiBGb3Igbm93LAorICAgICAgICAvLyBw
YXNzLgorICAgIH0KKyAgICB2b2lkIHZpc2l0QmxvY2tOb2RlKEJsb2NrTm9kZSAqbm9kZSkKKyAg
ICB7CisgICAgICAgIGlmIChub2RlLT5zdGF0ZW1lbnRzKCkpCisgICAgICAgICAgICBub2RlLT5z
dGF0ZW1lbnRzKCktPmFjY2VwdCh0aGlzKTsKKyAgICB9CisgICAgdm9pZCB2aXNpdEVtcHR5U3Rh
dGVtZW50Tm9kZShFbXB0eVN0YXRlbWVudE5vZGUgKm5vZGUpIHsgfQorICAgIHZvaWQgdmlzaXRE
ZWJ1Z2dlclN0YXRlbWVudE5vZGUoRGVidWdnZXJTdGF0ZW1lbnROb2RlICpub2RlKSB7IH0KKyAg
ICB2b2lkIHZpc2l0RXhwclN0YXRlbWVudE5vZGUoRXhwclN0YXRlbWVudE5vZGUgKm5vZGUpIHsg
fQorICAgIHZvaWQgdmlzaXRWYXJTdGF0ZW1lbnROb2RlKFZhclN0YXRlbWVudE5vZGUgKm5vZGUp
IHsgfQorICAgIHZvaWQgdmlzaXRJZk5vZGUoSWZOb2RlICpub2RlKSB7IG5vZGUtPmlmQmxvY2so
KS0+YWNjZXB0KHRoaXMpOyB9CisgICAgdm9pZCB2aXNpdElmRWxzZU5vZGUoSWZFbHNlTm9kZSAq
bm9kZSkgeyBub2RlLT5pZkJsb2NrKCktPmFjY2VwdCh0aGlzKTsgbm9kZS0+ZWxzZUJsb2NrKCkt
PmFjY2VwdCh0aGlzKTsgfQorICAgIHZvaWQgdmlzaXREb1doaWxlTm9kZShEb1doaWxlTm9kZSAq
bm9kZSkgeyBub2RlLT5zdGF0ZW1lbnQoKS0+YWNjZXB0KHRoaXMpOyB9CisgICAgdm9pZCB2aXNp
dFdoaWxlTm9kZShXaGlsZU5vZGUgKm5vZGUpIHsgbm9kZS0+c3RhdGVtZW50KCktPmFjY2VwdCh0
aGlzKTsgfQorICAgIHZvaWQgdmlzaXRGb3JOb2RlKEZvck5vZGUgKm5vZGUpIHsgbm9kZS0+c3Rh
dGVtZW50KCktPmFjY2VwdCh0aGlzKTsgfQorICAgIHZvaWQgdmlzaXRGb3JJbk5vZGUoRm9ySW5O
b2RlICpub2RlKSB7IG5vZGUtPnN0YXRlbWVudCgpLT5hY2NlcHQodGhpcyk7IH0KKyAgICB2b2lk
IHZpc2l0Q29udGludWVOb2RlKENvbnRpbnVlTm9kZSAqbm9kZSkgeyB9CisgICAgdm9pZCB2aXNp
dEJyZWFrTm9kZShCcmVha05vZGUgKm5vZGUpIHsgfQorICAgIHZvaWQgdmlzaXRSZXR1cm5Ob2Rl
KFJldHVybk5vZGUgKm5vZGUpIHsgfQorICAgIHZvaWQgdmlzaXRXaXRoTm9kZShXaXRoTm9kZSAq
bm9kZSkgeyBub2RlLT5zdGF0ZW1lbnQoKS0+YWNjZXB0KHRoaXMpOyB9CisgICAgdm9pZCB2aXNp
dExhYmVsTm9kZShMYWJlbE5vZGUgKm5vZGUpIHsgbm9kZS0+c3RhdGVtZW50KCktPmFjY2VwdCh0
aGlzKTsgfQorICAgIHZvaWQgdmlzaXRUaHJvd05vZGUoVGhyb3dOb2RlICpub2RlKSB7IH0KKyAg
ICB2b2lkIHZpc2l0VHJ5Tm9kZShUcnlOb2RlICpub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS0+
dHJ5QmxvY2soKS0+YWNjZXB0KHRoaXMpOworICAgICAgICBpZiAobm9kZS0+Y2F0Y2hCbG9jaygp
KSB7CisgICAgICAgICAgICBlbnRlckJsb2NrU2NvcGUoMSk7IC8vIE9uZSBibG9jay1ib3VuZCB2
YXJpYWJsZTogdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIG5vZGUtPmNhdGNoQmxvY2soKS0+
YWNjZXB0KHRoaXMpOworICAgICAgICAgICAgbGVhdmVCbG9ja1Njb3BlKDEpOworICAgICAgICB9
CisgICAgICAgIGlmIChub2RlLT5maW5hbGx5QmxvY2soKSkKKyAgICAgICAgICAgIG5vZGUtPmZp
bmFsbHlCbG9jaygpLT5hY2NlcHQodGhpcyk7CisgICAgfQorICAgIHZvaWQgdmlzaXRQcm9ncmFt
Tm9kZShQcm9ncmFtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLT5zdGF0ZW1l
bnRzKCkpCisgICAgICAgICAgICBub2RlLT5zdGF0ZW1lbnRzKCktPmFjY2VwdCh0aGlzKTsKKyAg
ICB9CisgICAgdm9pZCB2aXNpdEV2YWxOb2RlKEV2YWxOb2RlICpub2RlKQorICAgIHsKKyAgICAg
ICAgaWYgKG5vZGUtPnN0YXRlbWVudHMoKSkKKyAgICAgICAgICAgIG5vZGUtPnN0YXRlbWVudHMo
KS0+YWNjZXB0KHRoaXMpOworICAgIH0KKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25Cb2R5Tm9kZShG
dW5jdGlvbkJvZHlOb2RlICpub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPnN0YXRlbWVu
dHMoKSkKKyAgICAgICAgICAgIG5vZGUtPnN0YXRlbWVudHMoKS0+YWNjZXB0KHRoaXMpOworICAg
IH0KKyAgICB2b2lkIHZpc2l0RnVuY0RlY2xOb2RlKEZ1bmNEZWNsTm9kZSAqbm9kZSkgeyB9CisK
KyAgICAKKyAgICB2b2lkIHZpc2l0Q2xhdXNlKENhc2VDbGF1c2VOb2RlICpub2RlKQorICAgIHsK
KyAgICAgICAgaWYgKG5vZGUtPnN0YXRlbWVudHMoKSkKKyAgICAgICAgICAgIG5vZGUtPnN0YXRl
bWVudHMoKS0+YWNjZXB0KHRoaXMpOworICAgIH0KKyAgICB2b2lkIHZpc2l0Q2xhdXNlTGlzdChD
bGF1c2VMaXN0Tm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHdoaWxlIChub2RlKSB7CisgICAg
ICAgICAgICB2aXNpdENsYXVzZShub2RlLT5nZXRDbGF1c2UoKSk7CisgICAgICAgICAgICBub2Rl
ID0gbm9kZS0+Z2V0TmV4dCgpOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgdmlzaXRTd2l0
Y2hOb2RlKFN3aXRjaE5vZGUgKm5vZGUpCisgICAgeworICAgICAgICB2aXNpdENsYXVzZUxpc3Qo
bm9kZS0+YmxvY2soKS0+bGlzdDEoKSk7CisgICAgICAgIGlmIChub2RlLT5ibG9jaygpLT5kZWZh
dWx0Q2xhdXNlKCkpCisgICAgICAgICAgICB2aXNpdENsYXVzZShub2RlLT5ibG9jaygpLT5kZWZh
dWx0Q2xhdXNlKCkpOworICAgICAgICB2aXNpdENsYXVzZUxpc3Qobm9kZS0+YmxvY2soKS0+bGlz
dDIoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9tYXhTY29wZURlcHRoOworICAgIHVuc2ln
bmVkIG1fbWF4VmFyaWFibGVEZXB0aDsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRTY29wZURlcHRo
OworICAgIHVuc2lnbmVkIG1fY3VycmVudFZhcmlhYmxlRGVwdGg7Cit9OworCiBzdGF0aWMgYm9v
bCBzX2R1bXBzR2VuZXJhdGVkQ29kZSA9IGZhbHNlOwogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjpzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUpCkBAIC0xNzMs
MTAgKzI5MCwzMyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUo
KQogICAgIHJldHVybiBzX2R1bXBzR2VuZXJhdGVkQ29kZTsKIH0KIAordm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6YWxsb2NhdGVCbG9ja1Njb3BlZFZhcmlhYmxlcygpCit7CisgICAgdW5zaWduZWQg
ZGVwdGggPSBCbG9ja1Njb3BlVmlzaXRvcjo6Y29tcHV0ZU1heGltdW1CbG9ja1Njb3BlRGVwdGgo
bV9jb2RlTm9kZSk7CisKKyAgICBpZiAoIWRlcHRoKSB7CisgICAgICAgIG1fbmV4dEJsb2NrU2Nv
cGVkUmVnaXN0ZXIgPSAtMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbmV4dEJs
b2NrU2NvcGVkUmVnaXN0ZXIgPSBhZGRWYXIoKS0+aW5kZXgoKTsKKyAgICBkZXB0aC0tOworCisg
ICAgd2hpbGUgKGRlcHRoLS0pCisgICAgICAgIGFkZFZhcigpOworCisgICAgLy8gVGhpcyBoZWxw
ZXIgaXMgb3JpZ2luYWxseSBjYWxsZWQgaW4gdGhlIGNvbnN0cnVjdG9yLCBhbmQgaXMgaGVyZSB0
bworICAgIC8vIHByZXZlbnQgb3VyIGFzLXlldCB1bmluaXRpYWxpemVkIGxvY2FscyBmcm9tIGJl
aW5nIGFsbG9jYXRlZCB0bworICAgIC8vIHRlbXBvcmFyaWVzLiBJdCdzIE9LIHRvIGNhbGwgaXQg
YSBzZWNvbmQgdGltZS4KKyAgICBwcmVzZXJ2ZUxhc3RWYXIoKTsKK30KKwogSlNPYmplY3QqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkJ5dGVjb2RlIEdlbmVyYXRpb24iKTsKICAgICAKKyAgICBhbGxvY2F0ZUJsb2Nr
U2NvcGVkVmFyaWFibGVzKCk7CisKICAgICBtX2NvZGVCbG9jay0+c2V0VGhpc1JlZ2lzdGVyKG1f
dGhpc1JlZ2lzdGVyLmluZGV4KCkpOwogCiAgICAgbV9jb2RlTm9kZS0+ZW1pdEJ5dGVjb2RlKCp0
aGlzKTsKQEAgLTIzNiw4ICszNzYsMTAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHMKICAgICAs
IG1fY29kZU5vZGUocHJvZ3JhbU5vZGUpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAg
ICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQorICAg
ICwgbV9uZXh0QmxvY2tTY29wZWRSZWdpc3RlcigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkK
ICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRoKDAp
CiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVUeXBlKEdsb2JhbENvZGUp
CiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQpAQCAtMzA3LDggKzQ0OSwxMCBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rp
b25Cb2R5LCBTY29wZUNoYWluTgogICAgICwgbV9jb2RlTm9kZShmdW5jdGlvbkJvZHkpCiAgICAg
LCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2FjdGl2YXRpb25SZWdpc3RlcigwKQor
ICAgICwgbV9uZXh0QmxvY2tTY29wZWRSZWdpc3RlcigwKQogICAgICwgbV9maW5hbGx5RGVwdGgo
MCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRo
KDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9u
Q29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCkBAIC0zOTMsNyArNTM3LDcgQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1
bmN0aW9uQm9keSwgU2NvcGVDaGFpbk4KICAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHZh
clN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KTsKICAgICAg
ICAgfQogICAgIH0KLSAgICBib29sIGNhbkxhemlseUNyZWF0ZUZ1bmN0aW9ucyA9ICFmdW5jdGlv
bkJvZHktPm5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgJiYgIW1fc2hvdWxk
RW1pdERlYnVnSG9va3M7CisgICAgYm9vbCBjYW5MYXppbHlDcmVhdGVGdW5jdGlvbnMgPSAhZnVu
Y3Rpb25Cb2R5LT51c2VzRXZhbCgpICYmICFtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOwogICAgIGlm
ICghY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zICYmICFtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uKSB7
CiAgICAgICAgIG1faGFzQ3JlYXRlZEFjdGl2YXRpb24gPSB0cnVlOwogICAgICAgICBlbWl0T3Bj
b2RlKG9wX2NyZWF0ZV9hY3RpdmF0aW9uKTsKQEAgLTQ2OCw4ICs2MTIsMTAgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2gKICAgICAsIG1fY29kZU5vZGUoZXZhbE5vZGUpCiAgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpKQorICAgICwgbV9uZXh0QmxvY2tTY29wZWRSZWdpc3RlcigwKQogICAgICwg
bV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1f
YmxvY2tTY29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGNvZGVCbG9jay0+YmFz
ZVNjb3BlRGVwdGgoKSkKICAgICAsIG1fY29kZVR5cGUoRXZhbENvZGUpCiAgICAgLCBtX25leHRD
b25zdGFudE9mZnNldCgwKQpAQCAtNTM2LDMzICs2ODIsNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjphZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGludCBwYXJhbWV0ZXJJ
bmRleAogICAgIG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKIH0KIAotYm9vbCBCeXRlY29k
ZUdlbmVyYXRvcjo6d2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCkKLXsKLSAgICBpZiAoaWRlbnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkg
PSBzeW1ib2xUYWJsZSgpLmdldChpZGVudC5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChtX2NvZGVCbG9jay0+dXNl
c0FyZ3VtZW50cygpICYmIG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjp1bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpCi17Ci0gICAgQVNT
RVJUKHdpbGxSZXNvbHZlVG9Bcmd1bWVudHMocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykpOwot
Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5
TmFtZXMoKS5hcmd1bWVudHMuaW1wbCgpKTsKLSAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsK
LSAgICByZXR1cm4gJnJlZ2lzdGVyRm9yKGVudHJ5LmdldEluZGV4KCkpOwotfQotCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVn
aXN0ZXJJRCogcmVnKQogewogICAgIGlmIChtX2xhc3RMYXp5RnVuY3Rpb24gPD0gcmVnLT5pbmRl
eCgpIHx8IHJlZy0+aW5kZXgoKSA8IG1fZmlyc3RMYXp5RnVuY3Rpb24pCkBAIC0xMTU0LDM3ICsx
MjczLDk2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3Rl
cklEKiBkc3QsIEpTVmFsdWUgdikKICAgICByZXR1cm4gY29uc3RhbnRJRDsKIH0KIAotUmVzb2x2
ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSkKK1Jlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUoY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHksIHVuc2lnbmVkIHJlc29sdmVGbGFncykKIHsKICAgICBpZiAocHJv
cGVydHkgPT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
UmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKHRoaXNSZWdpc3RlcigpLCBSZXNvbHZlUmVz
dWx0OjpSZWFkT25seUZsYWcpOwogCisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBtX3Nj
b3BlQ2hhaW4tPmJlZ2luKCk7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IG1fc2NvcGVD
aGFpbi0+ZW5kKCk7CisKKyAgICBpbnQgZGVwdGggPSAwOworICAgIHVuc2lnbmVkIGZsYWdzID0g
MDsKKyAgICBmb3IgKGludCBpID0gc2NvcGVEZXB0aCgpLTE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgIHN3aXRjaCAobV9zY29wZUNvbnRleHRTdGFja1tpXS5ibG9ja1R5cGUpIHsKKyAgICAgICAg
Y2FzZSBXaXRoQmxvY2s6CisgICAgICAgICAgICAvLyBJbiB0aGVvcnkgd2Ugc2hvdWxkIGJlIGFi
bGUgdG8gc2tpcCBpbnRlcnZlbmluZyBibG9jayBzY29wZQorICAgICAgICAgICAgLy8gb2JqZWN0
cywgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggb2YgdGhlIExhemlseVJlaWZ5IG9uZXMgaGF2ZQor
ICAgICAgICAgICAgLy8gYWN0dWFsbHkgYmVlbiByZWlmaWVkLiBJbnN0ZWFkIG9mIGZvcmNpbmcg
ZWFnZXIgcmVpZmljYXRpb24sCisgICAgICAgICAgICAvLyB3ZSdsbCBwZXNzaW1pemUgIndpdGgi
IHJlc29sdXRpb24sIGZvcmNpbmcgaXQgdG8gc3RhcnQgZnJvbSB0aGUKKyAgICAgICAgICAgIC8v
IHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uCisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3Vs
dDo6ZHluYW1pY1Jlc29sdmUoMCk7CisgICAgICAgIGNhc2UgRmluYWxseUJsb2NrOgorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgU2NvcGVCbG9jazoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKworICAgICAgICBKU09iamVjdCogY3VycmVudFNjb3BlID0gaXRlci0+Z2V0
KCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50U2NvcGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7
CisgICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IHN0YXRp
Y19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50U2NvcGUpOworICAgICAgICBTeW1ib2xU
YWJsZUVudHJ5IGVudHJ5ID0gY3VycmVudFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdl
dChwcm9wZXJ0eS5pbXBsKCkpOworCisgICAgICAgIC8vIEJsb2NrLXNjb3BlZCBwcm9wZXJ0eS4K
KyAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgeworICAgICAgICAgICAgaW50IG9mZnNldCA9
IG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0LnJlaWZpZWRTY29wZVJlZ2lzdGVy
SW5kZXg7CisgICAgICAgICAgICBzd2l0Y2ggKG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uc2NvcGVD
b250ZXh0LnJlaWZ5TW9kZSkgeworICAgICAgICAgICAgY2FzZSBTY29wZUNvbnRleHQ6OkVhZ2Vy
bHlSZWlmeToKKyAgICAgICAgICAgIGNhc2UgU2NvcGVDb250ZXh0OjpMYXppbHlSZWlmeToKKyAg
ICAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgdGhlIHNjb3BlIHJlZ2lzdGVyLgorICAgICAgICAg
ICAgICAgIG9mZnNldCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUmVnaXN0
ZXJJRCogbG9jYWwgPSAmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSArIG9mZnNldCk7Cisg
ICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKQorICAgICAgICAgICAgICAgIGZsYWdz
IHw9IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZzsKKyAgICAgICAgICAgIC8vIEhlcmUgaWRl
YWxseSB3ZSB3b3VsZCBoYXZlIHRoZSBwYXJzZXIgaW5kaWNhdGUgd2hldGhlciBhIGJhcnJpZXIK
KyAgICAgICAgICAgIC8vIGlzIG5lY2Vzc2FyeSBvciBub3QuCisgICAgICAgICAgICBmbGFncyB8
PSBSZXNvbHZlUmVzdWx0OjpCYXJyaWVyRmxhZzsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZl
UmVzdWx0OjpyZWdpc3RlclJlc29sdmUobG9jYWwsIGZsYWdzKTsKKyAgICAgICAgfQorICAgICAg
ICArK2RlcHRoOworICAgICAgICArK2l0ZXI7CisgICAgfQorCiAgICAgLy8gQ2hlY2sgaWYgdGhl
IHByb3BlcnR5IHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gYSByZWdpc3Rlci4KLSAgICBpZiAobV9j
b2RlVHlwZSAhPSBHbG9iYWxDb2RlICYmIHNob3VsZE9wdGltaXplTG9jYWxzKCkpIHsKKyAgICBp
ZiAobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlm
ICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0
eU5hbWVzKCkuYXJndW1lbnRzKQotICAgICAgICAgICAgICAgIGNyZWF0ZUFyZ3VtZW50c0lmTmVj
ZXNzYXJ5KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBmbGFncyA9IGVudHJ5LmlzUmVhZE9ubHko
KSA/IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZyA6IDA7CiAgICAgICAgICAgICBSZWdpc3Rl
cklEKiBsb2NhbCA9IGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KCZyZWdpc3RlckZvcihl
bnRyeS5nZXRJbmRleCgpKSk7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKQor
ICAgICAgICAgICAgICAgIGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZzsKKyAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzICYmIG1f
Y29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc1N0cmljdE1vZGUoKQorICAgICAgICAgICAgICAgICAgICAmJiAhKHJlc29sdmVG
bGFncyAmIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3JlYXRlQXJndW1lbnRzRmxhZykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfYXJndW1lbnRzKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5hcmd1bWVu
dHNSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmxhZ3Mg
fD0gUmVzb2x2ZVJlc3VsdDo6QXJndW1lbnRzRmxhZzsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclJlc29sdmUobG9jYWwsIGZsYWdzKTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIENhc2VzIHdoZXJlIHdlIGNhbm5vdCBzdGF0aWNh
bGx5IG9wdGltaXplIHRoZSBsb29rdXAuCi0gICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMgfHwgIWNhbk9wdGltaXplTm9uTG9jYWxzKCkpCi0gICAgICAgIHJldHVy
biBSZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZSgwKTsKKyAgICBpZiAocHJvcGVydHkgPT0g
cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cworICAgICAgICB8fCBtX2NvZGVUeXBlID09IEV2YWxD
b2RlCisgICAgICAgIHx8IChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9j
ay0+dXNlc0V2YWwoKSAmJiAhbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSkKKyAgICAgICAg
cmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKGRlcHRoKTsKIAotICAgIFNjb3Bl
Q2hhaW5JdGVyYXRvciBpdGVyID0gbV9zY29wZUNoYWluLT5iZWdpbigpOwotICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBlbmQgPSBtX3Njb3BlQ2hhaW4tPmVuZCgpOwotICAgIHNpemVfdCBkZXB0aCA9
IDA7Ci0gICAgdW5zaWduZWQgZmxhZ3MgPSAwOworICAgIGRlcHRoICs9IG1fY29kZUJsb2NrLT5u
ZWVkc0Z1bGxTY29wZUNoYWluKCk7CiAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsr
ZGVwdGgpIHsKICAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRTY29wZSA9IGl0ZXItPmdldCgpOwot
ICAgICAgICBpZiAoIWN1cnJlbnRTY29wZS0+aXNWYXJpYWJsZU9iamVjdCgpKSB7Ci0gICAgICAg
ICAgICBmbGFncyB8PSBSZXNvbHZlUmVzdWx0OjpEeW5hbWljRmxhZzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgaWYgKCFjdXJyZW50U2NvcGUtPmlzVmFy
aWFibGVPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5hbWlj
UmVzb2x2ZShkZXB0aCk7CisKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogY3VycmVudFZhcmlh
YmxlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7
CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBjdXJyZW50VmFyaWFibGVPYmplY3Qt
PnN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAKQEAgLTExOTIsNyArMTM3MCw2
IEBAIFJlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHkpCiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKICAgICAgICAg
ICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gUmVz
b2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnOwotICAgICAgICAgICAgZGVwdGggKz0gbV9jb2RlQmxv
Y2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKICAgICAgICAgICAgIGlmICgrK2l0ZXIgPT0gZW5k
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgUmVzb2x2ZVJlc3VsdDo6RHluYW1pY0Zs
YWcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5hbWljSW5k
ZXhlZEdsb2JhbFJlc29sdmUoZW50cnkuZ2V0SW5kZXgoKSwgZGVwdGgsIGN1cnJlbnRTY29wZSwg
ZmxhZ3MpOwpAQCAtMTIxMyw3ICsxMzkwLDYgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVy
YXRvcjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIAogICAgIC8vIENhbid0
IGxvY2F0ZSB0aGUgcHJvcGVydHkgYnV0IHdlJ3JlIGFibGUgdG8gYXZvaWQgYSBmZXcgbG9va3Vw
cy4KICAgICBKU09iamVjdCogc2NvcGUgPSBpdGVyLT5nZXQoKTsKLSAgICBkZXB0aCArPSBtX2Nv
ZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwogICAgIGlmICgrK2l0ZXIgPT0gZW5kKSB7
CiAgICAgICAgIGlmICgoZmxhZ3MgJiBSZXNvbHZlUmVzdWx0OjpEeW5hbWljRmxhZykgJiYgZGVw
dGgpCiAgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY0dsb2JhbFJlc29s
dmUoZGVwdGgsIHNjb3BlKTsKQEAgLTE0MjcsMTIgKzE2MDMsMjIgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdGF0aWNWYXIoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBS
ZXNvbHZlUmUKICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAwOwogCiAgICAgc3dpdGNoIChy
ZXNvbHZlUmVzdWx0LnR5cGUoKSkgeworICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6QmFycmllclJl
Z2lzdGVyOgorICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlCYXJyaWVyUmVnaXN0ZXI6
CisgICAgICAgIGVtaXRPcGNvZGUob3BfYXNzZXJ0X3NldCk7CisgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmxvY2FsKCktPmluZGV4KCkpOworICAgICAgICAvLyBm
YWxsIHRocm91Z2gKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkFyZ3VtZW50czoKKyAgICBjYXNl
IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5QXJndW1lbnRzOgogICAgIGNhc2UgUmVzb2x2ZVJlc3Vs
dDo6UmVnaXN0ZXI6CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seVJlZ2lzdGVyOgog
ICAgICAgICBpZiAoZHN0ID09IGlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICByZXR1cm4gbW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc29sdmVS
ZXN1bHQubG9jYWwoKSk7CiAKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkJhcnJpZXJMZXhpY2Fs
OgorICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlCYXJyaWVyTGV4aWNhbDoKKyAgICAg
ICAgLy8gRklYTUU6IHdoYXQgdG8gZG8gaGVyZT8KICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6Okxl
eGljYWw6CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUxleGljYWw6CiAgICAgICAg
IHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X3Njb3BlZF92YXIpOwpAQCAtMTQ2
NywxMCArMTY1MywyMiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFN0
YXRpY1ZhcihSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZQogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIoY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVz
b2x2ZVJlc3VsdCwgUmVnaXN0ZXJJRCogdmFsdWUpCiB7CiAgICAgc3dpdGNoIChyZXNvbHZlUmVz
dWx0LnR5cGUoKSkgeworICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlBcmd1bWVudHM6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgY2FzZSBSZXNvbHZlUmVzdWx0
OjpSZWFkT25seUJhcnJpZXJSZWdpc3RlcjoKKyAgICAgICAgZW1pdE9wY29kZShvcF9hc3NlcnRf
dW5zZXQpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5sb2Nh
bCgpLT5pbmRleCgpKTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgY2FzZSBSZXNvbHZl
UmVzdWx0OjpCYXJyaWVyUmVnaXN0ZXI6CisgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpBcmd1bWVu
dHM6CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWdpc3RlcjoKICAgICBjYXNlIFJlc29sdmVS
ZXN1bHQ6OlJlYWRPbmx5UmVnaXN0ZXI6CiAgICAgICAgIHJldHVybiBtb3ZlVG9EZXN0aW5hdGlv
bklmTmVlZGVkKHJlc29sdmVSZXN1bHQubG9jYWwoKSwgdmFsdWUpOwogCisgICAgY2FzZSBSZXNv
bHZlUmVzdWx0OjpCYXJyaWVyTGV4aWNhbDoKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRP
bmx5QmFycmllckxleGljYWw6CisgICAgICAgIC8vIEZJWE1FOiB3aGF0IHRvIGRvIGhlcmU/CiAg
ICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpMZXhpY2FsOgogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6
UmVhZE9ubHlMZXhpY2FsOgogICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9zY29wZWRfdmFyKTsK
QEAgLTE3MjYsNyArMTkyNCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5CiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklE
KiBkc3QsIHVuc2lnbmVkIGluZGV4LCBib29sIGRvTnVsbENoZWNrKQogewotICAgIGNyZWF0ZUFj
dGl2YXRpb25JZk5lY2Vzc2FyeSgpOworICAgIHJlaWZ5U2NvcGVzKCk7CiAgICAgZW1pdE9wY29k
ZShvcF9uZXdfZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKQEAgLTE3NDcsNyArMTk0NSw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9u
KFJlZ2lzdGVySUQqIHIwLCBGdW5jRXhwCiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24g
PSBuLT5ib2R5KCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rp
b25FeHByKG1ha2VGdW5jdGlvbihtX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7CiAgICAgCi0gICAg
Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CisgICAgcmVpZnlTY29wZXMoKTsKICAgICBl
bWl0T3Bjb2RlKG9wX25ld19mdW5jX2V4cCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIw
LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwpAQCAtMTc1OSwz
NCArMTk1Nyw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBCiAgICAgcmV0dXJuIGVtaXRDYWxs
KG9wX2NhbGwsIGRzdCwgZnVuYywgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQpOwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJ
Zk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSdyZSBpbiBzdHJpY3QgbW9kZSB3ZSB0
ZWFyIG9mZiB0aGUgYXJndW1lbnRzIG9uIGZ1bmN0aW9uCi0gICAgLy8gZW50cnksIHNvIHRoZXJl
J3Mgbm8gbmVlZCB0byBjaGVjayBpZiB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGVtCi0gICAgLy8gbm93
Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZW1pdE9wY29kZShvcF9jcmVhdGVfYXJndW1lbnRzKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOwotfQotCi12b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKQotewotICAgIGlm
IChtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2Nv
ZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKQotICAgICAgICByZXR1cm47Ci0gICAgZW1p
dE9wY29kZShvcF9jcmVhdGVfYWN0aXZhdGlvbik7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRDYWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1
bmMsIENhbGxBcmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewogICAgIHJldHVybiBlbWl0Q2Fs
bChvcF9jYWxsX2V2YWwsIGRzdCwgZnVuYywgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOwpAQCAtMTk2OSw5ICsyMTM5LDEwIEBAIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRUb1ByaW1pdGl2ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykK
IAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoU2NvcGUoUmVnaXN0ZXJJ
RCogc2NvcGUpCiB7CisgICAgcmVpZnlTY29wZXMoKTsKICAgICBBU1NFUlQoc2NvcGUtPmlzVGVt
cG9yYXJ5KCkpOwogICAgIENvbnRyb2xGbG93Q29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQu
aXNGaW5hbGx5QmxvY2sgPSBmYWxzZTsKKyAgICBjb250ZXh0LmJsb2NrVHlwZSA9IFdpdGhCbG9j
azsKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKICAgICBtX2R5bmFt
aWNTY29wZURlcHRoKys7CiAKQEAgLTE5ODEsNyArMjE1Miw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKQogdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFBvcFNjb3BlKCkKIHsKICAgICBBU1NFUlQobV9zY29wZUNvbnRl
eHRTdGFjay5zaXplKCkpOwotICAgIEFTU0VSVCghbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCku
aXNGaW5hbGx5QmxvY2spOworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5i
bG9ja1R5cGUgPT0gV2l0aEJsb2NrKTsKIAogICAgIGVtaXRPcGNvZGUob3BfcG9wX3Njb3BlKTsK
IApAQCAtMjAwNyw3ICsyMTc4LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVn
SG9vayhEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW4KIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0LCBSZWdpc3Rl
cklEKiByZXRBZGRyRHN0KQogewogICAgIENvbnRyb2xGbG93Q29udGV4dCBzY29wZTsKLSAgICBz
Y29wZS5pc0ZpbmFsbHlCbG9jayA9IHRydWU7CisgICAgc2NvcGUuYmxvY2tUeXBlID0gRmluYWxs
eUJsb2NrOwogICAgIEZpbmFsbHlDb250ZXh0IGNvbnRleHQgPSB7IHRhcmdldCwgcmV0QWRkckRz
dCB9OwogICAgIHNjb3BlLmZpbmFsbHlDb250ZXh0ID0gY29udGV4dDsKICAgICBtX3Njb3BlQ29u
dGV4dFN0YWNrLmFwcGVuZChzY29wZSk7CkBAIC0yMDE3LDcgKzIxODgsNyBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQoTGFiZWwqIHRhcmdldCwgUmVnaXN0ZXJJ
RCogcmV0QWRkckRzdAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNvbnRleHQo
KQogewogICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7Ci0gICAgQVNTRVJU
KG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmlzRmluYWxseUJsb2NrKTsKKyAgICBBU1NFUlQo
bV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkuYmxvY2tUeXBlID09IEZpbmFsbHlCbG9jayk7CiAg
ICAgQVNTRVJUKG1fZmluYWxseURlcHRoID4gMCk7CiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5y
ZW1vdmVMYXN0KCk7CiAgICAgbV9maW5hbGx5RGVwdGgtLTsKQEAgLTIxMDAsNzAgKzIyNzEsNiBA
QCBMYWJlbFNjb3BlKiBCeXRlY29kZUdlbmVyYXRvcjo6Y29udGludWVUYXJnZXQoY29uc3QgSWRl
bnRpZmllciYgbmFtZSkKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxMYWJlbD4gQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBDb250
cm9sRmxvd0NvbnRleHQqIHRvcFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQqIGJvdHRvbVNjb3Bl
KQotewotICAgIHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3BlKSB7Ci0gICAgICAgIC8vIEZp
cnN0IHdlIGNvdW50IHRoZSBudW1iZXIgb2YgZHluYW1pYyBzY29wZXMgd2UgbmVlZCB0byByZW1v
dmUgdG8gZ2V0Ci0gICAgICAgIC8vIHRvIGEgZmluYWxseSBibG9jay4KLSAgICAgICAgaW50IG5O
b3JtYWxTY29wZXMgPSAwOwotICAgICAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21TY29wZSkg
ewotICAgICAgICAgICAgaWYgKHRvcFNjb3BlLT5pc0ZpbmFsbHlCbG9jaykKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICsrbk5vcm1hbFNjb3BlczsKLSAgICAgICAgICAgIC0t
dG9wU2NvcGU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobk5vcm1hbFNjb3BlcykgewotICAg
ICAgICAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotCi0gICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSBhIG51bWJlciBvZiBkeW5hbWljIHNjb3BlcyB0byBn
ZXQgdG8gdGhlIG5leHQKLSAgICAgICAgICAgIC8vIGZpbmFsbHkgYmxvY2sKLSAgICAgICAgICAg
IGVtaXRPcGNvZGUob3Bfam1wX3Njb3Blcyk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobk5vcm1hbFNjb3Blcyk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRvcFNjb3BlID09IGJv
dHRvbVNjb3BlIHRoZW4gdGhlcmUgaXNuJ3QgYWN0dWFsbHkgYSBmaW5hbGx5IGJsb2NrCi0gICAg
ICAgICAgICAvLyBsZWZ0IHRvIGVtaXQsIHNvIG1ha2UgdGhlIGptcF9zY29wZXMganVtcCBkaXJl
Y3RseSB0byB0aGUgdGFyZ2V0IGxhYmVsCi0gICAgICAgICAgICBpZiAodG9wU2NvcGUgPT0gYm90
dG9tU2NvcGUpIHsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0
LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGFyZ2V0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBPdGhlcndpc2Ug
d2UganVzdCB1c2Ugam1wX3Njb3BlcyB0byBwb3AgYSBncm91cCBvZiBzY29wZXMgYW5kIGdvCi0g
ICAgICAgICAgICAvLyB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgUmVmUHRy
PExhYmVsPiBuZXh0SW5zbiA9IG5ld0xhYmVsKCk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobmV4dEluc24tPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwot
ICAgICAgICAgICAgZW1pdExhYmVsKG5leHRJbnNuLmdldCgpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3BlICYmIHRvcFNjb3BlLT5pc0ZpbmFsbHlC
bG9jaykgewotICAgICAgICAgICAgZW1pdEp1bXBTdWJyb3V0aW5lKHRvcFNjb3BlLT5maW5hbGx5
Q29udGV4dC5yZXRBZGRyRHN0LCB0b3BTY29wZS0+ZmluYWxseUNvbnRleHQuZmluYWxseUFkZHIp
OwotICAgICAgICAgICAgLS10b3BTY29wZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
ZW1pdEp1bXAodGFyZ2V0KTsKLX0KLQotUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRKdW1wU2NvcGVzKExhYmVsKiB0YXJnZXQsIGludCB0YXJnZXRTY29wZURlcHRoKQot
ewotICAgIEFTU0VSVChzY29wZURlcHRoKCkgLSB0YXJnZXRTY29wZURlcHRoID49IDApOwotICAg
IEFTU0VSVCh0YXJnZXQtPmlzRm9yd2FyZCgpKTsKLQotICAgIHNpemVfdCBzY29wZURlbHRhID0g
c2NvcGVEZXB0aCgpIC0gdGFyZ2V0U2NvcGVEZXB0aDsKLSAgICBBU1NFUlQoc2NvcGVEZWx0YSA8
PSBtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7Ci0gICAgaWYgKCFzY29wZURlbHRhKQotICAg
ICAgICByZXR1cm4gZW1pdEp1bXAodGFyZ2V0KTsKLQotICAgIGlmIChtX2ZpbmFsbHlEZXB0aCkK
LSAgICAgICAgcmV0dXJuIGVtaXRDb21wbGV4SnVtcFNjb3Blcyh0YXJnZXQsICZtX3Njb3BlQ29u
dGV4dFN0YWNrLmxhc3QoKSwgJm1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpIC0gc2NvcGVEZWx0
YSk7Ci0KLSAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0KLSAgICBl
bWl0T3Bjb2RlKG9wX2ptcF9zY29wZXMpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29w
ZURlbHRhKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBp
bnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICByZXR1cm4gdGFyZ2V0OwotfQotCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFByb3BlcnR5TmFtZXMoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBpLCBSZWdpc3RlcklEKiBzaXplLCBM
YWJlbCogYnJlYWtUYXJnZXQpCiB7CiAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpOwpAQCAtMjE5NiwxMiArMjMwMywxMiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENhdGNoKFJlZ2lzdGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogc3Rhcgog
ICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOwogI2lmIEVOQUJMRShKSVQpCiAjaWYgRU5BQkxF
KExMSU5UKQotICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQt
PmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCAr
IG1fYmFzZVNjb3BlRGVwdGgsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmxsaW50
X29wX2NhdGNoKSkpIH07CisgICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwg
MCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29w
ZURlcHRoICsgbV9ibG9ja1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRp
b25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZsbGludF9vcF9jYXRjaCkpKSB9OwogI2Vsc2UKLSAgICBI
YW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+YmluZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBp
bnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURl
cHRoLCBDb2RlTG9jYXRpb25MYWJlbCgpIH07CisgICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3Rh
cnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBt
X2R5bmFtaWNTY29wZURlcHRoICsgbV9ibG9ja1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRo
LCBDb2RlTG9jYXRpb25MYWJlbCgpIH07CiAjZW5kaWYKICNlbHNlCi0gICAgSGFuZGxlckluZm8g
aW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCB9OworICAg
IEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCks
IGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29w
ZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCB9OwogI2VuZGlmCiAKICAgICBtX2NvZGVCbG9jay0+
YWRkRXhjZXB0aW9uSGFuZGxlcihpbmZvKTsKQEAgLTIyMzMsMTcgKzIzNDAsMTkzIEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRTdWJyb3V0aW5lUmV0dXJuKFJlZ2lzdGVySUQqIHJldEFk
ZHJTcmMpCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJldEFkZHJTcmMtPmluZGV4KCkpOwog
fQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaE5ld1Njb3BlKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQorY2xh
c3MgUmVpZmljYXRpb25Xb3JrbGlzdEl0ZW0geworcHVibGljOgorICAgIFJlaWZpY2F0aW9uV29y
a2xpc3RJdGVtKEpTT2JqZWN0ICpzY29wZVRlbXBsYXRlLCBpbnQgaW5kZXgpCisgICAgICAgIDog
bV9zY29wZVRlbXBsYXRlKHNjb3BlVGVtcGxhdGUpLCBtX2luZGV4KGluZGV4KQorICAgIHsgfQor
CisgICAgSlNPYmplY3QqIHNjb3BlVGVtcGxhdGUoKSB7IHJldHVybiBtX3Njb3BlVGVtcGxhdGU7
IH0KKyAgICBpbnQgaW5kZXgoKSB7IHJldHVybiBtX2luZGV4OyB9CisKK3ByaXZhdGU6CisgICAg
SlNPYmplY3QqIG1fc2NvcGVUZW1wbGF0ZTsKKyAgICBpbnQgbV9pbmRleDsKK307CisKK3ZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlaWZ5U2NvcGVzKCkKK3sKKyAgICBWZWN0b3I8UmVpZmljYXRp
b25Xb3JrbGlzdEl0ZW0+IHdvcmtsaXN0OworICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0g
bV9zY29wZUNoYWluLT5iZWdpbigpOworICAgIGludCBpOworCisgICAgLy8gRmlyc3QsIHdhbGsg
dGhlIHNjb3BlIGNoYWluIHRvIHNlZSB3aGF0IG1pZ2h0IG5lZWQgcmVpZmljYXRpb24uCisgICAg
Zm9yIChpID0gc2NvcGVEZXB0aCgpLTE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIHN3aXRjaCAo
bV9zY29wZUNvbnRleHRTdGFja1tpXS5ibG9ja1R5cGUpIHsKKyAgICAgICAgY2FzZSBXaXRoQmxv
Y2s6CisgICAgICAgICAgICAvLyBQdXNoaW5nIGEgYHdpdGgnIGJsb2NrIGZvcmNlcyBvdXRlciBz
Y29wZXMgdG8gYmUgcmVpZmllZCwgc28gd2UKKyAgICAgICAgICAgIC8vIGRvbid0IG5lZWQgdG8g
ZG8gc28gaGVyZS4KKyAgICAgICAgICAgIGdvdG8gcmVpZnk7CisgICAgICAgIGNhc2UgRmluYWxs
eUJsb2NrOgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgU2NvcGVCbG9jazoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICBKU09iamVjdCogY3VycmVudFNj
b3BlID0gaXRlci0+Z2V0KCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50U2NvcGUtPmlzU3RhdGlj
U2NvcGVPYmplY3QoKSk7CisgICAgICAgICsraXRlcjsKKworICAgICAgICBzd2l0Y2ggKG1fc2Nv
cGVDb250ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0LnJlaWZ5TW9kZSkgeworICAgICAgICBjYXNl
IFNjb3BlQ29udGV4dDo6RWFnZXJseVJlaWZ5OgorICAgICAgICAgICAgLy8gTGlrZSBhIGB3aXRo
JyBibG9jaywgZW50ZXJpbmcgYW4gRWFnZXJseVJlaWZ5IGJsb2NrIGZvcmNlcworICAgICAgICAg
ICAgLy8gcmVpZmljYXRpb24sIHNvIHdlIG5lZWQgbG9vayBubyBmYXJ0aGVyLgorICAgICAgICAg
ICAgZ290byByZWlmeTsKKyAgICAgICAgY2FzZSBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5Ogor
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKFJlaWZpY2F0aW9uV29ya2xpc3RJdGVtKGN1cnJl
bnRTY29wZSwgbV9zY29wZUNvbnRleHRTdGFja1tpXS5zY29wZUNvbnRleHQucmVpZmllZFNjb3Bl
UmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgU2Nv
cGVDb250ZXh0OjpOZXZlclJlaWZ5OgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworcmVpZnk6CisgICAgLy8gSWYgd2UgdHJhdmVyc2Vk
IHRocm91Z2ggdGhlIHdob2xlIGJsb2NrIHNjb3BlIGNoYWluLCBwZXJoYXBzIHdlIG5lZWQgdG8K
KyAgICAvLyByZWlmeSB0aGUgYWN0aXZhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uLgorICAgIGlmIChp
IDwgMCAmJiAhbV9oYXNDcmVhdGVkQWN0aXZhdGlvbiAmJiBtX2NvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpKSB7CisgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FjdGl2YXRpb24p
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXItPmlu
ZGV4KCkpOworICAgIH0KKworICAgIHdoaWxlICh3b3JrbGlzdC5zaXplKCkpIHsKKyAgICAgICAg
SlNPYmplY3QqIHNjb3BlVGVtcGxhdGUgPSB3b3JrbGlzdC5sYXN0KCkuc2NvcGVUZW1wbGF0ZSgp
OworICAgICAgICBpbnQgaW5kZXggPSB3b3JrbGlzdC5sYXN0KCkuaW5kZXgoKTsKKyAgICAgICAg
d29ya2xpc3QucmVtb3ZlTGFzdCgpOworCisgICAgICAgIFJlZ2lzdGVySUQqIHRlbXBsID0gZW1p
dExvYWQoMCwgSlNWYWx1ZShzY29wZVRlbXBsYXRlKSk7CisgICAgICAgIGVtaXRPcGNvZGUob3Bf
cmVpZnlfc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGVtcGwtPmluZGV4KCkpOworICAgIH0KK30KKwor
UGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wU2NvcGVzKExhYmVs
KiB0YXJnZXQsIGludCB0YXJnZXRTY29wZURlcHRoKQoreworICAgIEFTU0VSVChzY29wZURlcHRo
KCkgLSB0YXJnZXRTY29wZURlcHRoID49IDApOworICAgIEFTU0VSVCh0YXJnZXQtPmlzRm9yd2Fy
ZCgpKTsKKworICAgIHNpemVfdCBzY29wZURlbHRhID0gc2NvcGVEZXB0aCgpIC0gdGFyZ2V0U2Nv
cGVEZXB0aDsKKyAgICBBU1NFUlQoc2NvcGVEZWx0YSA8PSBtX3Njb3BlQ29udGV4dFN0YWNrLnNp
emUoKSk7CisKKyAgICB3aGlsZSAoc2NvcGVEZWx0YS0tKSB7CisgICAgICAgIENvbnRyb2xGbG93
Q29udGV4dCogY29udGV4dCA9ICZtX3Njb3BlQ29udGV4dFN0YWNrW3RhcmdldFNjb3BlRGVwdGgg
KyBzY29wZURlbHRhXTsKKyAgICAgICAgc3dpdGNoIChjb250ZXh0LT5ibG9ja1R5cGUpIHsKKyAg
ICAgICAgY2FzZSBXaXRoQmxvY2s6CisgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX3BvcF9zY29w
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaW5hbGx5QmxvY2s6CisgICAg
ICAgICAgICBlbWl0SnVtcFN1YnJvdXRpbmUoY29udGV4dC0+ZmluYWxseUNvbnRleHQucmV0QWRk
ckRzdCwgY29udGV4dC0+ZmluYWxseUNvbnRleHQuZmluYWxseUFkZHIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU2NvcGVCbG9jazoKKyAgICAgICAgICAgIHN3aXRjaCAoY29u
dGV4dC0+c2NvcGVDb250ZXh0LnJlaWZ5TW9kZSkgeworICAgICAgICAgICAgY2FzZSBTY29wZUNv
bnRleHQ6OkVhZ2VybHlSZWlmeToKKyAgICAgICAgICAgIGNhc2UgU2NvcGVDb250ZXh0OjpMYXpp
bHlSZWlmeToKKyAgICAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX3RlYXJfb2ZmX3Njb3BlKTsK
KyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC0+c2NvcGVDb250
ZXh0LnJlaWZpZWRTY29wZVJlZ2lzdGVySW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LS07CisgICAgfQorCisgICAg
cmV0dXJuIGVtaXRKdW1wKHRhcmdldCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1
c2hCbG9ja1Njb3BlKEpTU3RhdGljU2NvcGVPYmplY3QgKnNjb3BlVGVtcGxhdGUsIFNjb3BlQ29u
dGV4dDo6UmVpZnlNb2RlIHJlaWZ5TW9kZSkKIHsKICAgICBDb250cm9sRmxvd0NvbnRleHQgY29u
dGV4dDsKLSAgICBjb250ZXh0LmlzRmluYWxseUJsb2NrID0gZmFsc2U7CisgICAgY29udGV4dC5i
bG9ja1R5cGUgPSBTY29wZUJsb2NrOworICAgIGNvbnRleHQuc2NvcGVDb250ZXh0LnJlaWZpZWRT
Y29wZVJlZ2lzdGVySW5kZXggPSBtX25leHRCbG9ja1Njb3BlZFJlZ2lzdGVyOworICAgIGNvbnRl
eHQuc2NvcGVDb250ZXh0LnJlaWZ5TW9kZSA9IHJlaWZ5TW9kZTsKKwogICAgIG1fc2NvcGVDb250
ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgIG1fZHluYW1pY1Njb3BlRGVwdGgrKzsKKyAg
ICBtX3Njb3BlQ2hhaW4uc2V0KCptX3Njb3BlQ2hhaW4tPmdsb2JhbERhdGEsIG1fc2NvcGVDaGFp
bi0+cHVzaChzY29wZVRlbXBsYXRlKSk7CisgICAgbV9ibG9ja1Njb3BlRGVwdGgrKzsKKworICAg
IC8vIE5vdyBhbGxvY2F0ZSBhIHJlZ2lzdGVyIGZvciB0aGUgYmxvY2sgc2NvcGUgb2JqZWN0IGl0
c2VsZiwgaWYgbmVjZXNzYXJ5LgorICAgIC8vIFdlIHJlaWZ5IGl0IGxhemlseSBpZiBwb3NzaWJs
ZS4gSWYgd2UgaGF2ZSB0byByZWlmeSBpdCBlYWdlcmx5LCB3ZSBkbyBzbworICAgIC8vIG5vdy4K
KyAgICBzd2l0Y2ggKHJlaWZ5TW9kZSkgeworICAgIGNhc2UgU2NvcGVDb250ZXh0OjpFYWdlcmx5
UmVpZnk6CisgICAgICAgIC8vIFJlaWZ5IHRoZSBzY29wZSBub3cuCisgICAgICAgIHJlaWZ5U2Nv
cGVzKCk7CisgICAgICAgIG1fbmV4dEJsb2NrU2NvcGVkUmVnaXN0ZXIrKzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5OgorICAgICAgICAvLyBNYXJr
IHRoZSBzY29wZSByZWdpc3RlciBhcyB1bnNldCwgc28gbGF0ZXIgY29kZSBjYW4gZGV0ZWN0IGlm
IGl0IHdhcworICAgICAgICAvLyBuZXZlciByZWlmaWVkLgorICAgICAgICBlbWl0T3Bjb2RlKG9w
X3Vuc2V0KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbmV4dEJsb2NrU2NvcGVk
UmVnaXN0ZXIrKyk7IC8vIEZvciB0aGUgcmVpZmllZCBzY29wZS4KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CiAKLSAgICBlbWl0T3Bjb2RlKG9wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRk
Q29uc3RhbnQocHJvcGVydHkpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmlu
ZGV4KCkpOworICAgIC8vIE5vdyBpbml0aWFsaXplIHRoZSB2YXJpYWJsZXMuIEluIHRoZSBmdXR1
cmUgd2UnbGwgc2h1ZmZsZSBhcm91bmQgdGhlCisgICAgLy8gc3ltYm9sIHRhYmxlIHRvIHB1dCB0
aGUgY2FwdHVyZWQgdmFyaWFibGVzIGZpcnN0LCBhbmQgcG9wQmxvY2tTY29wZSB3aWxsCisgICAg
Ly8gcmVtb3ZlIHN5bWJvbCB0YWJsZSBlbnRyaWVzIGZvciB1bmNhcHR1cmVkIHZhcmlhYmxlcy4K
KyAgICBzaXplX3QgbiA9IHNjb3BlVGVtcGxhdGUtPnN5bWJvbFRhYmxlKCkuc2l6ZSgpOworICAg
IHdoaWxlIChuLS0pIHsKKyAgICAgICAgZW1pdE9wY29kZShvcF91bnNldCk7CisgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChtX25leHRCbG9ja1Njb3BlZFJlZ2lzdGVyKyspOworICAgIH0K
K30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wQmxvY2tTY29wZSgpCit7CisgICAgQVNT
RVJUKG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKKyAgICBDb250cm9sRmxvd0NvbnRleHQg
Y29udGV4dCA9IG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpOworICAgIEFTU0VSVChjb250ZXh0
LmJsb2NrVHlwZSA9PSBTY29wZUJsb2NrKTsKKworICAgIEpTT2JqZWN0KiBzY29wZSA9IG1fc2Nv
cGVDaGFpbi0+YmVnaW4oKS0+Z2V0KCk7CisgICAgQVNTRVJUKHNjb3BlLT5pc1N0YXRpY1Njb3Bl
T2JqZWN0KCkpOworICAgIGludCB2YXJpYWJsZUNvdW50ID0gc3RhdGljX2Nhc3Q8SlNTdGF0aWNT
Y29wZU9iamVjdCo+KHNjb3BlKS0+c3ltYm9sVGFibGUoKS5zaXplKCk7CisKKyAgICBzd2l0Y2gg
KGNvbnRleHQuc2NvcGVDb250ZXh0LnJlaWZ5TW9kZSkgeworICAgIGNhc2UgU2NvcGVDb250ZXh0
OjpFYWdlcmx5UmVpZnk6CisgICAgY2FzZSBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5OgorICAg
ICAgICBtX25leHRCbG9ja1Njb3BlZFJlZ2lzdGVyIC09IHZhcmlhYmxlQ291bnQgKyAxOworICAg
ICAgICBBU1NFUlQobV9uZXh0QmxvY2tTY29wZWRSZWdpc3RlciA9PSBjb250ZXh0LnNjb3BlQ29u
dGV4dC5yZWlmaWVkU2NvcGVSZWdpc3RlckluZGV4KTsKKyAgICAgICAgZW1pdE9wY29kZShvcF90
ZWFyX29mZl9zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX25leHRCbG9j
a1Njb3BlZFJlZ2lzdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY29wZUNvbnRleHQ6
Ok5ldmVyUmVpZnk6CisgICAgICAgIG1fbmV4dEJsb2NrU2NvcGVkUmVnaXN0ZXIgLT0gdmFyaWFi
bGVDb3VudDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fYmxvY2tTY29wZURl
cHRoLS07CisgICAgbV9zY29wZUNoYWluLnNldCgqbV9zY29wZUNoYWluLT5nbG9iYWxEYXRhLCBt
X3Njb3BlQ2hhaW4tPnBvcCgpKTsKKyAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnJlbW92ZUxhc3Qo
KTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YmVnaW5Td2l0Y2goUmVnaXN0ZXJJRCog
c2NydXRpbmVlUmVnaXN0ZXIsIFN3aXRjaEluZm86OlN3aXRjaFR5cGUgdHlwZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAppbmRleCA5ZTk2YWFjNGQxMmNiZjAyNTI5MTNiNmZlY2U4YzhiNGJjOGM0MzZjLi40MjM4ZWI4
Y2E4MDA5MGFkMjk2MWYyNTgyZWE0MGYyOTY2MTQ1OTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC01MCw2
ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIElkZW50aWZpZXI7CiAgICAgY2xh
c3MgTGFiZWw7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CisgICAgY2xhc3MgSlNTdGF0aWNT
Y29wZU9iamVjdDsKIAogICAgIGNsYXNzIENhbGxBcmd1bWVudHMgewogICAgIHB1YmxpYzoKQEAg
LTc1LDkgKzc2LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiByZXRB
ZGRyRHN0OwogICAgIH07CiAKKyAgICBzdHJ1Y3QgU2NvcGVDb250ZXh0IHsKKyAgICAgICAgZW51
bSBSZWlmeU1vZGUgeyBFYWdlcmx5UmVpZnksIExhemlseVJlaWZ5LCBOZXZlclJlaWZ5IH07Cisg
ICAgICAgIFJlaWZ5TW9kZSByZWlmeU1vZGU7CisgICAgICAgIGludCByZWlmaWVkU2NvcGVSZWdp
c3RlckluZGV4OworICAgIH07CisKKyAgICBlbnVtIEJsb2NrVHlwZSB7IFdpdGhCbG9jaywgRmlu
YWxseUJsb2NrLCBTY29wZUJsb2NrIH07CisKICAgICBzdHJ1Y3QgQ29udHJvbEZsb3dDb250ZXh0
IHsKLSAgICAgICAgYm9vbCBpc0ZpbmFsbHlCbG9jazsKLSAgICAgICAgRmluYWxseUNvbnRleHQg
ZmluYWxseUNvbnRleHQ7CisgICAgICAgIGVudW0gQmxvY2tUeXBlIGJsb2NrVHlwZTsKKyAgICAg
ICAgdW5pb24geworICAgICAgICAgICAgRmluYWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7Cisg
ICAgICAgICAgICBTY29wZUNvbnRleHQgc2NvcGVDb250ZXh0OworICAgICAgICB9OwogICAgIH07
CiAKICAgICBzdHJ1Y3QgRm9ySW5Db250ZXh0IHsKQEAgLTEwNiwxOCArMTE4LDM1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgLy8gVGhlIHJlc29sdmVkIGJpbmRpbmcgaXMgaW1tdXRh
YmxlLgogICAgICAgICAgICAgUmVhZE9ubHlGbGFnID0gMHgyMCwKICAgICAgICAgICAgIC8vIFRo
ZSBiYXNlIG9iamVjdCBpcyB0aGUgZ2xvYmFsIG9iamVjdC4KLSAgICAgICAgICAgIEdsb2JhbEZs
YWcgPSAweDQwCisgICAgICAgICAgICBHbG9iYWxGbGFnID0gMHg0MCwKKyAgICAgICAgICAgIC8v
IFRoZSBpZGVudGlmaWVyIGlzIGFjdHVhbGx5IHRoZSBhcmd1bWVudHMgb2JqZWN0LgorICAgICAg
ICAgICAgQXJndW1lbnRzRmxhZyA9IDB4ODAsCisgICAgICAgICAgICAvLyBSZWFkcyBvZiB0aGlz
IHZhcmlhYmxlIG5lZWQgZHluYW1pYyBjaGVja3MgdG8gZW5zdXJlIGl0IGlzIHNldC4KKyAgICAg
ICAgICAgIC8vIElmIHRoaXMgdmFyaWFibGUgaXMgcmVhZC1vbmx5LCB3cml0ZXMgdG8gdGhpcyB2
YXJpYWJsZSBuZWVkCisgICAgICAgICAgICAvLyBkeW5hbWljIGNoZWNrcyB0byBlbnN1cmUgdGhl
IHZhcmlhYmxlIGlzIHVuc2VyLgorICAgICAgICAgICAgQmFycmllckZsYWcgPSAweDEwMAogICAg
ICAgICB9OwogICAgICAgICBlbnVtIFR5cGUgewogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5
IGlzIGxvY2FsLCBhbmQgc3RvcmVkIGluIGEgcmVnaXN0ZXIuCiAgICAgICAgICAgICBSZWdpc3Rl
ciA9IFJlZ2lzdGVyRmxhZyB8IFN0YXRpY0ZsYWcsCiAgICAgICAgICAgICAvLyBBIHJlYWQtb25s
eSBsb2NhbCwgY3JlYXRlZCBieSAiY29uc3QiLgogICAgICAgICAgICAgUmVhZE9ubHlSZWdpc3Rl
ciA9IFJlZ2lzdGVyRmxhZyB8IFJlYWRPbmx5RmxhZyB8IFN0YXRpY0ZsYWcsCisgICAgICAgICAg
ICAvLyBSZWFkcyBvZiB0aGlzIHJlZ2lzdGVyIG5lZWQgZHluYW1pYyBjaGVja3MuCisgICAgICAg
ICAgICBCYXJyaWVyUmVnaXN0ZXIgPSBSZWdpc3RlckZsYWcgfCBTdGF0aWNGbGFnIHwgQmFycmll
ckZsYWcsCisgICAgICAgICAgICAvLyBSZWFkcyBvZiBhbmQgd3JpdGVzIHRvIHRoaXMgcmVnaXN0
ZXIgbmVlZCBkeW5hbWljIGNoZWNrcy4KKyAgICAgICAgICAgIFJlYWRPbmx5QmFycmllclJlZ2lz
dGVyID0gUmVnaXN0ZXJGbGFnIHwgUmVhZE9ubHlGbGFnIHwgU3RhdGljRmxhZyB8IEJhcnJpZXJG
bGFnLAorICAgICAgICAgICAgLy8gVGhlICJhcmd1bWVudHMiIG9iamVjdC4KKyAgICAgICAgICAg
IEFyZ3VtZW50cyA9IEFyZ3VtZW50c0ZsYWcgfCBSZWdpc3RlckZsYWcgfCBTdGF0aWNGbGFnLAor
ICAgICAgICAgICAgUmVhZE9ubHlBcmd1bWVudHMgPSBBcmd1bWVudHNGbGFnIHwgUmVnaXN0ZXJG
bGFnIHwgUmVhZE9ubHlGbGFnIHwgU3RhdGljRmxhZywKICAgICAgICAgICAgIC8vIFRoZSBwcm9w
ZXJ0eSBpcyBzdGF0aWNhbGx5IHNjb3BlZCBmcmVlIHZhcmlhYmxlLiBJdHMgY29vcmRpbmF0ZXMK
ICAgICAgICAgICAgIC8vIGFyZSBpbiAiaW5kZXgiIGFuZCAiZGVwdGgiLgogICAgICAgICAgICAg
TGV4aWNhbCA9IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFN0YXRpY0ZsYWcsCiAgICAgICAg
ICAgICAvLyBBIHJlYWQtb25seSBMZXhpY2FsLCBjcmVhdGVkIGJ5ICJjb25zdCIuCiAgICAgICAg
ICAgICBSZWFkT25seUxleGljYWwgPSBJbmRleGVkRmxhZyB8IFNjb3BlZEZsYWcgfCBSZWFkT25s
eUZsYWcgfCBTdGF0aWNGbGFnLAorICAgICAgICAgICAgLy8gUmVhZHMgb2YgdGhpcyBsZXhpY2Fs
IG5lZWQgZHluYW1pYyBjaGVja3MuCisgICAgICAgICAgICBCYXJyaWVyTGV4aWNhbCA9IEluZGV4
ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFN0YXRpY0ZsYWcgfCBCYXJyaWVyRmxhZywKKyAgICAgICAg
ICAgIC8vIFJlYWQgb2YgYW5kIHdyaXRlcyB0byB0aGlzIGxleGljYWwgbmVlZCBkeW5hbWljIGNo
ZWNrcy4KKyAgICAgICAgICAgIFJlYWRPbmx5QmFycmllckxleGljYWwgPSBJbmRleGVkRmxhZyB8
IFNjb3BlZEZsYWcgfCBSZWFkT25seUZsYWcgfCBTdGF0aWNGbGFnIHwgQmFycmllckZsYWcsCiAg
ICAgICAgICAgICAvLyBUaGUgcHJvcGVydHkgd2FzIG5vdCBib3VuZCBsZXhpY2FsbHksIHNvIGF0
IHJ1bnRpbWUgd2Ugc2hvdWxkCiAgICAgICAgICAgICAvLyBsb29rIGRpcmVjdGx5IGluIHRoZSBn
bG9iYWwgb2JqZWN0LgogICAgICAgICAgICAgR2xvYmFsID0gR2xvYmFsRmxhZywKQEAgLTE0Myw2
ICsxNzIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBEeW5hbWljTGV4aWNhbCA9
IER5bmFtaWNGbGFnIHwgSW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnLAogICAgICAgICAgICAgLy8g
TGlrZSBSZWFkT25seUxleGljYWwsIGJ1dCB3aXRoIGludGVydmVuaW5nIG5vbi1zdHJpY3QgYGV2
YWwnLgogICAgICAgICAgICAgRHluYW1pY1JlYWRPbmx5TGV4aWNhbCA9IER5bmFtaWNGbGFnIHwg
SW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnIHwgUmVhZE9ubHlGbGFnLAorICAgICAgICAgICAgLy8g
TGlrZSBCYXJyaWVyTGV4aWNhbCwgYnV0IHdpdGggaW50ZXJ2ZW5pbmcgbm9uLXN0cmljdCBgZXZh
bCcuCisgICAgICAgICAgICBEeW5hbWljQmFycmllckxleGljYWwgPSBEeW5hbWljRmxhZyB8IElu
ZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IEJhcnJpZXJGbGFnLAorICAgICAgICAgICAgLy8gTGlr
ZSBSZWFkT25seUJhcnJpZXJMZXhpY2FsLCBidXQgd2l0aCBpbnRlcnZlbmluZyBub24tc3RyaWN0
IGBldmFsJy4KKyAgICAgICAgICAgIER5bmFtaWNSZWFkT25seUJhcnJpZXJMZXhpY2FsID0gRHlu
YW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IFNjb3BlZEZsYWcgfCBSZWFkT25seUZsYWcgfCBCYXJy
aWVyRmxhZywKICAgICAgICAgICAgIC8vIExpa2UgR2xvYmFsLCBidXQgd2l0aCBpbnRlcnZlbmlu
ZyBub24tc3RyaWN0IGBldmFsJy4gQXMgd2l0aCAKICAgICAgICAgICAgIC8vIER5bmFtaWMsIFNj
b3BlRmxhZyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCAiZGVwdGgiIGRvZXMgaW5kZWVkCiAgICAg
ICAgICAgICAvLyBzdG9yZSBhIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBiZWZvcmUgZG9pbmcg
dGhlIGR5bmFtaWMgY2hlY2tzLgpAQCAtMjAwLDYgKzIzMyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIGlzU2NvcGVkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgU2NvcGVkRmxh
ZzsgfQogICAgICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiAobV90eXBlICYg
UmVhZE9ubHlGbGFnKSAmJiAhaXNEeW5hbWljKCk7IH0KICAgICAgICAgYm9vbCBpc0dsb2JhbCgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIEdsb2JhbEZsYWc7IH0KKyAgICAgICAgYm9vbCBpc0Fy
Z3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIEFyZ3VtZW50c0ZsYWc7IH0KIAogICAg
IHByaXZhdGU6CiAgICAgICAgIFJlc29sdmVSZXN1bHQodW5zaWduZWQgdHlwZSwgUmVnaXN0ZXJJ
RCogbG9jYWwsIGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCBKU09iamVjdCogZ2xvYmFsT2JqZWN0
KQpAQCAtMjQwLDYgKzI3NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIH5CeXRlY29k
ZUdlbmVyYXRvcigpOwogICAgICAgICAKKyAgICAgICAgdm9pZCBhbGxvY2F0ZUJsb2NrU2NvcGVk
VmFyaWFibGVzKCk7CisKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJz
JiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1fZ2xvYmFsRGF0YS0+cHJvcGVydHlO
YW1lczsgfQogCkBAIC0yNTEsMTEgKzI4NywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICB2b2lkIHNldElzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihib29sIGlzTnVtZXJpY0NvbXBhcmVG
dW5jdGlvbik7CiAKLSAgICAgICAgYm9vbCB3aWxsUmVzb2x2ZVRvQXJndW1lbnRzKGNvbnN0IElk
ZW50aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogdW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1
bWVudHMoKTsKKyAgICAgICAgZW51bSBSZXNvbHZlRmxhZ3MgeworICAgICAgICAgICAgRG9udENy
ZWF0ZUFyZ3VtZW50c0ZsYWcgPSAxIDw8IDAKKyAgICAgICAgfTsKIAogICAgICAgICAvLyBSZXNv
bHZlIGFuIGlkZW50aWZpZXIsIGdpdmVuIHRoZSBjdXJyZW50IGNvbXBpbGUtdGltZSBzY29wZSBj
aGFpbi4KLSAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlKGNvbnN0IElkZW50aWZpZXImKTsK
KyAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlKGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25l
ZCByZXNvbHZlRmxhZ3MgPSAwKTsKICAgICAgICAgLy8gQmVoYXZlcyBhcyByZXNvbHZlIGRvZXMs
IGJ1dCBpZ25vcmVzIGR5bmFtaWMgc2NvcGUgYXMKICAgICAgICAgLy8gZHluYW1pYyBzY29wZSBz
aG91bGQgbm90IGludGVyZmVyZSB3aXRoIGNvbnN0IGluaXRpYWxpc2F0aW9uCiAgICAgICAgIFJl
c29sdmVSZXN1bHQgcmVzb2x2ZUNvbnN0RGVjbChjb25zdCBJZGVudGlmaWVyJik7CkBAIC00OTQs
MTQgKzUzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRUaHJvd1Jl
ZmVyZW5jZUVycm9yKGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpOwogCi0gICAgICAgIHZvaWQgZW1p
dFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
LCBSZWdpc3RlcklEKiB2YWx1ZSk7CisgICAgICAgIHZvaWQgcmVpZnlTY29wZXMoKTsKKyAgICAg
ICAgdm9pZCBwdXNoQmxvY2tTY29wZShKU1N0YXRpY1Njb3BlT2JqZWN0KiwgU2NvcGVDb250ZXh0
OjpSZWlmeU1vZGUpOworICAgICAgICB2b2lkIHBvcEJsb2NrU2NvcGUoKTsKIAogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKTsKICAgICAgICAgdm9p
ZCBlbWl0UG9wU2NvcGUoKTsKIAogICAgICAgICB2b2lkIGVtaXREZWJ1Z0hvb2soRGVidWdIb29r
SUQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSk7CiAKLSAgICAgICAgaW50IHNjb3BlRGVw
dGgoKSB7IHJldHVybiBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9maW5hbGx5RGVwdGg7IH0KKyAg
ICAgICAgaW50IHNjb3BlRGVwdGgoKSB7IHJldHVybiBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9i
bG9ja1Njb3BlRGVwdGggKyBtX2ZpbmFsbHlEZXB0aDsgfQogICAgICAgICBib29sIGhhc0ZpbmFs
aXNlcigpIHsgcmV0dXJuIG1fZmluYWxseURlcHRoICE9IDA7IH0KIAogICAgICAgICB2b2lkIHB1
c2hGaW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0LCBSZWdpc3RlcklEKiByZXR1cm5BZGRyRHN0
KTsKQEAgLTU0Miw4ICs1ODEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQUxXQVlTX0lO
TElORSB2b2lkIHJld2luZEJpbmFyeU9wKCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBy
ZXdpbmRVbmFyeU9wKCk7CiAKLSAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1pdENvbXBsZXhK
dW1wU2NvcGVzKExhYmVsKiB0YXJnZXQsIENvbnRyb2xGbG93Q29udGV4dCogdG9wU2NvcGUsIENv
bnRyb2xGbG93Q29udGV4dCogYm90dG9tU2NvcGUpOwotCiAgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxkb3VibGUsIEpTVmFsdWU+IE51bWJlck1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZ0ltcGwqLCBKU1N0cmluZyosIElkZW50aWZpZXJSZXBIYXNoPiBJZGVudGlmaWVyU3RyaW5n
TWFwOwogICAgICAgICAKQEAgLTYxNywzNSArNjU0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1
Y3Rpb25zOyB9CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJuICpt
X3N5bWJvbFRhYmxlOyB9CiAKLSAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2R5bmFtaWNTY29wZURlcHRoKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1fY29kZVR5cGUgIT0gRnVu
Y3Rpb25Db2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGNhbk9wdGltaXplTm9uTG9j
YWxzKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAobV9jb2RlVHlw
ZSA9PSBFdmFsQ29kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+dXNlc0V2
YWwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93RXhwcmVz
c2lvblRvb0RlZXBFeGNlcHRpb24oKTsKIAotICAgICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lm
TmVjZXNzYXJ5KCk7Ci0gICAgICAgIHZvaWQgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lz
dGVySUQqKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVj
dGlvbnM7CkBAIC02NjYsNiArNjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lz
dGVySUQgbV9pZ25vcmVkUmVzdWx0UmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVySUQgbV90aGlz
UmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fYWN0aXZhdGlvblJlZ2lzdGVyOworICAg
ICAgICBpbnQgbV9uZXh0QmxvY2tTY29wZWRSZWdpc3RlcjsKICAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NvbnN0YW50UG9vbFJlZ2lzdGVyczsKICAgICAgICAgU2Vn
bWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NhbGxlZVJlZ2lzdGVyczsKICAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX3BhcmFtZXRlcnM7CkBAIC02NzQsNiAr
Njg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2xh
c3RWYXI7CiAgICAgICAgIGludCBtX2ZpbmFsbHlEZXB0aDsKICAgICAgICAgaW50IG1fZHluYW1p
Y1Njb3BlRGVwdGg7CisgICAgICAgIGludCBtX2Jsb2NrU2NvcGVEZXB0aDsKICAgICAgICAgaW50
IG1fYmFzZVNjb3BlRGVwdGg7CiAgICAgICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApp
bmRleCBiYjk1Y2FmYjY4MjYzYTliZjUxMGFhNGU0MjI3ZjVlYTQzYTNlZTk4Li42Yjg4MmQ4ZTcz
NDc3NzQ2NDM5ZmYxMmU4N2EwNjg4NDFmZTYwOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0zMTgsMTAgKzMxOCwx
MyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogCiBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNz
b3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogewotICAgIGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSAmJiBnZW5lcmF0
b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50cyhzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFz
ZSktPmlkZW50aWZpZXIoKSkpIHsKLSAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsgICAgCi0gICAg
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50QnlWYWwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgZ2VuZXJhdG9yLnVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRz
KCksIHByb3BlcnR5KTsKKyAgICBpZiAobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAg
ICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUoc3RhdGlj
X2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCksIEJ5dGVjb2RlR2VuZXJh
dG9yOjpEb250Q3JlYXRlQXJndW1lbnRzRmxhZyk7CisgICAgICAgIGlmIChyZXNvbHZlUmVzdWx0
LmlzQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAg
ICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRCeVZhbChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVzdWx0LmxvY2FsKCksIHByb3BlcnR5KTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25t
ZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKQEAgLTMzNCwxNyArMzM3LDE0
IEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAKIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKLSAgICBpZiAobV9pZGVudCA9PSBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgewotICAgICAgICBpZiAoIW1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAg
ICAgZ290byBub25Bcmd1bWVudHNQYXRoOwotICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZU5v
ZGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSk7Ci0gICAgICAgIGlmICghZ2Vu
ZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMocmVzb2x2ZU5vZGUtPmlkZW50aWZpZXIoKSkp
Ci0gICAgICAgICAgICBnb3RvIG5vbkFyZ3VtZW50c1BhdGg7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOyAg
ICAKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZv
ckFyZ3VtZW50cygpKTsKKyAgICBpZiAobV9pZGVudCA9PSBnZW5lcmF0b3IucHJvcGVydHlOYW1l
cygpLmxlbmd0aCAmJiBtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSkgeworICAgICAgICBSZXNvbHZl
UmVzdWx0IHJlc29sdmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSwgQnl0ZWNvZGVHZW5lcmF0b3I6OkRvbnRD
cmVhdGVBcmd1bWVudHNGbGFnKTsKKyAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNBcmd1bWVu
dHMoKSkgeworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
LCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7ICAgIAorICAgICAgICAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIHJlc29sdmVSZXN1bHQubG9jYWwoKSk7CisgICAgICAgIH0KICAgICB9CiAKLW5vbkFy
Z3VtZW50c1BhdGg6CiAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X2Jhc2UpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRP
ZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9pZGVudCk7CkBAIC01NjQs
OSArNTY0LDEzIEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsCiAgICAgICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYXJncy0+bV9s
aXN0Tm9kZS0+bV9leHByKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBhcmdzUmVn
aXN0ZXI7CiAgICAgICAgICAgICBBcmd1bWVudExpc3ROb2RlKiBhcmdzID0gbV9hcmdzLT5tX2xp
c3ROb2RlLT5tX25leHQ7Ci0gICAgICAgICAgICBpZiAoYXJncy0+bV9leHByLT5pc1Jlc29sdmVO
b2RlKCkgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihhcmdzLT5tX2V4cHIpLT5pZGVudGlmaWVyKCkpKQotICAgICAgICAgICAgICAg
IGFyZ3NSZWdpc3RlciA9IGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygp
OwotICAgICAgICAgICAgZWxzZQorCisgICAgICAgICAgICBpZiAoYXJncy0+bV9leHByLT5pc1Jl
c29sdmVOb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1
bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGFyZ3MtPm1f
ZXhwciktPmlkZW50aWZpZXIoKSwgQnl0ZWNvZGVHZW5lcmF0b3I6OkRvbnRDcmVhdGVBcmd1bWVu
dHNGbGFnKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc0FyZ3VtZW50cygp
KQorICAgICAgICAgICAgICAgICAgICBhcmdzUmVnaXN0ZXIgPSByZXNvbHZlUmVzdWx0LmxvY2Fs
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWFyZ3NSZWdpc3Rlci5nZXQoKSkK
ICAgICAgICAgICAgICAgICBhcmdzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXJncy0+
bV9leHByKTsKIAogICAgICAgICAgICAgLy8gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5IGlnbm9y
ZXMgZXh0cmEgYXJndW1lbnRzLCBidXQgd2Ugc3RpbGwKQEAgLTE5NzcsOSArMTk4MSwxMiBAQCBS
ZWdpc3RlcklEKiBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICAvLyBVbmNhdWdodCBleGNlcHRpb24gcGF0
aDogdGhlIGNhdGNoIGJsb2NrLgogICAgICAgICBSZWZQdHI8TGFiZWw+IGhlcmUgPSBnZW5lcmF0
b3IuZW1pdExhYmVsKGdlbmVyYXRvci5uZXdMYWJlbCgpLmdldCgpKTsKICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRDYXRjaChnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIHRyeVN0YXJ0TGFiZWwuZ2V0KCksIGhlcmUuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdFB1c2hOZXdTY29wZShleGNlcHRpb25SZWdpc3Rlci5nZXQo
KSwgbV9leGNlcHRpb25JZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICBK
U1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZVRlbXBsYXRlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6
Y3JlYXRlKCpnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpKTsKKyAgICAgICAgc2NvcGVUZW1wbGF0ZS0+
YWRkVmFyaWFibGUobV9leGNlcHRpb25JZGVudCwgRG9udERlbGV0ZSk7CisgICAgICAgIGdlbmVy
YXRvci5wdXNoQmxvY2tTY29wZShzY29wZVRlbXBsYXRlLCBTY29wZUNvbnRleHQ6OkxhemlseVJl
aWZ5KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTdGF0aWNWYXIoZ2VuZXJhdG9yLnJlc29s
dmUobV9leGNlcHRpb25JZGVudCksIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9jYXRjaEJsb2NrKTsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQb3BTY29wZSgpOworICAgICAgICBnZW5lcmF0b3IucG9wQmxvY2tTY29wZSgpOwogICAg
ICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNhdGNoRW5kTGFiZWwuZ2V0KCkpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggOWZjOTY0
YzczMzNjNzg2OTA0NjY3ZmZmZjcwNGJlYTU1NDA4MTY2NS4uYmQ2NWQ4NWFhMDhhZTQ1ODE2NDI2
M2Y0YWEwYjI5NjZkNjg0YTM2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCkBAIC0xMDQyLDggKzEwNDIsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBm
dQogICAgIEpTRnVuY3Rpb24gKmZ1bmN0aW9uID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5tYWtlKGV4
ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAgICAgaWYgKCFmdW5jdGlvbkV4ZWN1dGFibGUtPm5h
bWUoKS5pc051bGwoKSkgewogICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNj
b3BlT2JqZWN0ID0KLSAgICAgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSgKLSAg
ICAgICAgICAgICAgICBleGVjLCBmdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24s
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0
OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKSwg
ZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgIGZ1bmN0aW9uLT5zZXRT
Y29wZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9u
U2NvcGVPYmplY3QpKTsKICAgICB9CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggY2M1YmIw
MzkzYWQwOWVlZTk1YWFhYTRiOTFkZDkxZTdmMWJlOWEzZC4uMjlkNDQxNDUwNmZiNDYyY2QxZTA2
OTZjYzdkNmVkYmY3NzA4ZDgwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNjI1LDE4ICsxNjI1LDYgQEAgTkVWRVJfSU5M
SU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hv
b2tJRCBkZWJ1Z0hvb2sKIH0KICAgICAKICNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikK
LU5FVkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogSW50ZXJwcmV0ZXI6OmNyZWF0ZUV4Y2VwdGlv
blNjb3BlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKQotewot
ICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNv
ZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVyYW5kKTsKLSAgICBKU1ZhbHVlIHZhbHVl
ID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICBKU09iamVj
dCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoY2FsbEZyYW1lLCBwcm9wZXJ0
eSwgdmFsdWUsIERvbnREZWxldGUpOwotICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
SlNWYWx1ZShzY29wZSk7Ci0KLSAgICByZXR1cm4gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1
c2goc2NvcGUpOwotfQotCiBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQ
dXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1
Y3Rpb24qIHZQQywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICAvLyBSZWN1cnNpdmUgaW52b2NhdGlvbiBtYXkgYWxyZWFkeSBoYXZlIHNwZWNp
YWxpemVkIHRoaXMgaW5zdHJ1Y3Rpb24uCkBAIC01MDQ5LDQzICs1MDM3LDk2IEBAIHNraXBfaWRf
Y3VzdG9tX3NlbGY6CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25leHRfcG5hbWUp
OwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotICAgIERFRklORV9PUENPREUo
b3Bfam1wX3Njb3BlcykgewotICAgICAgICAvKiBqbXBfc2NvcGVzIGNvdW50KG4pIHRhcmdldChv
ZmZzZXQpCisgICAgREVGSU5FX09QQ09ERShvcF91bnNldCkgeworICAgICAgICAvKiB1bnNldCBk
c3QocikKKyAgICAgICAgIAorICAgICAgICAgICBTZXRzIGEgcmVnaXN0ZXIgdG8gdGhlIGVtcHR5
IEpTVmFsdWUuICBUaGlzIHNpZ25hbHMgdGhhdCBpdCBpcworICAgICAgICAgICB1bmluaXRpYWxp
emVkLiAgUmVhZCBhY2Nlc3MgdG8gc3VjaCBhIHZhcmlhYmxlIHNob3VsZCBhbHdheXMgZ28KKyAg
ICAgICAgICAgdGhyb3VnaCBtb3Zfc2V0X3NyYy4KKyAgICAgICAgICovCisgICAgICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IEpTVmFsdWUoKTsKIAotICAgICAgICAgICBSZW1vdmVzIHRoZSBhIG51bWJlciBvZiBpdGVt
cyBmcm9tIHRoZSBjdXJyZW50IHNjb3BlIGNoYWluCi0gICAgICAgICAgIHNwZWNpZmllZCBieSBp
bW1lZGlhdGUgbnVtYmVyIGNvdW50LCB0aGVuIGp1bXBzIHRvIG9mZnNldAotICAgICAgICAgICB0
YXJnZXQuCi0gICAgICAgICovCi0gICAgICAgIGludCBjb3VudCA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOworICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF91bnNldCk7CisgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKKyAg
ICB9CisgICAgREVGSU5FX09QQ09ERShvcF9hc3NlcnRfc2V0KSB7CisgICAgICAgIC8qIGFzc2Vy
dF9zZXQgZHN0KHIpCiAKLSAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHRtcCA9IGNhbGxGcmFtZS0+
c2NvcGVDaGFpbigpOwotICAgICAgICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgICAgIHRtcCA9
IHRtcC0+cG9wKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbih0bXApOworICAg
ICAgICAgICBBc3NlcnQgdGhhdCBkc3QgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGkuZS4sIGlzIG5v
dCBlbXB0eS4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+dW5j
aGVja2VkUih2UENbMV0udS5vcGVyYW5kKS5pc0VtcHR5KCkpKSB7CisgICAgICAgICAgICBVU3Ry
aW5nIG1lc3NhZ2UoInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiKTsKKyAgICAgICAgICAgIGV4Y2Vw
dGlvblZhbHVlID0gSlNWYWx1ZShjcmVhdGVSZWZlcmVuY2VFcnJvcihjYWxsRnJhbWUsIG1lc3Nh
Z2UpKTsKKyAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2Fzc2VydF9zZXQpOworICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7CisgICAgfQorICAgIERFRklORV9PUENPREUob3BfYXNzZXJ0X3Vuc2V0
KSB7CisgICAgICAgIC8qIGFzc2VydF91bnNldCBkc3QocikKIAotICAgICAgICB2UEMgKz0gdGFy
Z2V0OworICAgICAgICAgICBBc3NlcnQgdGhhdCBkc3QgaGFzIG5vdCBiZWVuIHNldCwgaS5lLiwg
dGhhdCBpdCBpcyBlbXB0eS4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKFVOTElLRUxZKCFjYWxs
RnJhbWUtPnVuY2hlY2tlZFIodlBDWzFdLnUub3BlcmFuZCkuaXNFbXB0eSgpKSkgeworICAgICAg
ICAgICAgVVN0cmluZyBtZXNzYWdlKCJjb25zdCB2YXJpYWJsZSBhbHJlYWR5IGluaXRpYWxpemVk
Iik7CisgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IEpTVmFsdWUoY3JlYXRlUmVmZXJlbmNl
RXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKSk7CisgICAgICAgICAgICBnb3RvIHZtX3Rocm93Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9hc3Nl
cnRfdW5zZXQpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotI2lmIEVOQUJM
RShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgLy8gQXBwZWFzZSBHQ0MK
LSAgICBnb3RvICooJiZza2lwX25ld19zY29wZSk7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RF
KG9wX3B1c2hfbmV3X3Njb3BlKSB7Ci0gICAgICAgIC8qIG5ld19zY29wZSBkc3QocikgcHJvcGVy
dHkoaWQpIHZhbHVlKHIpCisgICAgREVGSU5FX09QQ09ERShvcF9yZWlmeV9zY29wZSkgeworICAg
ICAgICAvKiByZWlmeV9zY29wZSBkc3QocikgdGVtcGwocikKICAgICAgICAgIAotICAgICAgICAg
ICBDb25zdHJ1Y3RzIGEgbmV3IFN0YXRpY1Njb3BlT2JqZWN0IHdpdGggcHJvcGVydHkgc2V0IHRv
IHZhbHVlLiAgVGhhdCBzY29wZQotICAgICAgICAgICBvYmplY3QgaXMgdGhlbiBwdXNoZWQgb250
byB0aGUgU2NvcGVDaGFpbi4gIFRoZSBzY29wZSBvYmplY3QgaXMgdGhlbiBzdG9yZWQKLSAgICAg
ICAgICAgaW4gZHN0IGZvciBHQy4KKyAgICAgICAgICAgQ29uc3RydWN0cyBhIG5ldyBTdGF0aWNT
Y29wZU9iamVjdCwgdXNpbmcgdGVtcGwgYXMgYSB0ZW1wbGF0ZS4gVGhhdAorICAgICAgICAgICBz
Y29wZSBvYmplY3QgaXMgdGhlbiBzdG9yZWQgaW4gZHN0IGFuZCBwdXNoZWQgb250byB0aGUgU2Nv
cGVDaGFpbi4KKyAgICAgICAgICAgVGhlIHN0b3JhZ2UgZm9yIHRoaXMgYmxvY2sgc2NvcGUgaXMg
aW5pdGlhbGx5IGluIHRoZSByZWdpc3RlcnMKKyAgICAgICAgICAgZm9sbG93aW5nIGRzdC4gV2hl
biBjb250cm9sIGxlYXZlcyB0aGlzIHNjb3BlLCB0aGVzZSB2YWx1ZXMgd2lsbCBiZQorICAgICAg
ICAgICB0b3JuIG9mZi4KICAgICAgICAgICovCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVD
aGFpbihjcmVhdGVFeGNlcHRpb25TY29wZShjYWxsRnJhbWUsIHZQQykpOworICAgICAgICBpbnQg
ZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKKworICAgICAgICBpZiAoIWNhbGxGcmFtZS0+dW5jaGVj
a2VkUihkc3QpLmpzVmFsdWUoKSkgeworICAgICAgICAgICAgaW50IHRlbXBsID0gdlBDWzJdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPnIodGVtcGwpLmpzVmFsdWUo
KS5pc09iamVjdCgpKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBzY29wZVRlbXBsYXRlID0gYXNP
YmplY3QoY2FsbEZyYW1lLT5yKHRlbXBsKS5qc1ZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJU
KHNjb3BlVGVtcGxhdGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgICAgICAgICBKU1N0
YXRpY1Njb3BlT2JqZWN0KiBuZXdTY29wZSA9IHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmpl
Y3QqPihzY29wZVRlbXBsYXRlKTsKKyAgICAgICAgICAgIG5ld1Njb3BlID0gbmV3U2NvcGUtPnJl
aWZ5KCpnbG9iYWxEYXRhLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZHN0ICsgMSk7CisgICAg
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IG5ld1Njb3BlOworICAgICAgICAg
ICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNo
KG5ld1Njb3BlKSk7CisgICAgICAgIH0KIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9wdXNoX25ld19zY29wZSk7CisgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3JlaWZ5
X3Njb3BlKTsKKyAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOworICAgIH0KKyAgICBERUZJTkVf
T1BDT0RFKG9wX3RlYXJfb2ZmX3Njb3BlKSB7CisgICAgICAgIC8qIHRlYXJfb2ZmX3Njb3BlIHNy
YyhyKQorCisgICAgICAgICAgIElmIHRoZSBzY29wZSBzdG9yZWQgaW4gU1JDIHdhcyByZWlmaWVk
LCBjb3B5IHRoZSBibG9jay1zY29wZWQgbG9jYWxzCisgICAgICAgICAgIGluIHRoZSByZWdpc3Rl
cnMgZm9sbG93aW5nIFNSQyBmcm9tIHRoZSByZWdpc3RlciBmaWxlIHRvIHRoZQorICAgICAgICAg
ICBoZWFwLiBNdW5nZSB0aGUgc2NvcGUgb2JqZWN0IHN0b3JlZCBpbiBTUkMgdG8gcG9pbnQgdG8g
dGhpcyBuZXcKKyAgICAgICAgICAgYmFja2luZyBzdG9yZSwgYW5kIHJlbW92ZSBpdCBmcm9tIHRo
ZSBzY29wZSBjaGFpbi4KKworICAgICAgICAgICBUaGlzIG9wY29kZSBhcHBlYXJzIHdoZW4gbGVh
dmluZyBibG9jayBzY29wZXMuCisgICAgICAgICovCisKKyAgICAgICAgaW50IHNyYyA9IHZQQ1sx
XS51Lm9wZXJhbmQ7CisKKyAgICAgICAgaWYgKEpTVmFsdWUgc2NvcGUgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoc3JjKS5qc1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBhc09iamVjdChzY29wZSk7CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0LT5pc1N0YXRpY1Nj
b3BlT2JqZWN0KCkpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlNTdGF0aWNTY29wZU9iamVj
dCo+KG9iamVjdCktPnRlYXJPZmYoKmdsb2JhbERhdGEpOworICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKHNyYykuY2xlYXIoKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0U2Nv
cGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9wKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdGVhcl9vZmZfc2NvcGUpOwogICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotI2lmIEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNT
SUNfSU5URVJQUkVURVIpCi0gICAgc2tpcF9uZXdfc2NvcGU6Ci0jZW5kaWYKICAgICBERUZJTkVf
T1BDT0RFKG9wX2NhdGNoKSB7CiAgICAgICAgIC8qIGNhdGNoIGV4KHIpCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAppbmRleCA1NDFjYzg5NmEzMjg5MGY2YzVlZjYxYjRiNjViNzI0ZTY4ZWU2
YjQxLi41NjYwZTQ0M2M2NzA5YmU5ZGI1YmU5ZjZmMTU5NDE3YzZmZDcxNzFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0yNzIsNyArMjcyLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfamVxX251bGwpCiAgICAgICAg
IERFRklORV9PUChvcF9qZmFsc2UpCiAgICAgICAgIERFRklORV9PUChvcF9qbXApCi0gICAgICAg
IERFRklORV9PUChvcF9qbXBfc2NvcGVzKQogICAgICAgICBERUZJTkVfT1Aob3Bfam5lcV9udWxs
KQogICAgICAgICBERUZJTkVfT1Aob3Bfam5lcV9wdHIpCiAgICAgICAgIERFRklORV9PUChvcF9q
bGVzcykKQEAgLTMxNyw3ICszMTYsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfcHJlX2luYykKICAgICAgICAgREVGSU5FX09QKG9w
X3Byb2ZpbGVfZGlkX2NhbGwpCiAgICAgICAgIERFRklORV9PUChvcF9wcm9maWxlX3dpbGxfY2Fs
bCkKLSAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfbmV3X3Njb3BlKQorICAgICAgICBERUZJTkVf
T1Aob3BfdW5zZXQpCisgICAgICAgIERFRklORV9PUChvcF9hc3NlcnRfc2V0KQorICAgICAgICBE
RUZJTkVfT1Aob3BfYXNzZXJ0X3Vuc2V0KQorICAgICAgICBERUZJTkVfT1Aob3BfcmVpZnlfc2Nv
cGUpCisgICAgICAgIERFRklORV9PUChvcF90ZWFyX29mZl9zY29wZSkKICAgICAgICAgREVGSU5F
X09QKG9wX3B1c2hfc2NvcGUpCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
ZGlyZWN0OgogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDJkMjg0MWJhZjU1NDg2YTFlYmY2OWQyZTRiNWJkODVj
ZWUxMTZiMGQuLjQ3MDQ3NWQ2YzNiMDYzMDY4MTZmYTNmZGQ4M2FhODBmZjYzZDA2ODIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtODE4LDcgKzgxOCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfam1w
KEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9qbXBfc2NvcGVzKEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmVxX251bGwoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2puZXFfcHRyKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9qbGVzcyhJbnN0cnVjdGlvbiopOwpAQCAtODY0LDcgKzg2MywxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3ByZV9pbmMoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKEluc3RydWN0aW9uKik7Ci0gICAgICAg
IHZvaWQgZW1pdF9vcF9wdXNoX25ld19zY29wZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfdW5zZXQoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2Vy
dF9zZXQoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2VydF91bnNldChJ
bnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfcmVpZnlfc2NvcGUoSW5zdHJ1Y3Rp
b24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3RlYXJfb2ZmX3Njb3BlKEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXNoX3Njb3BlKEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX3B1dF9ieV9pbmRleChJbnN0cnVjdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKaW5kZXggMmRiODJiZjRhZDIwZDYwM2FmMDM0OWRlNGVmNTE0Y2YzZDAw
MjZjNi4uMjQ5Y2EwM2VjZTJmODNiMjZkOGQzNDk1MTJiMmViOWNhYjE3MzU1MSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0xMDE2LDEyICsxMDE2LDY3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX2pzbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHVzaF9uZXdfc2NvcGUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3Vuc2V0KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChU
cnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQsIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVv
ZihSZWdpc3RlcikpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfYXNzZXJ0X3NldChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSnVtcCBub3RFbXB0eSA9IGJyYW5jaFB0cihO
b3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworCisg
ICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX2Fzc2VydF9zZXQpLmNhbGwoKTsKKworICAgIG5v
dEVtcHR5LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2Fzc2VydF91bnNldChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSnVtcCB3YXNFbXB0eSA9IGJyYW5j
aFB0cihFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOwor
CisgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX2Fzc2VydF91bnNldCkuY2FsbCgpOworCisg
ICAgd2FzRW1wdHkubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVpZnlfc2Nv
cGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRlbXBsID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIEp1bXAgc2NvcGVSZWlmaWVk
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpKTsKKworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9yZWlmeV9zY29wZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGRz
dCArIDEpKTsgLy8gT2Zmc2V0IG9mIGJsb2NrLXNjb3BlZCBsb2NhbHMgaW4gY2FsbEZyYW1lLgor
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHRlbXBsLCByZWdUMSk7CisgICAgc3R1YkNhbGwuY2Fs
bChkc3QpOworCisgICAgc2NvcGVSZWlmaWVkLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3RlYXJfb2ZmX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgdW5zaWduZWQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
CisgICAgSnVtcCBzY29wZU5vdFJlaWZpZWQgPSBicmFuY2hQdHIoRXF1YWwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2Nv
cGUgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CisKKyAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9vZmZfc2NvcGUpOworICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KHNjb3BlLCByZWdUMSk7CisgICAgc3R1YkNhbGwuY2FsbCgpOwor
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IHNpemVvZihSZWdpc3RlcikgKiBzY29wZSkpOworCisgICAgc2NvcGVOb3RSZWlmaWVkLmxpbmso
dGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDM0LDE0ICsxMDg5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0
Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9qbXBfc2NvcGVzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2ptcF9zY29wZXMpOwotICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIGFkZEp1bXAoanVtcCgpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVk
IHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGI2NzY5NmYzNTkw
Mzc3ZmNhMDA3YTQzODFjNTE0YzA1YzJkYTEwZGYuLjViM2MwMGQ0NWJlMjNlNmY2OTJkMTNkNmE1
YzUyZGVhNmU4ZTE3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKQEAgLTEzMzYsMTIgKzEzMzYsNjcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RvX2pzbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2EKICAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1c2hf
bmV3X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1p
dF9vcF91bnNldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNoX25ld19zY29wZSk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRz
dCAqIHNpemVvZihSZWdpc3RlcikpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfYXNzZXJ0X3Nl
dChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSnVtcCBub3RFbXB0eSA9IGJy
YW5jaFB0cihOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KSkpOworCisgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX2Fzc2VydF9zZXQpLmNhbGwoKTsK
KworICAgIG5vdEVtcHR5LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2Fzc2Vy
dF91bnNldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVk
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSnVtcCB3YXNFbXB0
eSA9IGJyYW5jaFB0cihFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSkpOworCisgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX2Fzc2VydF91bnNldCkuY2Fs
bCgpOworCisgICAgd2FzRW1wdHkubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
cmVpZnlfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNp
Z25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVk
IHRlbXBsID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIEp1bXAgc2Nv
cGVSZWlmaWVkID0gYnJhbmNoUHRyKE5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNjb3BlICogc2l6ZW9mKFJlZ2lz
dGVyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworCisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX3JlaWZ5X3Njb3BlKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tMzIoZHN0ICsgMSkpOyAvLyBPZmZzZXQgb2YgYmxvY2stc2NvcGVkIGxvY2FscyBpbiBj
YWxsRnJhbWUuCisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodGVtcGwsIHJlZ1QxKTsKKyAgICBz
dHViQ2FsbC5jYWxsKGRzdCk7CisKKyAgICBzY29wZVJlaWZpZWQubGluayh0aGlzKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisKKyAgICBKdW1wIHNjb3BlTm90UmVpZmllZCA9IGJyYW5jaFB0cihFcXVhbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBzY29wZSAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkp
KTsKKworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9zY29w
ZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoc2NvcGUsIHJlZ1QxKTsKKyAgICBzdHViQ2Fs
bC5jYWxsKCk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIHNjb3BlKSk7CisKKyAgICBzY29wZU5vdFJl
aWZpZWQubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjEsMTQgKzE0MTYsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1hcCht
X2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9jYXRjaCksIGV4Y2VwdGlvbiwgcmVn
VDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wX3Njb3BlcyhJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9qbXBfc2NvcGVzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1t
MzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwo
KTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5k
ZXggZWViZTkwNDI3YWVjMWM1ZDU2YWJiY2I5NmY2MDI1NWM5ZTc5MjUxMS4uYTcyZmRkNTE4MjEx
NGM3NmZhNmFkOWJmYjUxMTlmNTYzNWVhMWZhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAKQEAgLTMwODAsNyArMzA4MCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpT
T2JqZWN0Kiwgb3BfbmV3X2Z1bmNfZXhwKQogICAgICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIHNj
b3BlIGVuY2xvc2luZyB0aGUgRnVuY3Rpb25FeHByZXNzaW9uLgogICAgICAqLwogICAgIGlmICgh
ZnVuY3Rpb24tPm5hbWUoKS5pc051bGwoKSkgewotICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0
KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGNhbGxG
cmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAg
ICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpTU3RhdGlj
U2NvcGVPYmplY3Q6OmNyZWF0ZSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBmdW5jdGlvbi0+bmFt
ZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgICAgICBmdW5jLT5zZXRTY29w
ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNj
b3BlT2JqZWN0KSk7CiAgICAgfQogCkBAIC0zMzcxLDI4ICszMzcxLDU2IEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9pbikKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KSkp
OwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfbmV3X3Njb3Bl
KQorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfYXNzZXJ0X3NldCkKIHsKICAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBK
U1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJh
bWUuYXJnc1swXS5pZGVudGlmaWVyKCksIHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCksIERv
bnREZWxldGUpOworICAgIFVTdHJpbmcgbWVzc2FnZSgidW5pbml0aWFsaXplZCB2YXJpYWJsZSIp
OworICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNl
RXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsIG1lc3NhZ2UpOworICAgIFZNX1RIUk9XX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKK30KIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFt
ZS5jYWxsRnJhbWU7Ci0gICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2Nv
cGVDaGFpbigpLT5wdXNoKHNjb3BlKSk7Ci0gICAgcmV0dXJuIHNjb3BlOworREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfYXNzZXJ0X3Vuc2V0KQoreworICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKKworICAgIFVTdHJpbmcgbWVzc2FnZSgiY29uc3QgdmFyaWFibGUg
YWxyZWFkeSBpbml0aWFsaXplZCIpOworICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uID0gY3JlYXRlUmVmZXJlbmNlRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsIG1lc3NhZ2Up
OworICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KIAotREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3Bfam1wX3Njb3BlcykKK0RFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0
Kiwgb3BfcmVpZnlfc2NvcGUpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwogCi0gICAgdW5zaWduZWQgY291bnQgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsK
LSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIC8v
IEFyZ3VtZW50czogb2Zmc2V0IG9mIHJlZ2lzdGVycyAoaW50MzIpLCBzY29wZSB0ZW1wbGF0ZSBv
YmplY3QgKGpzdmFsdWUpLgorICAgIGludCByZWdpc3Rlck9mZnNldCA9IHN0YWNrRnJhbWUuYXJn
c1swXS5pbnQzMigpOworICAgIEpTVmFsdWUgdGVtcGwgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNW
YWx1ZSgpOwogCi0gICAgU2NvcGVDaGFpbk5vZGUqIHRtcCA9IGNhbGxGcmFtZS0+c2NvcGVDaGFp
bigpOwotICAgIHdoaWxlIChjb3VudC0tKQotICAgICAgICB0bXAgPSB0bXAtPnBvcCgpOwotICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbih0bXApOworICAgIEFTU0VSVCh0ZW1wbC5pc09iamVj
dCgpKTsKKyAgICBKU09iamVjdCogc2NvcGVUZW1wbGF0ZSA9IGFzT2JqZWN0KHRlbXBsKTsKKyAg
ICBBU1NFUlQoc2NvcGVUZW1wbGF0ZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAgICBKU1N0
YXRpY1Njb3BlT2JqZWN0KiBuZXdTY29wZSA9IHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmpl
Y3QqPihzY29wZVRlbXBsYXRlKTsKKyAgICBuZXdTY29wZSA9IG5ld1Njb3BlLT5yZWlmeSgqc3Rh
Y2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBy
ZWdpc3Rlck9mZnNldCk7CisgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4o
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChuZXdTY29wZSkpOworCisg
ICAgLy8gR2VuZXJhdGVkIGNvZGUgc3RvcmVzIGl0IGluIGNhbGxGcmFtZS0+cihkc3QpLgorICAg
IHJldHVybiBuZXdTY29wZTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGVh
cl9vZmZfc2NvcGUpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwor
CisgICAgLy8gQXJndW1lbnRzOiBzY29wZSBvYmplY3QgKGpzdmFsdWUpLgorICAgIEpTVmFsdWUg
c2NvcGUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEFTU0VSVChzY29wZSk7
CisKKyAgICBBU1NFUlQoc2NvcGUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KHNjb3BlKTsKKyAgICBBU1NFUlQob2JqZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0
KCkpOworICAgIHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihvYmplY3QpLT50ZWFy
T2ZmKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5z
ZXRTY29wZUNoYWluKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnBvcCgpKTsK
IH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X2luZGV4KQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCmluZGV4IDQ5ZjY2NjQ2NTNjMzY3NWRlMzI4YWM5Y2E1
YTAzZWY2MDA2NWRiMmYuLjNhMWU2NWI2OWEzNDQxZmU4YTM2ODI0YzNjYjhjZjQ0ODA5ODI0ZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKQEAgLTQxOCw3ICs0MTgsMTAgQEAg
ZXh0ZXJuICJDIiB7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfb2JqZWN0KFNU
VUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdf
cmVnZXhwKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0
aV9vcF9wdXNoX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICBKU09iamVj
dCogSklUX1NUVUIgY3RpX29wX3B1c2hfbmV3X3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7
CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfYXNzZXJ0X3NldChTVFVCX0FSR1NfREVDTEFSQVRJ
T04pOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2Fzc2VydF91bnNldChTVFVCX0FSR1NfREVD
TEFSQVRJT04pOworICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcmVpZnlfc2NvcGUoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9z
Y29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlf
b3BfcHVzaF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpTT2JqZWN0KiBKSVRf
U1RVQiBjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYyhTVFVCX0FSR1NfREVDTEFS
QVRJT04pOwogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpJVF9TVFVCIGN0aV9vcF9nZXRf
cG5hbWVzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CkBAIC00MzUsNyArNDM4LDYgQEAgZXh0ZXJu
ICJDIiB7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfY2hlY2tfaGFzX2luc3RhbmNlKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfZGVidWcoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9lbmQoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKTsKLSAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9qbXBfc2NvcGVzKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcG9wX3Njb3BlKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHJvZmlsZV9k
aWRfY2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3Byb2ZpbGVfd2lsbF9jYWxsKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCBiNmJiNjY0YmNmNzIw
Y2UyMGZhMGYwZmMzNzE0YjdiMTg4YTYzMjcyLi5hM2YzMWRlM2ZjNzkyNTRhMDE4ZDdmNzhjNDBh
MzUyMTQ5ZDM5NGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKQEAgLTExMjAsMTggKzExMjAsNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcHV0X2dldHRlcl9zZXR0ZXIpCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKLUxMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbXBfc2NvcGVzKQotewotICAgIExMSU5UX0JFR0lO
KCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSBwY1sxXS51Lm9wZXJhbmQ7Ci0gICAgU2NvcGVDaGFp
bk5vZGUqIHRtcCA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICB3aGlsZSAoY291bnQtLSkKLSAg
ICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICBleGVjLT5zZXRTY29wZUNoYWluKHRtcCk7Ci0g
ICAgcGMgKz0gcGNbMl0udS5vcGVyYW5kOwotICAgIExMSU5UX0VORCgpOwotfQotCiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfanRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKaW5kZXggN2IzYjhi
ZGE2NTZlYjFmOWI3ZjMxZjA2MmFiZjA5ZjU0NTM3MGU4NS4uMDUxNTk4N2QxZDY2OGY1MTRhMTE0
ODhiNWQ1MGJjZGZiNDE4M2JiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmgKQEAgLTE1OSw3ICsxNTksNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcHV0X2J5X3ZhbCk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVs
X2J5X3ZhbCk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2luZGV4KTsK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2V0dGVyX3NldHRlcik7Ci1MTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfam1wX3Njb3Blcyk7CiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfanRydWUpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pm
YWxzZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfamxlc3MpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4
IDlhZjkxYmVmMmM0ODE3NTQ4ODMzMWZkYjk0MjQxNTRhMDE4NWE3ZGYuLjRkYjI5NzU0NWIwZmZl
MDkzMTM1NDYyNTg3ODgwZGRiYjkxNGMyMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTUyNSwxMiArNTI1LDYgQEAg
X2xsaW50X29wX3B1dF9nZXR0ZXJfc2V0dGVyOgogICAgIGRpc3BhdGNoKDUpCiAKIAotX2xsaW50
X29wX2ptcF9zY29wZXM6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX2ptcF9zY29wZXMpCi0gICAgZGlzcGF0Y2goMCkKLQotCiBfbGxpbnRf
b3BfbG9vcF9pZl90cnVlOgogICAgIG5vcAogX2xsaW50X29wX2p0cnVlOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmNwcAppbmRleCA1ZTk1YTZkYTc1NTViYmUzNDUyYmVmZTBiNThi
NGQ5MjhkNGNlMjhmLi5iNTdjNmYxZWQyN2IzODg0NDYwNzg4OGE1NTU2YzY2NTcwMmIzZjIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcApAQCAtNTAsNiArNTAsMTcgQEAg
dXNpbmcgbmFtZXNwYWNlIFdURjsKIG5hbWVzcGFjZSBKU0MgewogCiAKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBWaXNpdG9ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisjZGVmaW5lIERFRklORV9BQ0NFUFQobmFtZSkgXAorICAgIHZvaWQgbmFtZTo6YWNj
ZXB0KE5vZGVWaXNpdG9yICp2aXNpdG9yKSB7IHZpc2l0b3ItPnZpc2l0IyNuYW1lKHRoaXMpOyB9
CitGT1JfRUFDSF9DT05DUkVURV9OT0RFX1RZUEUoREVGSU5FX0FDQ0VQVCkKKyN1bmRlZiBERUZJ
TkVfQUNDRVBUCisKKyNkZWZpbmUgREVGSU5FX1ZJU0lUKG5hbWUpIHZvaWQgTm9kZVZpc2l0b3I6
OnZpc2l0IyNuYW1lKG5hbWUgKikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorRk9SX0VBQ0hf
Q09OQ1JFVEVfTk9ERV9UWVBFKERFRklORV9WSVNJVCkKKyN1bmRlZiBERUNMQVJFX1ZJU0lUCisK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGF0ZW1lbnROb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgU3RhdGVtZW50Tm9kZTo6c2V0TG9jKGlu
dCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKQEAgLTczLDYgKzg0LDEzIEBAIFN0YXRlbWVudE5v
ZGUqIFNvdXJjZUVsZW1lbnRzOjpzaW5nbGVTdGF0ZW1lbnQoKSBjb25zdAogICAgIHJldHVybiBz
aXplID09IDEgPyBtX3N0YXRlbWVudHNbMF0gOiAwOwogfQogCit2b2lkIFNvdXJjZUVsZW1lbnRz
OjphY2NlcHQoTm9kZVZpc2l0b3IgKnZpc2l0b3IpCit7CisgICAgc2l6ZV90IHNpemUgPSBtX3N0
YXRlbWVudHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQor
ICAgICAgICBtX3N0YXRlbWVudHNbaV0tPmFjY2VwdCh2aXNpdG9yKTsKK30KKwogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvZGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBDb2RlTm9kZTo6Q29kZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBp
bnQgbGluZU51bWJlciwgU2NvcGVGbGFncyBzY29wZUZsYWdzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCmluZGV4IGNjMWU1OTE5YWE2M2UyZGU0MzU4Y2U5MzJiZWZhYjFiNzhlMTc2
MDEuLjAyM2VjZjA1OTU4YWUxMWYyYjg1NTAwMDM2MGZjODY5ZGFkMDQwN2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTcyLDYgKzcyLDEyMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjb25zdCBTY29wZUZsYWdzIFNoYWRvd3NBcmd1bWVudHNGbGFnID0gMSA8PCAxMzsK
ICAgICBjb25zdCBTY29wZUZsYWdzIEFsbFNjb3BlVXNlc0ZsYWdzID0gVXNlc0V2YWxGbGFnIHwg
VXNlc0FyZ3VtZW50c0ZsYWcgfCBVc2VzV2l0aEZsYWcgfCBVc2VzQ2F0Y2hGbGFnIHwgVXNlc1Ro
aXNGbGFnIHwgU2hhZG93c0FyZ3VtZW50c0ZsYWc7CiAgICAgCisvLyBTdGF0ZW1lbnRzIGFuZCBl
eHByZXNzaW9ucy4KKyNkZWZpbmUgRk9SX0VBQ0hfQ09OQ1JFVEVfTk9ERV9UWVBFKE0pIFwKKyAg
ICBNKE51bGxOb2RlKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEJvb2xlYW5Ob2Rl
KSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKE51bWJlck5vZGUpICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBNKFN0cmluZ05vZGUpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBN
KFJlZ0V4cE5vZGUpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFRoaXNOb2RlKSAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFJlc29sdmVOb2RlKSAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBNKEVsZW1lbnROb2RlKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEFy
cmF5Tm9kZSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFByb3BlcnR5Tm9kZSkgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBNKFByb3BlcnR5TGlzdE5vZGUpICAgICAgICAgICAgICAg
IFwKKyAgICBNKE9iamVjdExpdGVyYWxOb2RlKSAgICAgICAgICAgICAgIFwKKyAgICBNKEJyYWNr
ZXRBY2Nlc3Nvck5vZGUpICAgICAgICAgICAgIFwKKyAgICBNKERvdEFjY2Vzc29yTm9kZSkgICAg
ICAgICAgICAgICAgIFwKKyAgICBNKEFyZ3VtZW50TGlzdE5vZGUpICAgICAgICAgICAgICAgIFwK
KyAgICBNKEFyZ3VtZW50c05vZGUpICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKE5ld0V4cHJO
b2RlKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEV2YWxGdW5jdGlvbkNhbGxOb2RlKSAg
ICAgICAgICAgIFwKKyAgICBNKEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSkgICAgICAgICAgIFwKKyAg
ICBNKEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKSAgICAgICAgIFwKKyAgICBNKEZ1bmN0aW9uQ2Fs
bEJyYWNrZXROb2RlKSAgICAgICAgIFwKKyAgICBNKEZ1bmN0aW9uQ2FsbERvdE5vZGUpICAgICAg
ICAgICAgIFwKKyAgICBNKENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKSAgICAgICAgIFwKKyAgICBN
KEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZSkgICAgICAgIFwKKyAgICBNKFBvc3RmaXhSZXNvbHZl
Tm9kZSkgICAgICAgICAgICAgIFwKKyAgICBNKFBvc3RmaXhCcmFja2V0Tm9kZSkgICAgICAgICAg
ICAgIFwKKyAgICBNKFBvc3RmaXhEb3ROb2RlKSAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFBv
c3RmaXhFcnJvck5vZGUpICAgICAgICAgICAgICAgIFwKKyAgICBNKERlbGV0ZVJlc29sdmVOb2Rl
KSAgICAgICAgICAgICAgIFwKKyAgICBNKERlbGV0ZUJyYWNrZXROb2RlKSAgICAgICAgICAgICAg
IFwKKyAgICBNKERlbGV0ZURvdE5vZGUpICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKERlbGV0
ZVZhbHVlTm9kZSkgICAgICAgICAgICAgICAgIFwKKyAgICBNKFZvaWROb2RlKSAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBNKFR5cGVPZlJlc29sdmVOb2RlKSAgICAgICAgICAgICAgIFwK
KyAgICBNKFR5cGVPZlZhbHVlTm9kZSkgICAgICAgICAgICAgICAgIFwKKyAgICBNKFByZWZpeFJl
c29sdmVOb2RlKSAgICAgICAgICAgICAgIFwKKyAgICBNKFByZWZpeEJyYWNrZXROb2RlKSAgICAg
ICAgICAgICAgIFwKKyAgICBNKFByZWZpeERvdE5vZGUpICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBNKFByZWZpeEVycm9yTm9kZSkgICAgICAgICAgICAgICAgIFwKKyAgICBNKFVuYXJ5UGx1c05v
ZGUpICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKE5lZ2F0ZU5vZGUpICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBNKEJpdHdpc2VOb3ROb2RlKSAgICAgICAgICAgICAgICAgIFwKKyAgICBN
KExvZ2ljYWxOb3ROb2RlKSAgICAgICAgICAgICAgICAgIFwKKyAgICBNKE11bHROb2RlKSAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKERpdk5vZGUpICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBNKE1vZE5vZGUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEFk
ZE5vZGUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFN1Yk5vZGUpICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBNKExlZnRTaGlmdE5vZGUpICAgICAgICAgICAgICAgICAg
IFwKKyAgICBNKFJpZ2h0U2hpZnROb2RlKSAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFVuc2ln
bmVkUmlnaHRTaGlmdE5vZGUpICAgICAgICAgIFwKKyAgICBNKExlc3NOb2RlKSAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBNKEdyZWF0ZXJOb2RlKSAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBNKExlc3NFcU5vZGUpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEdyZWF0ZXJF
cU5vZGUpICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEluc3RhbmNlT2ZOb2RlKSAgICAgICAg
ICAgICAgICAgIFwKKyAgICBNKEluTm9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBNKEVxdWFsTm9kZSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKE5vdEVxdWFsTm9k
ZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFN0cmljdEVxdWFsTm9kZSkgICAgICAgICAg
ICAgICAgIFwKKyAgICBNKE5vdFN0cmljdEVxdWFsTm9kZSkgICAgICAgICAgICAgIFwKKyAgICBN
KEJpdEFuZE5vZGUpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEJpdE9yTm9kZSkgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEJpdFhPck5vZGUpICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBNKExvZ2ljYWxPcE5vZGUpICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKENv
bmRpdGlvbmFsTm9kZSkgICAgICAgICAgICAgICAgIFwKKyAgICBNKFJlYWRNb2RpZnlSZXNvbHZl
Tm9kZSkgICAgICAgICAgIFwKKyAgICBNKEFzc2lnblJlc29sdmVOb2RlKSAgICAgICAgICAgICAg
IFwKKyAgICBNKFJlYWRNb2RpZnlCcmFja2V0Tm9kZSkgICAgICAgICAgIFwKKyAgICBNKEFzc2ln
bkJyYWNrZXROb2RlKSAgICAgICAgICAgICAgIFwKKyAgICBNKEFzc2lnbkRvdE5vZGUpICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBNKFJlYWRNb2RpZnlEb3ROb2RlKSAgICAgICAgICAgICAgIFwK
KyAgICBNKEFzc2lnbkVycm9yTm9kZSkgICAgICAgICAgICAgICAgIFwKKyAgICBNKENvbW1hTm9k
ZSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKENvbnN0RGVjbE5vZGUpICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBNKENvbnN0U3RhdGVtZW50Tm9kZSkgICAgICAgICAgICAgIFwKKyAg
ICBNKEJsb2NrTm9kZSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEVtcHR5U3RhdGVt
ZW50Tm9kZSkgICAgICAgICAgICAgIFwKKyAgICBNKERlYnVnZ2VyU3RhdGVtZW50Tm9kZSkgICAg
ICAgICAgIFwKKyAgICBNKEV4cHJTdGF0ZW1lbnROb2RlKSAgICAgICAgICAgICAgIFwKKyAgICBN
KFZhclN0YXRlbWVudE5vZGUpICAgICAgICAgICAgICAgIFwKKyAgICBNKElmTm9kZSkgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKElmRWxzZU5vZGUpICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBNKERvV2hpbGVOb2RlKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFdo
aWxlTm9kZSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEZvck5vZGUpICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBNKEZvckluTm9kZSkgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBNKENvbnRpbnVlTm9kZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEJyZWFr
Tm9kZSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFJldHVybk5vZGUpICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBNKFdpdGhOb2RlKSAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBNKExhYmVsTm9kZSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFRocm93Tm9k
ZSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKFRyeU5vZGUpICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBNKFByb2dyYW1Ob2RlKSAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBNKEV2YWxOb2RlKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNKEZ1bmN0aW9uQm9k
eU5vZGUpICAgICAgICAgICAgICAgIFwKKyAgICBNKEZ1bmNFeHByTm9kZSkgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBNKEZ1bmNEZWNsTm9kZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBN
KFN3aXRjaE5vZGUpCisKKyAgICBlbnVtIE5vZGVUeXBlIHsKKyNkZWZpbmUgREVDTEFSRV9FTlVN
KG5hbWUpIG5hbWUjI1R5cGUsCitGT1JfRUFDSF9DT05DUkVURV9OT0RFX1RZUEUoREVDTEFSRV9F
TlVNKQorI3VuZGVmIERFQ0xBUkVfRU5VTQorICAgIH07CisKKyAgICBjbGFzcyBOb2RlVmlzaXRv
cjsKKworI2RlZmluZSBERUNMQVJFX05PREVfVFlQRShuYW1lKSBcCisgICAgdmlydHVhbCBOb2Rl
VHlwZSBub2RlVHlwZSgpIHsgcmV0dXJuIG5hbWUjI1R5cGU7IH0gXAorICAgIHZpcnR1YWwgdm9p
ZCBhY2NlcHQoTm9kZVZpc2l0b3IgKikKKwogICAgIGVudW0gT3BlcmF0b3IgewogICAgICAgICBP
cEVxdWFsLAogICAgICAgICBPcFBsdXNFcSwKQEAgLTE0Nyw2ICsyNjIsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGUoKSB7IH0KIAorICAgICAg
ICB2aXJ0dWFsIHZvaWQgYWNjZXB0KE5vZGVWaXNpdG9yICopIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIGRlc3RpbmF0aW9uID0gMCkgPSAwOwogCiAgICAgICAg
IGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiBtX2xpbmVOdW1iZXI7IH0KQEAgLTIwNyw2ICsz
MjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBOdWxsTm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBOdWxsTm9kZShpbnQpOworICAgICAg
ICBERUNMQVJFX05PREVfVFlQRShOdWxsTm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCk7CkBAIC0yMTcsNiArMzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgQm9vbGVhbk5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgQm9vbGVhbk5vZGUoaW50LCBib29sIHZhbHVlKTsKKyAgICAgICAgREVDTEFSRV9OT0RF
X1RZUEUoQm9vbGVhbk5vZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
OwpAQCAtMjI5LDYgKzM0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE51bWJlck5v
ZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgTnVtYmVy
Tm9kZShpbnQsIGRvdWJsZSB2YWx1ZSk7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKE51bWJl
ck5vZGUpOwogCiAgICAgICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KICAgICAgICAgdm9pZCBzZXRWYWx1ZShkb3VibGUgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVl
OyB9CkBAIC0yNDUsNiArMzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU3RyaW5n
Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBTdHJp
bmdOb2RlKGludCwgY29uc3QgSWRlbnRpZmllciYpOworICAgICAgICBERUNMQVJFX05PREVfVFlQ
RShTdHJpbmdOb2RlKTsKIAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiB2YWx1ZSgpIHsgcmV0
dXJuIG1fdmFsdWU7IH0KIApAQCAtMzU1LDYgKzQ3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGNsYXNzIFJlZ0V4cE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgogICAgICAgICBSZWdFeHBOb2RlKGludCwg
Y29uc3QgSWRlbnRpZmllciYgcGF0dGVybiwgY29uc3QgSWRlbnRpZmllciYgZmxhZ3MpOworICAg
ICAgICBERUNMQVJFX05PREVfVFlQRShSZWdFeHBOb2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKTsKQEAgLTM2Niw2ICs0ODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBUaGlzTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgog
ICAgICAgICBUaGlzTm9kZShpbnQpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShUaGlzTm9k
ZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0zNzQsNiArNDk3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVzb2x2ZU5vZGUoaW50LCBjb25z
dCBJZGVudGlmaWVyJiwgaW50IHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZ
UEUoUmVzb2x2ZU5vZGUpOwogCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX2lkZW50OyB9CiAKQEAgLTM5Miw2ICs1MTYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEVsZW1lbnROb2RlKGludCBlbGlzaW9uLCBF
eHByZXNzaW9uTm9kZSopOwogICAgICAgICBFbGVtZW50Tm9kZShFbGVtZW50Tm9kZSosIGludCBl
bGlzaW9uLCBFeHByZXNzaW9uTm9kZSopOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShFbGVt
ZW50Tm9kZSk7CiAKICAgICAgICAgaW50IGVsaXNpb24oKSBjb25zdCB7IHJldHVybiBtX2VsaXNp
b247IH0KICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHZhbHVlKCkgeyByZXR1cm4gbV9ub2RlOyB9
CkBAIC00MDgsNiArNTMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFycmF5Tm9kZShp
bnQsIGludCBlbGlzaW9uKTsKICAgICAgICAgQXJyYXlOb2RlKGludCwgRWxlbWVudE5vZGUqKTsK
ICAgICAgICAgQXJyYXlOb2RlKGludCwgaW50IGVsaXNpb24sIEVsZW1lbnROb2RlKik7CisgICAg
ICAgIERFQ0xBUkVfTk9ERV9UWVBFKEFycmF5Tm9kZSk7CiAKICAgICAgICAgQXJndW1lbnRMaXN0
Tm9kZSogdG9Bcmd1bWVudExpc3QoSlNHbG9iYWxEYXRhKiwgaW50KSBjb25zdDsKIApAQCAtNDI3
LDYgKzU1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFByb3BlcnR5Tm9kZShKU0ds
b2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBUeXBlKTsKICAg
ICAgICAgUHJvcGVydHlOb2RlKEpTR2xvYmFsRGF0YSosIGRvdWJsZSwgRXhwcmVzc2lvbk5vZGUq
LCBUeXBlKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoUHJvcGVydHlOb2RlKTsKIAogICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAg
ICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpAQCAtNDQyLDYgKzU2
OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgUHJvcGVydHlMaXN0
Tm9kZShpbnQsIFByb3BlcnR5Tm9kZSopOwogICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKGludCwg
UHJvcGVydHlOb2RlKiwgUHJvcGVydHlMaXN0Tm9kZSopOworICAgICAgICBERUNMQVJFX05PREVf
VFlQRShQcm9wZXJ0eUxpc3ROb2RlKTsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAKQEAgLTQ1
NCw2ICs1ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIE9iamVj
dExpdGVyYWxOb2RlKGludCk7CiAgICAgICAgIE9iamVjdExpdGVyYWxOb2RlKGludCwgUHJvcGVy
dHlMaXN0Tm9kZSopOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShPYmplY3RMaXRlcmFsTm9k
ZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC00NjQsNiArNTkz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQnJhY2tldEFjY2Vzc29yTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUoaW50LCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgYm9vbCBzdWJzY3JpcHRIYXNBc3Np
Z25tZW50cyk7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKEJyYWNrZXRBY2Nlc3Nvck5vZGUp
OwogCiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNl
OyB9CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQoKSBjb25zdCB7IHJldHVybiBt
X3N1YnNjcmlwdDsgfQpAQCAtNDgyLDYgKzYxMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIERvdEFjY2Vzc29yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93
YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6CiAgICAgICAgIERvdEFjY2Vzc29yTm9k
ZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAg
IERFQ0xBUkVfTk9ERV9UWVBFKERvdEFjY2Vzc29yTm9kZSk7CiAKICAgICAgICAgRXhwcmVzc2lv
bk5vZGUqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnQ7IH0KQEAgLTUwMCw2
ICs2MzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEFyZ3VtZW50
TGlzdE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOwogICAgICAgICBBcmd1bWVudExpc3ROb2Rl
KGludCwgQXJndW1lbnRMaXN0Tm9kZSosIEV4cHJlc3Npb25Ob2RlKik7CisgICAgICAgIERFQ0xB
UkVfTk9ERV9UWVBFKEFyZ3VtZW50TGlzdE5vZGUpOwogCiAgICAgICAgIEFyZ3VtZW50TGlzdE5v
ZGUqIG1fbmV4dDsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKQEAgLTUxMiw2ICs2
NDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEFyZ3VtZW50c05v
ZGUoKTsKICAgICAgICAgQXJndW1lbnRzTm9kZShBcmd1bWVudExpc3ROb2RlKik7CisgICAgICAg
IERFQ0xBUkVfTk9ERV9UWVBFKEFyZ3VtZW50c05vZGUpOwogCiAgICAgICAgIEFyZ3VtZW50TGlz
dE5vZGUqIG1fbGlzdE5vZGU7CiAgICAgfTsKQEAgLTUyMCw2ICs2NTMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIE5ld0V4cHJOb2RlKGludCwgRXhwcmVzc2lvbk5v
ZGUqKTsKICAgICAgICAgTmV3RXhwck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSosIEFyZ3VtZW50
c05vZGUqKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoTmV3RXhwck5vZGUpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTMxLDYgKzY2NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIEV2YWxGdW5jdGlvbkNhbGxOb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoK
ICAgICAgICAgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUoaW50LCBBcmd1bWVudHNOb2RlKiwgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAg
ICAgICBERUNMQVJFX05PREVfVFlQRShFdmFsRnVuY3Rpb25DYWxsTm9kZSk7CiAKICAgICBwcml2
YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC01NDEsNiArNjc2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsVmFsdWVOb2RlIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAg
ICAgICAgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqLCBBcmd1bWVu
dHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTUyLDYgKzY4
OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEg
ewogICAgIHB1YmxpYzoKICAgICAgICAgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUoaW50LCBjb25z
dCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZ
UEUoRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApOwpAQCAtNTY1LDYgKzcwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNz
IEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMg
VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAgICAgICAgRnVuY3Rp
b25DYWxsQnJhY2tldE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5v
ZGUqIHN1YnNjcmlwdCwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZ
UEUoRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApOwpAQCAtNTc3LDYgKzcxNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNz
IEZ1bmN0aW9uQ2FsbERvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJv
d2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgogICAgICAgICBGdW5jdGlvbkNh
bGxEb3ROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBB
cmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShGdW5jdGlvbkNhbGxE
b3ROb2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTU5MCw2
ICs3MjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBDYWxsRnVuY3Rpb25DYWxsRG90
Tm9kZSA6IHB1YmxpYyBGdW5jdGlvbkNhbGxEb3ROb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0
IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBERUNMQVJFX05PREVfVFlQ
RShDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC01OTgsNiArNzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbERvdE5vZGUgewog
ICAgIHB1YmxpYzoKICAgICAgICAgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGludCwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAg
ICAgICBERUNMQVJFX05PREVfVFlQRShBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjE0LDYgKzc1NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIFBvc3RmaXhSZXNvbHZlTm9kZSA6IHB1YmxpYyBQcmVQb3N0
UmVzb2x2ZU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUG9zdGZpeFJlc29sdmVOb2RlKGlu
dCwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIERFQ0xBUkVfTk9ERV9U
WVBFKFBvc3RmaXhSZXNvbHZlTm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCk7CkBAIC02MjQsNiArNzY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUG9z
dGZpeEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxl
U3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAgICAgICAgUG9zdGZpeEJyYWNrZXRO
b2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQs
IE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCk7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKFBvc3RmaXhCcmFja2V0Tm9k
ZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02MzYsNiArNzc5
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUG9zdGZpeERvdE5vZGUgOiBwdWJsaWMg
RXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAgICAg
cHVibGljOgogICAgICAgICBQb3N0Zml4RG90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNl
LCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZ
UEUoUG9zdGZpeERvdE5vZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
OwpAQCAtNjQ4LDYgKzc5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFBvc3RmaXhF
cnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHBy
ZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgogICAgICAgICBQb3N0Zml4RXJyb3JOb2RlKGludCwg
RXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShQ
b3N0Zml4RXJyb3JOb2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
QEAgLTY1OSw2ICs4MDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBEZWxldGVSZXNv
bHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Np
b25EYXRhIHsKICAgICBwdWJsaWM6CiAgICAgICAgIERlbGV0ZVJlc29sdmVOb2RlKGludCwgY29u
c3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoRGVsZXRlUmVzb2x2
ZU5vZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjY5LDYg
KzgxNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIERlbGV0ZUJyYWNrZXROb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewog
ICAgIHB1YmxpYzoKICAgICAgICAgRGVsZXRlQnJhY2tldE5vZGUoaW50LCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBERUNMQVJFX05P
REVfVFlQRShEZWxldGVCcmFja2V0Tm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC02ODAsNiArODI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
RGVsZXRlRG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4
cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6CiAgICAgICAgIERlbGV0ZURvdE5vZGUoaW50LCBF
eHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgREVDTEFS
RV9OT0RFX1RZUEUoRGVsZXRlRG90Tm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC02OTEsNiArODM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
RGVsZXRlVmFsdWVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIERlbGV0ZVZhbHVlTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CisgICAgICAgIERF
Q0xBUkVfTk9ERV9UWVBFKERlbGV0ZVZhbHVlTm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CkBAIC03MDEsNiArODUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgVm9pZE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgVm9pZE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOworICAgICAgICBERUNMQVJFX05P
REVfVFlQRShWb2lkTm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7
CkBAIC03MTEsNiArODYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgVHlwZU9mUmVz
b2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAg
VHlwZU9mUmVzb2x2ZU5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIERFQ0xB
UkVfTk9ERV9UWVBFKFR5cGVPZlJlc29sdmVOb2RlKTsKIAogICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudDsgfQogCkBAIC03MjMsNiAr
ODc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgVHlwZU9mVmFsdWVOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFR5cGVPZlZhbHVlTm9k
ZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKFR5cGVP
ZlZhbHVlTm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC03
MzMsNiArODg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUHJlZml4UmVzb2x2ZU5v
ZGUgOiBwdWJsaWMgUHJlUG9zdFJlc29sdmVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFBy
ZWZpeFJlc29sdmVOb2RlKGludCwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAg
ICAgIERFQ0xBUkVfTk9ERV9UWVBFKFByZWZpeFJlc29sdmVOb2RlKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTc0Myw2ICs4OTYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBQcmVmaXhCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwg
cHVibGljIFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoK
ICAgICAgICAgUHJlZml4QnJhY2tldE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhw
cmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgREVDTEFSRV9OT0RF
X1RZUEUoUHJlZml4QnJhY2tldE5vZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApOwpAQCAtNzU1LDYgKzkwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFBy
ZWZpeERvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVQcmVm
aXhlZFN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFByZWZpeERvdE5v
ZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9y
LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCk7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKFByZWZpeERvdE5vZGUpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNzY3LDYgKzkyMiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIFByZWZpeEVycm9yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFByZWZpeEVycm9yTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIHVuc2lnbmVk
IGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAg
ICAgREVDTEFSRV9OT0RFX1RZUEUoUHJlZml4RXJyb3JOb2RlKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTc5NSw2ICs5NTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBVbmFyeVBsdXNOb2RlIDogcHVibGljIFVuYXJ5T3BOb2RlIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIFVuYXJ5UGx1c05vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOworICAgICAg
ICBERUNMQVJFX05PREVfVFlQRShVbmFyeVBsdXNOb2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgRXhwcmVzc2lvbk5vZGUqIHN0cmlwVW5hcnlQbHVzKCkgeyByZXR1cm4gZXhw
cigpOyB9CkBAIC04MDMsMTEgKzk2MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBO
ZWdhdGVOb2RlIDogcHVibGljIFVuYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIE5l
Z2F0ZU5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOworICAgICAgICBERUNMQVJFX05PREVfVFlQ
RShOZWdhdGVOb2RlKTsKICAgICB9OwogCiAgICAgY2xhc3MgQml0d2lzZU5vdE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQml0d2lzZU5vdE5vZGUo
aW50LCBFeHByZXNzaW9uTm9kZSopOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShCaXR3aXNl
Tm90Tm9kZSk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBleHBy
KCkgeyByZXR1cm4gbV9leHByOyB9CkBAIC04MjIsNiArOTgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgTG9naWNhbE5vdE5vZGUgOiBwdWJsaWMgVW5hcnlPcE5vZGUgewogICAgIHB1
YmxpYzoKICAgICAgICAgTG9naWNhbE5vdE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOworICAg
ICAgICBERUNMQVJFX05PREVfVFlQRShMb2dpY2FsTm90Tm9kZSk7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBMYWJlbCogdHJ1ZVRhcmdldCwgTGFiZWwqIGZhbHNlVGFyZ2V0LCBib29sIGZhbGxUaHJv
dWdoTWVhbnNUcnVlKTsKICAgICAgICAgdmlydHVhbCBib29sIGhhc0NvbmRpdGlvbkNvbnRleHRD
b2RlZ2VuKCkgY29uc3QgeyByZXR1cm4gZXhwcigpLT5oYXNDb25kaXRpb25Db250ZXh0Q29kZWdl
bigpOyB9CkBAIC04NTUsMjEgKzEwMTUsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
TXVsdE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIE11
bHROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKE11
bHROb2RlKTsKICAgICB9OwogCiAgICAgY2xhc3MgRGl2Tm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5v
ZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRGl2Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwor
ICAgICAgICBERUNMQVJFX05PREVfVFlQRShEaXZOb2RlKTsKICAgICB9OwogCiAgICAgY2xhc3Mg
TW9kTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgTW9k
Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShNb2RO
b2RlKTsKICAgICB9OwogCiAgICAgY2xhc3MgQWRkTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgQWRkTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAg
ICAgICBERUNMQVJFX05PREVfVFlQRShBZGROb2RlKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNBZGQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgfTsKQEAgLTg3Nyw2ICsxMDQxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU3ViTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5v
ZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgU3ViTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwor
ICAgICAgICBERUNMQVJFX05PREVfVFlQRShTdWJOb2RlKTsKIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNTdWJ0cmFjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB9OwpAQCAtODg0LDM2
ICsxMDQ5LDQzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIExlZnRTaGlmdE5vZGUgOiBw
dWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIExlZnRTaGlmdE5vZGUo
aW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoTGVmdFNoaWZ0
Tm9kZSk7CiAgICAgfTsKIAogICAgIGNsYXNzIFJpZ2h0U2hpZnROb2RlIDogcHVibGljIEJpbmFy
eU9wTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBSaWdodFNoaWZ0Tm9kZShpbnQsIEV4cHJl
c3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShSaWdodFNoaWZ0Tm9kZSk7CiAg
ICAgfTsKIAogICAgIGNsYXNzIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUgOiBwdWJsaWMgQmluYXJ5
T3BOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUoaW50
LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoVW5zaWduZWRSaWdo
dFNoaWZ0Tm9kZSk7CiAgICAgfTsKIAogICAgIGNsYXNzIExlc3NOb2RlIDogcHVibGljIEJpbmFy
eU9wTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBMZXNzTm9kZShpbnQsIEV4cHJlc3Npb25O
b2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVu
dHMpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShMZXNzTm9kZSk7CiAgICAgfTsKIAogICAg
IGNsYXNzIEdyZWF0ZXJOb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgog
ICAgICAgICBHcmVhdGVyTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBERUNMQVJF
X05PREVfVFlQRShHcmVhdGVyTm9kZSk7CiAgICAgfTsKIAogICAgIGNsYXNzIExlc3NFcU5vZGUg
OiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIExlc3NFcU5vZGUo
aW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoTGVzc0VxTm9k
ZSk7CiAgICAgfTsKIAogICAgIGNsYXNzIEdyZWF0ZXJFcU5vZGUgOiBwdWJsaWMgQmluYXJ5T3BO
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEdyZWF0ZXJFcU5vZGUoaW50LCBFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoR3JlYXRlckVxTm9kZSk7CiAgICAgfTsK
IAogICAgIGNsYXNzIFRocm93YWJsZUJpbmFyeU9wTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUs
IHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CkBAIC05MjgsNiArMTEwMCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEluc3RhbmNlT2ZOb2RlIDogcHVibGljIFRocm93YWJs
ZUJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBJbnN0YW5jZU9mTm9kZShpbnQs
IEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShJbnN0YW5jZU9mTm9k
ZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC05MzYsMTEgKzEx
MDksMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSW5Ob2RlIDogcHVibGljIFRocm93
YWJsZUJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBJbk5vZGUoaW50LCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoSW5Ob2RlKTsKICAgICB9Owog
CiAgICAgY2xhc3MgRXF1YWxOb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBFcXVhbE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Np
b25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgREVDTEFS
RV9OT0RFX1RZUEUoRXF1YWxOb2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKTsKQEAgLTk0OSwxMSArMTEyNCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBO
b3RFcXVhbE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IE5vdEVxdWFsTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBERUNMQVJFX05PREVf
VFlQRShOb3RFcXVhbE5vZGUpOwogICAgIH07CiAKICAgICBjbGFzcyBTdHJpY3RFcXVhbE5vZGUg
OiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFN0cmljdEVxdWFs
Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShTdHJp
Y3RFcXVhbE5vZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAt
OTYyLDI3ICsxMTM5LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE5vdFN0cmljdEVx
dWFsTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgTm90
U3RyaWN0RXF1YWxOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIERFQ0xBUkVfTk9E
RV9UWVBFKE5vdFN0cmljdEVxdWFsTm9kZSk7CiAgICAgfTsKIAogICAgIGNsYXNzIEJpdEFuZE5v
ZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEJpdEFuZE5v
ZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoQml0QW5k
Tm9kZSk7CiAgICAgfTsKIAogICAgIGNsYXNzIEJpdE9yTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5v
ZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQml0T3JOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7
CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKEJpdE9yTm9kZSk7CiAgICAgfTsKIAogICAgIGNs
YXNzIEJpdFhPck5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIEJpdFhPck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgREVDTEFSRV9OT0RF
X1RZUEUoQml0WE9yTm9kZSk7CiAgICAgfTsKIAogICAgIC8vIG1fZXhwcjEgJiYgbV9leHByMiwg
bV9leHByMSB8fCBtX2V4cHIyCiAgICAgY2xhc3MgTG9naWNhbE9wTm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBMb2dpY2FsT3BOb2RlKGludCwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIExvZ2ljYWxPcGVyYXRv
cik7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKExvZ2ljYWxPcE5vZGUpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtOTk4LDYgKzExODAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBDb25kaXRpb25hbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5v
ZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQ29uZGl0aW9uYWxOb2RlKGludCwgRXhwcmVzc2lv
bk5vZGUqIGxvZ2ljYWwsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoQ29uZGl0aW9uYWxOb2RlKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwMTAsNiArMTE5Myw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFJlYWRNb2RpZnlSZXNvbHZlTm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIFJlYWRNb2RpZnlSZXNvbHZlTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXIm
LCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCk7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKFJlYWRNb2RpZnlSZXNvbHZlTm9kZSk7
CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDI0LDYgKzEyMDgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBBc3NpZ25SZXNvbHZlTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKGludCwgY29uc3QgSWRlbnRpZmllciYs
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAg
ICAgREVDTEFSRV9OT0RFX1RZUEUoQXNzaWduUmVzb2x2ZU5vZGUpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTAzNyw2ICsxMjIyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgUmVhZE1vZGlmeUJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlLCBwdWJsaWMgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAg
ICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4
cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
OworICAgICAgICBERUNMQVJFX05PREVfVFlQRShSZWFkTW9kaWZ5QnJhY2tldE5vZGUpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTA1Miw2ICsxMjM4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQXNzaWduQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGlj
OgogICAgICAgICBBc3NpZ25CcmFja2V0Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBF
eHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vi
c2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQg
ZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAg
ICBERUNMQVJFX05PREVfVFlQRShBc3NpZ25CcmFja2V0Tm9kZSk7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDY2LDYgKzEyNTMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBBc3NpZ25Eb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJs
aWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAgICAgICAgQXNzaWdu
RG90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgRXhw
cmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAg
REVDTEFSRV9OT0RFX1RZUEUoQXNzaWduRG90Tm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CkBAIC0xMDc5LDYgKzEyNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBSZWFkTW9kaWZ5RG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGlj
IFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlYWRN
b2RpZnlEb3ROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
LCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVu
dHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0KTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoUmVhZE1vZGlmeURvdE5vZGUpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTA5Myw2ICsxMjgyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQXNzaWduRXJyb3JOb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoK
ICAgICAgICAgQXNzaWduRXJyb3JOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIE9wZXJh
dG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUo
QXNzaWduRXJyb3JOb2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
QEAgLTExMDcsNiArMTI5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvbW1hTm9k
ZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFBhcnNlckFyZW5hRGVsZXRhYmxlIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIENvbW1hTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoQ29t
bWFOb2RlKTsKIAogICAgICAgICB1c2luZyBQYXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3Ig
bmV3OwogCkBAIC0xMTIyLDYgKzEzMTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBD
b25zdERlY2xOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIENvbnN0RGVjbE5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUq
KTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoQ29uc3REZWNsTm9kZSk7CiAKICAgICAgICAg
Ym9vbCBoYXNJbml0aWFsaXplcigpIGNvbnN0IHsgcmV0dXJuIG1faW5pdDsgfQogICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCgpIHsgcmV0dXJuIG1faWRlbnQ7IH0KQEAgLTExNDIsNiAr
MTMzNCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvbnN0U3RhdGVtZW50Tm9kZSA6
IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnN0U3RhdGVt
ZW50Tm9kZShpbnQsIENvbnN0RGVjbE5vZGUqIG5leHQpOworICAgICAgICBERUNMQVJFX05PREVf
VFlQRShDb25zdFN0YXRlbWVudE5vZGUpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBjb21wdXRl
TWF4aW11bVNjb3BlRGVwdGgoaW50JiBzY29wZURlcHRoLCBpbnQmIHZhcmlhYmxlRGVwdGgpIGNv
bnN0IHsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTE1OCw2
ICsxMzUzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0YXRlbWVudE5vZGUqIHNpbmds
ZVN0YXRlbWVudCgpIGNvbnN0OwogICAgICAgICBTdGF0ZW1lbnROb2RlKiBsYXN0U3RhdGVtZW50
KCkgY29uc3Q7CiAKKyAgICAgICAgdm9pZCBhY2NlcHQoTm9kZVZpc2l0b3IqKTsKKwogICAgICAg
ICB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIGRlc3Rp
bmF0aW9uKTsKIAogICAgIHByaXZhdGU6CkBAIC0xMTY3LDcgKzEzNjQsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBjbGFzcyBCbG9ja05vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAg
cHVibGljOgogICAgICAgICBCbG9ja05vZGUoaW50LCBTb3VyY2VFbGVtZW50cyogPSAwKTsKKyAg
ICAgICAgREVDTEFSRV9OT0RFX1RZUEUoQmxvY2tOb2RlKTsKIAorICAgICAgICBTb3VyY2VFbGVt
ZW50cyogc3RhdGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50czsgfQogICAgICAg
ICBTdGF0ZW1lbnROb2RlKiBzaW5nbGVTdGF0ZW1lbnQoKSBjb25zdDsKICAgICAgICAgU3RhdGVt
ZW50Tm9kZSogbGFzdFN0YXRlbWVudCgpIGNvbnN0OwogCkBAIC0xMTgyLDYgKzEzODEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFbXB0eVN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3Rh
dGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBFbXB0eVN0YXRlbWVudE5vZGUoaW50
KTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoRW1wdHlTdGF0ZW1lbnROb2RlKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTExOTIsNiArMTM5Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIERlYnVnZ2VyU3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBT
dGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIERlYnVnZ2VyU3RhdGVtZW50Tm9k
ZShpbnQpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShEZWJ1Z2dlclN0YXRlbWVudE5vZGUp
OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMjAw
LDYgKzE0MDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeHByU3RhdGVtZW50Tm9k
ZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4cHJTdGF0
ZW1lbnROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZ
UEUoRXhwclN0YXRlbWVudE5vZGUpOwogCiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBleHByKCkg
Y29uc3QgeyByZXR1cm4gbV9leHByOyB9CiAKQEAgLTEyMTQsNiArMTQxNiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIFZhclN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9k
ZSB7CiAgICAgcHVibGljOgogICAgICAgICBWYXJTdGF0ZW1lbnROb2RlKGludCwgRXhwcmVzc2lv
bk5vZGUqKTsgICAgICAgIAorICAgICAgICBERUNMQVJFX05PREVfVFlQRShWYXJTdGF0ZW1lbnRO
b2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEyMjQsNiAr
MTQyNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIElmTm9kZSA6IHB1YmxpYyBTdGF0
ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIElmTm9kZShpbnQsIEV4cHJlc3Npb25O
b2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIGlmQmxvY2spOworICAgICAgICBERUNMQVJF
X05PREVfVFlQRShJZk5vZGUpOworCisgICAgICAgIFN0YXRlbWVudE5vZGUqIGlmQmxvY2soKSBj
b25zdCB7IHJldHVybiBtX2lmQmxvY2s7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApOwpAQCAtMTIzNSw2ICsxNDQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgSWZFbHNlTm9kZSA6IHB1YmxpYyBJZk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgSWZF
bHNlTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIGlm
QmxvY2ssIFN0YXRlbWVudE5vZGUqIGVsc2VCbG9jayk7CisgICAgICAgIERFQ0xBUkVfTk9ERV9U
WVBFKElmRWxzZU5vZGUpOworCisgICAgICAgIFN0YXRlbWVudE5vZGUqIGVsc2VCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fZWxzZUJsb2NrOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC0xMjQ1LDYgKzE0NTQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBEb1doaWxlTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIERvV2hpbGVOb2RlKGludCwgU3RhdGVtZW50Tm9kZSosIEV4cHJlc3Npb25Ob2RlKik7Cisg
ICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKERvV2hpbGVOb2RlKTsKKworICAgICAgICBTdGF0ZW1l
bnROb2RlKiBzdGF0ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlbWVudDsgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTI1Niw2ICsxNDY4LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgV2hpbGVOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgV2hpbGVOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqLCBT
dGF0ZW1lbnROb2RlKik7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKFdoaWxlTm9kZSk7CisK
KyAgICAgICAgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZW1lbnQ7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEyNjcs
NiArMTQ4Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZvck5vZGUgOiBwdWJsaWMg
U3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBGb3JOb2RlKGludCwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMywgU3RhdGVtZW50Tm9kZSosIGJvb2wgZXhwcjFXYXNWYXJEZWNsKTsKKyAgICAgICAgREVD
TEFSRV9OT0RFX1RZUEUoRm9yTm9kZSk7CisKKyAgICAgICAgU3RhdGVtZW50Tm9kZSogc3RhdGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZW1lbnQ7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEyODIsNiArMTUwMCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHB1YmxpYzoKICAgICAgICAgRm9ySW5Ob2RlKEpTR2xvYmFsRGF0YSosIGludCwgRXhwcmVz
c2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqKTsKICAgICAgICAgRm9y
SW5Ob2RlKEpTR2xvYmFsRGF0YSosIGludCwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25O
b2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgaW50IGRpdm90LCBpbnQgc3Rh
cnRPZmZzZXQsIGludCBlbmRPZmZzZXQpOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShGb3JJ
bk5vZGUpOworCisgICAgICAgIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGVtZW50OyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7
CkBAIC0xMjk4LDYgKzE1MTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIENvbnRpbnVlTm9kZShKU0dsb2JhbERhdGEqLCBpbnQpOwogICAgICAgICBDb250aW51ZU5v
ZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKENv
bnRpbnVlTm9kZSk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KTsKQEAgLTEzMDksNiArMTUzMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAg
ICAgICAgQnJlYWtOb2RlKEpTR2xvYmFsRGF0YSosIGludCk7CiAgICAgICAgIEJyZWFrTm9kZShp
bnQsIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoQnJlYWtO
b2RlKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAt
MTMxOSw2ICsxNTQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUmV0dXJuTm9kZSA6
IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewog
ICAgIHB1YmxpYzoKICAgICAgICAgUmV0dXJuTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiB2YWx1
ZSk7CisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKFJldHVybk5vZGUpOwogCiAgICAgICAgIEV4
cHJlc3Npb25Ob2RlKiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KIApAQCAtMTMzMyw2ICsx
NTU3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgV2l0aE5vZGUgOiBwdWJsaWMgU3Rh
dGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBXaXRoTm9kZShpbnQsIEV4cHJlc3Np
b25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIHVpbnQzMl90IGRpdm90LCB1aW50MzJfdCBleHByZXNz
aW9uTGVuZ3RoKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoV2l0aE5vZGUpOworCisgICAg
ICAgIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50
OyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMzQ2LDYgKzE1
NzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBMYWJlbE5vZGUgOiBwdWJsaWMgU3Rh
dGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIExhYmVsTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFN0YXRlbWVu
dE5vZGUqKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoTGFiZWxOb2RlKTsKKworICAgICAg
ICBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlbWVudDsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTM1Nyw2ICsxNTg3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgVGhyb3dOb2RlIDogcHVibGljIFN0YXRl
bWVudE5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgog
ICAgICAgICBUaHJvd05vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOworICAgICAgICBERUNMQVJF
X05PREVfVFlQRShUaHJvd05vZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApOwpAQCAtMTM2Nyw2ICsxNTk4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFRy
eU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBUcnlO
b2RlKGludCwgU3RhdGVtZW50Tm9kZSogdHJ5QmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGV4Y2Vw
dGlvbklkZW50LCBTdGF0ZW1lbnROb2RlKiBjYXRjaEJsb2NrLCBTdGF0ZW1lbnROb2RlKiBmaW5h
bGx5QmxvY2spOworICAgICAgICBERUNMQVJFX05PREVfVFlQRShUcnlOb2RlKTsKKworICAgICAg
ICBTdGF0ZW1lbnROb2RlKiB0cnlCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdHJ5QmxvY2s7IH0K
KyAgICAgICAgU3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY2F0
Y2hCbG9jazsgfQorICAgICAgICBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2soKSBjb25zdCB7
IHJldHVybiBtX2ZpbmFsbHlCbG9jazsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApOwpAQCAtMTQxOSwxMyArMTY1NSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBzZXRVc2VzQXJndW1lbnRzKCkgeyBtX3Njb3BlRmxhZ3MgfD0gVXNlc0FyZ3VtZW50c0Zs
YWc7IH0KICAgICAgICAgYm9vbCB1c2VzVGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFn
cyAmIFVzZXNUaGlzRmxhZzsgfQogCi0gICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uRm9yTW9y
ZVRoYW5WYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxG
bGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNlc0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBuZWVk
c0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVG
bGFncyAmIChVc2VzRXZhbEZsYWcgfCBVc2VzV2l0aEZsYWcpOyB9CiAgICAgICAgIGJvb2wgbmVl
ZHNBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSB8fCBu
ZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpOyB9CiAKICAgICAgICAgVmFyU3Rh
Y2smIHZhclN0YWNrKCkgeyByZXR1cm4gbV92YXJTdGFjazsgfQogICAgICAgICBGdW5jdGlvblN0
YWNrJiBmdW5jdGlvblN0YWNrKCkgeyByZXR1cm4gbV9mdW5jdGlvblN0YWNrOyB9CiAKICAgICAg
ICAgU3RhdGVtZW50Tm9kZSogc2luZ2xlU3RhdGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZW1lbnRzID8gbV9zdGF0ZW1lbnRzLT5zaW5nbGVTdGF0ZW1lbnQoKSA6IDA7IH0KKyAgICAgICAg
U291cmNlRWxlbWVudHMqIHN0YXRlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlbWVudHM7
IH0KIAogICAgICAgICB2b2lkIGVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiBkZXN0aW5hdGlvbik7CiAKQEAgLTE0NzcsNiArMTcxNCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlv
biA9IGZhbHNlOwogCisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKFByb2dyYW1Ob2RlKTsKKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIFByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291
cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0Jiwg
Y29uc3QgU291cmNlQ29kZSYsIFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwogCkBAIC0x
NDkwLDYgKzE3MjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsKIAorICAgICAgICBERUNMQVJFX05PREVfVFlQ
RShFdmFsTm9kZSk7CisKICAgICBwcml2YXRlOgogICAgICAgICBFdmFsTm9kZShKU0dsb2JhbERh
dGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBTY29wZUZsYWdzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKIApAQCAtMTUxMSw2ICsxNzUyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0
YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTY29wZUZs
YWdzKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3JlYXRl
KEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9u
U3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIFNjb3BlRmxhZ3MsIGlu
dCBudW1Db25zdGFudHMpOwogCisgICAgICAgIERFQ0xBUkVfTk9ERV9UWVBFKEZ1bmN0aW9uQm9k
eU5vZGUpOworCiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5nZXQoKTsgfQogICAgICAgICBzaXplX3QgcGFyYW1ldGVy
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMtPnNpemUoKTsgfQogCkBAIC0xNTM3
LDYgKzE3ODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jRXhwck5vZGUgOiBw
dWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRnVuY0V4cHJOb2Rl
KGludCwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBTb3VyY2VD
b2RlJiwgUGFyYW1ldGVyTm9kZSogPSAwKTsKKyAgICAgICAgREVDTEFSRV9OT0RFX1RZUEUoRnVu
Y0V4cHJOb2RlKTsKIAogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5KCkgeyByZXR1cm4g
bV9ib2R5OyB9CiAKQEAgLTE1NTEsNiArMTc5NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEZ1bmNEZWNsTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIEZ1bmNEZWNsTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbkJvZHlO
b2RlKiwgY29uc3QgU291cmNlQ29kZSYsIFBhcmFtZXRlck5vZGUqID0gMCk7CisgICAgICAgIERF
Q0xBUkVfTk9ERV9UWVBFKEZ1bmNEZWNsTm9kZSk7CiAKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9k
ZSogYm9keSgpIHsgcmV0dXJuIG1fYm9keTsgfQogCkBAIC0xNTY1LDYgKzE4MTAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQ2FzZUNsYXVzZU5vZGUoRXhwcmVzc2lvbk5vZGUqLCBTb3Vy
Y2VFbGVtZW50cyogPSAwKTsKIAogICAgICAgICBFeHByZXNzaW9uTm9kZSogZXhwcigpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwcjsgfQorICAgICAgICBTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50czsgfQogCiAgICAgICAgIHZvaWQgZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogZGVzdGluYXRpb24pOwogCkBAIC0x
NTkyLDYgKzE4MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdEJ5dGVjb2RlRm9yQmxvY2soQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBpbnB1
dCwgUmVnaXN0ZXJJRCogZGVzdGluYXRpb24pOwogCisgICAgICAgIENsYXVzZUxpc3ROb2RlKiBs
aXN0MSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDE7IH0KKyAgICAgICAgQ2FzZUNsYXVzZU5vZGUq
IGRlZmF1bHRDbGF1c2UoKSBjb25zdCB7IHJldHVybiBtX2RlZmF1bHRDbGF1c2U7IH0KKyAgICAg
ICAgQ2xhdXNlTGlzdE5vZGUqIGxpc3QyKCkgY29uc3QgeyByZXR1cm4gbV9saXN0MjsgfQorCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgU3dpdGNoSW5mbzo6U3dpdGNoVHlwZSB0cnlPcHRpbWl6ZWRT
d2l0Y2goVmVjdG9yPEV4cHJlc3Npb25Ob2RlKiwgOD4mIGxpdGVyYWxWZWN0b3IsIGludDMyX3Qm
IG1pbl9udW0sIGludDMyX3QmIG1heF9udW0pOwogICAgICAgICBDbGF1c2VMaXN0Tm9kZSogbV9s
aXN0MTsKQEAgLTE2MDIsNiArMTg1Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN3
aXRjaE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBT
d2l0Y2hOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqLCBDYXNlQmxvY2tOb2RlKik7CisgICAgICAg
IERFQ0xBUkVfTk9ERV9UWVBFKFN3aXRjaE5vZGUpOworCisgICAgICAgIENhc2VCbG9ja05vZGUq
IGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApOwpAQCAtMTY0MCw2ICsxODkzLDE4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBDbGF1c2VMaXN0Tm9kZSogdGFpbDsKICAgICB9OwogCisjdW5kZWYgREVDTEFSRV9O
T0RFX1RZUEUKKworICAgIGNsYXNzIE5vZGVWaXNpdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IE5vZGVWaXNpdG9yKCkgeyB9CisgICAgICAgIHZpcnR1YWwgfk5vZGVWaXNpdG9yKCkgeyB9CisK
KyNkZWZpbmUgREVDTEFSRV9WSVNJVChuYW1lKSB2aXJ0dWFsIHZvaWQgdmlzaXQjI25hbWUobmFt
ZSAqKTsKK0ZPUl9FQUNIX0NPTkNSRVRFX05PREVfVFlQRShERUNMQVJFX1ZJU0lUKQorI3VuZGVm
IERFQ0xBUkVfVklTSVQKKyAgICB9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IE5vZGVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDY0MTdkMmJm
MmJkODcwNDU5MDhlNTMwNWFkNmJkOTZjZjA0YjY5YzIuLmM0NzI1OGE2NDc0MjMyMzQ5ODBkNDVj
MWRjNzI0ZDc3MDVhODRiMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApA
QCAtMTYyLDcgKzE2Miw3IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgQUxXQVlTX0lOTElORSBTY29w
ZUZsYWdzIHVzZXNGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIEFsbFNjb3Bl
VXNlc0ZsYWdzOyB9CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZsYWdzKFNjb3BlRmxhZ3Mg
c2NvcGVGbGFncykgeyBtX3Njb3BlRmxhZ3MgfD0gc2NvcGVGbGFnczsgfQogCi0gICAgQUxXQVlT
X0lOTElORSBib29sIG5lZWRzRnVsbEFjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njb3Bl
RmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNlc0NhdGNoRmxhZyk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbmVlZHNGdWxsQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcgfCBVc2VzV2l0aEZsYWcpOyB9CiAgICAg
QUxXQVlTX0lOTElORSBib29sIHN0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxh
Z3MgJiBTdHJpY3RNb2RlRmxhZzsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaGFkb3dzQXJn
dW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU2hhZG93c0FyZ3VtZW50c0Zs
YWc7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2NvcGVGbGFncyAmIEZ1bmN0aW9uTW9kZUZsYWc7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCAwOGIzOWZjZjBiNGM5MzAyOTA0MzdiY2E5MDE5
N2NjOTUzMDBlZmU3Li44MDE2OTAxODI5ZWIwOTFmNGU4NzM2M2M2MjI4MWViY2NkNjVjMjExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC0yOTQsNyAr
Mjk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNFdmFsRmxhZzsgfQogICAgICAgICBib29sIHVz
ZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBVc2VzQXJndW1lbnRz
RmxhZzsgfQotICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXMgfHwgbV9zY29wZUZsYWdzICYgKFVzZXNFdmFsRmxhZyB8IFVz
ZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyB8fCBtX3Njb3BlRmxh
Z3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnKTsgfQogICAgICAgICBib29sIGlzU3Ry
aWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFN0cmljdE1vZGVGbGFnOyB9
CiAKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAppbmRleCBmODk0MmI1Zjg2
NWRiNTllMTU0MmRjNGUzYjVjN2NmMjc5YzE3MTYzLi4wZWUwMWRjNmVlZWM0NDZmOTNmYTRiZmJh
NTE3YjhjNGUwYzE1YzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcApAQCAtNDYsNyArNDYsOCBAQCB2b2lkIEpTU3Rh
dGljU2NvcGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwog
ICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNW
aXNpdENoaWxkcmVuKCkpOwogICAgIEpTVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVn
aXN0ZXJTdG9yZSk7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzKQorICAgICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycywgdGhpc09iamVjdC0+
bV9zeW1ib2xUYWJsZS0+c2l6ZSgpKTsKIH0KIAogSlNPYmplY3QqIEpTU3RhdGljU2NvcGVPYmpl
Y3Q6OnRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKaW5kZXggYmJm
MDNhMzQ3M2EyNTc2OWQyYjQyNTliNzUwZjZiZjdmZmQ0MGY4OS4uYWI1NGU1OTY0NTNhMzNmNGU5
MWVkODc4MTdiY2Y2NWI1N2NlZThiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaApAQCAtMzQsMTMgKzM0LDUzIEBAIG5hbWVz
cGFjZSBKU0N7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTVmFyaWFibGVPYmplY3Qg
QmFzZTsKIAotICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVjdCogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSB2YWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgc3RhdGljIEpTU3RhdGljU2NvcGVPYmplY3Qq
IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEpTU3RhdGljU2NvcGVPYmplY3QqIHNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNTdGF0aWNTY29wZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIEpTU3RhdGljU2NvcGVP
YmplY3QoZXhlYyk7Ci0gICAgICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhl
YywgaWRlbnRpZmllciwgdmFsdWUsIGF0dHJpYnV0ZXMpOworICAgICAgICAgICAgUmVmUHRyPFNo
YXJlZFN5bWJvbFRhYmxlPiB0YWJsZSA9IFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNTdGF0aWNTY29wZU9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNT
dGF0aWNTY29wZU9iamVjdChnbG9iYWxEYXRhLCB0YWJsZS5yZWxlYXNlKCksIDApOworICAgICAg
ICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAg
ICAgcmV0dXJuIHNjb3BlT2JqZWN0OwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIEpTU3Rh
dGljU2NvcGVPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHNjb3BlT2JqZWN0ID0gY3Jl
YXRlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgc2NvcGVPYmplY3QtPmFkZFZhcmlhYmxlKG5h
bWUsIGF0dHJpYnV0ZXMpOworICAgICAgICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVu
a25vd24+ID4gcmVnaXN0ZXJBcnJheSA9IGFkb3B0QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxV
bmtub3duPlsxXSk7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVy
cyA9IHJlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAgICAgICAgICByZWdpc3RlcnNbMF0uc2V0KGds
b2JhbERhdGEsIHNjb3BlT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+
c2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVnaXN0ZXJBcnJheS5yZWxlYXNlKCkpOworICAgICAg
ICAgICAgcmV0dXJuIHNjb3BlT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgaW50IGFkZFZh
cmlhYmxlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9yZWdpc3RlcnMpOworICAgICAgICAgICAgaW50
IGlkeCA9IHN5bWJvbFRhYmxlKCkuc2l6ZSgpOworICAgICAgICAgICAgc3ltYm9sVGFibGUoKS5h
ZGQobmFtZS5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoaWR4LCBhdHRyaWJ1dGVzKSk7CisgICAg
ICAgICAgICBBU1NFUlQoc3ltYm9sVGFibGUoKS5zaXplKCkgPT0gaWR4ICsgMSk7CisgICAgICAg
ICAgICByZXR1cm4gaWR4OworICAgICAgICB9CisKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVj
dCogcmVpZnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdpc3RlciogcmVnaXN0ZXJzKQor
ICAgICAgICB7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0ICpzY29wZU9iamVjdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RhdGljU2NvcGVPYmplY3Q+KGdsb2JhbERh
dGEuaGVhcCkpIEpTU3RhdGljU2NvcGVPYmplY3QoZ2xvYmFsRGF0YSwgbV9zeW1ib2xUYWJsZSwg
cmVnaXN0ZXJzKTsKKyAgICAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgdGVhck9mZihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVy
QXJyYXkgPSBhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5bbV9zeW1ib2xU
YWJsZS0+c2l6ZSgpXSk7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lz
dGVycyA9IHJlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1fc3ltYm9sVGFibGUtPnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmVnaXN0
ZXJzW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX3JlZ2lzdGVyc1tpXS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgLy8gQ2xlYXIgb2xkIHZhbHVlcyB0byBoZWxwIEdDICg/KS4KKyAgICAgICAg
ICAgICAgICBtX3JlZ2lzdGVyc1tpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgSlNWYWx1ZSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lz
dGVyQXJyYXkucmVsZWFzZSgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgYm9vbCBpc0R5bmFt
aWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogICAgICAgICBzdGF0
aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqKTsKQEAgLTU0LDI0
ICs5NCwxOCBAQCBuYW1lc3BhY2UgSlNDewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVy
U3RvcmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAg
c3ltYm9sVGFibGUoKS5hZGQoaWRlbnRpZmllci5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEs
IGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfQogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAg
ICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0
YSgpLnN0YXRpY1Njb3BlU3RydWN0dXJlLmdldCgpLCAmbV9zeW1ib2xUYWJsZSwgcmVpbnRlcnBy
ZXRfY2FzdDxSZWdpc3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSkKKyAgICAgICAgSlNTdGF0
aWNTY29wZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U2hhcmVk
U3ltYm9sVGFibGU+IHRhYmxlLCBSZWdpc3RlciogcmVnaXN0ZXJzKQorICAgICAgICAgICAgOiBK
U1ZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RhdGljU2NvcGVTdHJ1Y3R1
cmUuZ2V0KCksIHRhYmxlLmdldCgpLCByZWdpc3RlcnMpCisgICAgICAgICAgICAsIG1fc3ltYm9s
VGFibGUodGFibGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICAgICAgU3ltYm9sVGFibGUgbV9zeW1ib2xUYWJsZTsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVnaXN0ZXJTdG9yZTsKKyAgICAgICAg
UmVmUHRyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOwogICAgIH07CiAKICAgICBp
bmxpbmUgYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0Ojppc0R5bmFtaWNTY29wZShib29sJikgY29u
c3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132796</attachid>
            <date>2012-03-20 04:21:27 -0700</date>
            <delta_ts>2012-03-20 06:00:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20120320122125.patch</filename>
            <type>text/plain</type>
            <size>80873</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
OTgzMjYwZGE1ZTBlZjMwMzg0MjlkMGQyMjMxZWY4YmVjYmU2ZjI1Li43NTcyNzE2MjhmODIwNjdh
NDVkYTE1MGIwODEwMTkyZGRiYTU4N2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzggQEAKKzIwMTEtMDMtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIE9wdGltaXplIGFjY2VzcyB0byBibG9jay1zY29wZWQgbG9jYWwgdmFyaWFibGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcwOAor
CisgICAgICAgIFRoaXMgY29tbWl0IGNoYW5nZXMgdGhlIGJ5dGVjb21waWxlciB0byB0cmFjayBi
bG9jayBzY29wZSBvYmplY3RzLAorICAgICAgICBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUgcmVzb2x2ZWQKKyAgICAgICAgYXQgY29tcGls
ZS10aW1lIHRvIHJlZ2lzdGVycy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBpcyB0bwor
ICAgICAgICByZS11c2UgSlNTdGF0aWNTY29wZSwgYWRkaW5nIGxhenkgdGVhci1vZmYgYW5kIHRo
ZSBhYmlsaXR5IHRvIGJpbmQKKyAgICAgICAgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KKworICAg
ICAgICBDdXJyZW50bHksIGluIEVTNSwgb25seSBjYXRjaCBibG9ja3MgZnVuY3Rpb24gYXMgYmxv
Y2sgc2NvcGVzLCBmb3IKKyAgICAgICAgdGhlaXIgZXhjZXB0aW9uIGlkZW50aWZpZXIuICAoTmFt
ZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYWxzbworICAgICAgICBpbnRyb2R1Y2UgYSBraW5kIG9m
IGJsb2NrIHNjb3BlLCBidXQgc2luY2UgdGhleSBhcmUgZXhwcmVzc2lvbnMKKyAgICAgICAgYW5k
IG5vdCBzdGF0ZW1lbnRzIHRoZSBjb21waWxlciBpcyBub3QgYXMgaW52b2x2ZWQuKQorCisgICAg
ICAgIEdpdmVuIHRoYXQgY2F0Y2ggYmxvY2tzIGFyZSBub3QgdmVyeSBjb21tb24gaW4gSlMsIGFu
ZCB0aGV5IGNhbgorICAgICAgICBvbmx5IGJpbmQgb25lIHZhcmlhYmxlLCB0aGlzIHBhdGNoIGlz
IG1vcmUgYSBwcm9vZiBvZiBjb3JyZWN0bmVzcworICAgICAgICBhbmQgYSBiYXNlIGZvciBhIHN1
YnNlcXVlbnQgYmxvY2sgc2NvcGluZyBwYXRjaCB0aGFuIGEgZ2VuZXJhbAorICAgICAgICBvcHRp
bWl6YXRpb24uICBBcyBzdWNoLCBpbiBhbnRpY2lwYXRpb24gb2YgRVM2IGJsb2NrLXNjb3BlZAor
ICAgICAgICBsb2NhbHMsIHRoaXMgcGF0Y2ggYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHJlYWQtIGFu
ZCB3cml0ZS1iYXJyaWVycworICAgICAgICBvbiBibG9jay1zY29wZWQgbG9jYWxzLCB0byBpbXBs
ZW1lbnQgdGhlIHRlbXBvcmFsIGRlYWQgem9uZS4KKworICAgICAgICBUaGVyZSBhcmUgZml2ZSBu
ZXcgb3Bjb2Rlcy4gIFdoaWxlIHdlJ3JlIGF0IGl0LCB3ZSByZW1vdmUKKyAgICAgICAgam1wX3Nj
b3BlcywgYXMgaXQgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgY2xlYXJseSBpbiB0aGUgcHJlc2VuY2Ug
b2YKKyAgICAgICAgbGF6aWx5LXRvcm4tb2ZmIGJsb2NrIHNjb3Blcy4gIEluc3RlYWQgdGhlIGNv
bXBpbGVyIGVtaXRzIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSB1bndpbmRpbmdzIGRpcmVjdGx5
LiAgV2UgYWxzbyByZW1vdmUgcHVzaF9uZXdfc2NvcGUgaW4KKyAgICAgICAgZmF2b3Igb2YgdGhl
IG1vcmUgZ2VuZXJpYyBhbmQgZWZmaWNpZW50IGxhemlseSByZWlmaWVkIHN0YXRpYworICAgICAg
ICBzY29wZXMuCisKKyAgICAgICAgV2hlbiBlbnRlcmluZyBhIGJsb2NrIHNjb3BlLCB0aGUgY29t
cGlsZXIgYWxsb2NhdGVzIGEgY29udGlndW91cworICAgICAgICBibG9jayBvZiByZWdpc3RlcnMg
Zm9yIGJsb2NrIHNjb3Blcy4gIEJsb2NrIHNjb3BlcyB0aGF0IG1heSBiZQorICAgICAgICByZWlm
aWVkIChjYXB0dXJlZCBpbiBhIHNjb3BlIGNoYWluKSBhbHNvIG9jY3VweSBhbiBhZGRpdGlvbmFs
CisgICAgICAgIHJlZ2lzdGVyLCBmb3IgdGhlIHNjb3BlIG9iamVjdCBpdHNlbGYuICBUaGUgc3lt
Ym9sIHRhYmxlcyBmb3IgdGhlCisgICAgICAgIGJsb2NrIHNjb3BlcyBjb21lIGZyb20gInNjb3Bl
IHRlbXBsYXRlcyIsIHdoaWNoIGxpdmUgaW4gdGhlCisgICAgICAgIGNvbnN0YW50cyBzZWN0aW9u
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkNvbnRyb2xGbG93
Q29udGV4dCk6IEluIGFkZGl0aW9uIHRvIGZpbmFsbHkgYW5kIHdpdGggYmxvY2tzLAorICAgICAg
ICBzdXBwb3J0IGJsb2NrLXNjb3BlIGNvbnRyb2wgZmxvdyBjb250ZXh0cy4KKyAgICAgICAgKEpT
Qzo6UmVzb2x2ZVJlc3VsdCk6IEFkZCBhIEJhcnJpZXJGbGFnIGFuZCBhc3NvY2lhdGVkIHR5cGVz
IGZvcgorICAgICAgICBibG9jay1zY29wZWQgYmluZGluZ3MgdGhhdCBuZWVkIHJlYWQtIG9yIHdy
aXRlLSBiYXJyaWVycy4gIEFkZCBhCisgICAgICAgIGZsYWcgZm9yICJhcmd1bWVudHMiLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6c2NvcGVEZXB0aCk6IEFkZCBtX2Jsb2NrU2Nv
cGVEZXB0aC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNhbk9wdGltaXplTm9u
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNob3VsZE9wdGltaXpl
TG9jYWxzKToKKyAgICAgICAgUmVtb3ZlIG5vdy11bnVzZWQgbWV0aG9kcy4KKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6d2lsbFJlc29sdmVUb0FyZ3VtZW50cyk6IFJlbW92ZS4gIENhbGxlcnMKKyAg
ICAgICAgdXNlIFJlc29sdmVSZXN1bHQ6OmlzQXJndW1lbnRzKCksIHBvc3NpYmx5IHdpdGggdGhl
IG5ldworICAgICAgICBEb250Q3JlYXRlQXJndW1lbnRzRmxhZy4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OnJlc29sdmUpOiBTZWFyY2ggYmxvY2sgc2NvcGVzIGJlZm9yZQorICAgICAgICBsb29r
aW5nIGluIHRoZSBsb2NhbCBzeW1ib2wgdGFibGUgZm9yIHJlZ2lzdGVycy4gIEhhbmRsZSBsYXp5
CisgICAgICAgIHJlaWZpY2F0aW9uIG9mICJhcmd1bWVudHMiIGhlcmUuICBJbmxpbmUgY2FuT3B0
aW1pemVOb25Mb2NhbHMgYW5kCisgICAgICAgIHNob3VsZE9wdGltaXplTG9jYWxzLCBhbmQgZm9s
ZCBzb21lIGNvbnN0YW50cy4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRH
ZXRTdGF0aWNWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFN0
YXRpY1Zhcik6IEFkZCBjYXNlcyBmb3IKKyAgICAgICAgImFyZ3VtZW50cyIuICBBZGQgcmVhZC93
cml0ZSBiYXJyaWVycyBmb3IgbG9jYWxzIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSk6CisgICAg
ICAgIFJlbW92ZSBub3ctdW51c2VkIG1ldGhvZHMuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwdXNoQmxvY2tTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
Ojpwb3BCbG9ja1Njb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlaWZ5
U2NvcGVzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoU2NvcGUp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFBvcFNjb3BlKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcFNjb3Blcyk6IFJlZmFjdG9yIHRvIGhhbmRs
ZSBibG9jaworICAgICAgICBzY29wZXMgb24gdGhlIENvbnRyb2xGbG93Q29udGV4dCBzdGFjay4g
IFdoZW4gcHVzaGluZyBhIHNjb3BlIHRoYXQKKyAgICAgICAgcmVxdWlyZXMgYSBzY29wZSBjaGFp
biwgcmVpZnlTY29wZXMgaXMgY2FsbGVkLCB3aGljaCBlbnN1cmVzIHRoYXQKKyAgICAgICAgdGhl
IHNjb3BlIGNoYWluIGhhcyBiZWVuIGNyZWF0ZWQuICBXaGVuIGNvbnRyb2wgbGVhdmVzIGEgYmxv
Y2sKKyAgICAgICAgc2NvcGUgd2hvc2Ugc2NvcGUgbWF5IGhhdmUgYmVlbiByZWlmaWVkLCB0ZWFy
X29mZl9zY29wZSB3aWxsIHRlYXIKKyAgICAgICAgb2ZmIHRob3NlIGxvY2FscyBmcm9tIHRoZSBz
dGFjayB0byB0aGUgaGVhcC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRO
ZXdGdW5jdGlvbkludGVybmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXROZXdGdW5jdGlvbkV4cHJlc3Npb24pOiBDYWxsCisgICAgICAgIHJlaWZ5U2NvcGVzIGluc3Rl
YWQgb2YgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5LgorCisgICAgICAgICogYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVj
b2RlKTogQWRhcHQgdG8KKyAgICAgICAgd2lsbFJlc29sdmVUb0FyZ3VtZW50cyBjaGFuZ2UuCisg
ICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRh
cHQgdG8KKyAgICAgICAgSlNTdGF0aWNTY29wZSB0YWtpbmcgYSBKU0dsb2JhbERhdGEgaW5zdGVh
ZCBvZiBhbiBFeGVjU3RhdGUuCisgICAgICAgIChKU0M6OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6
IEFkYXB0IHRvIHVzZSBwdXNoQmxvY2tTY29wZSBhbmQKKyAgICAgICAgcG9wQmxvY2tTY29wZS4K
KworICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOiBBZGQgbmV3IHVuc2V0LCBhc3NlcnRfc2V0
LCBhc3NlcnRfdW5zZXQsCisgICAgICAgIHJlaWZ5X3Njb3BlLCBhbmQgdGVhcl9vZmZfc2NvcGUg
b3Bjb2Rlcy4gIFJlbW92ZSBwdXNoX25ld19zY29wZQorICAgICAgICBhbmQgam1wX3Njb3Blcy4K
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6
CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAq
IGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Vuc2V0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Fzc2VydF9zZXQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfYXNzZXJ0X3Vuc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jl
aWZ5X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RlYXJfb2ZmX3Njb3BlKToK
KyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3Vuc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Fzc2VydF9zZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYXNzZXJ0X3Vuc2V0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3JlaWZ5X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rl
YXJfb2ZmX3Njb3BlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGpp
dC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAg
ICAgKiBsbGludC9MTEludFNsb3dQYXRocy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDogVXBk
YXRlIHdpdGggc3VwcG9ydCBmb3IgdGhlIG5ldworICAgICAgICBvcGNvZGVzLiAgVGhlIExMSW50
IGJpdHMgYXJlIHByZWxpbWluYXJ5IGFuZCB1bnRlc3RlZC4KKworICAgICAgICAqIHBhcnNlci9O
b2Rlcy5oOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6Om5lZWRzQWN0aXZhdGlvbkZvck1vcmVU
aGFuVmFyaWFibGVzKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6
OlNjb3BlOjpuZWVkc0Z1bGxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuaDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmVlZHNBY3RpdmF0aW9uKTog
IkNhdGNoIiBjbGF1c2VzIG5vCisgICAgICAgIGxvbmdlciBmb3JjZSB0aGVpciBmdW5jdGlvbnMg
dG8gaGF2ZSBhY3RpdmF0aW9ucy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oOgorICAgICAgICAo
SlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoSlNTdGF0aWNTY29w
ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OmFkZFZhcmlhYmxl
KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6cmVpZnkpOgorICAgICAgICAo
SlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0Ojp0ZWFyT2ZmKToKKyAgICAgICAgKEpTQzo6SlNTdGF0
aWNTY29wZU9iamVjdDo6SlNTdGF0aWNTY29wZU9iamVjdCk6IEFkYXB0IHRvIHN1cHBvcnQKKyAg
ICAgICAgbGF6eSB0ZWFyLW9mZiwgYW5kIHRoZSBhYmlsaXR5IHRvIGJpbmQgbW9yZSB0aGFuIG9u
ZSB2YXJpYWJsZS4KKwogMjAxMi0wMy0xOSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3Vn
aEBhcHBsZS5jb20+CiAKICAgICAgICAgSlNDYWxsYmFja0Z1bmN0aW9uOjp0b1N0cmluZ0NhbGxi
YWNrL3ZhbHVlT2ZDYWxsYmFjayBkbyBub3QgaGFuZGxlIDAgcmV0dXJuIHZhbHVlIGZyb20gY29u
dmVydFRvVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAppbmRleCAyMDk3MmNjNjNiNWFmZDRjYTljMWY4NTIyN2YzYmZlMDBlNjI1ZDg0Li5lYTE0NmZl
OWM5NTgyMjhlZmMyNjQ1ZDdhN2RkNmM3MDU2ZWMxOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTIyMCwxNyArMTIyMCwzMSBAQCB2b2lk
IENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlv
bj46OmNvbnN0X2l0ZXJhdG9yJgogICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcG9wX3Njb3Bl
XG4iLCBsb2NhdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3B1c2hfbmV3X3Njb3BlOiB7CisgICAgICAgIGNhc2Ugb3BfdW5zZXQ6IHsKKyAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygi
WyU0ZF0gdW5zZXRcdFx0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5k
YXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9h
c3NlcnRfc2V0OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGRhdGFMb2coIlslNGRdIGFzc2VydF9zZXRcdCAlc1xuIiwgbG9jYXRpb24sIHJl
Z2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfYXNzZXJ0X3Vuc2V0OiB7CisgICAgICAgICAgICBpbnQgcjAg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGFzc2VydF91
bnNldFx0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZWlmeV9zY29w
ZTogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHB1c2hfbmV3X3Njb3Bl
IFx0JXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgp
LCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIxKS5kYXRhKCkpOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSByZWlmeV9zY29wZVx0ICVzLCAlcywgJXNcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMikuZGF0YSgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam1wX3Njb3BlczogewotICAg
ICAgICAgICAgaW50IHNjb3BlRGVsdGEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlsl
NGRdIGptcF9zY29wZXNcdF4lZCwgJWQoLT4lZClcbiIsIGxvY2F0aW9uLCBzY29wZURlbHRhLCBv
ZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9zY29w
ZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBkYXRhTG9nKCJbJTRkXSB0ZWFyX29mZl9zY29wZVx0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0
ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9jYXRjaDogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
Y29kZS5oCmluZGV4IDQ1NTk4Zjg5OTQ4MGZkNTM4N2RmOTQ1ZWIwOWQ2Y2M0ZDY4Y2I3YzYuLmYw
ZGU5NmJiZTY1ZmU0OWNiODYwMTZlNDg1YTY4YzNlMjkxZTYzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTE0OSw3ICsxNDksNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgbWFjcm8ob3Bfam5sZXNzZXEsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfam5n
cmVhdGVyLCA0KSBcCiAgICAgICAgIG1hY3JvKG9wX2puZ3JlYXRlcmVxLCA0KSBcCi0gICAgICAg
IG1hY3JvKG9wX2ptcF9zY29wZXMsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcCwgMikgXAog
ICAgICAgICBtYWNybyhvcF9sb29wX2lmX3RydWUsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfbG9v
cF9pZl9mYWxzZSwgMykgXApAQCAtMTgzLDcgKzE4MiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgXAogICAgICAgICBtYWNybyhvcF9wdXNoX3Njb3BlLCAyKSBcCiAgICAgICAgIG1hY3Jv
KG9wX3BvcF9zY29wZSwgMSkgXAotICAgICAgICBtYWNybyhvcF9wdXNoX25ld19zY29wZSwgNCkg
XAorICAgICAgICBcCisgICAgICAgIG1hY3JvKG9wX3Vuc2V0LCAyKSBcCisgICAgICAgIG1hY3Jv
KG9wX2Fzc2VydF9zZXQsIDIpIFwKKyAgICAgICAgbWFjcm8ob3BfYXNzZXJ0X3Vuc2V0LCAyKSBc
CisgICAgICAgIFwKKyAgICAgICAgbWFjcm8ob3BfcmVpZnlfc2NvcGUsIDQpIFwKKyAgICAgICAg
bWFjcm8ob3BfdGVhcl9vZmZfc2NvcGUsIDIpIFwKICAgICAgICAgXAogICAgICAgICBtYWNybyhv
cF9jYXRjaCwgMikgXAogICAgICAgICBtYWNybyhvcF90aHJvdywgMikgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAppbmRleCA0YTZmNDY1M2VhYjg5MmZjNmRhMGRiOTNjYjQ5Y2IxNTcxYTZhZGZiLi5hNDY0MDg0
NzAyN2RhZTRhMzQ5NzQ4NTI1MGY4ZDRkYzcxYjE3OWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgiCiAj
aW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1
ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCkBA
IC0xMzIsMTQgKzEzMywyMiBAQCB2b2lkIExhYmVsOjpzZXRMb2NhdGlvbih1bnNpZ25lZCBsb2Nh
dGlvbikKIHZvaWQgUmVzb2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB7CiAgICAgc3dpdGNo
IChtX3R5cGUpIHsKKyAgICBjYXNlIEFyZ3VtZW50czoKKyAgICBjYXNlIFJlYWRPbmx5QXJndW1l
bnRzOgogICAgIGNhc2UgUmVnaXN0ZXI6CiAgICAgY2FzZSBSZWFkT25seVJlZ2lzdGVyOgorICAg
IGNhc2UgQmFycmllclJlZ2lzdGVyOgorICAgIGNhc2UgUmVhZE9ubHlCYXJyaWVyUmVnaXN0ZXI6
CiAgICAgICAgIEFTU0VSVChtX2xvY2FsKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGV4
aWNhbDoKICAgICBjYXNlIFJlYWRPbmx5TGV4aWNhbDoKKyAgICBjYXNlIEJhcnJpZXJMZXhpY2Fs
OgorICAgIGNhc2UgUmVhZE9ubHlCYXJyaWVyTGV4aWNhbDoKICAgICBjYXNlIER5bmFtaWNMZXhp
Y2FsOgogICAgIGNhc2UgRHluYW1pY1JlYWRPbmx5TGV4aWNhbDoKKyAgICBjYXNlIER5bmFtaWNC
YXJyaWVyTGV4aWNhbDoKKyAgICBjYXNlIER5bmFtaWNSZWFkT25seUJhcnJpZXJMZXhpY2FsOgog
ICAgICAgICBBU1NFUlQobV9pbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBHbG9iYWw6CkBAIC0yMzgsNiArMjQ3LDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgU2Nv
cGVDaGFpbk5vZGUqIHMKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkpCiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2Nv
cGVEZXB0aCgwKQorICAgICwgbV9ibG9ja1Njb3BlRGVwdGgoMCkKICAgICAsIG1fYmFzZVNjb3Bl
RGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoR2xvYmFsQ29kZSkKICAgICAsIG1fbmV4dENvbnN0
YW50T2Zmc2V0KDApCkBAIC0zMDksNiArMzE5LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgU2NvcGVDaGFpbk4K
ICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKDApCiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQog
ICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQorICAgICwgbV9ibG9ja1Njb3BlRGVwdGgoMCkK
ICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2Rl
KQogICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKQEAgLTQ3MCw2ICs0ODEsNyBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaAogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgLCBtX2R5bmFt
aWNTY29wZURlcHRoKDApCisgICAgLCBtX2Jsb2NrU2NvcGVEZXB0aCgwKQogICAgICwgbV9iYXNl
U2NvcGVEZXB0aChjb2RlQmxvY2stPmJhc2VTY29wZURlcHRoKCkpCiAgICAgLCBtX2NvZGVUeXBl
KEV2YWxDb2RlKQogICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKQEAgLTUzNiwzMyArNTQ4
LDYgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBpbnQgcGFyYW1ldGVySW5kZXgKICAgICBtX2NvZGVCbG9jay0+YWRkUGFyYW1l
dGVyKCk7CiB9CiAKLWJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OndpbGxSZXNvbHZlVG9Bcmd1bWVu
dHMoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi17Ci0gICAgaWYgKGlkZW50ICE9IHByb3BlcnR5
TmFtZXMoKS5hcmd1bWVudHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAo
IXNob3VsZE9wdGltaXplTG9jYWxzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQoaWRlbnQuaW1wbCgp
KTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAobV9jb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBtX2NvZGVUeXBlID09IEZ1
bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6dW5jaGVja2VkUmVnaXN0ZXJG
b3JBcmd1bWVudHMoKQotewotICAgIEFTU0VSVCh3aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHByb3Bl
cnR5TmFtZXMoKS5hcmd1bWVudHMpKTsKLQotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBz
eW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLmltcGwoKSk7Ci0gICAg
QVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgcmV0dXJuICZyZWdpc3RlckZvcihlbnRyeS5n
ZXRJbmRleCgpKTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUxh
enlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqIHJlZykKIHsKICAgICBpZiAobV9sYXN0
TGF6eUZ1bmN0aW9uIDw9IHJlZy0+aW5kZXgoKSB8fCByZWctPmluZGV4KCkgPCBtX2ZpcnN0TGF6
eUZ1bmN0aW9uKQpAQCAtMTE1NCwzNyArMTEzOSw4MyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlIHYpCiAgICAgcmV0dXJu
IGNvbnN0YW50SUQ7CiB9CiAKLVJlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29s
dmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCitSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpyZXNvbHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCB1bnNpZ25lZCByZXNv
bHZlRmxhZ3MpCiB7CiAgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlzSWRl
bnRpZmllcikKICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZSh0
aGlzUmVnaXN0ZXIoKSwgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnKTsKIAorICAgIFNjb3Bl
Q2hhaW5JdGVyYXRvciBpdGVyID0gbV9zY29wZUNoYWluLT5iZWdpbigpOworICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBlbmQgPSBtX3Njb3BlQ2hhaW4tPmVuZCgpOworCisgICAgaW50IGRlcHRoID0g
MDsKKyAgICB1bnNpZ25lZCBmbGFncyA9IDA7CisgICAgZm9yIChpbnQgaSA9IHNjb3BlRGVwdGgo
KS0xOyBpID49IDA7IC0taSkgeworICAgICAgICBzd2l0Y2ggKG1fc2NvcGVDb250ZXh0U3RhY2tb
aV0uYmxvY2tUeXBlKSB7CisgICAgICAgIGNhc2UgV2l0aEJsb2NrOgorICAgICAgICAgICAgLy8g
SW4gdGhlb3J5IHdlIHNob3VsZCBiZSBhYmxlIHRvIHNraXAgaW50ZXJ2ZW5pbmcgYmxvY2sgc2Nv
cGUKKyAgICAgICAgICAgIC8vIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIG9mIHRo
ZSBMYXppbHlSZWlmeSBvbmVzIGhhdmUKKyAgICAgICAgICAgIC8vIGFjdHVhbGx5IGJlZW4gcmVp
ZmllZC4gSW5zdGVhZCBvZiBmb3JjaW5nIGVhZ2VyIHJlaWZpY2F0aW9uLAorICAgICAgICAgICAg
Ly8gd2UnbGwgcGVzc2ltaXplICJ3aXRoIiByZXNvbHV0aW9uLCBmb3JjaW5nIGl0IHRvIHN0YXJ0
IGZyb20gdGhlCisgICAgICAgICAgICAvLyB0b3Agb2YgdGhlIHNjb3BlIGNoYWluLgorICAgICAg
ICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKDApOworICAgICAgICBj
YXNlIEZpbmFsbHlCbG9jazoKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIFNj
b3BlQmxvY2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgSlNPYmplY3Qq
IGN1cnJlbnRTY29wZSA9IGl0ZXItPmdldCgpOworICAgICAgICBBU1NFUlQoY3VycmVudFNjb3Bl
LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBjdXJy
ZW50VmFyaWFibGVPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY3VycmVu
dFNjb3BlKTsKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1cnJlbnRWYXJpYWJs
ZU9iamVjdC0+c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKKworICAgICAgICAv
LyBCbG9jay1zY29wZWQgcHJvcGVydHkuCisgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gbV9zY29wZUNvbnRleHRTdGFja1tpXS5z
Y29wZUNvbnRleHQuYmFzZVJlZ2lzdGVyICsgZW50cnkuZ2V0SW5kZXgoKTsKKyAgICAgICAgICAg
IGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpCisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2
ZVJlc3VsdDo6UmVhZE9ubHlGbGFnOworICAgICAgICAgICAgLy8gSGVyZSBpZGVhbGx5IHdlIHdv
dWxkIGhhdmUgdGhlIHBhcnNlciBpbmRpY2F0ZSB3aGV0aGVyIGEgYmFycmllcgorICAgICAgICAg
ICAgLy8gaXMgbmVjZXNzYXJ5IG9yIG5vdC4KKyAgICAgICAgICAgIGZsYWdzIHw9IFJlc29sdmVS
ZXN1bHQ6OkJhcnJpZXJGbGFnOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJl
Z2lzdGVyUmVzb2x2ZShsb2NhbCwgZmxhZ3MpOworICAgICAgICB9CisgICAgICAgICsrZGVwdGg7
CisgICAgICAgICsraXRlcjsKKyAgICB9CisKICAgICAvLyBDaGVjayBpZiB0aGUgcHJvcGVydHkg
c2hvdWxkIGJlIGFsbG9jYXRlZCBpbiBhIHJlZ2lzdGVyLgotICAgIGlmIChtX2NvZGVUeXBlICE9
IEdsb2JhbENvZGUgJiYgc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkgeworICAgIGlmIChtX2NvZGVU
eXBlID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0g
c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAgICAgICAgaWYgKCFlbnRyeS5p
c051bGwoKSkgewotICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5h
cmd1bWVudHMpCi0gICAgICAgICAgICAgICAgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzID0gZW50cnkuaXNSZWFkT25seSgpID8gUmVzb2x2
ZVJlc3VsdDo6UmVhZE9ubHlGbGFnIDogMDsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIGxvY2Fs
ID0gY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoJnJlZ2lzdGVyRm9yKGVudHJ5LmdldElu
ZGV4KCkpKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpCisgICAgICAgICAg
ICAgICAgZmxhZ3MgfD0gUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnOworICAgICAgICAgICAg
aWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMgJiYgbV9jb2RlQmxvY2st
PnVzZXNBcmd1bWVudHMoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlz
U3RyaWN0TW9kZSgpCisgICAgICAgICAgICAgICAgICAgICYmICEocmVzb2x2ZUZsYWdzICYgQnl0
ZWNvZGVHZW5lcmF0b3I6OkRvbnRDcmVhdGVBcmd1bWVudHNGbGFnKSkgeworICAgICAgICAgICAg
ICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVudHMpOworICAgICAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVy
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmbGFncyB8PSBSZXNvbHZl
UmVzdWx0OjpBcmd1bWVudHNGbGFnOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZShsb2NhbCwgZmxhZ3MpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgLy8gQ2FzZXMgd2hlcmUgd2UgY2Fubm90IHN0YXRpY2FsbHkgb3B0aW1p
emUgdGhlIGxvb2t1cC4KLSAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3Vt
ZW50cyB8fCAhY2FuT3B0aW1pemVOb25Mb2NhbHMoKSkKLSAgICAgICAgcmV0dXJuIFJlc29sdmVS
ZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKDApOworICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5h
bWVzKCkuYXJndW1lbnRzCisgICAgICAgIHx8IG1fY29kZVR5cGUgPT0gRXZhbENvZGUKKyAgICAg
ICAgfHwgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJsb2NrLT51c2VzRXZh
bCgpICYmICFtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpKQorICAgICAgICByZXR1cm4gUmVz
b2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoZGVwdGgpOwogCi0gICAgU2NvcGVDaGFpbkl0ZXJh
dG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9y
IGVuZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsKLSAgICB1
bnNpZ25lZCBmbGFncyA9IDA7CisgICAgZGVwdGggKz0gbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNj
b3BlQ2hhaW4oKTsKICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytkZXB0aCkgewog
ICAgICAgICBKU09iamVjdCogY3VycmVudFNjb3BlID0gaXRlci0+Z2V0KCk7Ci0gICAgICAgIGlm
ICghY3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGZsYWdz
IHw9IFJlc29sdmVSZXN1bHQ6OkR5bmFtaWNGbGFnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0gICAgICAgIAorICAgICAgICBpZiAoIWN1cnJlbnRTY29wZS0+aXNWYXJpYWJsZU9iamVj
dCgpKQorICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKGRl
cHRoKTsKKwogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKICAgICAgICAg
U3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+c3ltYm9sVGFi
bGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKIApAQCAtMTE5Miw3ICsxMjIzLDYgQEAgUmVzb2x2
ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSkKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKGVu
dHJ5LmlzUmVhZE9ubHkoKSkKICAgICAgICAgICAgICAgICBmbGFncyB8PSBSZXNvbHZlUmVzdWx0
OjpSZWFkT25seUZsYWc7Ci0gICAgICAgICAgICBkZXB0aCArPSBtX2NvZGVCbG9jay0+bmVlZHNG
dWxsU2NvcGVDaGFpbigpOwogICAgICAgICAgICAgaWYgKCsraXRlciA9PSBlbmQpIHsKICAgICAg
ICAgICAgICAgICBpZiAoZmxhZ3MgJiBSZXNvbHZlUmVzdWx0OjpEeW5hbWljRmxhZykKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNJbmRleGVkR2xvYmFs
UmVzb2x2ZShlbnRyeS5nZXRJbmRleCgpLCBkZXB0aCwgY3VycmVudFNjb3BlLCBmbGFncyk7CkBA
IC0xMjEzLDcgKzEyNDMsNiBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNv
bHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogCiAgICAgLy8gQ2FuJ3QgbG9jYXRlIHRo
ZSBwcm9wZXJ0eSBidXQgd2UncmUgYWJsZSB0byBhdm9pZCBhIGZldyBsb29rdXBzLgogICAgIEpT
T2JqZWN0KiBzY29wZSA9IGl0ZXItPmdldCgpOwotICAgIGRlcHRoICs9IG1fY29kZUJsb2NrLT5u
ZWVkc0Z1bGxTY29wZUNoYWluKCk7CiAgICAgaWYgKCsraXRlciA9PSBlbmQpIHsKICAgICAgICAg
aWYgKChmbGFncyAmIFJlc29sdmVSZXN1bHQ6OkR5bmFtaWNGbGFnKSAmJiBkZXB0aCkKICAgICAg
ICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5hbWljR2xvYmFsUmVzb2x2ZShkZXB0aCwg
c2NvcGUpOwpAQCAtMTQyNywxMiArMTQ1NiwyMiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEdldFN0YXRpY1ZhcihSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZQog
ICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IDA7CiAKICAgICBzd2l0Y2ggKHJlc29sdmVSZXN1
bHQudHlwZSgpKSB7CisgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpCYXJyaWVyUmVnaXN0ZXI6Cisg
ICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUJhcnJpZXJSZWdpc3RlcjoKKyAgICAgICAg
ZW1pdE9wY29kZShvcF9hc3NlcnRfc2V0KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHJlc29sdmVSZXN1bHQubG9jYWwoKS0+aW5kZXgoKSk7CisgICAgICAgIC8vIGZhbGwgdGhyb3Vn
aAorICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6QXJndW1lbnRzOgorICAgIGNhc2UgUmVzb2x2ZVJl
c3VsdDo6UmVhZE9ubHlBcmd1bWVudHM6CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWdpc3Rl
cjoKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5UmVnaXN0ZXI6CiAgICAgICAgIGlm
IChkc3QgPT0gaWdub3JlZFJlc3VsdCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IHJldHVybiBtb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzb2x2ZVJlc3VsdC5sb2Nh
bCgpKTsKIAorICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6QmFycmllckxleGljYWw6CisgICAgY2Fz
ZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUJhcnJpZXJMZXhpY2FsOgorICAgICAgICAvLyBGSVhN
RTogd2hhdCB0byBkbyBoZXJlPwogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6TGV4aWNhbDoKICAg
ICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5TGV4aWNhbDoKICAgICAgICAgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfc2NvcGVkX3Zhcik7CkBAIC0xNDY3LDEwICsxNTA2
LDIyIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKFJl
Z2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFB1dFN0YXRpY1Zhcihjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVzdWx0
LCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHJlc29sdmVSZXN1bHQudHlwZSgp
KSB7CisgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUFyZ3VtZW50czoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5
QmFycmllclJlZ2lzdGVyOgorICAgICAgICBlbWl0T3Bjb2RlKG9wX2Fzc2VydF91bnNldCk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmxvY2FsKCktPmluZGV4
KCkpOworICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkJh
cnJpZXJSZWdpc3RlcjoKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkFyZ3VtZW50czoKICAgICBj
YXNlIFJlc29sdmVSZXN1bHQ6OlJlZ2lzdGVyOgogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVh
ZE9ubHlSZWdpc3RlcjoKICAgICAgICAgcmV0dXJuIG1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQo
cmVzb2x2ZVJlc3VsdC5sb2NhbCgpLCB2YWx1ZSk7CiAKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6
OkJhcnJpZXJMZXhpY2FsOgorICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlCYXJyaWVy
TGV4aWNhbDoKKyAgICAgICAgLy8gRklYTUU6IHdoYXQgdG8gZG8gaGVyZT8KICAgICBjYXNlIFJl
c29sdmVSZXN1bHQ6OkxleGljYWw6CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUxl
eGljYWw6CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X3Njb3BlZF92YXIpOwpAQCAtMTcyNiw3
ICsxNzc3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMYXp5TmV3RnVu
Y3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHkKIAogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkludGVybmFsKFJlZ2lzdGVySUQqIGRzdCwgdW5z
aWduZWQgaW5kZXgsIGJvb2wgZG9OdWxsQ2hlY2spCiB7Ci0gICAgY3JlYXRlQWN0aXZhdGlvbklm
TmVjZXNzYXJ5KCk7CisgICAgcmVpZnlTY29wZXMoKTsKICAgICBlbWl0T3Bjb2RlKG9wX25ld19m
dW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwpAQCAtMTc0Nyw3ICsxNzk4LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJ
RCogcjAsIEZ1bmNFeHAKICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IG4tPmJvZHko
KTsKICAgICB1bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkV4cHIobWFr
ZUZ1bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKICAgICAKLSAgICBjcmVhdGVBY3Rp
dmF0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICByZWlmeVNjb3BlcygpOwogICAgIGVtaXRPcGNvZGUo
b3BfbmV3X2Z1bmNfZXhwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleCk7CkBAIC0xNzU5LDM0ICsxODEwLDYg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEEKICAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwg
ZHN0LCBmdW5jLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7
CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5
KCkKLXsKLSAgICBpZiAobV9jb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBpZiAoIW1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIElmIHdlJ3JlIGluIHN0cmljdCBtb2RlIHdlIHRlYXIgb2ZmIHRo
ZSBhcmd1bWVudHMgb24gZnVuY3Rpb24KLSAgICAvLyBlbnRyeSwgc28gdGhlcmUncyBubyBuZWVk
IHRvIGNoZWNrIGlmIHdlIG5lZWQgdG8gY3JlYXRlIHRoZW0KLSAgICAvLyBub3cKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbWl0
T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVudHMpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCht
X2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7Ci19Ci0KLXZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1faGFzQ3Jl
YXRlZEFjdGl2YXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5u
ZWVkc0Z1bGxTY29wZUNoYWluKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBlbWl0T3Bjb2RlKG9w
X2NyZWF0ZV9hY3RpdmF0aW9uKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0
aW9uUmVnaXN0ZXItPmluZGV4KCkpOwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdENhbGxFdmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFy
Z3VtZW50cyYgY2FsbEFyZ3VtZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCiB7CiAgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGxf
ZXZhbCwgZHN0LCBmdW5jLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CkBAIC0xOTY5LDkgKzE5OTIsMTAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvUHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hTY29wZShSZWdpc3RlcklEKiBzY29wZSkK
IHsKKyAgICByZWlmeVNjb3BlcygpOwogICAgIEFTU0VSVChzY29wZS0+aXNUZW1wb3JhcnkoKSk7
CiAgICAgQ29udHJvbEZsb3dDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5pc0ZpbmFsbHlC
bG9jayA9IGZhbHNlOworICAgIGNvbnRleHQuYmxvY2tUeXBlID0gV2l0aEJsb2NrOwogICAgIG1f
c2NvcGVDb250ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwogICAgIG1fZHluYW1pY1Njb3BlRGVw
dGgrKzsKIApAQCAtMTk4MSw3ICsyMDA1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRQdXNoU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUpCiB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UG9wU2NvcGUoKQogewogICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNp
emUoKSk7Ci0gICAgQVNTRVJUKCFtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlC
bG9jayk7CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmJsb2NrVHlwZSA9
PSBXaXRoQmxvY2spOwogCiAgICAgZW1pdE9wY29kZShvcF9wb3Bfc2NvcGUpOwogCkBAIC0yMDA3
LDcgKzIwMzEsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVidWdIb29rKERlYnVn
SG9va0lEIGRlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbgogdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6cHVzaEZpbmFsbHlDb250ZXh0KExhYmVsKiB0YXJnZXQsIFJlZ2lzdGVySUQqIHJldEFk
ZHJEc3QpCiB7CiAgICAgQ29udHJvbEZsb3dDb250ZXh0IHNjb3BlOwotICAgIHNjb3BlLmlzRmlu
YWxseUJsb2NrID0gdHJ1ZTsKKyAgICBzY29wZS5ibG9ja1R5cGUgPSBGaW5hbGx5QmxvY2s7CiAg
ICAgRmluYWxseUNvbnRleHQgY29udGV4dCA9IHsgdGFyZ2V0LCByZXRBZGRyRHN0IH07CiAgICAg
c2NvcGUuZmluYWxseUNvbnRleHQgPSBjb250ZXh0OwogICAgIG1fc2NvcGVDb250ZXh0U3RhY2su
YXBwZW5kKHNjb3BlKTsKQEAgLTIwMTcsNyArMjA0MSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OnB1c2hGaW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0LCBSZWdpc3RlcklEKiByZXRBZGRy
RHN0CiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCgpCiB7CiAgICAg
QVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKLSAgICBBU1NFUlQobV9zY29wZUNv
bnRleHRTdGFjay5sYXN0KCkuaXNGaW5hbGx5QmxvY2spOworICAgIEFTU0VSVChtX3Njb3BlQ29u
dGV4dFN0YWNrLmxhc3QoKS5ibG9ja1R5cGUgPT0gRmluYWxseUJsb2NrKTsKICAgICBBU1NFUlQo
bV9maW5hbGx5RGVwdGggPiAwKTsKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnJlbW92ZUxhc3Qo
KTsKICAgICBtX2ZpbmFsbHlEZXB0aC0tOwpAQCAtMjEwMCw3MCArMjEyNCw2IEBAIExhYmVsU2Nv
cGUqIEJ5dGVjb2RlR2VuZXJhdG9yOjpjb250aW51ZVRhcmdldChjb25zdCBJZGVudGlmaWVyJiBu
YW1lKQogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENvbXBsZXhKdW1wU2NvcGVzKExhYmVsKiB0YXJnZXQsIENvbnRyb2xGbG93Q29u
dGV4dCogdG9wU2NvcGUsIENvbnRyb2xGbG93Q29udGV4dCogYm90dG9tU2NvcGUpCi17Ci0gICAg
d2hpbGUgKHRvcFNjb3BlID4gYm90dG9tU2NvcGUpIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgY291
bnQgdGhlIG51bWJlciBvZiBkeW5hbWljIHNjb3BlcyB3ZSBuZWVkIHRvIHJlbW92ZSB0byBnZXQK
LSAgICAgICAgLy8gdG8gYSBmaW5hbGx5IGJsb2NrLgotICAgICAgICBpbnQgbk5vcm1hbFNjb3Bl
cyA9IDA7Ci0gICAgICAgIHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3BlKSB7Ci0gICAgICAg
ICAgICBpZiAodG9wU2NvcGUtPmlzRmluYWxseUJsb2NrKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgKytuTm9ybWFsU2NvcGVzOwotICAgICAgICAgICAgLS10b3BTY29wZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChuTm9ybWFsU2NvcGVzKSB7Ci0gICAgICAgICAgICBz
aXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0KLSAgICAgICAgICAgIC8vIFdl
IG5lZWQgdG8gcmVtb3ZlIGEgbnVtYmVyIG9mIGR5bmFtaWMgc2NvcGVzIHRvIGdldCB0byB0aGUg
bmV4dAotICAgICAgICAgICAgLy8gZmluYWxseSBibG9jawotICAgICAgICAgICAgZW1pdE9wY29k
ZShvcF9qbXBfc2NvcGVzKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChuTm9y
bWFsU2NvcGVzKTsKLQotICAgICAgICAgICAgLy8gSWYgdG9wU2NvcGUgPT0gYm90dG9tU2NvcGUg
dGhlbiB0aGVyZSBpc24ndCBhY3R1YWxseSBhIGZpbmFsbHkgYmxvY2sKLSAgICAgICAgICAgIC8v
IGxlZnQgdG8gZW1pdCwgc28gbWFrZSB0aGUgam1wX3Njb3BlcyBqdW1wIGRpcmVjdGx5IHRvIHRo
ZSB0YXJnZXQgbGFiZWwKLSAgICAgICAgICAgIGlmICh0b3BTY29wZSA9PSBib3R0b21TY29wZSkg
ewotICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVn
aW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0YXJn
ZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSBqdXN0IHVz
ZSBqbXBfc2NvcGVzIHRvIHBvcCBhIGdyb3VwIG9mIHNjb3BlcyBhbmQgZ28KLSAgICAgICAgICAg
IC8vIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uCi0gICAgICAgICAgICBSZWZQdHI8TGFiZWw+IG5l
eHRJbnNuID0gbmV3TGFiZWwoKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChu
ZXh0SW5zbi0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAgICAgICAg
ICBlbWl0TGFiZWwobmV4dEluc24uZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUg
KHRvcFNjb3BlID4gYm90dG9tU2NvcGUgJiYgdG9wU2NvcGUtPmlzRmluYWxseUJsb2NrKSB7Ci0g
ICAgICAgICAgICBlbWl0SnVtcFN1YnJvdXRpbmUodG9wU2NvcGUtPmZpbmFsbHlDb250ZXh0LnJl
dEFkZHJEc3QsIHRvcFNjb3BlLT5maW5hbGx5Q29udGV4dC5maW5hbGx5QWRkcik7Ci0gICAgICAg
ICAgICAtLXRvcFNjb3BlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlbWl0SnVtcCh0
YXJnZXQpOwotfQotCi1QYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1
bXBTY29wZXMoTGFiZWwqIHRhcmdldCwgaW50IHRhcmdldFNjb3BlRGVwdGgpCi17Ci0gICAgQVNT
RVJUKHNjb3BlRGVwdGgoKSAtIHRhcmdldFNjb3BlRGVwdGggPj0gMCk7Ci0gICAgQVNTRVJUKHRh
cmdldC0+aXNGb3J3YXJkKCkpOwotCi0gICAgc2l6ZV90IHNjb3BlRGVsdGEgPSBzY29wZURlcHRo
KCkgLSB0YXJnZXRTY29wZURlcHRoOwotICAgIEFTU0VSVChzY29wZURlbHRhIDw9IG1fc2NvcGVD
b250ZXh0U3RhY2suc2l6ZSgpKTsKLSAgICBpZiAoIXNjb3BlRGVsdGEpCi0gICAgICAgIHJldHVy
biBlbWl0SnVtcCh0YXJnZXQpOwotCi0gICAgaWYgKG1fZmluYWxseURlcHRoKQotICAgICAgICBy
ZXR1cm4gZW1pdENvbXBsZXhKdW1wU2NvcGVzKHRhcmdldCwgJm1fc2NvcGVDb250ZXh0U3RhY2su
bGFzdCgpLCAmbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkgLSBzY29wZURlbHRhKTsKLQotICAg
IHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKLQotICAgIGVtaXRPcGNvZGUo
b3Bfam1wX3Njb3Blcyk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlRGVsdGEpOwot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9u
cygpLnNpemUoKSkpOwotICAgIHJldHVybiB0YXJnZXQ7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlOYW1lcyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGksIFJlZ2lzdGVySUQqIHNpemUsIExhYmVsKiBicmVh
a1RhcmdldCkKIHsKICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CkBA
IC0yMTk2LDEyICsyMTU2LDEyIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q2F0Y2goUmVnaXN0ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBzdGFyCiAgICAgbV91c2Vz
RXhjZXB0aW9ucyA9IHRydWU7CiAjaWYgRU5BQkxFKEpJVCkKICNpZiBFTkFCTEUoTExJTlQpCi0g
ICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAw
KSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9iYXNlU2Nv
cGVEZXB0aCwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVG
cm9tRXhlY3V0YWJsZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfY2F0Y2gp
KSkgfTsKKyAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+YmluZCgwLCAwKSwgZW5kLT5i
aW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1pY1Njb3BlRGVwdGggKyBt
X2Jsb2NrU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGgsIENvZGVMb2NhdGlvbkxhYmVsKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oJmxsaW50X29wX2NhdGNoKSkpIH07CiAjZWxzZQotICAgIEhhbmRsZXJJbmZv
IGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9u
cygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGgsIENvZGVM
b2NhdGlvbkxhYmVsKCkgfTsKKyAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+YmluZCgw
LCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1pY1Nj
b3BlRGVwdGggKyBtX2Jsb2NrU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGgsIENvZGVMb2Nh
dGlvbkxhYmVsKCkgfTsKICNlbmRpZgogI2Vsc2UKLSAgICBIYW5kbGVySW5mbyBpbmZvID0geyBz
dGFydC0+YmluZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCks
IG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoIH07CisgICAgSGFuZGxlcklu
Zm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9ibG9ja1Njb3BlRGVwdGggKyBt
X2Jhc2VTY29wZURlcHRoIH07CiAjZW5kaWYKIAogICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRp
b25IYW5kbGVyKGluZm8pOwpAQCAtMjIzMywxNyArMjE5MywyMDAgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFN1YnJvdXRpbmVSZXR1cm4oUmVnaXN0ZXJJRCogcmV0QWRkclNyYykKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmV0QWRkclNyYy0+aW5kZXgoKSk7CiB9CiAKLXZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpCitzdHJ1Y3QgUmVpZmlj
YXRpb25Xb3JrbGlzdEl0ZW0geworICAgIFJlZ2lzdGVySUQqIHJlaWZpZWRTY29wZVJlZ2lzdGVy
OworICAgIEpTT2JqZWN0KiBzY29wZVRlbXBsYXRlOworICAgIFJlZ2lzdGVySUQqIGJhc2VSZWdp
c3RlcjsKK307CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlaWZ5U2NvcGVzKCkKK3sKKyAg
ICBWZWN0b3I8UmVpZmljYXRpb25Xb3JrbGlzdEl0ZW0+IHdvcmtsaXN0OworICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBpdGVyID0gbV9zY29wZUNoYWluLT5iZWdpbigpOworICAgIGludCBpOworCisg
ICAgLy8gRmlyc3QsIHdhbGsgdGhlIHNjb3BlIGNoYWluIHRvIHNlZSB3aGF0IG1pZ2h0IG5lZWQg
cmVpZmljYXRpb24uCisgICAgZm9yIChpID0gc2NvcGVEZXB0aCgpLTE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgIHN3aXRjaCAobV9zY29wZUNvbnRleHRTdGFja1tpXS5ibG9ja1R5cGUpIHsKKyAg
ICAgICAgY2FzZSBXaXRoQmxvY2s6CisgICAgICAgICAgICAvLyBQdXNoaW5nIGEgYHdpdGgnIGJs
b2NrIGZvcmNlcyBvdXRlciBzY29wZXMgdG8gYmUgcmVpZmllZCwgc28gd2UKKyAgICAgICAgICAg
IC8vIGRvbid0IG5lZWQgdG8gZG8gc28gaGVyZS4KKyAgICAgICAgICAgIGdvdG8gcmVpZnk7Cisg
ICAgICAgIGNhc2UgRmluYWxseUJsb2NrOgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGNhc2UgU2NvcGVCbG9jazoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICBK
U09iamVjdCogY3VycmVudFNjb3BlID0gaXRlci0+Z2V0KCk7CisgICAgICAgIEFTU0VSVChjdXJy
ZW50U2NvcGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgICAgICsraXRlcjsKKworICAg
ICAgICBzd2l0Y2ggKG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0LnJlaWZ5TW9k
ZSkgeworICAgICAgICBjYXNlIFNjb3BlQ29udGV4dDo6RWFnZXJseVJlaWZ5OgorICAgICAgICAg
ICAgLy8gTGlrZSBhIGB3aXRoJyBibG9jaywgZW50ZXJpbmcgYW4gRWFnZXJseVJlaWZ5IGJsb2Nr
IGZvcmNlcworICAgICAgICAgICAgLy8gcmVpZmljYXRpb24sIHNvIHdlIG5lZWQgbG9vayBubyBm
YXJ0aGVyLgorICAgICAgICAgICAgZ290byByZWlmeTsKKyAgICAgICAgY2FzZSBTY29wZUNvbnRl
eHQ6OkxhemlseVJlaWZ5OiB7CisgICAgICAgICAgICBSZWlmaWNhdGlvbldvcmtsaXN0SXRlbSBp
dGVtOworICAgICAgICAgICAgaXRlbS5yZWlmaWVkU2NvcGVSZWdpc3RlciA9IG1fc2NvcGVDb250
ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3RlcjsKKyAgICAgICAgICAgIGl0ZW0u
c2NvcGVUZW1wbGF0ZSA9IGN1cnJlbnRTY29wZTsKKyAgICAgICAgICAgIGl0ZW0uYmFzZVJlZ2lz
dGVyID0gbV9zY29wZUNvbnRleHRTdGFja1tpXS5zY29wZUNvbnRleHQuYmFzZVJlZ2lzdGVyOwor
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGl0ZW0pOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0gY2FzZSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCityZWlmeToKKyAg
ICAvLyBJZiB3ZSB0cmF2ZXJzZWQgdGhyb3VnaCB0aGUgd2hvbGUgYmxvY2sgc2NvcGUgY2hhaW4s
IHBlcmhhcHMgd2UgbmVlZCB0bworICAgIC8vIHJlaWZ5IHRoZSBhY3RpdmF0aW9uIGZvciB0aGUg
ZnVuY3Rpb24uCisgICAgaWYgKGkgPCAwICYmICFtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uICYmIG1f
Y29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpIHsKKyAgICAgICAgZW1pdE9wY29kZShv
cF9jcmVhdGVfYWN0aXZhdGlvbik7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2Fj
dGl2YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQorCisgICAgd2hpbGUgKHdvcmtsaXN0
LnNpemUoKSkgeworICAgICAgICBSZWlmaWNhdGlvbldvcmtsaXN0SXRlbSBpdGVtID0gd29ya2xp
c3QubGFzdCgpOworICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgIFJlZ2lz
dGVySUQqIHRlbXBsID0gZW1pdExvYWQoMCwgSlNWYWx1ZShpdGVtLnNjb3BlVGVtcGxhdGUpKTsK
KyAgICAgICAgZW1pdE9wY29kZShvcF9yZWlmeV9zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChpdGVtLnJlaWZpZWRTY29wZVJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRlbXBsLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGl0ZW0uYmFzZVJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICB9Cit9CisKK1Bh
c3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcFNjb3BlcyhMYWJlbCog
dGFyZ2V0LCBpbnQgdGFyZ2V0U2NvcGVEZXB0aCkKIHsKKyAgICBBU1NFUlQoc2NvcGVEZXB0aCgp
IC0gdGFyZ2V0U2NvcGVEZXB0aCA+PSAwKTsKKyAgICBBU1NFUlQodGFyZ2V0LT5pc0ZvcndhcmQo
KSk7CisKKyAgICBzaXplX3Qgc2NvcGVEZWx0YSA9IHNjb3BlRGVwdGgoKSAtIHRhcmdldFNjb3Bl
RGVwdGg7CisgICAgQVNTRVJUKHNjb3BlRGVsdGEgPD0gbV9zY29wZUNvbnRleHRTdGFjay5zaXpl
KCkpOworCisgICAgd2hpbGUgKHNjb3BlRGVsdGEtLSkgeworICAgICAgICBDb250cm9sRmxvd0Nv
bnRleHQqIGNvbnRleHQgPSAmbV9zY29wZUNvbnRleHRTdGFja1t0YXJnZXRTY29wZURlcHRoICsg
c2NvcGVEZWx0YV07CisgICAgICAgIHN3aXRjaCAoY29udGV4dC0+YmxvY2tUeXBlKSB7CisgICAg
ICAgIGNhc2UgV2l0aEJsb2NrOgorICAgICAgICAgICAgZW1pdE9wY29kZShvcF9wb3Bfc2NvcGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRmluYWxseUJsb2NrOgorICAgICAg
ICAgICAgZW1pdEp1bXBTdWJyb3V0aW5lKGNvbnRleHQtPmZpbmFsbHlDb250ZXh0LnJldEFkZHJE
c3QsIGNvbnRleHQtPmZpbmFsbHlDb250ZXh0LmZpbmFsbHlBZGRyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNjb3BlQmxvY2s6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnRl
eHQtPnNjb3BlQ29udGV4dC5yZWlmeU1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU2NvcGVDb250
ZXh0OjpFYWdlcmx5UmVpZnk6CisgICAgICAgICAgICBjYXNlIFNjb3BlQ29udGV4dDo6TGF6aWx5
UmVpZnk6CisgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF90ZWFyX29mZl9zY29wZSk7Cisg
ICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQtPnNjb3BlQ29udGV4
dC5sYXN0UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LS07CisgICAgfQorCisgICAgcmV0dXJu
IGVtaXRKdW1wKHRhcmdldCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hCbG9j
a1Njb3BlKEpTU3RhdGljU2NvcGVPYmplY3QgKnNjb3BlVGVtcGxhdGUsIFNjb3BlQ29udGV4dDo6
UmVpZnlNb2RlIHJlaWZ5TW9kZSkKK3sKKyAgICAvLyBSZXNlcnZlIGEgYmxvY2sgb2YgY29udGln
dW91cyByZWdpc3RlcnMgZm9yIHRoZSB2YXJpYWJsZXMuIFdlIGhvbGQgYQorICAgIC8vIHJlZmVy
ZW5jZSBvbiB0aGUgbGFzdCByZWdpc3RlciwgcHJldmVudGluZyByZWNsYW1hdGlvbiBvZiBhbnkg
cHJldmlvdXMKKyAgICAvLyByZWdpc3Rlci4KKyAgICAvLworICAgIC8vIEluIHRoZSBmdXR1cmUg
d2UnbGwgc2h1ZmZsZSBhcm91bmQgdGhlIHN5bWJvbCB0YWJsZSB0byBwdXQgdGhlIGNhcHR1cmVk
CisgICAgLy8gdmFyaWFibGVzIGZpcnN0LCBhbmQgcG9wQmxvY2tTY29wZSB3aWxsIHJlbW92ZSBz
eW1ib2wgdGFibGUgZW50cmllcyBmb3IKKyAgICAvLyB1bmNhcHR1cmVkIHZhcmlhYmxlcy4KKyAg
ICBSZWdpc3RlcklEKiBiYXNlID0gMDsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGFzdCA9IDA7
CisgICAgc2l6ZV90IG4gPSBzY29wZVRlbXBsYXRlLT5zeW1ib2xUYWJsZSgpLnNpemUoKTsKKyAg
ICBBU1NFUlQobik7CisgICAgd2hpbGUgKG4tLSkgeworICAgICAgICBSZWdpc3RlcklEKiBuZXh0
ID0gbmV3UmVnaXN0ZXIoKTsKKyAgICAgICAgQVNTRVJUKCFsYXN0IHx8IChuZXh0ID09IGxhc3Qu
Z2V0KCkgKyAxKSk7CisKKyAgICAgICAgZW1pdE9wY29kZShvcF91bnNldCk7CisgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChuZXh0LT5pbmRleCgpKTsKKworICAgICAgICBpZiAoIWxhc3Qp
CisgICAgICAgICAgICBiYXNlID0gbmV4dDsKKyAgICAgICAgbGFzdCA9IG5leHQ7CisgICAgfQor
ICAgIEFTU0VSVChsYXN0KTsKKyAgICAKKyAgICAvLyBOb3cgYWxsb2NhdGUgYSByZWdpc3RlciBm
b3IgdGhlIGJsb2NrIHNjb3BlIG9iamVjdCBpdHNlbGYsIGlmIG5lY2Vzc2FyeS4KKyAgICBpZiAo
cmVpZnlNb2RlICE9IFNjb3BlQ29udGV4dDo6TmV2ZXJSZWlmeSkgeworICAgICAgICBSZWdpc3Rl
cklEKiBuZXh0ID0gbmV3UmVnaXN0ZXIoKTsKKyAgICAgICAgQVNTRVJUKG5leHQgPT0gbGFzdC5n
ZXQoKSArIDEpOworICAgICAgICBsYXN0ID0gbmV4dDsKKyAgICB9CisKKyAgICAvLyBGaW5hbGx5
IHVwZGF0ZSB0aGUgY29udHJvbCBmbG93IHN0YWNrLCBwdXNoIHRoZSB0ZW1wbGF0ZSBvbnRvIHRo
ZSBzY29wZQorICAgIC8vIGNoYWluLCBhbmQgcmVpZnkgdGhlIHNjb3BlIGlmIG5lZWRlZC4KICAg
ICBDb250cm9sRmxvd0NvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0LmlzRmluYWxseUJsb2Nr
ID0gZmFsc2U7CisgICAgY29udGV4dC5ibG9ja1R5cGUgPSBTY29wZUJsb2NrOworICAgIGNvbnRl
eHQuc2NvcGVDb250ZXh0LnJlaWZ5TW9kZSA9IHJlaWZ5TW9kZTsKKyAgICBjb250ZXh0LnNjb3Bl
Q29udGV4dC5iYXNlUmVnaXN0ZXIgPSBiYXNlOworICAgIGNvbnRleHQuc2NvcGVDb250ZXh0Lmxh
c3RSZWdpc3RlciA9IGxhc3QucmVsZWFzZSgpLmxlYWtSZWYoKTsKKwogICAgIG1fc2NvcGVDb250
ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgIG1fZHluYW1pY1Njb3BlRGVwdGgrKzsKKyAg
ICBtX3Njb3BlQ2hhaW4uc2V0KCptX3Njb3BlQ2hhaW4tPmdsb2JhbERhdGEsIG1fc2NvcGVDaGFp
bi0+cHVzaChzY29wZVRlbXBsYXRlKSk7CisgICAgbV9ibG9ja1Njb3BlRGVwdGgrKzsKKworICAg
IC8vIFdlIHJlaWZ5IGl0IGxhemlseSBpZiBwb3NzaWJsZS4KKyAgICBzd2l0Y2ggKHJlaWZ5TW9k
ZSkgeworICAgIGNhc2UgU2NvcGVDb250ZXh0OjpFYWdlcmx5UmVpZnk6CisgICAgICAgIC8vIFJl
aWZ5IHRoZSBzY29wZSBub3cuCisgICAgICAgIHJlaWZ5U2NvcGVzKCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgU2NvcGVDb250ZXh0OjpMYXppbHlSZWlmeToKKyAgICAgICAgLy8gTWFyayB0
aGUgc2NvcGUgcmVnaXN0ZXIgYXMgdW5zZXQsIHNvIGxhdGVyIGNvZGUgY2FuIGRldGVjdCBpZiBp
dCB3YXMKKyAgICAgICAgLy8gbmV2ZXIgcmVpZmllZC4KKyAgICAgICAgZW1pdE9wY29kZShvcF91
bnNldCk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LnNjb3BlQ29udGV4
dC5sYXN0UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjb3Bl
Q29udGV4dDo6TmV2ZXJSZWlmeToKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KIAotICAg
IGVtaXRPcGNvZGUob3BfcHVzaF9uZXdfc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChkc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChw
cm9wZXJ0eSkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Cit2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BCbG9ja1Njb3BlKCkKK3sKKyAgICBBU1NFUlQobV9z
Y29wZUNvbnRleHRTdGFjay5zaXplKCkpOworICAgIENvbnRyb2xGbG93Q29udGV4dCBjb250ZXh0
ID0gbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCk7CisgICAgQVNTRVJUKGNvbnRleHQuYmxvY2tU
eXBlID09IFNjb3BlQmxvY2spOworCisgICAgQVNTRVJUKG1fc2NvcGVDaGFpbi0+YmVnaW4oKS0+
Z2V0KCktPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisKKyAgICBpZiAoY29udGV4dC5zY29wZUNv
bnRleHQucmVpZnlNb2RlICE9IFNjb3BlQ29udGV4dDo6TmV2ZXJSZWlmeSkgeworICAgICAgICBl
bWl0T3Bjb2RlKG9wX3RlYXJfb2ZmX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGNvbnRleHQuc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQor
CisgICAgY29udGV4dC5zY29wZUNvbnRleHQubGFzdFJlZ2lzdGVyLT5kZXJlZigpOworICAgIGNv
bnRleHQuc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3RlciA9IDA7CisgICAgCisgICAgbV9ibG9ja1Nj
b3BlRGVwdGgtLTsKKyAgICBtX3Njb3BlQ2hhaW4uc2V0KCptX3Njb3BlQ2hhaW4tPmdsb2JhbERh
dGEsIG1fc2NvcGVDaGFpbi0+cG9wKCkpOworICAgIG1fc2NvcGVDb250ZXh0U3RhY2sucmVtb3Zl
TGFzdCgpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpiZWdpblN3aXRjaChSZWdpc3Rl
cklEKiBzY3J1dGluZWVSZWdpc3RlciwgU3dpdGNoSW5mbzo6U3dpdGNoVHlwZSB0eXBlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCmluZGV4IGU3ZmUyMzZlNWJhZjBmMGZiN2U5MmU0Njk4YzU2ZTg0Y2NlZjg3YzUuLjU3
ODA0ZjhmZDlhZGJmZDc4YTRjYzRhNzlkOTUyYmYyMDc0ZjAwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAg
LTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSWRlbnRpZmllcjsKICAg
ICBjbGFzcyBMYWJlbDsKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKKyAgICBjbGFzcyBKU1N0
YXRpY1Njb3BlT2JqZWN0OwogCiAgICAgY2xhc3MgQ2FsbEFyZ3VtZW50cyB7CiAgICAgcHVibGlj
OgpAQCAtNzUsOSArNzYsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQq
IHJldEFkZHJEc3Q7CiAgICAgfTsKIAorICAgIHN0cnVjdCBTY29wZUNvbnRleHQgeworICAgICAg
ICBlbnVtIFJlaWZ5TW9kZSB7IEVhZ2VybHlSZWlmeSwgTGF6aWx5UmVpZnksIE5ldmVyUmVpZnkg
fTsKKyAgICAgICAgUmVpZnlNb2RlIHJlaWZ5TW9kZTsKKyAgICAgICAgUmVnaXN0ZXJJRCogYmFz
ZVJlZ2lzdGVyOworICAgICAgICBSZWdpc3RlcklEKiBsYXN0UmVnaXN0ZXI7CisgICAgfTsKKwor
ICAgIGVudW0gQmxvY2tUeXBlIHsgV2l0aEJsb2NrLCBGaW5hbGx5QmxvY2ssIFNjb3BlQmxvY2sg
fTsKKwogICAgIHN0cnVjdCBDb250cm9sRmxvd0NvbnRleHQgewotICAgICAgICBib29sIGlzRmlu
YWxseUJsb2NrOwotICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4dDsKKyAgICAg
ICAgZW51bSBCbG9ja1R5cGUgYmxvY2tUeXBlOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICBGaW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4dDsKKyAgICAgICAgICAgIFNjb3BlQ29udGV4
dCBzY29wZUNvbnRleHQ7CisgICAgICAgIH07CiAgICAgfTsKIAogICAgIHN0cnVjdCBGb3JJbkNv
bnRleHQgewpAQCAtMTA2LDE4ICsxMTksMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICAvLyBUaGUgcmVzb2x2ZWQgYmluZGluZyBpcyBpbW11dGFibGUuCiAgICAgICAgICAgICBSZWFk
T25seUZsYWcgPSAweDIwLAogICAgICAgICAgICAgLy8gVGhlIGJhc2Ugb2JqZWN0IGlzIHRoZSBn
bG9iYWwgb2JqZWN0LgotICAgICAgICAgICAgR2xvYmFsRmxhZyA9IDB4NDAKKyAgICAgICAgICAg
IEdsb2JhbEZsYWcgPSAweDQwLAorICAgICAgICAgICAgLy8gVGhlIGlkZW50aWZpZXIgaXMgYWN0
dWFsbHkgdGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAgICAgICAgICBBcmd1bWVudHNGbGFnID0g
MHg4MCwKKyAgICAgICAgICAgIC8vIFJlYWRzIG9mIHRoaXMgdmFyaWFibGUgbmVlZCBkeW5hbWlj
IGNoZWNrcyB0byBlbnN1cmUgaXQgaXMgc2V0LgorICAgICAgICAgICAgLy8gSWYgdGhpcyB2YXJp
YWJsZSBpcyByZWFkLW9ubHksIHdyaXRlcyB0byB0aGlzIHZhcmlhYmxlIG5lZWQKKyAgICAgICAg
ICAgIC8vIGR5bmFtaWMgY2hlY2tzIHRvIGVuc3VyZSB0aGUgdmFyaWFibGUgaXMgdW5zZXIuCisg
ICAgICAgICAgICBCYXJyaWVyRmxhZyA9IDB4MTAwCiAgICAgICAgIH07CiAgICAgICAgIGVudW0g
VHlwZSB7CiAgICAgICAgICAgICAvLyBUaGUgcHJvcGVydHkgaXMgbG9jYWwsIGFuZCBzdG9yZWQg
aW4gYSByZWdpc3Rlci4KICAgICAgICAgICAgIFJlZ2lzdGVyID0gUmVnaXN0ZXJGbGFnIHwgU3Rh
dGljRmxhZywKICAgICAgICAgICAgIC8vIEEgcmVhZC1vbmx5IGxvY2FsLCBjcmVhdGVkIGJ5ICJj
b25zdCIuCiAgICAgICAgICAgICBSZWFkT25seVJlZ2lzdGVyID0gUmVnaXN0ZXJGbGFnIHwgUmVh
ZE9ubHlGbGFnIHwgU3RhdGljRmxhZywKKyAgICAgICAgICAgIC8vIFJlYWRzIG9mIHRoaXMgcmVn
aXN0ZXIgbmVlZCBkeW5hbWljIGNoZWNrcy4KKyAgICAgICAgICAgIEJhcnJpZXJSZWdpc3RlciA9
IFJlZ2lzdGVyRmxhZyB8IFN0YXRpY0ZsYWcgfCBCYXJyaWVyRmxhZywKKyAgICAgICAgICAgIC8v
IFJlYWRzIG9mIGFuZCB3cml0ZXMgdG8gdGhpcyByZWdpc3RlciBuZWVkIGR5bmFtaWMgY2hlY2tz
LgorICAgICAgICAgICAgUmVhZE9ubHlCYXJyaWVyUmVnaXN0ZXIgPSBSZWdpc3RlckZsYWcgfCBS
ZWFkT25seUZsYWcgfCBTdGF0aWNGbGFnIHwgQmFycmllckZsYWcsCisgICAgICAgICAgICAvLyBU
aGUgImFyZ3VtZW50cyIgb2JqZWN0LgorICAgICAgICAgICAgQXJndW1lbnRzID0gQXJndW1lbnRz
RmxhZyB8IFJlZ2lzdGVyRmxhZyB8IFN0YXRpY0ZsYWcsCisgICAgICAgICAgICBSZWFkT25seUFy
Z3VtZW50cyA9IEFyZ3VtZW50c0ZsYWcgfCBSZWdpc3RlckZsYWcgfCBSZWFkT25seUZsYWcgfCBT
dGF0aWNGbGFnLAogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IGlzIHN0YXRpY2FsbHkgc2Nv
cGVkIGZyZWUgdmFyaWFibGUuIEl0cyBjb29yZGluYXRlcwogICAgICAgICAgICAgLy8gYXJlIGlu
ICJpbmRleCIgYW5kICJkZXB0aCIuCiAgICAgICAgICAgICBMZXhpY2FsID0gSW5kZXhlZEZsYWcg
fCBTY29wZWRGbGFnIHwgU3RhdGljRmxhZywKICAgICAgICAgICAgIC8vIEEgcmVhZC1vbmx5IExl
eGljYWwsIGNyZWF0ZWQgYnkgImNvbnN0Ii4KICAgICAgICAgICAgIFJlYWRPbmx5TGV4aWNhbCA9
IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFJlYWRPbmx5RmxhZyB8IFN0YXRpY0ZsYWcsCisg
ICAgICAgICAgICAvLyBSZWFkcyBvZiB0aGlzIGxleGljYWwgbmVlZCBkeW5hbWljIGNoZWNrcy4K
KyAgICAgICAgICAgIEJhcnJpZXJMZXhpY2FsID0gSW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnIHwg
U3RhdGljRmxhZyB8IEJhcnJpZXJGbGFnLAorICAgICAgICAgICAgLy8gUmVhZCBvZiBhbmQgd3Jp
dGVzIHRvIHRoaXMgbGV4aWNhbCBuZWVkIGR5bmFtaWMgY2hlY2tzLgorICAgICAgICAgICAgUmVh
ZE9ubHlCYXJyaWVyTGV4aWNhbCA9IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFJlYWRPbmx5
RmxhZyB8IFN0YXRpY0ZsYWcgfCBCYXJyaWVyRmxhZywKICAgICAgICAgICAgIC8vIFRoZSBwcm9w
ZXJ0eSB3YXMgbm90IGJvdW5kIGxleGljYWxseSwgc28gYXQgcnVudGltZSB3ZSBzaG91bGQKICAg
ICAgICAgICAgIC8vIGxvb2sgZGlyZWN0bHkgaW4gdGhlIGdsb2JhbCBvYmplY3QuCiAgICAgICAg
ICAgICBHbG9iYWwgPSBHbG9iYWxGbGFnLApAQCAtMTQzLDYgKzE3MywxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIER5bmFtaWNMZXhpY2FsID0gRHluYW1pY0ZsYWcgfCBJbmRleGVk
RmxhZyB8IFNjb3BlZEZsYWcsCiAgICAgICAgICAgICAvLyBMaWtlIFJlYWRPbmx5TGV4aWNhbCwg
YnV0IHdpdGggaW50ZXJ2ZW5pbmcgbm9uLXN0cmljdCBgZXZhbCcuCiAgICAgICAgICAgICBEeW5h
bWljUmVhZE9ubHlMZXhpY2FsID0gRHluYW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IFNjb3BlZEZs
YWcgfCBSZWFkT25seUZsYWcsCisgICAgICAgICAgICAvLyBMaWtlIEJhcnJpZXJMZXhpY2FsLCBi
dXQgd2l0aCBpbnRlcnZlbmluZyBub24tc3RyaWN0IGBldmFsJy4KKyAgICAgICAgICAgIER5bmFt
aWNCYXJyaWVyTGV4aWNhbCA9IER5bmFtaWNGbGFnIHwgSW5kZXhlZEZsYWcgfCBTY29wZWRGbGFn
IHwgQmFycmllckZsYWcsCisgICAgICAgICAgICAvLyBMaWtlIFJlYWRPbmx5QmFycmllckxleGlj
YWwsIGJ1dCB3aXRoIGludGVydmVuaW5nIG5vbi1zdHJpY3QgYGV2YWwnLgorICAgICAgICAgICAg
RHluYW1pY1JlYWRPbmx5QmFycmllckxleGljYWwgPSBEeW5hbWljRmxhZyB8IEluZGV4ZWRGbGFn
IHwgU2NvcGVkRmxhZyB8IFJlYWRPbmx5RmxhZyB8IEJhcnJpZXJGbGFnLAogICAgICAgICAgICAg
Ly8gTGlrZSBHbG9iYWwsIGJ1dCB3aXRoIGludGVydmVuaW5nIG5vbi1zdHJpY3QgYGV2YWwnLiBB
cyB3aXRoIAogICAgICAgICAgICAgLy8gRHluYW1pYywgU2NvcGVGbGFnIGlzIHNldCB0byBpbmRp
Y2F0ZSB0aGF0ICJkZXB0aCIgZG9lcyBpbmRlZWQKICAgICAgICAgICAgIC8vIHN0b3JlIGEgbnVt
YmVyIG9mIGZyYW1lcyB0byBza2lwIGJlZm9yZSBkb2luZyB0aGUgZHluYW1pYyBjaGVja3MuCkBA
IC0yMDAsNiArMjM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTY29wZWQo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBTY29wZWRGbGFnOyB9CiAgICAgICAgIGJvb2wgaXNS
ZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIChtX3R5cGUgJiBSZWFkT25seUZsYWcpICYmICFpc0R5
bmFtaWMoKTsgfQogICAgICAgICBib29sIGlzR2xvYmFsKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ICYgR2xvYmFsRmxhZzsgfQorICAgICAgICBib29sIGlzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlICYgQXJndW1lbnRzRmxhZzsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVz
b2x2ZVJlc3VsdCh1bnNpZ25lZCB0eXBlLCBSZWdpc3RlcklEKiBsb2NhbCwgaW50IGluZGV4LCBz
aXplX3QgZGVwdGgsIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0yNTEsMTEgKzI4NiwxMiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHNldElzTnVtZXJpY0NvbXBhcmVGdW5j
dGlvbihib29sIGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbik7CiAKLSAgICAgICAgYm9vbCB3aWxs
UmVzb2x2ZVRvQXJndW1lbnRzKGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJ
RCogdW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKTsKKyAgICAgICAgZW51bSBSZXNvbHZl
RmxhZ3MgeworICAgICAgICAgICAgRG9udENyZWF0ZUFyZ3VtZW50c0ZsYWcgPSAxIDw8IDAKKyAg
ICAgICAgfTsKIAogICAgICAgICAvLyBSZXNvbHZlIGFuIGlkZW50aWZpZXIsIGdpdmVuIHRoZSBj
dXJyZW50IGNvbXBpbGUtdGltZSBzY29wZSBjaGFpbi4KLSAgICAgICAgUmVzb2x2ZVJlc3VsdCBy
ZXNvbHZlKGNvbnN0IElkZW50aWZpZXImKTsKKyAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZl
KGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCByZXNvbHZlRmxhZ3MgPSAwKTsKICAgICAgICAg
Ly8gQmVoYXZlcyBhcyByZXNvbHZlIGRvZXMsIGJ1dCBpZ25vcmVzIGR5bmFtaWMgc2NvcGUgYXMK
ICAgICAgICAgLy8gZHluYW1pYyBzY29wZSBzaG91bGQgbm90IGludGVyZmVyZSB3aXRoIGNvbnN0
IGluaXRpYWxpc2F0aW9uCiAgICAgICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZUNvbnN0RGVjbChj
b25zdCBJZGVudGlmaWVyJik7CkBAIC00OTQsMTQgKzUzMCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2b2lkIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFVTdHJpbmcmIG1l
c3NhZ2UpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3Qs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7CisgICAgICAg
IHZvaWQgcmVpZnlTY29wZXMoKTsKKyAgICAgICAgdm9pZCBwdXNoQmxvY2tTY29wZShKU1N0YXRp
Y1Njb3BlT2JqZWN0KiwgU2NvcGVDb250ZXh0OjpSZWlmeU1vZGUpOworICAgICAgICB2b2lkIHBv
cEJsb2NrU2NvcGUoKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHVzaFNjb3BlKFJlZ2lz
dGVySUQqIHNjb3BlKTsKICAgICAgICAgdm9pZCBlbWl0UG9wU2NvcGUoKTsKIAogICAgICAgICB2
b2lkIGVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGlu
ZSk7CiAKLSAgICAgICAgaW50IHNjb3BlRGVwdGgoKSB7IHJldHVybiBtX2R5bmFtaWNTY29wZURl
cHRoICsgbV9maW5hbGx5RGVwdGg7IH0KKyAgICAgICAgaW50IHNjb3BlRGVwdGgoKSB7IHJldHVy
biBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9ibG9ja1Njb3BlRGVwdGggKyBtX2ZpbmFsbHlEZXB0
aDsgfQogICAgICAgICBib29sIGhhc0ZpbmFsaXNlcigpIHsgcmV0dXJuIG1fZmluYWxseURlcHRo
ICE9IDA7IH0KIAogICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0
LCBSZWdpc3RlcklEKiByZXR1cm5BZGRyRHN0KTsKQEAgLTU0Miw4ICs1ODAsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJld2luZEJpbmFyeU9wKCk7CiAg
ICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRVbmFyeU9wKCk7CiAKLSAgICAgICAgUGFz
c1JlZlB0cjxMYWJlbD4gZW1pdENvbXBsZXhKdW1wU2NvcGVzKExhYmVsKiB0YXJnZXQsIENvbnRy
b2xGbG93Q29udGV4dCogdG9wU2NvcGUsIENvbnRyb2xGbG93Q29udGV4dCogYm90dG9tU2NvcGUp
OwotCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxkb3VibGUsIEpTVmFsdWU+IE51bWJlck1hcDsK
ICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBKU1N0cmluZyosIElkZW50aWZp
ZXJSZXBIYXNoPiBJZGVudGlmaWVyU3RyaW5nTWFwOwogICAgICAgICAKQEAgLTYxNywzNSArNjUz
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3Ry
dWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CiAgICAgICAgIFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJuICptX3N5bWJvbFRhYmxlOyB9CiAKLSAgICAgICAgYm9v
bCBzaG91bGRPcHRpbWl6ZUxvY2FscygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2R5
bmFtaWNTY29wZURlcHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICAgICAgaWYgKG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBib29sIGNhbk9wdGltaXplTm9uTG9jYWxzKCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBpZiAobV9jb2RlVHlwZSA9PSBFdmFsQ29kZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9u
Q29kZSAmJiBtX2NvZGVCbG9jay0+dXNlc0V2YWwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKIAotICAg
ICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHZvaWQgY3Jl
YXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxh
enlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqKTsKICAgICAgICAgCiAgICAgICAgIFZl
Y3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CkBAIC02NzQsNiArNjgzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2xhc3RWYXI7CiAgICAg
ICAgIGludCBtX2ZpbmFsbHlEZXB0aDsKICAgICAgICAgaW50IG1fZHluYW1pY1Njb3BlRGVwdGg7
CisgICAgICAgIGludCBtX2Jsb2NrU2NvcGVEZXB0aDsKICAgICAgICAgaW50IG1fYmFzZVNjb3Bl
RGVwdGg7CiAgICAgICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCBiYjk1Y2Fm
YjY4MjYzYTliZjUxMGFhNGU0MjI3ZjVlYTQzYTNlZTk4Li42Yjg4MmQ4ZTczNDc3NzQ2NDM5ZmYx
MmU4N2EwNjg4NDFmZTYwOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0zMTgsMTAgKzMxOCwxMyBAQCBSZWdpc3Rl
cklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZQogCiBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ewotICAgIGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSAmJiBnZW5lcmF0b3Iud2lsbFJlc29s
dmVUb0FyZ3VtZW50cyhzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZp
ZXIoKSkpIHsKLSAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9zdWJzY3JpcHQpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsgICAgCi0gICAgICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgZ2VuZXJhdG9yLnVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCksIHByb3BlcnR5
KTsKKyAgICBpZiAobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAgUmVzb2x2ZVJl
c3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUoc3RhdGljX2Nhc3Q8UmVzb2x2
ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCksIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3Jl
YXRlQXJndW1lbnRzRmxhZyk7CisgICAgICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzQXJndW1lbnRz
KCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fc3Vic2NyaXB0KTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCByZXNvbHZlUmVzdWx0LmxvY2FsKCksIHByb3BlcnR5KTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2Rl
Rm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJz
Y3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKQEAgLTMzNCwxNyArMzM3LDE0IEBAIFJlZ2lzdGVy
SUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpCiAKIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAg
ICBpZiAobV9pZGVudCA9PSBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAg
ICAgICBpZiAoIW1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgZ290byBub25B
cmd1bWVudHNQYXRoOwotICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZU5vZGUgPSBzdGF0aWNf
Y2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSk7Ci0gICAgICAgIGlmICghZ2VuZXJhdG9yLndpbGxS
ZXNvbHZlVG9Bcmd1bWVudHMocmVzb2x2ZU5vZGUtPmlkZW50aWZpZXIoKSkpCi0gICAgICAgICAg
ICBnb3RvIG5vbkFyZ3VtZW50c1BhdGg7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOyAgICAKLSAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygp
KTsKKyAgICBpZiAobV9pZGVudCA9PSBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmxlbmd0aCAm
JiBtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSkgeworICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29s
dmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1f
YmFzZSktPmlkZW50aWZpZXIoKSwgQnl0ZWNvZGVHZW5lcmF0b3I6OkRvbnRDcmVhdGVBcmd1bWVu
dHNGbGFnKTsKKyAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNBcmd1bWVudHMoKSkgeworICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNl
dCgpLCBlbmRPZmZzZXQoKSk7ICAgIAorICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHJlc29s
dmVSZXN1bHQubG9jYWwoKSk7CisgICAgICAgIH0KICAgICB9CiAKLW5vbkFyZ3VtZW50c1BhdGg6
CiAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5k
T2Zmc2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9pZGVudCk7CkBAIC01NjQsOSArNTY0LDEzIEBA
IFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsCiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dGhpc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYXJncy0+bV9saXN0Tm9kZS0+bV9l
eHByKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBhcmdzUmVnaXN0ZXI7CiAgICAg
ICAgICAgICBBcmd1bWVudExpc3ROb2RlKiBhcmdzID0gbV9hcmdzLT5tX2xpc3ROb2RlLT5tX25l
eHQ7Ci0gICAgICAgICAgICBpZiAoYXJncy0+bV9leHByLT5pc1Jlc29sdmVOb2RlKCkgJiYgZ2Vu
ZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihh
cmdzLT5tX2V4cHIpLT5pZGVudGlmaWVyKCkpKQotICAgICAgICAgICAgICAgIGFyZ3NSZWdpc3Rl
ciA9IGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpOwotICAgICAgICAg
ICAgZWxzZQorCisgICAgICAgICAgICBpZiAoYXJncy0+bV9leHByLT5pc1Jlc29sdmVOb2RlKCkp
IHsKKyAgICAgICAgICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBnZW5lcmF0
b3IucmVzb2x2ZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGFyZ3MtPm1fZXhwciktPmlkZW50
aWZpZXIoKSwgQnl0ZWNvZGVHZW5lcmF0b3I6OkRvbnRDcmVhdGVBcmd1bWVudHNGbGFnKTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc0FyZ3VtZW50cygpKQorICAgICAgICAg
ICAgICAgICAgICBhcmdzUmVnaXN0ZXIgPSByZXNvbHZlUmVzdWx0LmxvY2FsKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIWFyZ3NSZWdpc3Rlci5nZXQoKSkKICAgICAgICAgICAg
ICAgICBhcmdzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXJncy0+bV9leHByKTsKIAog
ICAgICAgICAgICAgLy8gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5IGlnbm9yZXMgZXh0cmEgYXJn
dW1lbnRzLCBidXQgd2Ugc3RpbGwKQEAgLTE5NzcsOSArMTk4MSwxMiBAQCBSZWdpc3RlcklEKiBU
cnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogICAgICAgICAvLyBVbmNhdWdodCBleGNlcHRpb24gcGF0aDogdGhlIGNhdGNo
IGJsb2NrLgogICAgICAgICBSZWZQdHI8TGFiZWw+IGhlcmUgPSBnZW5lcmF0b3IuZW1pdExhYmVs
KGdlbmVyYXRvci5uZXdMYWJlbCgpLmdldCgpKTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRDYXRjaChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIHRyeVN0YXJ0TGFiZWwuZ2V0KCksIGhlcmUuZ2V0KCkpOwotICAgICAgICBnZW5l
cmF0b3IuZW1pdFB1c2hOZXdTY29wZShleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgbV9leGNlcHRp
b25JZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICBKU1N0YXRpY1Njb3Bl
T2JqZWN0KiBzY29wZVRlbXBsYXRlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKCpnZW5l
cmF0b3IuZ2xvYmFsRGF0YSgpKTsKKyAgICAgICAgc2NvcGVUZW1wbGF0ZS0+YWRkVmFyaWFibGUo
bV9leGNlcHRpb25JZGVudCwgRG9udERlbGV0ZSk7CisgICAgICAgIGdlbmVyYXRvci5wdXNoQmxv
Y2tTY29wZShzY29wZVRlbXBsYXRlLCBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5KTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRTdGF0aWNWYXIoZ2VuZXJhdG9yLnJlc29sdmUobV9leGNlcHRp
b25JZGVudCksIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGRzdCwgbV9jYXRjaEJsb2NrKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29w
ZSgpOworICAgICAgICBnZW5lcmF0b3IucG9wQmxvY2tTY29wZSgpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKGNhdGNoRW5kTGFiZWwuZ2V0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggOWZjOTY0YzczMzNjNzg2OTA0
NjY3ZmZmZjcwNGJlYTU1NDA4MTY2NS4uYmQ2NWQ4NWFhMDhhZTQ1ODE2NDI2M2Y0YWEwYjI5NjZk
Njg0YTM2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CkBAIC0xMDQyLDggKzEwNDIsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdQogICAgIEpTRnVu
Y3Rpb24gKmZ1bmN0aW9uID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5tYWtlKGV4ZWMsIGV4ZWMtPnNj
b3BlQ2hhaW4oKSk7CiAgICAgaWYgKCFmdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKS5pc051bGwo
KSkgewogICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0K
LSAgICAgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSgKLSAgICAgICAgICAgICAg
ICBleGVjLCBmdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSk7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJl
YWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgIGZ1bmN0aW9uLT5zZXRTY29wZShleGVjLT5n
bG9iYWxEYXRhKCksIGZ1bmN0aW9uLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmplY3Qp
KTsKICAgICB9CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggY2M1YmIwMzkzYWQwOWVlZTk1
YWFhYTRiOTFkZDkxZTdmMWJlOWEzZC4uMzMwMGIyOGQxODk4YjA4M2MyNGY4ZjQxYWMxMWJjNmM1
ZDFiNmY0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCkBAIC0xNjI1LDE4ICsxNjI1LDYgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50
ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hv
b2sKIH0KICAgICAKICNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLU5FVkVSX0lOTElO
RSBTY29wZUNoYWluTm9kZSogSW50ZXJwcmV0ZXI6OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKQotewotICAgIGludCBkc3Qg
PSB2UENbMV0udS5vcGVyYW5kOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKLSAgICBJZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRl
bnRpZmllcih2UENbMl0udS5vcGVyYW5kKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1l
LT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBK
U1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIERv
bnREZWxldGUpOwotICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShzY29w
ZSk7Ci0KLSAgICByZXR1cm4gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpOwot
fQotCiBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAv
LyBSZWN1cnNpdmUgaW52b2NhdGlvbiBtYXkgYWxyZWFkeSBoYXZlIHNwZWNpYWxpemVkIHRoaXMg
aW5zdHJ1Y3Rpb24uCkBAIC01MDQ5LDQzICs1MDM3LDk3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6
CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25leHRfcG5hbWUpOwogICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotICAgIERFRklORV9PUENPREUob3Bfam1wX3Njb3Bl
cykgewotICAgICAgICAvKiBqbXBfc2NvcGVzIGNvdW50KG4pIHRhcmdldChvZmZzZXQpCisgICAg
REVGSU5FX09QQ09ERShvcF91bnNldCkgeworICAgICAgICAvKiB1bnNldCBkc3QocikKKyAgICAg
ICAgIAorICAgICAgICAgICBTZXRzIGEgcmVnaXN0ZXIgdG8gdGhlIGVtcHR5IEpTVmFsdWUuICBU
aGlzIHNpZ25hbHMgdGhhdCBpdCBpcworICAgICAgICAgICB1bmluaXRpYWxpemVkLiAgUmVhZCBh
Y2Nlc3MgdG8gc3VjaCBhIHZhcmlhYmxlIHNob3VsZCBhbHdheXMgZ28KKyAgICAgICAgICAgdGhy
b3VnaCBtb3Zfc2V0X3NyYy4KKyAgICAgICAgICovCisgICAgICAgIGludCBkc3QgPSB2UENbMV0u
dS5vcGVyYW5kOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUo
KTsKIAotICAgICAgICAgICBSZW1vdmVzIHRoZSBhIG51bWJlciBvZiBpdGVtcyBmcm9tIHRoZSBj
dXJyZW50IHNjb3BlIGNoYWluCi0gICAgICAgICAgIHNwZWNpZmllZCBieSBpbW1lZGlhdGUgbnVt
YmVyIGNvdW50LCB0aGVuIGp1bXBzIHRvIG9mZnNldAotICAgICAgICAgICB0YXJnZXQuCi0gICAg
ICAgICovCi0gICAgICAgIGludCBjb3VudCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlu
dCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOworICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdU
SChvcF91bnNldCk7CisgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKKyAgICB9CisgICAgREVG
SU5FX09QQ09ERShvcF9hc3NlcnRfc2V0KSB7CisgICAgICAgIC8qIGFzc2VydF9zZXQgZHN0KHIp
CiAKLSAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHRtcCA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
OwotICAgICAgICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7
Ci0gICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbih0bXApOworICAgICAgICAgICBBc3Nl
cnQgdGhhdCBkc3QgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGkuZS4sIGlzIG5vdCBlbXB0eS4KKyAg
ICAgICAgKi8KKyAgICAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+dW5jaGVja2VkUih2UENb
MV0udS5vcGVyYW5kKS5pc0VtcHR5KCkpKSB7CisgICAgICAgICAgICBVU3RyaW5nIG1lc3NhZ2Uo
InVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0g
SlNWYWx1ZShjcmVhdGVSZWZlcmVuY2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpKTsKKyAgICAg
ICAgICAgIGdvdG8gdm1fdGhyb3c7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX2Fzc2VydF9zZXQpOworICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7CisgICAgfQorICAgIERFRklORV9PUENPREUob3BfYXNzZXJ0X3Vuc2V0KSB7CisgICAgICAg
IC8qIGFzc2VydF91bnNldCBkc3QocikKIAotICAgICAgICB2UEMgKz0gdGFyZ2V0OworICAgICAg
ICAgICBBc3NlcnQgdGhhdCBkc3QgaGFzIG5vdCBiZWVuIHNldCwgaS5lLiwgdGhhdCBpdCBpcyBl
bXB0eS4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKFVOTElLRUxZKCFjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIodlBDWzFdLnUub3BlcmFuZCkuaXNFbXB0eSgpKSkgeworICAgICAgICAgICAgVVN0cmlu
ZyBtZXNzYWdlKCJjb25zdCB2YXJpYWJsZSBhbHJlYWR5IGluaXRpYWxpemVkIik7CisgICAgICAg
ICAgICBleGNlcHRpb25WYWx1ZSA9IEpTVmFsdWUoY3JlYXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZy
YW1lLCBtZXNzYWdlKSk7CisgICAgICAgICAgICBnb3RvIHZtX3Rocm93OworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9hc3NlcnRfdW5zZXQpOwog
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotI2lmIEVOQUJMRShDT01QVVRFRF9H
T1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgLy8gQXBwZWFzZSBHQ0MKLSAgICBnb3RvICoo
JiZza2lwX25ld19zY29wZSk7Ci0jZW5kaWYKLSAgICBERUZJTkVfT1BDT0RFKG9wX3B1c2hfbmV3
X3Njb3BlKSB7Ci0gICAgICAgIC8qIG5ld19zY29wZSBkc3QocikgcHJvcGVydHkoaWQpIHZhbHVl
KHIpCisgICAgREVGSU5FX09QQ09ERShvcF9yZWlmeV9zY29wZSkgeworICAgICAgICAvKiByZWlm
eV9zY29wZSBkc3QocikgdGVtcGwocikgYmFzZShyKQogICAgICAgICAgCi0gICAgICAgICAgIENv
bnN0cnVjdHMgYSBuZXcgU3RhdGljU2NvcGVPYmplY3Qgd2l0aCBwcm9wZXJ0eSBzZXQgdG8gdmFs
dWUuICBUaGF0IHNjb3BlCi0gICAgICAgICAgIG9iamVjdCBpcyB0aGVuIHB1c2hlZCBvbnRvIHRo
ZSBTY29wZUNoYWluLiAgVGhlIHNjb3BlIG9iamVjdCBpcyB0aGVuIHN0b3JlZAotICAgICAgICAg
ICBpbiBkc3QgZm9yIEdDLgorICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IFN0YXRpY1Njb3Bl
T2JqZWN0LCB1c2luZyB0ZW1wbCBhcyBhIHRlbXBsYXRlLiBUaGF0CisgICAgICAgICAgIHNjb3Bl
IG9iamVjdCBpcyB0aGVuIHN0b3JlZCBpbiBkc3QgYW5kIHB1c2hlZCBvbnRvIHRoZSBTY29wZUNo
YWluLgorICAgICAgICAgICBUaGUgc3RvcmFnZSBmb3IgdGhpcyBibG9jayBzY29wZSBpcyBpbml0
aWFsbHkgaW4gdGhlIHJlZ2lzdGVycworICAgICAgICAgICBmb2xsb3dpbmcgYmFzZS4gV2hlbiBj
b250cm9sIGxlYXZlcyB0aGlzIHNjb3BlLCB0aGVzZSB2YWx1ZXMgd2lsbCBiZQorICAgICAgICAg
ICB0b3JuIG9mZi4KICAgICAgICAgICovCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFp
bihjcmVhdGVFeGNlcHRpb25TY29wZShjYWxsRnJhbWUsIHZQQykpOworICAgICAgICBpbnQgZHN0
ID0gdlBDWzFdLnUub3BlcmFuZDsKKworICAgICAgICBpZiAoIWNhbGxGcmFtZS0+dW5jaGVja2Vk
Uihkc3QpLmpzVmFsdWUoKSkgeworICAgICAgICAgICAgaW50IHRlbXBsID0gdlBDWzJdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gdlBDWzNdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIEFTU0VSVChjYWxsRnJhbWUtPnIodGVtcGwpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKKyAg
ICAgICAgICAgIEpTT2JqZWN0KiBzY29wZVRlbXBsYXRlID0gYXNPYmplY3QoY2FsbEZyYW1lLT5y
KHRlbXBsKS5qc1ZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlVGVtcGxhdGUtPmlz
U3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBu
ZXdTY29wZSA9IHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihzY29wZVRlbXBsYXRl
KTsKKyAgICAgICAgICAgIG5ld1Njb3BlID0gbmV3U2NvcGUtPnJlaWZ5KCpnbG9iYWxEYXRhLCBj
YWxsRnJhbWUtPnJlZ2lzdGVycygpICsgYmFzZSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoZHN0KSA9IG5ld1Njb3BlOworICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29w
ZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKG5ld1Njb3BlKSk7CisgICAgICAg
IH0KIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wdXNoX25ld19zY29wZSk7Cisg
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3JlaWZ5X3Njb3BlKTsKKyAgICAgICAgTkVY
VF9JTlNUUlVDVElPTigpOworICAgIH0KKyAgICBERUZJTkVfT1BDT0RFKG9wX3RlYXJfb2ZmX3Nj
b3BlKSB7CisgICAgICAgIC8qIHRlYXJfb2ZmX3Njb3BlIHNyYyhyKQorCisgICAgICAgICAgIElm
IHRoZSBzY29wZSBzdG9yZWQgaW4gU1JDIHdhcyByZWlmaWVkLCBjb3B5IHRoZSBibG9jay1zY29w
ZWQgbG9jYWxzCisgICAgICAgICAgIGluIHRoZSByZWdpc3RlcnMgZm9sbG93aW5nIFNSQyBmcm9t
IHRoZSByZWdpc3RlciBmaWxlIHRvIHRoZQorICAgICAgICAgICBoZWFwLiBNdW5nZSB0aGUgc2Nv
cGUgb2JqZWN0IHN0b3JlZCBpbiBTUkMgdG8gcG9pbnQgdG8gdGhpcyBuZXcKKyAgICAgICAgICAg
YmFja2luZyBzdG9yZSwgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBzY29wZSBjaGFpbi4KKworICAg
ICAgICAgICBUaGlzIG9wY29kZSBhcHBlYXJzIHdoZW4gbGVhdmluZyBibG9jayBzY29wZXMuCisg
ICAgICAgICovCisKKyAgICAgICAgaW50IHNyYyA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisKKyAgICAg
ICAgaWYgKEpTVmFsdWUgc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjKS5qc1ZhbHVl
KCkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChzY29wZSk7Cisg
ICAgICAgICAgICBBU1NFUlQob2JqZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KG9iamVjdCktPnRlYXJPZmYo
Kmdsb2JhbERhdGEpOworICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNyYykuY2xl
YXIoKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKS0+cG9wKCkpOworICAgICAgICB9CisKKyAgICAgICAgdlBDICs9IE9QQ09ERV9M
RU5HVEgob3BfdGVhcl9vZmZfc2NvcGUpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAg
ICAgfQotI2lmIEVOQUJMRShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAg
c2tpcF9uZXdfc2NvcGU6Ci0jZW5kaWYKICAgICBERUZJTkVfT1BDT0RFKG9wX2NhdGNoKSB7CiAg
ICAgICAgIC8qIGNhdGNoIGV4KHIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA1
NDFjYzg5NmEzMjg5MGY2YzVlZjYxYjRiNjViNzI0ZTY4ZWU2YjQxLi41NjYwZTQ0M2M2NzA5YmU5
ZGI1YmU5ZjZmMTU5NDE3YzZmZDcxNzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBA
IC0yNzIsNyArMjcyLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAg
ICAgICBERUZJTkVfT1Aob3BfamVxX251bGwpCiAgICAgICAgIERFRklORV9PUChvcF9qZmFsc2Up
CiAgICAgICAgIERFRklORV9PUChvcF9qbXApCi0gICAgICAgIERFRklORV9PUChvcF9qbXBfc2Nv
cGVzKQogICAgICAgICBERUZJTkVfT1Aob3Bfam5lcV9udWxsKQogICAgICAgICBERUZJTkVfT1Ao
b3Bfam5lcV9wdHIpCiAgICAgICAgIERFRklORV9PUChvcF9qbGVzcykKQEAgLTMxNyw3ICszMTYs
MTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVf
T1Aob3BfcHJlX2luYykKICAgICAgICAgREVGSU5FX09QKG9wX3Byb2ZpbGVfZGlkX2NhbGwpCiAg
ICAgICAgIERFRklORV9PUChvcF9wcm9maWxlX3dpbGxfY2FsbCkKLSAgICAgICAgREVGSU5FX09Q
KG9wX3B1c2hfbmV3X3Njb3BlKQorICAgICAgICBERUZJTkVfT1Aob3BfdW5zZXQpCisgICAgICAg
IERFRklORV9PUChvcF9hc3NlcnRfc2V0KQorICAgICAgICBERUZJTkVfT1Aob3BfYXNzZXJ0X3Vu
c2V0KQorICAgICAgICBERUZJTkVfT1Aob3BfcmVpZnlfc2NvcGUpCisgICAgICAgIERFRklORV9P
UChvcF90ZWFyX29mZl9zY29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfc2NvcGUpCiAg
ICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgogICAgICAgICBjYXNl
IG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmlu
ZGV4IDJkMjg0MWJhZjU1NDg2YTFlYmY2OWQyZTRiNWJkODVjZWUxMTZiMGQuLjQ3MDQ3NWQ2YzNi
MDYzMDY4MTZmYTNmZGQ4M2FhODBmZjYzZDA2ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApA
QCAtODE4LDcgKzgxOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
amVxX251bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2pmYWxzZShJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfam1wKEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdF9vcF9qbXBfc2NvcGVzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9qbmVxX251bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2pu
ZXFfcHRyKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbGVzcyhJbnN0cnVj
dGlvbiopOwpAQCAtODY0LDcgKzg2MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3ByZV9pbmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3By
b2ZpbGVfZGlkX2NhbGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Byb2Zp
bGVfd2lsbF9jYWxsKEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9wdXNoX25l
d19zY29wZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdW5zZXQoSW5zdHJ1
Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2VydF9zZXQoSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2VydF91bnNldChJbnN0cnVjdGlvbiopOworICAgICAg
ICB2b2lkIGVtaXRfb3BfcmVpZnlfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBl
bWl0X29wX3RlYXJfb2ZmX3Njb3BlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXNoX3Njb3BlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfYnlf
aWQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF9ieV9pbmRleChJbnN0
cnVjdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXgg
MmRiODJiZjRhZDIwZDYwM2FmMDM0OWRlNGVmNTE0Y2YzZDAwMjZjNi4uMGM4MzY1OTdmMTExZjBh
MTQzMzE3OWViMzRiNGFjZmJhOGIyNzI3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCkBAIC0xMDE2LDEyICsxMDE2LDY4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X2pzbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfcHVzaF9uZXdfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3Vuc2V0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1c2hfbmV3
X3Njb3BlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwotICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQsIHJl
Z1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Cisg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfYXNzZXJ0X3NldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CisgICAgSnVtcCBub3RFbXB0eSA9IGJyYW5jaFB0cihOb3RFcXVhbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVv
ZihSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworCisgICAgSklUU3R1YkNhbGwodGhpcywg
Y3RpX29wX2Fzc2VydF9zZXQpLmNhbGwoKTsKKworICAgIG5vdEVtcHR5LmxpbmsodGhpcyk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2Fzc2VydF91bnNldChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgSnVtcCB3YXNFbXB0eSA9IGJyYW5jaFB0cihFcXVhbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNp
emVvZihSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworCisgICAgSklUU3R1YkNhbGwodGhp
cywgY3RpX29wX2Fzc2VydF91bnNldCkuY2FsbCgpOworCisgICAgd2FzRW1wdHkubGluayh0aGlz
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVpZnlfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRlbXBsID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKworICAgIEp1bXAgc2NvcGVSZWlmaWVkID0gYnJhbmNoUHRyKE5vdEVxdWFsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKKworICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZWlmeV9zY29wZSk7CisgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQodGVtcGwsIHJlZ1QxKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChUcnVzdGVkSW1tMzIoYmFzZSkpOworICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKKworICAgIHNj
b3BlUmVpZmllZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9z
Y29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHNj
b3BlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIEp1bXAgc2NvcGVO
b3RSZWlmaWVkID0gYnJhbmNoUHRyKEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNjb3BlICogc2l6ZW9mKFJlZ2lz
dGVyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworCisgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX3RlYXJfb2ZmX3Njb3BlKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChzY29wZSwgcmVnVDEpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKDApLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIp
ICogc2NvcGUpKTsKKworICAgIHNjb3BlTm90UmVpZmllZC5saW5rKHRoaXMpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTAzNCwxNCArMTA5MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wX3Njb3Bl
cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9qbXBfc2NvcGVzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0
dWJDYWxsLmNhbGwoKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBiNjc2OTZmMzU5MDM3N2ZjYTAwN2E0MzgxYzUx
NGMwNWMyZGExMGRmLi4zODY0MWRjNmJjNzkxNTEyOGI2YzI0MTM5YmNjNzkyNWY3YWU5NDBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0x
MzM2LDEyICsxMzM2LDY4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19qc251bWJlcihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhCiAgICAgc3R1YkNhbGwu
Y2FsbChkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXNoX25ld19zY29wZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdW5zZXQoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfcHVzaF9uZXdfc2NvcGUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2Fzc2VydF9zZXQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgbm90RW1wdHkgPSBicmFuY2hQdHIoTm90RXF1YWws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKKworICAgIEpJVFN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9hc3NlcnRfc2V0KS5jYWxsKCk7CisKKyAgICBub3RFbXB0eS5s
aW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9hc3NlcnRfdW5zZXQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgd2FzRW1wdHkgPSBicmFuY2hQdHIoRXF1
YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKKworICAgIEpJ
VFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9hc3NlcnRfdW5zZXQpLmNhbGwoKTsKKworICAgIHdhc0Vt
cHR5LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3JlaWZ5X3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0ZW1wbCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wIHNjb3BlUmVpZmllZCA9IGJyYW5jaFB0
cihOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSk7CisKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVpZnlfc2Nv
cGUpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHRlbXBsLCByZWdUMSk7CisgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGJhc2UpKTsKKyAgICBzdHViQ2FsbC5jYWxsKGRz
dCk7CisKKyAgICBzY29wZVJlaWZpZWQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfdGVhcl9vZmZfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyAg
ICBKdW1wIHNjb3BlTm90UmVpZmllZCA9IGJyYW5jaFB0cihFcXVhbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzY29wZSAq
IHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKKworICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9zY29wZSk7CisgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoc2NvcGUsIHJlZ1QxKTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6
ZW9mKFJlZ2lzdGVyKSAqIHNjb3BlKSk7CisKKyAgICBzY29wZU5vdFJlaWZpZWQubGluayh0aGlz
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEzNjEsMTQgKzE0MTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0
ICsgT1BDT0RFX0xFTkdUSChvcF9jYXRjaCksIGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1QwKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wX3Njb3BlcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbXBfc2Nv
cGVzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICBhZGRKdW1w
KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggZWViZTkwNDI3YWVj
MWM1ZDU2YWJiY2I5NmY2MDI1NWM5ZTc5MjUxMS4uYjUzOTJiMGRmNmY2NDhmODZhNGUzYmRmMzlj
Mjk5YTljNTc1MDAxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAg
LTMwODAsNyArMzA4MCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3
X2Z1bmNfZXhwKQogICAgICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0
aGUgRnVuY3Rpb25FeHByZXNzaW9uLgogICAgICAqLwogICAgIGlmICghZnVuY3Rpb24tPm5hbWUo
KS5pc051bGwoKSkgewotICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3Bl
T2JqZWN0ID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24t
Pm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgSlNTdGF0aWNT
Y29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNy
ZWF0ZSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFk
T25seSB8IERvbnREZWxldGUpOwogICAgICAgICBmdW5jLT5zZXRTY29wZShjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7CiAg
ICAgfQogCkBAIC0zMzcxLDI4ICszMzcxLDU2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF9pbikKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihi
YXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KSkpOwogfQogCi1ERUZJTkVf
U1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfbmV3X3Njb3BlKQorREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfYXNzZXJ0X3NldCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2Jq
ZWN0OjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVu
dGlmaWVyKCksIHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCksIERvbnREZWxldGUpOworICAg
IFVTdHJpbmcgbWVzc2FnZSgidW5pbml0aWFsaXplZCB2YXJpYWJsZSIpOworICAgIHN0YWNrRnJh
bWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNlRXJyb3Ioc3RhY2tGcmFt
ZS5jYWxsRnJhbWUsIG1lc3NhZ2UpOworICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsK
K30KIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0g
ICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNo
KHNjb3BlKSk7Ci0gICAgcmV0dXJuIHNjb3BlOworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfYXNzZXJ0X3Vuc2V0KQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKKworICAgIFVTdHJpbmcgbWVzc2FnZSgiY29uc3QgdmFyaWFibGUgYWxyZWFkeSBpbml0aWFs
aXplZCIpOworICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlUmVm
ZXJlbmNlRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsIG1lc3NhZ2UpOworICAgIFZNX1RIUk9X
X0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bf
am1wX3Njb3BlcykKK0RFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcmVpZnlfc2Nv
cGUpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgdW5z
aWduZWQgY291bnQgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIC8vIEFyZ3VtZW50czogc2Nv
cGUgdGVtcGxhdGUgb2JqZWN0IChqc3ZhbHVlKSwgb2Zmc2V0IG9mIHJlZ2lzdGVycyAoaW50MzIp
LgorICAgIEpTVmFsdWUgdGVtcGwgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAg
IGludCByZWdpc3Rlck9mZnNldCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpOwogCi0gICAg
U2NvcGVDaGFpbk5vZGUqIHRtcCA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwotICAgIHdoaWxl
IChjb3VudC0tKQotICAgICAgICB0bXAgPSB0bXAtPnBvcCgpOwotICAgIGNhbGxGcmFtZS0+c2V0
U2NvcGVDaGFpbih0bXApOworICAgIEFTU0VSVCh0ZW1wbC5pc09iamVjdCgpKTsKKyAgICBKU09i
amVjdCogc2NvcGVUZW1wbGF0ZSA9IGFzT2JqZWN0KHRlbXBsKTsKKyAgICBBU1NFUlQoc2NvcGVU
ZW1wbGF0ZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAgICBKU1N0YXRpY1Njb3BlT2JqZWN0
KiBuZXdTY29wZSA9IHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihzY29wZVRlbXBs
YXRlKTsKKyAgICBuZXdTY29wZSA9IG5ld1Njb3BlLT5yZWlmeSgqc3RhY2tGcmFtZS5nbG9iYWxE
YXRhLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7
CisgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChuZXdTY29wZSkpOworCisgICAgLy8gR2VuZXJhdGVk
IGNvZGUgc3RvcmVzIGl0IGluIGNhbGxGcmFtZS0+cihkc3QpLgorICAgIHJldHVybiBuZXdTY29w
ZTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZfc2NvcGUpCit7
CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgLy8gQXJndW1l
bnRzOiBzY29wZSBvYmplY3QgKGpzdmFsdWUpLgorICAgIEpTVmFsdWUgc2NvcGUgPSBzdGFja0Zy
YW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEFTU0VSVChzY29wZSk7CisKKyAgICBBU1NFUlQo
c2NvcGUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHNjb3Bl
KTsKKyAgICBBU1NFUlQob2JqZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgIHN0YXRp
Y19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihvYmplY3QpLT50ZWFyT2ZmKCpzdGFja0ZyYW1l
Lmdsb2JhbERhdGEpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnBvcCgpKTsKIH0KIAogREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X2luZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5oCmluZGV4IDQ5ZjY2NjQ2NTNjMzY3NWRlMzI4YWM5Y2E1YTAzZWY2MDA2NWRiMmYu
LjNhMWU2NWI2OWEzNDQxZmU4YTM2ODI0YzNjYjhjZjQ0ODA5ODI0ZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgKQEAgLTQxOCw3ICs0MTgsMTAgQEAgZXh0ZXJuICJDIiB7CiAg
ICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfb2JqZWN0KFNUVUJfQVJHU19ERUNMQVJB
VElPTik7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfcmVnZXhwKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9wdXNoX2FjdGl2
YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICBKU09iamVjdCogSklUX1NUVUIgY3Rp
X29wX3B1c2hfbmV3X3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfYXNzZXJ0X3NldChTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAgIHZvaWQg
SklUX1NUVUIgY3RpX29wX2Fzc2VydF91bnNldChTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAg
IEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcmVpZnlfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9zY29wZShTVFVCX0FSR1Nf
REVDTEFSQVRJT04pOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9zY29wZShT
VFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IqIEpJVF9TVFVCIGN0aV9vcF9nZXRfcG5hbWVzKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7CkBAIC00MzUsNyArNDM4LDYgQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9p
ZCBKSVRfU1RVQiBjdGlfb3BfY2hlY2tfaGFzX2luc3RhbmNlKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfZGVidWcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9lbmQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsK
LSAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9qbXBfc2NvcGVzKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcG9wX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJB
VElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHJvZmlsZV9kaWRfY2FsbChTVFVCX0FS
R1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3Byb2ZpbGVfd2lsbF9j
YWxsKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCBiNmJiNjY0YmNmNzIwY2UyMGZhMGYwZmMzNzE0
YjdiMTg4YTYzMjcyLi5hM2YzMWRlM2ZjNzkyNTRhMDE4ZDdmNzhjNDBhMzUyMTQ5ZDM5NGZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAg
LTExMjAsMTggKzExMjAsNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2dl
dHRlcl9zZXR0ZXIpCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKLUxMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9qbXBfc2NvcGVzKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgdW5zaWdu
ZWQgY291bnQgPSBwY1sxXS51Lm9wZXJhbmQ7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHRtcCA9IGV4
ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgdG1wID0gdG1w
LT5wb3AoKTsKLSAgICBleGVjLT5zZXRTY29wZUNoYWluKHRtcCk7Ci0gICAgcGMgKz0gcGNbMl0u
dS5vcGVyYW5kOwotICAgIExMSU5UX0VORCgpOwotfQotCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfanRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKaW5kZXggN2IzYjhiZGE2NTZlYjFmOWI3ZjMx
ZjA2MmFiZjA5ZjU0NTM3MGU4NS4uMDUxNTk4N2QxZDY2OGY1MTRhMTE0ODhiNWQ1MGJjZGZiNDE4
M2JiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgK
QEAgLTE1OSw3ICsxNTksNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5
X3ZhbCk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2luZGV4KTsKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2V0dGVyX3NldHRlcik7Ci1MTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfam1wX3Njb3Blcyk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
anRydWUpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pmYWxzZSk7CiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfamxlc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IDlhZjkxYmVmMmM0ODE3
NTQ4ODMzMWZkYjk0MjQxNTRhMDE4NWE3ZGYuLjRkYjI5NzU0NWIwZmZlMDkzMTM1NDYyNTg3ODgw
ZGRiYjkxNGMyMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTUyNSwxMiArNTI1LDYgQEAgX2xsaW50X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyOgogICAgIGRpc3BhdGNoKDUpCiAKIAotX2xsaW50X29wX2ptcF9zY29wZXM6
Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRo
X2ptcF9zY29wZXMpCi0gICAgZGlzcGF0Y2goMCkKLQotCiBfbGxpbnRfb3BfbG9vcF9pZl90cnVl
OgogICAgIG5vcAogX2xsaW50X29wX2p0cnVlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oCmluZGV4IGY3NTJiOTFlOTVkZDk0MWIxY2Y5OGIxMjA2NTMxZWRmOTRlOGM3MzcuLmE0MDE5
ZWY0MDJiOTVkNmUxMGNmODE2MWI3Yzg4YTczYWU1MGMxMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgKQEAgLTE0MjIsNyArMTQyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIHNldFVzZXNBcmd1bWVudHMoKSB7IG1fc2NvcGVGbGFncyB8PSBVc2VzQXJndW1l
bnRzRmxhZzsgfQogICAgICAgICBib29sIHVzZXNUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9zY29w
ZUZsYWdzICYgVXNlc1RoaXNGbGFnOyB9CiAKLSAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb25G
b3JNb3JlVGhhblZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIChVc2Vz
RXZhbEZsYWcgfCBVc2VzV2l0aEZsYWcgfCBVc2VzQ2F0Y2hGbGFnKTsgfQorICAgICAgICBib29s
IG5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9z
Y29wZUZsYWdzICYgKFVzZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyk7IH0KICAgICAgICAgYm9v
bCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBoYXNDYXB0dXJlZFZhcmlhYmxlcygp
IHx8IG5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCk7IH0KIAogICAgICAgICBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKaW5kZXggNzUxM2QxZjExZmQ0ODk1ODI4YWY4
Y2FlYmU4MGFkYTE1YjVmNTdmOS4uZTQyMDYyOGY5OTQ1NjUwMTYyNzk1NjliNjk3N2RmNDQ5NTg4
Yjk3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0xNjIsNyArMTYy
LDcgQEAgc3RydWN0IFNjb3BlIHsKICAgICBBTFdBWVNfSU5MSU5FIFNjb3BlRmxhZ3MgdXNlc0Zs
YWdzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgQWxsU2NvcGVVc2VzRmxhZ3M7IH0K
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RmxhZ3MoU2NvcGVGbGFncyBzY29wZUZsYWdzKSB7
IG1fc2NvcGVGbGFncyB8PSBzY29wZUZsYWdzOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
bmVlZHNGdWxsQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIChVc2Vz
RXZhbEZsYWcgfCBVc2VzV2l0aEZsYWcgfCBVc2VzQ2F0Y2hGbGFnKTsgfQorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBuZWVkc0Z1bGxBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZs
YWdzICYgKFVzZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyk7IH0KICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgc3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFN0cmljdE1v
ZGVGbGFnOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIHNoYWRvd3NBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTaGFkb3dzQXJndW1lbnRzRmxhZzsgfQogICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdz
ICYgRnVuY3Rpb25Nb2RlRmxhZzsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCmluZGV4IDA4YjM5ZmNmMGI0YzkzMDI5MDQzN2JjYTkwMTk3Y2M5NTMwMGVmZTcu
LjgwMTY5MDE4MjllYjA5MWY0ZTg3MzYzYzYyMjgxZWJjY2Q2NWMyMTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTI5NCw3ICsyOTQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9z
Y29wZUZsYWdzICYgVXNlc0V2YWxGbGFnOyB9CiAgICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNBcmd1bWVudHNGbGFnOyB9Ci0gICAg
ICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZh
cmlhYmxlcyB8fCBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnIHwg
VXNlc0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIHx8IG1fc2NvcGVGbGFncyAmIChVc2VzRXZh
bEZsYWcgfCBVc2VzV2l0aEZsYWcpOyB9CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU3RyaWN0TW9kZUZsYWc7IH0KIAogICAgICAgICB2
b2lkIHVubGlua0NhbGxzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCmluZGV4IGY4OTQyYjVmODY1ZGI1OWUxNTQyZGM0
ZTNiNWM3Y2YyNzljMTcxNjMuLjBlZTAxZGM2ZWVlYzQ0NmY5M2ZhNGJmYmE1MTdiOGM0ZTBjMTVj
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2Nv
cGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGlj
U2NvcGVPYmplY3QuY3BwCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAg
IENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4o
KSk7CiAgICAgSlNWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdpc3RlclN0b3JlKTsK
KyAgICBpZiAodGhpc09iamVjdC0+bV9yZWdpc3RlcnMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzLCB0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxl
LT5zaXplKCkpOwogfQogCiBKU09iamVjdCogSlNTdGF0aWNTY29wZU9iamVjdDo6dG9UaGlzT2Jq
ZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaAppbmRleCBiYmYwM2EzNDczYTI1NzY5
ZDJiNDI1OWI3NTBmNmJmN2ZmZDQwZjg5Li5hYjU0ZTU5NjQ1M2EzM2Y0ZTkxZWQ4NzgxN2JjZjY1
YjU3Y2VlOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
YXRpY1Njb3BlT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dGF0aWNTY29wZU9iamVjdC5oCkBAIC0zNCwxMyArMzQsNTMgQEAgbmFtZXNwYWNlIEpTQ3sKICAg
ICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBCYXNlOwogCi0gICAg
ICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVjdCogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgSlNTdGF0aWNTY29w
ZU9iamVjdCogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0YXRp
Y1Njb3BlT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNTdGF0aWNTY29wZU9iamVjdChleGVjKTsK
LSAgICAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCBpZGVudGlmaWVy
LCB2YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkU3ltYm9sVGFi
bGU+IHRhYmxlID0gU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpOworICAgICAgICAgICAgSlNT
dGF0aWNTY29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1N0YXRpY1Njb3BlT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0YXRpY1Njb3BlT2Jq
ZWN0KGdsb2JhbERhdGEsIHRhYmxlLnJlbGVhc2UoKSwgMCk7CisgICAgICAgICAgICBzY29wZU9i
amVjdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICByZXR1cm4gc2Nv
cGVPYmplY3Q7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVj
dCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgeworICAgICAg
ICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBjcmVhdGUoZ2xvYmFsRGF0
YSk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+YWRkVmFyaWFibGUobmFtZSwgYXR0cmlidXRl
cyk7CisgICAgICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdp
c3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+WzFdKTsK
KyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzID0gcmVnaXN0ZXJB
cnJheS5nZXQoKTsKKyAgICAgICAgICAgIHJlZ2lzdGVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgc2Nv
cGVPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgICAgIHNjb3BlT2JqZWN0LT5zZXRSZWdpc3RlcnMo
cmVnaXN0ZXJzLCByZWdpc3RlckFycmF5LnJlbGVhc2UoKSk7CisgICAgICAgICAgICByZXR1cm4g
c2NvcGVPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBpbnQgYWRkVmFyaWFibGUoY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKCFtX3JlZ2lzdGVycyk7CisgICAgICAgICAgICBpbnQgaWR4ID0gc3ltYm9s
VGFibGUoKS5zaXplKCk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZSgpLmFkZChuYW1lLmltcGwo
KSwgU3ltYm9sVGFibGVFbnRyeShpZHgsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgICAgIEFTU0VS
VChzeW1ib2xUYWJsZSgpLnNpemUoKSA9PSBpZHggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiBp
ZHg7CisgICAgICAgIH0KKworICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiByZWlmeShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFJlZ2lzdGVyKiByZWdpc3RlcnMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QgKnNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNTdGF0aWNTY29wZU9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNT
dGF0aWNTY29wZU9iamVjdChnbG9iYWxEYXRhLCBtX3N5bWJvbFRhYmxlLCByZWdpc3RlcnMpOwor
ICAgICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
ICAgICAgICAgcmV0dXJuIHNjb3BlT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0
ZWFyT2ZmKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
T3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSA9IGFkb3B0
QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPlttX3N5bWJvbFRhYmxlLT5zaXplKCld
KTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzID0gcmVnaXN0
ZXJBcnJheS5nZXQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9zeW1ib2xU
YWJsZS0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICByZWdpc3RlcnNbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgICAgICAgICAv
LyBDbGVhciBvbGQgdmFsdWVzIHRvIGhlbHAgR0MgKD8pLgorICAgICAgICAgICAgICAgIG1fcmVn
aXN0ZXJzW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBKU1ZhbHVlKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgc2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVnaXN0ZXJBcnJheS5yZWxl
YXNlKCkpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wm
IHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCog
dG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSopOwpAQCAtNTQsMjQgKzk0LDE4IEBAIG5h
bWVzcGFjZSBKU0N7CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAg
ICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJTdG9yZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZSgp
LmFkZChpZGVudGlmaWVyLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeSgtMSwgYXR0cmlidXRlcykp
OwotICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTVmFy
aWFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNT
dGF0aWNTY29wZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgICAgICA6IEpTVmFyaWFi
bGVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkuc3RhdGljU2Nv
cGVTdHJ1Y3R1cmUuZ2V0KCksICZtX3N5bWJvbFRhYmxlLCByZWludGVycHJldF9jYXN0PFJlZ2lz
dGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpKQorICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRTeW1ib2xUYWJsZT4g
dGFibGUsIFJlZ2lzdGVyKiByZWdpc3RlcnMpCisgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmpl
Y3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdGF0aWNTY29wZVN0cnVjdHVyZS5nZXQoKSwgdGFi
bGUuZ2V0KCksIHJlZ2lzdGVycykKKyAgICAgICAgICAgICwgbV9zeW1ib2xUYWJsZSh0YWJsZSkK
ICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAotICAgICAgICBTeW1ib2xUYWJsZSBtX3N5bWJvbFRhYmxlOwotICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdpc3RlclN0b3JlOworICAgICAgICBSZWZQdHI8U2hhcmVk
U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CiAgICAgfTsKIAogICAgIGlubGluZSBib29sIEpT
U3RhdGljU2NvcGVPYmplY3Q6OmlzRHluYW1pY1Njb3BlKGJvb2wmKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132810</attachid>
            <date>2012-03-20 06:01:06 -0700</date>
            <delta_ts>2012-03-20 09:29:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20120320140102.patch</filename>
            <type>text/plain</type>
            <size>84538</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
OTgzMjYwZGE1ZTBlZjMwMzg0MjlkMGQyMjMxZWY4YmVjYmU2ZjI1Li44YmNlNjQwZjM0ZDcxNmYy
NmEzZjZhM2I1ZGEzODIxZmZjOWY5NjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzkgQEAKKzIwMTEtMDMtMjAgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIE9wdGltaXplIGFjY2VzcyB0byBibG9jay1zY29wZWQgbG9jYWwgdmFyaWFibGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcwOAor
CisgICAgICAgIFRoaXMgY29tbWl0IGNoYW5nZXMgdGhlIGJ5dGVjb21waWxlciB0byB0cmFjayBi
bG9jayBzY29wZSBvYmplY3RzLAorICAgICAgICBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUgcmVzb2x2ZWQKKyAgICAgICAgYXQgY29tcGls
ZS10aW1lIHRvIHJlZ2lzdGVycy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBpcyB0bwor
ICAgICAgICByZS11c2UgSlNTdGF0aWNTY29wZSwgYWRkaW5nIGxhenkgdGVhci1vZmYgYW5kIHRo
ZSBhYmlsaXR5IHRvIGJpbmQKKyAgICAgICAgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KKworICAg
ICAgICBDdXJyZW50bHksIGluIEVTNSwgb25seSBjYXRjaCBibG9ja3MgZnVuY3Rpb24gYXMgYmxv
Y2sgc2NvcGVzLCBmb3IKKyAgICAgICAgdGhlaXIgZXhjZXB0aW9uIGlkZW50aWZpZXIuICAoTmFt
ZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYWxzbworICAgICAgICBpbnRyb2R1Y2UgYSBraW5kIG9m
IGJsb2NrIHNjb3BlLCBidXQgc2luY2UgdGhleSBhcmUgZXhwcmVzc2lvbnMKKyAgICAgICAgYW5k
IG5vdCBzdGF0ZW1lbnRzIHRoZSBjb21waWxlciBpcyBub3QgYXMgaW52b2x2ZWQuKQorCisgICAg
ICAgIEdpdmVuIHRoYXQgY2F0Y2ggYmxvY2tzIGFyZSBub3QgdmVyeSBjb21tb24gaW4gSlMsIGFu
ZCB0aGV5IGNhbgorICAgICAgICBvbmx5IGJpbmQgb25lIHZhcmlhYmxlLCB0aGlzIHBhdGNoIGlz
IG1vcmUgYSBwcm9vZiBvZiBjb3JyZWN0bmVzcworICAgICAgICBhbmQgYSBiYXNlIGZvciBhIHN1
YnNlcXVlbnQgYmxvY2sgc2NvcGluZyBwYXRjaCB0aGFuIGEgZ2VuZXJhbAorICAgICAgICBvcHRp
bWl6YXRpb24uICBBcyBzdWNoLCBpbiBhbnRpY2lwYXRpb24gb2YgRVM2IGJsb2NrLXNjb3BlZAor
ICAgICAgICBsb2NhbHMsIHRoaXMgcGF0Y2ggYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHJlYWQtIGFu
ZCB3cml0ZS1iYXJyaWVycworICAgICAgICBvbiBibG9jay1zY29wZWQgbG9jYWxzLCB0byBpbXBs
ZW1lbnQgdGhlIHRlbXBvcmFsIGRlYWQgem9uZS4KKworICAgICAgICBUaGVyZSBhcmUgZm91ciBu
ZXcgb3Bjb2RlczogdHdvIGZvciBpbXBsZW1lbnRpbmcgdGhlIHRlbXBvcmFsIGRlYWQKKyAgICAg
ICAgem9uZSwgYW5kIHR3byBmb3IgZGVhbGluZyB3aXRoIGxhemlseSByZWlmaWVkIGFuZCB0b3Ju
LW9mZiBzY29wZXMuCisgICAgICAgIFdoaWxlIHdlJ3JlIGF0IGl0LCB3ZSByZW1vdmUgam1wX3Nj
b3BlcywgYXMgaXQgY2FuJ3QgYmUKKyAgICAgICAgaW1wbGVtZW50ZWQgY2xlYXJseSBpbiB0aGUg
cHJlc2VuY2Ugb2YgbGF6aWx5LXRvcm4tb2ZmIGJsb2NrCisgICAgICAgIHNjb3Blcy4gIEluc3Rl
YWQgdGhlIGNvbXBpbGVyIGVtaXRzIHRoZSBhcHByb3ByaWF0ZSB1bndpbmRpbmdzCisgICAgICAg
IGRpcmVjdGx5LiAgV2UgYWxzbyByZW1vdmUgcHVzaF9uZXdfc2NvcGUgaW4gZmF2b3Igb2YgdGhl
IG1vcmUKKyAgICAgICAgZ2VuZXJpYyBhbmQgZWZmaWNpZW50IGxhemlseSByZWlmaWVkIHN0YXRp
YyBzY29wZXMuCisKKyAgICAgICAgV2hlbiBlbnRlcmluZyBhIGJsb2NrIHNjb3BlLCB0aGUgY29t
cGlsZXIgYWxsb2NhdGVzIGEgY29udGlndW91cworICAgICAgICBibG9jayBvZiByZWdpc3RlcnMg
Zm9yIGJsb2NrIHNjb3Blcy4gIEJsb2NrIHNjb3BlcyB0aGF0IG1heSBiZQorICAgICAgICByZWlm
aWVkIChjYXB0dXJlZCBpbiBhIHNjb3BlIGNoYWluKSBhbHNvIG9jY3VweSBhbiBhZGRpdGlvbmFs
CisgICAgICAgIHJlZ2lzdGVyLCBmb3IgdGhlIHNjb3BlIG9iamVjdCBpdHNlbGYuICBUaGUgc3lt
Ym9sIHRhYmxlcyBmb3IgdGhlCisgICAgICAgIGJsb2NrIHNjb3BlcyBjb21lIGZyb20gInNjb3Bl
IHRlbXBsYXRlcyIsIHdoaWNoIGxpdmUgaW4gdGhlCisgICAgICAgIGNvbnN0YW50cyBzZWN0aW9u
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkNvbnRyb2xGbG93
Q29udGV4dCk6IEluIGFkZGl0aW9uIHRvIGZpbmFsbHkgYW5kIHdpdGggYmxvY2tzLAorICAgICAg
ICBzdXBwb3J0IGJsb2NrLXNjb3BlIGNvbnRyb2wgZmxvdyBjb250ZXh0cy4KKyAgICAgICAgKEpT
Qzo6UmVzb2x2ZVJlc3VsdCk6IEFkZCBhIEJhcnJpZXJGbGFnIGFuZCBhc3NvY2lhdGVkIHR5cGVz
IGZvcgorICAgICAgICBibG9jay1zY29wZWQgYmluZGluZ3MgdGhhdCBuZWVkIHJlYWQtIG9yIHdy
aXRlLSBiYXJyaWVycy4gIEFkZCBhCisgICAgICAgIGZsYWcgZm9yICJhcmd1bWVudHMiLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6c2NvcGVEZXB0aCk6IEFkZCBtX2Jsb2NrU2Nv
cGVEZXB0aC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNhbk9wdGltaXplTm9u
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNob3VsZE9wdGltaXpl
TG9jYWxzKToKKyAgICAgICAgUmVtb3ZlIG5vdy11bnVzZWQgbWV0aG9kcy4KKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6d2lsbFJlc29sdmVUb0FyZ3VtZW50cyk6IFJlbW92ZS4gIENhbGxlcnMKKyAg
ICAgICAgdXNlIFJlc29sdmVSZXN1bHQ6OmlzQXJndW1lbnRzKCksIHBvc3NpYmx5IHdpdGggdGhl
IG5ldworICAgICAgICBEb250Q3JlYXRlQXJndW1lbnRzRmxhZy4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OnJlc29sdmUpOiBTZWFyY2ggYmxvY2sgc2NvcGVzIGJlZm9yZQorICAgICAgICBsb29r
aW5nIGluIHRoZSBsb2NhbCBzeW1ib2wgdGFibGUgZm9yIHJlZ2lzdGVycy4gIEhhbmRsZSBsYXp5
CisgICAgICAgIHJlaWZpY2F0aW9uIG9mICJhcmd1bWVudHMiIGhlcmUuICBJbmxpbmUgY2FuT3B0
aW1pemVOb25Mb2NhbHMgYW5kCisgICAgICAgIHNob3VsZE9wdGltaXplTG9jYWxzLCBhbmQgZm9s
ZCBzb21lIGNvbnN0YW50cy4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRH
ZXRTdGF0aWNWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFN0
YXRpY1Zhcik6IEFkZCBjYXNlcyBmb3IKKyAgICAgICAgImFyZ3VtZW50cyIuICBBZGQgcmVhZC93
cml0ZSBiYXJyaWVycyBmb3IgbG9jYWxzIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSk6CisgICAg
ICAgIFJlbW92ZSBub3ctdW51c2VkIG1ldGhvZHMuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwdXNoQmxvY2tTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
Ojpwb3BCbG9ja1Njb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlaWZ5
U2NvcGVzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoU2NvcGUp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFBvcFNjb3BlKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcFNjb3Blcyk6IFJlZmFjdG9yIHRvIGhhbmRs
ZSBibG9jaworICAgICAgICBzY29wZXMgb24gdGhlIENvbnRyb2xGbG93Q29udGV4dCBzdGFjay4g
IFdoZW4gcHVzaGluZyBhIHNjb3BlIHRoYXQKKyAgICAgICAgcmVxdWlyZXMgYSBzY29wZSBjaGFp
biwgcmVpZnlTY29wZXMgaXMgY2FsbGVkLCB3aGljaCBlbnN1cmVzIHRoYXQKKyAgICAgICAgdGhl
IHNjb3BlIGNoYWluIGhhcyBiZWVuIGNyZWF0ZWQuICBXaGVuIGNvbnRyb2wgbGVhdmVzIGEgYmxv
Y2sKKyAgICAgICAgc2NvcGUgd2hvc2Ugc2NvcGUgbWF5IGhhdmUgYmVlbiByZWlmaWVkLCB0ZWFy
X29mZl9zY29wZSB3aWxsIHRlYXIKKyAgICAgICAgb2ZmIHRob3NlIGxvY2FscyBmcm9tIHRoZSBz
dGFjayB0byB0aGUgaGVhcC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRO
ZXdGdW5jdGlvbkludGVybmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXROZXdGdW5jdGlvbkV4cHJlc3Npb24pOiBDYWxsCisgICAgICAgIHJlaWZ5U2NvcGVzIGluc3Rl
YWQgb2YgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5LgorCisgICAgICAgICogYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVj
b2RlKTogQWRhcHQgdG8KKyAgICAgICAgd2lsbFJlc29sdmVUb0FyZ3VtZW50cyBjaGFuZ2UuCisg
ICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRh
cHQgdG8KKyAgICAgICAgSlNTdGF0aWNTY29wZSB0YWtpbmcgYSBKU0dsb2JhbERhdGEgaW5zdGVh
ZCBvZiBhbiBFeGVjU3RhdGUuCisgICAgICAgIChKU0M6OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6
IEFkYXB0IHRvIHVzZSBwdXNoQmxvY2tTY29wZSBhbmQKKyAgICAgICAgcG9wQmxvY2tTY29wZS4K
KworICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOiBBZGQgbmV3IGFzc2VydF9sYXp5X3JlZ19p
bml0LAorICAgICAgICBhc3NlcnRfbGF6eV9yZWdfbm90X2luaXQsIHJlaWZ5X3Njb3BlLCBhbmQg
dGVhcl9vZmZfc2NvcGUgb3Bjb2Rlcy4KKyAgICAgICAgUmVtb3ZlIHB1c2hfbmV3X3Njb3BlIGFu
ZCBqbXBfc2NvcGVzLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAgKEpTQzo6Q29k
ZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVC5j
cHA6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
YXNzZXJ0X2xhenlfcmVnX25vdF9pbml0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jl
aWZ5X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RlYXJfb2ZmX3Njb3BlKToK
KyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2Fzc2VydF9sYXp5X3JlZ19pbml0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9y
ZWlmeV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90ZWFyX29mZl9zY29wZSk6
CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoK
KyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwOiBVcGRhdGUgd2l0aCBzdXBwb3J0IGZvciB0aGUgbmV3CisgICAgICAg
IG9wY29kZXMuICBUaGUgTExJbnQgYml0cyBhcmUgdW50ZXN0ZWQuCisKKyAgICAgICAgKiBwYXJz
ZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpuZWVkc0FjdGl2YXRpb25Gb3JN
b3JlVGhhblZhcmlhYmxlcyk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAo
SlNDOjpTY29wZTo6bmVlZHNGdWxsQWN0aXZhdGlvbik6CisgICAgICAgICogcnVudGltZS9FeGVj
dXRhYmxlLmg6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Om5lZWRzQWN0aXZhdGlv
bik6ICJDYXRjaCIgY2xhdXNlcyBubworICAgICAgICBsb25nZXIgZm9yY2UgdGhlaXIgZnVuY3Rp
b25zIHRvIGhhdmUgYWN0aXZhdGlvbnMuCisKKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2Nv
cGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKEpTU3RhdGlj
U2NvcGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjphZGRWYXJp
YWJsZSk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnJlaWZ5KToKKyAgICAg
ICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6dGVhck9mZik6CisgICAgICAgIChKU0M6OkpT
U3RhdGljU2NvcGVPYmplY3Q6OkpTU3RhdGljU2NvcGVPYmplY3QpOiBBZGFwdCB0byBzdXBwb3J0
CisgICAgICAgIGxhenkgdGVhci1vZmYsIGFuZCB0aGUgYWJpbGl0eSB0byBiaW5kIG1vcmUgdGhh
biBvbmUgdmFyaWFibGUuCisKIDIwMTItMDMtMTkgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFj
bG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEpTQ2FsbGJhY2tGdW5jdGlvbjo6dG9TdHJpbmdD
YWxsYmFjay92YWx1ZU9mQ2FsbGJhY2sgZG8gbm90IGhhbmRsZSAwIHJldHVybiB2YWx1ZSBmcm9t
IGNvbnZlcnRUb1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKaW5kZXggMjA5NzJjYzYzYjVhZmQ0Y2E5YzFmODUyMjdmM2JmZTAwZTYyNWQ4NC4uNDQ5
NGE0MmJmNDgyYmMxZWI5OGVjMTRhYThkNzJkYWU5YTYyMjRhNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTEyMjAsMTcgKzEyMjAsMjYgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1
Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHBvcF9z
Y29wZVxuIiwgbG9jYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9wdXNoX25ld19zY29wZTogeworICAgICAgICBjYXNlIG9wX2Fzc2VydF9sYXp5
X3JlZ19pbml0OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGRhdGFMb2coIlslNGRdIGFzc2VydF9sYXp5X3JlZ19pbml0XHQgJXNcbiIsIGxv
Y2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdDog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBk
YXRhTG9nKCJbJTRkXSBhc3NlcnRfbGF6eV9yZWdfbm90X2luaXRcdCAlc1xuIiwgbG9jYXRpb24s
IHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfcmVpZnlfc2NvcGU6IHsKICAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBkYXRhTG9nKCJbJTRkXSBwdXNoX25ld19zY29wZSBcdCVzLCAlcywgJXNcbiIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlm
aWVyc1tpZDBdKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygi
WyU0ZF0gcmVpZnlfc2NvcGVcdCAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1l
KGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUoZXhlYywgcjIpLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2ptcF9zY29wZXM6IHsKLSAgICAgICAgICAgIGludCBzY29wZURlbHRh
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBqbXBfc2NvcGVzXHReJWQsICVk
KC0+JWQpXG4iLCBsb2NhdGlvbiwgc2NvcGVEZWx0YSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNl
dCk7CisgICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfc2NvcGU6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gdGVhcl9v
ZmZfc2NvcGVcdCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2F0Y2g6
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAppbmRleCA0NTU5OGY4OTk0
ODBmZDUzODdkZjk0NWViMDlkNmNjNGQ2OGNiN2M2Li5kYWYwMWJhZmMzN2U4YWZjMjk5OGVlYjli
ZjU4Y2Y3NmQ0OTRmMjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CkBAIC0xNDksNyArMTQ5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1hY3JvKG9wX2pu
bGVzc2VxLCA0KSBcCiAgICAgICAgIG1hY3JvKG9wX2puZ3JlYXRlciwgNCkgXAogICAgICAgICBt
YWNybyhvcF9qbmdyZWF0ZXJlcSwgNCkgXAotICAgICAgICBtYWNybyhvcF9qbXBfc2NvcGVzLCAz
KSBcCiAgICAgICAgIG1hY3JvKG9wX2xvb3AsIDIpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcF9p
Zl90cnVlLCAzKSBcCiAgICAgICAgIG1hY3JvKG9wX2xvb3BfaWZfZmFsc2UsIDMpIFwKQEAgLTE4
Myw3ICsxODIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFwKICAgICAgICAgbWFjcm8o
b3BfcHVzaF9zY29wZSwgMikgXAogICAgICAgICBtYWNybyhvcF9wb3Bfc2NvcGUsIDEpIFwKLSAg
ICAgICAgbWFjcm8ob3BfcHVzaF9uZXdfc2NvcGUsIDQpIFwKKyAgICAgICAgXAorICAgICAgICBt
YWNybyhvcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCwgMikgXAorICAgICAgICBtYWNybyhvcF9hc3Nl
cnRfbGF6eV9yZWdfbm90X2luaXQsIDIpIFwKKyAgICAgICAgXAorICAgICAgICBtYWNybyhvcF9y
ZWlmeV9zY29wZSwgNCkgXAorICAgICAgICBtYWNybyhvcF90ZWFyX29mZl9zY29wZSwgMikgXAog
ICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX2NhdGNoLCAyKSBcCiAgICAgICAgIG1hY3JvKG9w
X3Rocm93LCAyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDRhNmY0NjUzZWFiODkyZmM2ZGEwZGI5
M2NiNDljYjE1NzFhNmFkZmIuLmE0YjU3ZmY5YTk4NjZjY2JhNzgxZWEzY2EzMjRkODViZDYxMzdk
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQmF0Y2hl
ZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNs
dWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNTdGF0aWNTY29wZU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgog
I2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKQEAgLTEzMiwxNCArMTMzLDIyIEBAIHZvaWQgTGFiZWw6
OnNldExvY2F0aW9uKHVuc2lnbmVkIGxvY2F0aW9uKQogdm9pZCBSZXNvbHZlUmVzdWx0OjpjaGVj
a1ZhbGlkaXR5KCkKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJndW1lbnRz
OgorICAgIGNhc2UgUmVhZE9ubHlBcmd1bWVudHM6CiAgICAgY2FzZSBSZWdpc3RlcjoKICAgICBj
YXNlIFJlYWRPbmx5UmVnaXN0ZXI6CisgICAgY2FzZSBCYXJyaWVyUmVnaXN0ZXI6CisgICAgY2Fz
ZSBSZWFkT25seUJhcnJpZXJSZWdpc3RlcjoKICAgICAgICAgQVNTRVJUKG1fbG9jYWwpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBMZXhpY2FsOgogICAgIGNhc2UgUmVhZE9ubHlMZXhpY2Fs
OgorICAgIGNhc2UgQmFycmllckxleGljYWw6CisgICAgY2FzZSBSZWFkT25seUJhcnJpZXJMZXhp
Y2FsOgogICAgIGNhc2UgRHluYW1pY0xleGljYWw6CiAgICAgY2FzZSBEeW5hbWljUmVhZE9ubHlM
ZXhpY2FsOgorICAgIGNhc2UgRHluYW1pY0JhcnJpZXJMZXhpY2FsOgorICAgIGNhc2UgRHluYW1p
Y1JlYWRPbmx5QmFycmllckxleGljYWw6CiAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEdsb2JhbDoKQEAg
LTIzOCw2ICsyNDcsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJv
Z3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogcwogICAgICwgbV90aGlzUmVn
aXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZmluYWxseURl
cHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURlcHRoKDApCisgICAgLCBtX2Jsb2NrU2NvcGVE
ZXB0aCgwKQogICAgICwgbV9iYXNlU2NvcGVEZXB0aCgwKQogICAgICwgbV9jb2RlVHlwZShHbG9i
YWxDb2RlKQogICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKQEAgLTMwOSw2ICszMTksNyBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSog
ZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWluTgogICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIoMCkK
ICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURlcHRoKDApCisg
ICAgLCBtX2Jsb2NrU2NvcGVEZXB0aCgwKQogICAgICwgbV9iYXNlU2NvcGVEZXB0aCgwKQogICAg
ICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgw
KQpAQCAtNDcwLDYgKzQ4MSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihFdmFsTm9kZSogZXZhbE5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoCiAgICAgLCBtX3Ro
aXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQogICAgICwgbV9maW5h
bGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fYmxvY2tT
Y29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGNvZGVCbG9jay0+YmFzZVNjb3Bl
RGVwdGgoKSkKICAgICAsIG1fY29kZVR5cGUoRXZhbENvZGUpCiAgICAgLCBtX25leHRDb25zdGFu
dE9mZnNldCgwKQpAQCAtNTM2LDMzICs1NDgsNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGludCBwYXJhbWV0ZXJJbmRleAog
ICAgIG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKIH0KIAotYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6d2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsK
LSAgICBpZiAoaWRlbnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1i
b2xUYWJsZSgpLmdldChpZGVudC5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChtX2NvZGVCbG9jay0+dXNlc0FyZ3Vt
ZW50cygpICYmIG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjp1bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpCi17Ci0gICAgQVNTRVJUKHdp
bGxSZXNvbHZlVG9Bcmd1bWVudHMocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykpOwotCi0gICAg
U3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5TmFtZXMo
KS5hcmd1bWVudHMuaW1wbCgpKTsKLSAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICBy
ZXR1cm4gJnJlZ2lzdGVyRm9yKGVudHJ5LmdldEluZGV4KCkpOwotfQotCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJ
RCogcmVnKQogewogICAgIGlmIChtX2xhc3RMYXp5RnVuY3Rpb24gPD0gcmVnLT5pbmRleCgpIHx8
IHJlZy0+aW5kZXgoKSA8IG1fZmlyc3RMYXp5RnVuY3Rpb24pCkBAIC0xMTU0LDM3ICsxMTM5LDgz
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBk
c3QsIEpTVmFsdWUgdikKICAgICByZXR1cm4gY29uc3RhbnRJRDsKIH0KIAotUmVzb2x2ZVJlc3Vs
dCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkK
K1Jlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUoY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHksIHVuc2lnbmVkIHJlc29sdmVGbGFncykKIHsKICAgICBpZiAocHJvcGVydHkg
PT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gUmVzb2x2
ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKHRoaXNSZWdpc3RlcigpLCBSZXNvbHZlUmVzdWx0OjpS
ZWFkT25seUZsYWcpOwogCisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlQ2hh
aW4tPmJlZ2luKCk7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IG1fc2NvcGVDaGFpbi0+
ZW5kKCk7CisKKyAgICBpbnQgZGVwdGggPSAwOworICAgIHVuc2lnbmVkIGZsYWdzID0gMDsKKyAg
ICBmb3IgKGludCBpID0gc2NvcGVEZXB0aCgpLTE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIHN3
aXRjaCAobV9zY29wZUNvbnRleHRTdGFja1tpXS5ibG9ja1R5cGUpIHsKKyAgICAgICAgY2FzZSBX
aXRoQmxvY2s6CisgICAgICAgICAgICAvLyBJbiB0aGVvcnkgd2Ugc2hvdWxkIGJlIGFibGUgdG8g
c2tpcCBpbnRlcnZlbmluZyBibG9jayBzY29wZQorICAgICAgICAgICAgLy8gb2JqZWN0cywgYnV0
IHdlIGRvbid0IGtub3cgd2hpY2ggb2YgdGhlIExhemlseVJlaWZ5IG9uZXMgaGF2ZQorICAgICAg
ICAgICAgLy8gYWN0dWFsbHkgYmVlbiByZWlmaWVkLiBJbnN0ZWFkIG9mIGZvcmNpbmcgZWFnZXIg
cmVpZmljYXRpb24sCisgICAgICAgICAgICAvLyB3ZSdsbCBwZXNzaW1pemUgIndpdGgiIHJlc29s
dXRpb24sIGZvcmNpbmcgaXQgdG8gc3RhcnQgZnJvbSB0aGUKKyAgICAgICAgICAgIC8vIHRvcCBv
ZiB0aGUgc2NvcGUgY2hhaW4uCisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHlu
YW1pY1Jlc29sdmUoMCk7CisgICAgICAgIGNhc2UgRmluYWxseUJsb2NrOgorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGNhc2UgU2NvcGVCbG9jazoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKworICAgICAgICBKU09iamVjdCogY3VycmVudFNjb3BlID0gaXRlci0+Z2V0KCk7Cisg
ICAgICAgIEFTU0VSVChjdXJyZW50U2NvcGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAg
ICAgIEpTVmFyaWFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IHN0YXRpY19jYXN0
PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50U2NvcGUpOworICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5IGVudHJ5ID0gY3VycmVudFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9w
ZXJ0eS5pbXBsKCkpOworCisgICAgICAgIC8vIEJsb2NrLXNjb3BlZCBwcm9wZXJ0eS4KKyAgICAg
ICAgaWYgKCFlbnRyeS5pc051bGwoKSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwg
PSBtX3Njb3BlQ29udGV4dFN0YWNrW2ldLnNjb3BlQ29udGV4dC5iYXNlUmVnaXN0ZXIgKyBlbnRy
eS5nZXRJbmRleCgpOworICAgICAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkKKyAgICAg
ICAgICAgICAgICBmbGFncyB8PSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWc7CisgICAgICAg
ICAgICAvLyBIZXJlIGlkZWFsbHkgd2Ugd291bGQgaGF2ZSB0aGUgcGFyc2VyIGluZGljYXRlIHdo
ZXRoZXIgYSBiYXJyaWVyCisgICAgICAgICAgICAvLyBpcyBuZWNlc3Nhcnkgb3Igbm90LgorICAg
ICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2ZVJlc3VsdDo6QmFycmllckZsYWc7CisgICAgICAgICAg
ICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKGxvY2FsLCBmbGFncyk7Cisg
ICAgICAgIH0KKyAgICAgICAgKytkZXB0aDsKKyAgICAgICAgKytpdGVyOworICAgIH0KKwogICAg
IC8vIENoZWNrIGlmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgYWxsb2NhdGVkIGluIGEgcmVnaXN0
ZXIuCi0gICAgaWYgKG1fY29kZVR5cGUgIT0gR2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxv
Y2FscygpKSB7CisgICAgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAg
IFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBs
KCkpOwogICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAocHJv
cGVydHkgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICBjcmVh
dGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSBl
bnRyeS5pc1JlYWRPbmx5KCkgPyBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcgOiAwOwogICAg
ICAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2Fy
eSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOworICAgICAgICAgICAgaWYgKGVudHJ5
LmlzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBSZXNvbHZlUmVzdWx0OjpS
ZWFkT25seUZsYWc7CisgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cyAmJiBtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgIShyZXNvbHZlRmxhZ3MgJiBCeXRlY29kZUdlbmVyYXRvcjo6RG9udENyZWF0ZUFyZ3Vt
ZW50c0ZsYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2Fy
Z3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2Nv
ZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OkFyZ3VtZW50c0ZsYWc7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZl
KGxvY2FsLCBmbGFncyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBDYXNlcyB3aGVyZSB3
ZSBjYW5ub3Qgc3RhdGljYWxseSBvcHRpbWl6ZSB0aGUgbG9va3VwLgotICAgIGlmIChwcm9wZXJ0
eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzIHx8ICFjYW5PcHRpbWl6ZU5vbkxvY2Fscygp
KQotICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoMCk7CisgICAg
aWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMKKyAgICAgICAgfHwgbV9j
b2RlVHlwZSA9PSBFdmFsQ29kZQorICAgICAgICB8fCAobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNv
ZGUgJiYgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIW1fY29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSkpCisgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZShkZXB0
aCk7CiAKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IG1fc2NvcGVDaGFpbi0+YmVnaW4o
KTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gbV9zY29wZUNoYWluLT5lbmQoKTsKLSAg
ICBzaXplX3QgZGVwdGggPSAwOwotICAgIHVuc2lnbmVkIGZsYWdzID0gMDsKKyAgICBkZXB0aCAr
PSBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwogICAgIGZvciAoOyBpdGVyICE9
IGVuZDsgKytpdGVyLCArK2RlcHRoKSB7CiAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUg
PSBpdGVyLT5nZXQoKTsKLSAgICAgICAgaWYgKCFjdXJyZW50U2NvcGUtPmlzVmFyaWFibGVPYmpl
Y3QoKSkgewotICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2ZVJlc3VsdDo6RHluYW1pY0ZsYWc7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIGlmICghY3Vy
cmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gUmVzb2x2
ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoZGVwdGgpOworCiAgICAgICAgIEpTVmFyaWFibGVPYmpl
Y3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3Qq
PihjdXJyZW50U2NvcGUpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gY3VycmVu
dFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogCkBA
IC0xMTkyLDcgKzEyMjMsNiBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNv
bHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogICAgICAgICBpZiAoIWVudHJ5LmlzTnVs
bCgpKSB7CiAgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKQogICAgICAgICAgICAg
ICAgIGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZzsKLSAgICAgICAgICAgIGRl
cHRoICs9IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CiAgICAgICAgICAgICBp
ZiAoKytpdGVyID09IGVuZCkgewogICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFJlc29sdmVS
ZXN1bHQ6OkR5bmFtaWNGbGFnKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJl
c3VsdDo6ZHluYW1pY0luZGV4ZWRHbG9iYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGRlcHRo
LCBjdXJyZW50U2NvcGUsIGZsYWdzKTsKQEAgLTEyMTMsNyArMTI0Myw2IEBAIFJlc29sdmVSZXN1
bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkp
CiAKICAgICAvLyBDYW4ndCBsb2NhdGUgdGhlIHByb3BlcnR5IGJ1dCB3ZSdyZSBhYmxlIHRvIGF2
b2lkIGEgZmV3IGxvb2t1cHMuCiAgICAgSlNPYmplY3QqIHNjb3BlID0gaXRlci0+Z2V0KCk7Ci0g
ICAgZGVwdGggKz0gbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKICAgICBpZiAo
KytpdGVyID09IGVuZCkgewogICAgICAgICBpZiAoKGZsYWdzICYgUmVzb2x2ZVJlc3VsdDo6RHlu
YW1pY0ZsYWcpICYmIGRlcHRoKQogICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5
bmFtaWNHbG9iYWxSZXNvbHZlKGRlcHRoLCBzY29wZSk7CkBAIC0xNDI3LDEyICsxNDU2LDIyIEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlCiAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gMDsK
IAogICAgIHN3aXRjaCAocmVzb2x2ZVJlc3VsdC50eXBlKCkpIHsKKyAgICBjYXNlIFJlc29sdmVS
ZXN1bHQ6OkJhcnJpZXJSZWdpc3RlcjoKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5
QmFycmllclJlZ2lzdGVyOgorICAgICAgICBlbWl0T3Bjb2RlKG9wX2Fzc2VydF9sYXp5X3JlZ19p
bml0KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQubG9jYWwo
KS0+aW5kZXgoKSk7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgUmVzb2x2ZVJl
c3VsdDo6QXJndW1lbnRzOgorICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlBcmd1bWVu
dHM6CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWdpc3RlcjoKICAgICBjYXNlIFJlc29sdmVS
ZXN1bHQ6OlJlYWRPbmx5UmVnaXN0ZXI6CiAgICAgICAgIGlmIChkc3QgPT0gaWdub3JlZFJlc3Vs
dCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtb3ZlVG9EZXN0aW5h
dGlvbklmTmVlZGVkKGRzdCwgcmVzb2x2ZVJlc3VsdC5sb2NhbCgpKTsKIAorICAgIGNhc2UgUmVz
b2x2ZVJlc3VsdDo6QmFycmllckxleGljYWw6CisgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFk
T25seUJhcnJpZXJMZXhpY2FsOgorICAgICAgICAvLyBGSVhNRTogd2hhdCB0byBkbyBoZXJlPwog
ICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6TGV4aWNhbDoKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6
OlJlYWRPbmx5TGV4aWNhbDoKICAgICAgICAgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9nZXRfc2NvcGVkX3Zhcik7CkBAIC0xNDY3LDEwICsxNTA2LDIyIEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKFJlZ2lzdGVySUQqIGRzdCwgY29uc3Qg
UmVzb2x2ZVJlCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFN0YXRpY1Zh
cihjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVzdWx0LCBSZWdpc3RlcklEKiB2YWx1ZSkK
IHsKICAgICBzd2l0Y2ggKHJlc29sdmVSZXN1bHQudHlwZSgpKSB7CisgICAgY2FzZSBSZXNvbHZl
UmVzdWx0OjpSZWFkT25seUFyZ3VtZW50czoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5QmFycmllclJlZ2lzdGVyOgorICAg
ICAgICBlbWl0T3Bjb2RlKG9wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdCk7CisgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmxvY2FsKCktPmluZGV4KCkpOworICAg
ICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkJhcnJpZXJSZWdp
c3RlcjoKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkFyZ3VtZW50czoKICAgICBjYXNlIFJlc29s
dmVSZXN1bHQ6OlJlZ2lzdGVyOgogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlSZWdp
c3RlcjoKICAgICAgICAgcmV0dXJuIG1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQocmVzb2x2ZVJl
c3VsdC5sb2NhbCgpLCB2YWx1ZSk7CiAKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkJhcnJpZXJM
ZXhpY2FsOgorICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlCYXJyaWVyTGV4aWNhbDoK
KyAgICAgICAgLy8gRklYTUU6IHdoYXQgdG8gZG8gaGVyZT8KICAgICBjYXNlIFJlc29sdmVSZXN1
bHQ6OkxleGljYWw6CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUxleGljYWw6CiAg
ICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X3Njb3BlZF92YXIpOwpAQCAtMTcyNiw3ICsxNzc3LDcg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMYXp5TmV3RnVuY3Rpb24oUmVn
aXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHkKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXROZXdGdW5jdGlvbkludGVybmFsKFJlZ2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5k
ZXgsIGJvb2wgZG9OdWxsQ2hlY2spCiB7Ci0gICAgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5
KCk7CisgICAgcmVpZnlTY29wZXMoKTsKICAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoaW5kZXgpOwpAQCAtMTc0Nyw3ICsxNzk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCogcjAsIEZ1
bmNFeHAKICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IG4tPmJvZHkoKTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkV4cHIobWFrZUZ1bmN0aW9u
KG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKICAgICAKLSAgICBjcmVhdGVBY3RpdmF0aW9uSWZO
ZWNlc3NhcnkoKTsKKyAgICByZWlmeVNjb3BlcygpOwogICAgIGVtaXRPcGNvZGUob3BfbmV3X2Z1
bmNfZXhwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChpbmRleCk7CkBAIC0xNzU5LDM0ICsxODEwLDYgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgQ2FsbEEKICAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0LCBmdW5j
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KCkKLXsKLSAg
ICBpZiAobV9jb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIElmIHdlJ3JlIGluIHN0cmljdCBtb2RlIHdlIHRlYXIgb2ZmIHRoZSBhcmd1bWVu
dHMgb24gZnVuY3Rpb24KLSAgICAvLyBlbnRyeSwgc28gdGhlcmUncyBubyBuZWVkIHRvIGNoZWNr
IGlmIHdlIG5lZWQgdG8gY3JlYXRlIHRoZW0KLSAgICAvLyBub3cKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzU3RyaWN0TW9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbWl0T3Bjb2RlKG9w
X2NyZWF0ZV9hcmd1bWVudHMpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9j
ay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7Ci19Ci0KLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmNy
ZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1faGFzQ3JlYXRlZEFjdGl2
YXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5uZWVkc0Z1bGxT
Y29wZUNoYWluKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9h
Y3RpdmF0aW9uKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0
ZXItPmluZGV4KCkpOwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENh
bGxFdmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYg
Y2FsbEFyZ3VtZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQpCiB7CiAgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGxfZXZhbCwgZHN0
LCBmdW5jLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CkBA
IC0xOTY5LDkgKzE5OTIsMTAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvUHJpbWl0
aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hTY29wZShSZWdpc3RlcklEKiBzY29wZSkKIHsKKyAgICBy
ZWlmeVNjb3BlcygpOwogICAgIEFTU0VSVChzY29wZS0+aXNUZW1wb3JhcnkoKSk7CiAgICAgQ29u
dHJvbEZsb3dDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5pc0ZpbmFsbHlCbG9jayA9IGZh
bHNlOworICAgIGNvbnRleHQuYmxvY2tUeXBlID0gV2l0aEJsb2NrOwogICAgIG1fc2NvcGVDb250
ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwogICAgIG1fZHluYW1pY1Njb3BlRGVwdGgrKzsKIApA
QCAtMTk4MSw3ICsyMDA1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQ
dXNoU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUpCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UG9wU2NvcGUoKQogewogICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7Ci0g
ICAgQVNTRVJUKCFtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlCbG9jayk7Cisg
ICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmJsb2NrVHlwZSA9PSBXaXRoQmxv
Y2spOwogCiAgICAgZW1pdE9wY29kZShvcF9wb3Bfc2NvcGUpOwogCkBAIC0yMDA3LDcgKzIwMzEs
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVidWdIb29rKERlYnVnSG9va0lEIGRl
YnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbgogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVz
aEZpbmFsbHlDb250ZXh0KExhYmVsKiB0YXJnZXQsIFJlZ2lzdGVySUQqIHJldEFkZHJEc3QpCiB7
CiAgICAgQ29udHJvbEZsb3dDb250ZXh0IHNjb3BlOwotICAgIHNjb3BlLmlzRmluYWxseUJsb2Nr
ID0gdHJ1ZTsKKyAgICBzY29wZS5ibG9ja1R5cGUgPSBGaW5hbGx5QmxvY2s7CiAgICAgRmluYWxs
eUNvbnRleHQgY29udGV4dCA9IHsgdGFyZ2V0LCByZXRBZGRyRHN0IH07CiAgICAgc2NvcGUuZmlu
YWxseUNvbnRleHQgPSBjb250ZXh0OwogICAgIG1fc2NvcGVDb250ZXh0U3RhY2suYXBwZW5kKHNj
b3BlKTsKQEAgLTIwMTcsNyArMjA0MSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hG
aW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0LCBSZWdpc3RlcklEKiByZXRBZGRyRHN0CiB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCgpCiB7CiAgICAgQVNTRVJUKG1f
c2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKLSAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFj
ay5sYXN0KCkuaXNGaW5hbGx5QmxvY2spOworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNr
Lmxhc3QoKS5ibG9ja1R5cGUgPT0gRmluYWxseUJsb2NrKTsKICAgICBBU1NFUlQobV9maW5hbGx5
RGVwdGggPiAwKTsKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICBt
X2ZpbmFsbHlEZXB0aC0tOwpAQCAtMjEwMCw3MCArMjEyNCw2IEBAIExhYmVsU2NvcGUqIEJ5dGVj
b2RlR2VuZXJhdG9yOjpjb250aW51ZVRhcmdldChjb25zdCBJZGVudGlmaWVyJiBuYW1lKQogICAg
IHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dENvbXBsZXhKdW1wU2NvcGVzKExhYmVsKiB0YXJnZXQsIENvbnRyb2xGbG93Q29udGV4dCogdG9w
U2NvcGUsIENvbnRyb2xGbG93Q29udGV4dCogYm90dG9tU2NvcGUpCi17Ci0gICAgd2hpbGUgKHRv
cFNjb3BlID4gYm90dG9tU2NvcGUpIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgY291bnQgdGhlIG51
bWJlciBvZiBkeW5hbWljIHNjb3BlcyB3ZSBuZWVkIHRvIHJlbW92ZSB0byBnZXQKLSAgICAgICAg
Ly8gdG8gYSBmaW5hbGx5IGJsb2NrLgotICAgICAgICBpbnQgbk5vcm1hbFNjb3BlcyA9IDA7Ci0g
ICAgICAgIHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3BlKSB7Ci0gICAgICAgICAgICBpZiAo
dG9wU2NvcGUtPmlzRmluYWxseUJsb2NrKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgKytuTm9ybWFsU2NvcGVzOwotICAgICAgICAgICAgLS10b3BTY29wZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChuTm9ybWFsU2NvcGVzKSB7Ci0gICAgICAgICAgICBzaXplX3QgYmVn
aW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0KLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
cmVtb3ZlIGEgbnVtYmVyIG9mIGR5bmFtaWMgc2NvcGVzIHRvIGdldCB0byB0aGUgbmV4dAotICAg
ICAgICAgICAgLy8gZmluYWxseSBibG9jawotICAgICAgICAgICAgZW1pdE9wY29kZShvcF9qbXBf
c2NvcGVzKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChuTm9ybWFsU2NvcGVz
KTsKLQotICAgICAgICAgICAgLy8gSWYgdG9wU2NvcGUgPT0gYm90dG9tU2NvcGUgdGhlbiB0aGVy
ZSBpc24ndCBhY3R1YWxseSBhIGZpbmFsbHkgYmxvY2sKLSAgICAgICAgICAgIC8vIGxlZnQgdG8g
ZW1pdCwgc28gbWFrZSB0aGUgam1wX3Njb3BlcyBqdW1wIGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQg
bGFiZWwKLSAgICAgICAgICAgIGlmICh0b3BTY29wZSA9PSBib3R0b21TY29wZSkgewotICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3Ry
dWN0aW9ucygpLnNpemUoKSkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSBqdXN0IHVzZSBqbXBfc2Nv
cGVzIHRvIHBvcCBhIGdyb3VwIG9mIHNjb3BlcyBhbmQgZ28KLSAgICAgICAgICAgIC8vIHRvIHRo
ZSBuZXh0IGluc3RydWN0aW9uCi0gICAgICAgICAgICBSZWZQdHI8TGFiZWw+IG5leHRJbnNuID0g
bmV3TGFiZWwoKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChuZXh0SW5zbi0+
YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAgICAgICAgICBlbWl0TGFi
ZWwobmV4dEluc24uZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKHRvcFNjb3Bl
ID4gYm90dG9tU2NvcGUgJiYgdG9wU2NvcGUtPmlzRmluYWxseUJsb2NrKSB7Ci0gICAgICAgICAg
ICBlbWl0SnVtcFN1YnJvdXRpbmUodG9wU2NvcGUtPmZpbmFsbHlDb250ZXh0LnJldEFkZHJEc3Qs
IHRvcFNjb3BlLT5maW5hbGx5Q29udGV4dC5maW5hbGx5QWRkcik7Ci0gICAgICAgICAgICAtLXRv
cFNjb3BlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlbWl0SnVtcCh0YXJnZXQpOwot
fQotCi1QYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBTY29wZXMo
TGFiZWwqIHRhcmdldCwgaW50IHRhcmdldFNjb3BlRGVwdGgpCi17Ci0gICAgQVNTRVJUKHNjb3Bl
RGVwdGgoKSAtIHRhcmdldFNjb3BlRGVwdGggPj0gMCk7Ci0gICAgQVNTRVJUKHRhcmdldC0+aXNG
b3J3YXJkKCkpOwotCi0gICAgc2l6ZV90IHNjb3BlRGVsdGEgPSBzY29wZURlcHRoKCkgLSB0YXJn
ZXRTY29wZURlcHRoOwotICAgIEFTU0VSVChzY29wZURlbHRhIDw9IG1fc2NvcGVDb250ZXh0U3Rh
Y2suc2l6ZSgpKTsKLSAgICBpZiAoIXNjb3BlRGVsdGEpCi0gICAgICAgIHJldHVybiBlbWl0SnVt
cCh0YXJnZXQpOwotCi0gICAgaWYgKG1fZmluYWxseURlcHRoKQotICAgICAgICByZXR1cm4gZW1p
dENvbXBsZXhKdW1wU2NvcGVzKHRhcmdldCwgJm1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLCAm
bV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkgLSBzY29wZURlbHRhKTsKLQotICAgIHNpemVfdCBi
ZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKLQotICAgIGVtaXRPcGNvZGUob3Bfam1wX3Nj
b3Blcyk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlRGVsdGEpOwotICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUo
KSkpOwotICAgIHJldHVybiB0YXJnZXQ7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0UHJvcGVydHlOYW1lcyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsIFJlZ2lzdGVySUQqIGksIFJlZ2lzdGVySUQqIHNpemUsIExhYmVsKiBicmVha1RhcmdldCkK
IHsKICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CkBAIC0yMTk2LDEy
ICsyMTU2LDEyIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2F0Y2goUmVn
aXN0ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBzdGFyCiAgICAgbV91c2VzRXhjZXB0aW9u
cyA9IHRydWU7CiAjaWYgRU5BQkxFKEpJVCkKICNpZiBFTkFCTEUoTExJTlQpCi0gICAgSGFuZGxl
ckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCwg
Q29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfY2F0Y2gpKSkgfTsKKyAg
ICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+YmluZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDAp
LCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Jsb2NrU2Nv
cGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGgsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oJmxsaW50X29wX2NhdGNoKSkpIH07CiAjZWxzZQotICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7
IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNpemUo
KSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGgsIENvZGVMb2NhdGlvbkxh
YmVsKCkgfTsKKyAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+YmluZCgwLCAwKSwgZW5k
LT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1pY1Njb3BlRGVwdGgg
KyBtX2Jsb2NrU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGgsIENvZGVMb2NhdGlvbkxhYmVs
KCkgfTsKICNlbmRpZgogI2Vsc2UKLSAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+Ymlu
ZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1p
Y1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoIH07CisgICAgSGFuZGxlckluZm8gaW5mbyA9
IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9ibG9ja1Njb3BlRGVwdGggKyBtX2Jhc2VTY29w
ZURlcHRoIH07CiAjZW5kaWYKIAogICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVy
KGluZm8pOwpAQCAtMjIzMywxNyArMjE5MywyMDIgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFN1YnJvdXRpbmVSZXR1cm4oUmVnaXN0ZXJJRCogcmV0QWRkclNyYykKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQocmV0QWRkclNyYy0+aW5kZXgoKSk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpCitzdHJ1Y3QgUmVpZmljYXRpb25Xb3Jr
bGlzdEl0ZW0geworICAgIFJlZ2lzdGVySUQqIHJlaWZpZWRTY29wZVJlZ2lzdGVyOworICAgIEpT
T2JqZWN0KiBzY29wZVRlbXBsYXRlOworICAgIFJlZ2lzdGVySUQqIGJhc2VSZWdpc3RlcjsKK307
CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlaWZ5U2NvcGVzKCkKK3sKKyAgICBWZWN0b3I8
UmVpZmljYXRpb25Xb3JrbGlzdEl0ZW0+IHdvcmtsaXN0OworICAgIFNjb3BlQ2hhaW5JdGVyYXRv
ciBpdGVyID0gbV9zY29wZUNoYWluLT5iZWdpbigpOworICAgIGludCBpOworCisgICAgLy8gRmly
c3QsIHdhbGsgdGhlIHNjb3BlIGNoYWluIHRvIHNlZSB3aGF0IG1pZ2h0IG5lZWQgcmVpZmljYXRp
b24uCisgICAgZm9yIChpID0gc2NvcGVEZXB0aCgpLTE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
IHN3aXRjaCAobV9zY29wZUNvbnRleHRTdGFja1tpXS5ibG9ja1R5cGUpIHsKKyAgICAgICAgY2Fz
ZSBXaXRoQmxvY2s6CisgICAgICAgICAgICAvLyBQdXNoaW5nIGEgYHdpdGgnIGJsb2NrIGZvcmNl
cyBvdXRlciBzY29wZXMgdG8gYmUgcmVpZmllZCwgc28gd2UKKyAgICAgICAgICAgIC8vIGRvbid0
IG5lZWQgdG8gZG8gc28gaGVyZS4KKyAgICAgICAgICAgIGdvdG8gcmVpZnk7CisgICAgICAgIGNh
c2UgRmluYWxseUJsb2NrOgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgU2Nv
cGVCbG9jazoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICBKU09iamVjdCog
Y3VycmVudFNjb3BlID0gaXRlci0+Z2V0KCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50U2NvcGUt
PmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgICAgICsraXRlcjsKKworICAgICAgICBzd2l0
Y2ggKG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0LnJlaWZ5TW9kZSkgeworICAg
ICAgICBjYXNlIFNjb3BlQ29udGV4dDo6RWFnZXJseVJlaWZ5OgorICAgICAgICAgICAgLy8gTGlr
ZSBhIGB3aXRoJyBibG9jaywgZW50ZXJpbmcgYW4gRWFnZXJseVJlaWZ5IGJsb2NrIGZvcmNlcwor
ICAgICAgICAgICAgLy8gcmVpZmljYXRpb24sIHNvIHdlIG5lZWQgbG9vayBubyBmYXJ0aGVyLgor
ICAgICAgICAgICAgZ290byByZWlmeTsKKyAgICAgICAgY2FzZSBTY29wZUNvbnRleHQ6Okxhemls
eVJlaWZ5OiB7CisgICAgICAgICAgICBSZWlmaWNhdGlvbldvcmtsaXN0SXRlbSBpdGVtOworICAg
ICAgICAgICAgaXRlbS5yZWlmaWVkU2NvcGVSZWdpc3RlciA9IG1fc2NvcGVDb250ZXh0U3RhY2tb
aV0uc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3RlcjsKKyAgICAgICAgICAgIGl0ZW0uc2NvcGVUZW1w
bGF0ZSA9IGN1cnJlbnRTY29wZTsKKyAgICAgICAgICAgIGl0ZW0uYmFzZVJlZ2lzdGVyID0gbV9z
Y29wZUNvbnRleHRTdGFja1tpXS5zY29wZUNvbnRleHQuYmFzZVJlZ2lzdGVyOworICAgICAgICAg
ICAgd29ya2xpc3QuYXBwZW5kKGl0ZW0pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0gY2FzZSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCityZWlmeToKKyAgICAvLyBJZiB3
ZSB0cmF2ZXJzZWQgdGhyb3VnaCB0aGUgd2hvbGUgYmxvY2sgc2NvcGUgY2hhaW4sIHBlcmhhcHMg
d2UgbmVlZCB0bworICAgIC8vIHJlaWZ5IHRoZSBhY3RpdmF0aW9uIGZvciB0aGUgZnVuY3Rpb24u
CisgICAgaWYgKGkgPCAwICYmICFtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uICYmIG1fY29kZUJsb2Nr
LT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpIHsKKyAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVf
YWN0aXZhdGlvbik7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FjdGl2YXRpb25S
ZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQorCisgICAgd2hpbGUgKHdvcmtsaXN0LnNpemUoKSkg
eworICAgICAgICBSZWlmaWNhdGlvbldvcmtsaXN0SXRlbSBpdGVtID0gd29ya2xpc3QubGFzdCgp
OworICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgIFJlZ2lzdGVySUQqIHRl
bXBsID0gZW1pdExvYWQoMCwgSlNWYWx1ZShpdGVtLnNjb3BlVGVtcGxhdGUpKTsKKyAgICAgICAg
ZW1pdE9wY29kZShvcF9yZWlmeV9zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChpdGVtLnJlaWZpZWRTY29wZVJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHRlbXBsLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGl0ZW0uYmFzZVJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8
TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBp
bnQgdGFyZ2V0U2NvcGVEZXB0aCkKIHsKKyAgICBBU1NFUlQoc2NvcGVEZXB0aCgpIC0gdGFyZ2V0
U2NvcGVEZXB0aCA+PSAwKTsKKyAgICBBU1NFUlQodGFyZ2V0LT5pc0ZvcndhcmQoKSk7CisKKyAg
ICBzaXplX3Qgc2NvcGVEZWx0YSA9IHNjb3BlRGVwdGgoKSAtIHRhcmdldFNjb3BlRGVwdGg7Cisg
ICAgQVNTRVJUKHNjb3BlRGVsdGEgPD0gbV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOworCisg
ICAgd2hpbGUgKHNjb3BlRGVsdGEtLSkgeworICAgICAgICBDb250cm9sRmxvd0NvbnRleHQqIGNv
bnRleHQgPSAmbV9zY29wZUNvbnRleHRTdGFja1t0YXJnZXRTY29wZURlcHRoICsgc2NvcGVEZWx0
YV07CisgICAgICAgIHN3aXRjaCAoY29udGV4dC0+YmxvY2tUeXBlKSB7CisgICAgICAgIGNhc2Ug
V2l0aEJsb2NrOgorICAgICAgICAgICAgZW1pdE9wY29kZShvcF9wb3Bfc2NvcGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRmluYWxseUJsb2NrOgorICAgICAgICAgICAgZW1p
dEp1bXBTdWJyb3V0aW5lKGNvbnRleHQtPmZpbmFsbHlDb250ZXh0LnJldEFkZHJEc3QsIGNvbnRl
eHQtPmZpbmFsbHlDb250ZXh0LmZpbmFsbHlBZGRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFNjb3BlQmxvY2s6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnRleHQtPnNjb3Bl
Q29udGV4dC5yZWlmeU1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU2NvcGVDb250ZXh0OjpFYWdl
cmx5UmVpZnk6CisgICAgICAgICAgICBjYXNlIFNjb3BlQ29udGV4dDo6TGF6aWx5UmVpZnk6Cisg
ICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF90ZWFyX29mZl9zY29wZSk7CisgICAgICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQtPnNjb3BlQ29udGV4dC5sYXN0UmVn
aXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgICAgICBjb250ZXh0LS07CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRKdW1w
KHRhcmdldCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hCbG9ja1Njb3BlKEpT
U3RhdGljU2NvcGVPYmplY3QgKnNjb3BlVGVtcGxhdGUsIFNjb3BlQ29udGV4dDo6UmVpZnlNb2Rl
IHJlaWZ5TW9kZSkKK3sKKyAgICAvLyBSZXNlcnZlIGEgYmxvY2sgb2YgY29udGlndW91cyByZWdp
c3RlcnMgZm9yIHRoZSB2YXJpYWJsZXMuIFdlIGhvbGQgYQorICAgIC8vIHJlZmVyZW5jZSBvbiB0
aGUgbGFzdCByZWdpc3RlciwgcHJldmVudGluZyByZWNsYW1hdGlvbiBvZiBhbnkgcHJldmlvdXMK
KyAgICAvLyByZWdpc3Rlci4KKyAgICAvLworICAgIC8vIEluIHRoZSBmdXR1cmUgd2UnbGwgc2h1
ZmZsZSBhcm91bmQgdGhlIHN5bWJvbCB0YWJsZSB0byBwdXQgdGhlIGNhcHR1cmVkCisgICAgLy8g
dmFyaWFibGVzIGZpcnN0LCBhbmQgcG9wQmxvY2tTY29wZSB3aWxsIHJlbW92ZSBzeW1ib2wgdGFi
bGUgZW50cmllcyBmb3IKKyAgICAvLyB1bmNhcHR1cmVkIHZhcmlhYmxlcy4KKyAgICBSZWdpc3Rl
cklEKiBiYXNlID0gMDsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGFzdCA9IDA7CisgICAgc2l6
ZV90IG4gPSBzY29wZVRlbXBsYXRlLT5zeW1ib2xUYWJsZSgpLnNpemUoKTsKKyAgICBBU1NFUlQo
bik7CisgICAgd2hpbGUgKG4tLSkgeworICAgICAgICBSZWdpc3RlcklEKiBuZXh0ID0gbmV3UmVn
aXN0ZXIoKTsKKyAgICAgICAgQVNTRVJUKCFsYXN0IHx8IChuZXh0ID09IGxhc3QuZ2V0KCkgKyAx
KSk7CisKKyAgICAgICAgLy8gU2V0IHRoZSByZWdpc3RlcidzIHZhbHVlIHRvIEpTVmFsdWUoKSwg
dGhlIGVtcHR5IHZhbHVlLiAgUGVyaGFwcyB3ZQorICAgICAgICAvLyBzaG91bGQgZG8gdGhpcyBv
bmx5IGZvciBCYXJyaWVyUmVnaXN0ZXJzLgorICAgICAgICBlbWl0T3Bjb2RlKG9wX2luaXRfbGF6
eV9yZWcpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobmV4dC0+aW5kZXgoKSk7CisK
KyAgICAgICAgaWYgKCFsYXN0KQorICAgICAgICAgICAgYmFzZSA9IG5leHQ7CisgICAgICAgIGxh
c3QgPSBuZXh0OworICAgIH0KKyAgICBBU1NFUlQobGFzdCk7CisgICAgCisgICAgLy8gTm93IGFs
bG9jYXRlIGEgcmVnaXN0ZXIgZm9yIHRoZSBibG9jayBzY29wZSBvYmplY3QgaXRzZWxmLCBpZiBu
ZWNlc3NhcnkuCisgICAgaWYgKHJlaWZ5TW9kZSAhPSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnkp
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbmV4dCA9IG5ld1JlZ2lzdGVyKCk7CisgICAgICAgIEFT
U0VSVChuZXh0ID09IGxhc3QuZ2V0KCkgKyAxKTsKKyAgICAgICAgbGFzdCA9IG5leHQ7CisgICAg
fQorCisgICAgLy8gRmluYWxseSB1cGRhdGUgdGhlIGNvbnRyb2wgZmxvdyBzdGFjaywgcHVzaCB0
aGUgdGVtcGxhdGUgb250byB0aGUgc2NvcGUKKyAgICAvLyBjaGFpbiwgYW5kIHJlaWZ5IHRoZSBz
Y29wZSBpZiBuZWVkZWQuCiAgICAgQ29udHJvbEZsb3dDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29u
dGV4dC5pc0ZpbmFsbHlCbG9jayA9IGZhbHNlOworICAgIGNvbnRleHQuYmxvY2tUeXBlID0gU2Nv
cGVCbG9jazsKKyAgICBjb250ZXh0LnNjb3BlQ29udGV4dC5yZWlmeU1vZGUgPSByZWlmeU1vZGU7
CisgICAgY29udGV4dC5zY29wZUNvbnRleHQuYmFzZVJlZ2lzdGVyID0gYmFzZTsKKyAgICBjb250
ZXh0LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXIgPSBsYXN0LnJlbGVhc2UoKS5sZWFrUmVmKCk7
CisKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKLSAgICBtX2R5bmFt
aWNTY29wZURlcHRoKys7CisgICAgbV9zY29wZUNoYWluLnNldCgqbV9zY29wZUNoYWluLT5nbG9i
YWxEYXRhLCBtX3Njb3BlQ2hhaW4tPnB1c2goc2NvcGVUZW1wbGF0ZSkpOworICAgIG1fYmxvY2tT
Y29wZURlcHRoKys7CisKKyAgICAvLyBXZSByZWlmeSBpdCBsYXppbHkgaWYgcG9zc2libGUuCisg
ICAgc3dpdGNoIChyZWlmeU1vZGUpIHsKKyAgICBjYXNlIFNjb3BlQ29udGV4dDo6RWFnZXJseVJl
aWZ5OgorICAgICAgICAvLyBSZWlmeSB0aGUgc2NvcGUgbm93LgorICAgICAgICByZWlmeVNjb3Bl
cygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjb3BlQ29udGV4dDo6TGF6aWx5UmVpZnk6
CisgICAgICAgIC8vIE1hcmsgdGhlIHNjb3BlIHJlZ2lzdGVyIGFzIHVuc2V0LCBzbyBsYXRlciBj
b2RlIGNhbiBkZXRlY3QgaWYgaXQgd2FzCisgICAgICAgIC8vIG5ldmVyIHJlaWZpZWQuCisgICAg
ICAgIGVtaXRPcGNvZGUob3BfaW5pdF9sYXp5X3JlZyk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChjb250ZXh0LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXItPmluZGV4KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNjb3BlQ29udGV4dDo6TmV2ZXJSZWlmeToKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KIAotICAgIGVtaXRPcGNvZGUob3BfcHVzaF9uZXdfc2NvcGUp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BCbG9j
a1Njb3BlKCkKK3sKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOworICAg
IENvbnRyb2xGbG93Q29udGV4dCBjb250ZXh0ID0gbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCk7
CisgICAgQVNTRVJUKGNvbnRleHQuYmxvY2tUeXBlID09IFNjb3BlQmxvY2spOworCisgICAgQVNT
RVJUKG1fc2NvcGVDaGFpbi0+YmVnaW4oKS0+Z2V0KCktPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7
CisKKyAgICBpZiAoY29udGV4dC5zY29wZUNvbnRleHQucmVpZnlNb2RlICE9IFNjb3BlQ29udGV4
dDo6TmV2ZXJSZWlmeSkgeworICAgICAgICBlbWl0T3Bjb2RlKG9wX3RlYXJfb2ZmX3Njb3BlKTsK
KyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuc2NvcGVDb250ZXh0Lmxhc3RS
ZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQorCisgICAgY29udGV4dC5zY29wZUNvbnRleHQubGFz
dFJlZ2lzdGVyLT5kZXJlZigpOworICAgIGNvbnRleHQuc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rl
ciA9IDA7CisgICAgCisgICAgbV9ibG9ja1Njb3BlRGVwdGgtLTsKKyAgICBtX3Njb3BlQ2hhaW4u
c2V0KCptX3Njb3BlQ2hhaW4tPmdsb2JhbERhdGEsIG1fc2NvcGVDaGFpbi0+cG9wKCkpOworICAg
IG1fc2NvcGVDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpiZWdpblN3aXRjaChSZWdpc3RlcklEKiBzY3J1dGluZWVSZWdpc3RlciwgU3dpdGNo
SW5mbzo6U3dpdGNoVHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU3ZmUyMzZlNWJhZjBmMGZi
N2U5MmU0Njk4YzU2ZTg0Y2NlZjg3YzUuLjU3ODA0ZjhmZDlhZGJmZDc4YTRjYzRhNzlkOTUyYmYy
MDc0ZjAwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgSWRlbnRpZmllcjsKICAgICBjbGFzcyBMYWJlbDsKICAgICBjbGFzcyBTY29w
ZUNoYWluTm9kZTsKKyAgICBjbGFzcyBKU1N0YXRpY1Njb3BlT2JqZWN0OwogCiAgICAgY2xhc3Mg
Q2FsbEFyZ3VtZW50cyB7CiAgICAgcHVibGljOgpAQCAtNzUsOSArNzYsMjEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIHJldEFkZHJEc3Q7CiAgICAgfTsKIAorICAgIHN0
cnVjdCBTY29wZUNvbnRleHQgeworICAgICAgICBlbnVtIFJlaWZ5TW9kZSB7IEVhZ2VybHlSZWlm
eSwgTGF6aWx5UmVpZnksIE5ldmVyUmVpZnkgfTsKKyAgICAgICAgUmVpZnlNb2RlIHJlaWZ5TW9k
ZTsKKyAgICAgICAgUmVnaXN0ZXJJRCogYmFzZVJlZ2lzdGVyOworICAgICAgICBSZWdpc3RlcklE
KiBsYXN0UmVnaXN0ZXI7CisgICAgfTsKKworICAgIGVudW0gQmxvY2tUeXBlIHsgV2l0aEJsb2Nr
LCBGaW5hbGx5QmxvY2ssIFNjb3BlQmxvY2sgfTsKKwogICAgIHN0cnVjdCBDb250cm9sRmxvd0Nv
bnRleHQgewotICAgICAgICBib29sIGlzRmluYWxseUJsb2NrOwotICAgICAgICBGaW5hbGx5Q29u
dGV4dCBmaW5hbGx5Q29udGV4dDsKKyAgICAgICAgZW51bSBCbG9ja1R5cGUgYmxvY2tUeXBlOwor
ICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4
dDsKKyAgICAgICAgICAgIFNjb3BlQ29udGV4dCBzY29wZUNvbnRleHQ7CisgICAgICAgIH07CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBGb3JJbkNvbnRleHQgewpAQCAtMTA2LDE4ICsxMTksMzUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAvLyBUaGUgcmVzb2x2ZWQgYmluZGluZyBpcyBp
bW11dGFibGUuCiAgICAgICAgICAgICBSZWFkT25seUZsYWcgPSAweDIwLAogICAgICAgICAgICAg
Ly8gVGhlIGJhc2Ugb2JqZWN0IGlzIHRoZSBnbG9iYWwgb2JqZWN0LgotICAgICAgICAgICAgR2xv
YmFsRmxhZyA9IDB4NDAKKyAgICAgICAgICAgIEdsb2JhbEZsYWcgPSAweDQwLAorICAgICAgICAg
ICAgLy8gVGhlIGlkZW50aWZpZXIgaXMgYWN0dWFsbHkgdGhlIGFyZ3VtZW50cyBvYmplY3QuCisg
ICAgICAgICAgICBBcmd1bWVudHNGbGFnID0gMHg4MCwKKyAgICAgICAgICAgIC8vIFJlYWRzIG9m
IHRoaXMgdmFyaWFibGUgbmVlZCBkeW5hbWljIGNoZWNrcyB0byBlbnN1cmUgaXQgaXMgc2V0Lgor
ICAgICAgICAgICAgLy8gSWYgdGhpcyB2YXJpYWJsZSBpcyByZWFkLW9ubHksIHdyaXRlcyB0byB0
aGlzIHZhcmlhYmxlIG5lZWQKKyAgICAgICAgICAgIC8vIGR5bmFtaWMgY2hlY2tzIHRvIGVuc3Vy
ZSB0aGUgdmFyaWFibGUgaXMgdW5zZXIuCisgICAgICAgICAgICBCYXJyaWVyRmxhZyA9IDB4MTAw
CiAgICAgICAgIH07CiAgICAgICAgIGVudW0gVHlwZSB7CiAgICAgICAgICAgICAvLyBUaGUgcHJv
cGVydHkgaXMgbG9jYWwsIGFuZCBzdG9yZWQgaW4gYSByZWdpc3Rlci4KICAgICAgICAgICAgIFJl
Z2lzdGVyID0gUmVnaXN0ZXJGbGFnIHwgU3RhdGljRmxhZywKICAgICAgICAgICAgIC8vIEEgcmVh
ZC1vbmx5IGxvY2FsLCBjcmVhdGVkIGJ5ICJjb25zdCIuCiAgICAgICAgICAgICBSZWFkT25seVJl
Z2lzdGVyID0gUmVnaXN0ZXJGbGFnIHwgUmVhZE9ubHlGbGFnIHwgU3RhdGljRmxhZywKKyAgICAg
ICAgICAgIC8vIFJlYWRzIG9mIHRoaXMgcmVnaXN0ZXIgbmVlZCBkeW5hbWljIGNoZWNrcy4KKyAg
ICAgICAgICAgIEJhcnJpZXJSZWdpc3RlciA9IFJlZ2lzdGVyRmxhZyB8IFN0YXRpY0ZsYWcgfCBC
YXJyaWVyRmxhZywKKyAgICAgICAgICAgIC8vIFJlYWRzIG9mIGFuZCB3cml0ZXMgdG8gdGhpcyBy
ZWdpc3RlciBuZWVkIGR5bmFtaWMgY2hlY2tzLgorICAgICAgICAgICAgUmVhZE9ubHlCYXJyaWVy
UmVnaXN0ZXIgPSBSZWdpc3RlckZsYWcgfCBSZWFkT25seUZsYWcgfCBTdGF0aWNGbGFnIHwgQmFy
cmllckZsYWcsCisgICAgICAgICAgICAvLyBUaGUgImFyZ3VtZW50cyIgb2JqZWN0LgorICAgICAg
ICAgICAgQXJndW1lbnRzID0gQXJndW1lbnRzRmxhZyB8IFJlZ2lzdGVyRmxhZyB8IFN0YXRpY0Zs
YWcsCisgICAgICAgICAgICBSZWFkT25seUFyZ3VtZW50cyA9IEFyZ3VtZW50c0ZsYWcgfCBSZWdp
c3RlckZsYWcgfCBSZWFkT25seUZsYWcgfCBTdGF0aWNGbGFnLAogICAgICAgICAgICAgLy8gVGhl
IHByb3BlcnR5IGlzIHN0YXRpY2FsbHkgc2NvcGVkIGZyZWUgdmFyaWFibGUuIEl0cyBjb29yZGlu
YXRlcwogICAgICAgICAgICAgLy8gYXJlIGluICJpbmRleCIgYW5kICJkZXB0aCIuCiAgICAgICAg
ICAgICBMZXhpY2FsID0gSW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnIHwgU3RhdGljRmxhZywKICAg
ICAgICAgICAgIC8vIEEgcmVhZC1vbmx5IExleGljYWwsIGNyZWF0ZWQgYnkgImNvbnN0Ii4KICAg
ICAgICAgICAgIFJlYWRPbmx5TGV4aWNhbCA9IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFJl
YWRPbmx5RmxhZyB8IFN0YXRpY0ZsYWcsCisgICAgICAgICAgICAvLyBSZWFkcyBvZiB0aGlzIGxl
eGljYWwgbmVlZCBkeW5hbWljIGNoZWNrcy4KKyAgICAgICAgICAgIEJhcnJpZXJMZXhpY2FsID0g
SW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnIHwgU3RhdGljRmxhZyB8IEJhcnJpZXJGbGFnLAorICAg
ICAgICAgICAgLy8gUmVhZCBvZiBhbmQgd3JpdGVzIHRvIHRoaXMgbGV4aWNhbCBuZWVkIGR5bmFt
aWMgY2hlY2tzLgorICAgICAgICAgICAgUmVhZE9ubHlCYXJyaWVyTGV4aWNhbCA9IEluZGV4ZWRG
bGFnIHwgU2NvcGVkRmxhZyB8IFJlYWRPbmx5RmxhZyB8IFN0YXRpY0ZsYWcgfCBCYXJyaWVyRmxh
ZywKICAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSB3YXMgbm90IGJvdW5kIGxleGljYWxseSwg
c28gYXQgcnVudGltZSB3ZSBzaG91bGQKICAgICAgICAgICAgIC8vIGxvb2sgZGlyZWN0bHkgaW4g
dGhlIGdsb2JhbCBvYmplY3QuCiAgICAgICAgICAgICBHbG9iYWwgPSBHbG9iYWxGbGFnLApAQCAt
MTQzLDYgKzE3MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIER5bmFtaWNMZXhp
Y2FsID0gRHluYW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IFNjb3BlZEZsYWcsCiAgICAgICAgICAg
ICAvLyBMaWtlIFJlYWRPbmx5TGV4aWNhbCwgYnV0IHdpdGggaW50ZXJ2ZW5pbmcgbm9uLXN0cmlj
dCBgZXZhbCcuCiAgICAgICAgICAgICBEeW5hbWljUmVhZE9ubHlMZXhpY2FsID0gRHluYW1pY0Zs
YWcgfCBJbmRleGVkRmxhZyB8IFNjb3BlZEZsYWcgfCBSZWFkT25seUZsYWcsCisgICAgICAgICAg
ICAvLyBMaWtlIEJhcnJpZXJMZXhpY2FsLCBidXQgd2l0aCBpbnRlcnZlbmluZyBub24tc3RyaWN0
IGBldmFsJy4KKyAgICAgICAgICAgIER5bmFtaWNCYXJyaWVyTGV4aWNhbCA9IER5bmFtaWNGbGFn
IHwgSW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnIHwgQmFycmllckZsYWcsCisgICAgICAgICAgICAv
LyBMaWtlIFJlYWRPbmx5QmFycmllckxleGljYWwsIGJ1dCB3aXRoIGludGVydmVuaW5nIG5vbi1z
dHJpY3QgYGV2YWwnLgorICAgICAgICAgICAgRHluYW1pY1JlYWRPbmx5QmFycmllckxleGljYWwg
PSBEeW5hbWljRmxhZyB8IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFJlYWRPbmx5RmxhZyB8
IEJhcnJpZXJGbGFnLAogICAgICAgICAgICAgLy8gTGlrZSBHbG9iYWwsIGJ1dCB3aXRoIGludGVy
dmVuaW5nIG5vbi1zdHJpY3QgYGV2YWwnLiBBcyB3aXRoIAogICAgICAgICAgICAgLy8gRHluYW1p
YywgU2NvcGVGbGFnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0ICJkZXB0aCIgZG9lcyBpbmRlZWQK
ICAgICAgICAgICAgIC8vIHN0b3JlIGEgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGJlZm9yZSBk
b2luZyB0aGUgZHluYW1pYyBjaGVja3MuCkBAIC0yMDAsNiArMjM0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNTY29wZWQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBTY29w
ZWRGbGFnOyB9CiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIChtX3R5
cGUgJiBSZWFkT25seUZsYWcpICYmICFpc0R5bmFtaWMoKTsgfQogICAgICAgICBib29sIGlzR2xv
YmFsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgR2xvYmFsRmxhZzsgfQorICAgICAgICBib29s
IGlzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgQXJndW1lbnRzRmxhZzsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVzb2x2ZVJlc3VsdCh1bnNpZ25lZCB0eXBlLCBSZWdp
c3RlcklEKiBsb2NhbCwgaW50IGluZGV4LCBzaXplX3QgZGVwdGgsIEpTT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkBAIC0yNTEsMTEgKzI4NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
b2lkIHNldElzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihib29sIGlzTnVtZXJpY0NvbXBhcmVGdW5j
dGlvbik7CiAKLSAgICAgICAgYm9vbCB3aWxsUmVzb2x2ZVRvQXJndW1lbnRzKGNvbnN0IElkZW50
aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogdW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVu
dHMoKTsKKyAgICAgICAgZW51bSBSZXNvbHZlRmxhZ3MgeworICAgICAgICAgICAgRG9udENyZWF0
ZUFyZ3VtZW50c0ZsYWcgPSAxIDw8IDAKKyAgICAgICAgfTsKIAogICAgICAgICAvLyBSZXNvbHZl
IGFuIGlkZW50aWZpZXIsIGdpdmVuIHRoZSBjdXJyZW50IGNvbXBpbGUtdGltZSBzY29wZSBjaGFp
bi4KLSAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlKGNvbnN0IElkZW50aWZpZXImKTsKKyAg
ICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlKGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCBy
ZXNvbHZlRmxhZ3MgPSAwKTsKICAgICAgICAgLy8gQmVoYXZlcyBhcyByZXNvbHZlIGRvZXMsIGJ1
dCBpZ25vcmVzIGR5bmFtaWMgc2NvcGUgYXMKICAgICAgICAgLy8gZHluYW1pYyBzY29wZSBzaG91
bGQgbm90IGludGVyZmVyZSB3aXRoIGNvbnN0IGluaXRpYWxpc2F0aW9uCiAgICAgICAgIFJlc29s
dmVSZXN1bHQgcmVzb2x2ZUNvbnN0RGVjbChjb25zdCBJZGVudGlmaWVyJik7CkBAIC00OTQsMTQg
KzUzMCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRUaHJvd1JlZmVy
ZW5jZUVycm9yKGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1
c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBS
ZWdpc3RlcklEKiB2YWx1ZSk7CisgICAgICAgIHZvaWQgcmVpZnlTY29wZXMoKTsKKyAgICAgICAg
dm9pZCBwdXNoQmxvY2tTY29wZShKU1N0YXRpY1Njb3BlT2JqZWN0KiwgU2NvcGVDb250ZXh0OjpS
ZWlmeU1vZGUpOworICAgICAgICB2b2lkIHBvcEJsb2NrU2NvcGUoKTsKIAogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKTsKICAgICAgICAgdm9pZCBl
bWl0UG9wU2NvcGUoKTsKIAogICAgICAgICB2b2lkIGVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQs
IGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSk7CiAKLSAgICAgICAgaW50IHNjb3BlRGVwdGgo
KSB7IHJldHVybiBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9maW5hbGx5RGVwdGg7IH0KKyAgICAg
ICAgaW50IHNjb3BlRGVwdGgoKSB7IHJldHVybiBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9ibG9j
a1Njb3BlRGVwdGggKyBtX2ZpbmFsbHlEZXB0aDsgfQogICAgICAgICBib29sIGhhc0ZpbmFsaXNl
cigpIHsgcmV0dXJuIG1fZmluYWxseURlcHRoICE9IDA7IH0KIAogICAgICAgICB2b2lkIHB1c2hG
aW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0LCBSZWdpc3RlcklEKiByZXR1cm5BZGRyRHN0KTsK
QEAgLTU0Miw4ICs1ODAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHJld2luZEJpbmFyeU9wKCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdp
bmRVbmFyeU9wKCk7CiAKLSAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1pdENvbXBsZXhKdW1w
U2NvcGVzKExhYmVsKiB0YXJnZXQsIENvbnRyb2xGbG93Q29udGV4dCogdG9wU2NvcGUsIENvbnRy
b2xGbG93Q29udGV4dCogYm90dG9tU2NvcGUpOwotCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxk
b3VibGUsIEpTVmFsdWU+IE51bWJlck1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
Z0ltcGwqLCBKU1N0cmluZyosIElkZW50aWZpZXJSZXBIYXNoPiBJZGVudGlmaWVyU3RyaW5nTWFw
OwogICAgICAgICAKQEAgLTYxNywzNSArNjUzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rp
b25zOyB9CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJuICptX3N5
bWJvbFRhYmxlOyB9CiAKLSAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtX2R5bmFtaWNTY29wZURlcHRoKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1fY29kZVR5cGUgIT0gRnVuY3Rp
b25Db2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGNhbk9wdGltaXplTm9uTG9jYWxz
KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAobV9jb2RlVHlwZSA9
PSBFdmFsQ29kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAg
IGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+dXNlc0V2YWwo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93RXhwcmVzc2lv
blRvb0RlZXBFeGNlcHRpb24oKTsKIAotICAgICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lmTmVj
ZXNzYXJ5KCk7Ci0gICAgICAgIHZvaWQgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVy
SUQqKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlv
bnM7CkBAIC02NzQsNiArNjgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2xhc3RWYXI7CiAgICAgICAgIGludCBtX2ZpbmFsbHlEZXB0aDsKICAgICAg
ICAgaW50IG1fZHluYW1pY1Njb3BlRGVwdGg7CisgICAgICAgIGludCBtX2Jsb2NrU2NvcGVEZXB0
aDsKICAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7CiAgICAgICAgIENvZGVUeXBlIG1fY29k
ZVR5cGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAppbmRleCBiYjk1Y2FmYjY4MjYzYTliZjUxMGFhNGU0MjI3ZjVlYTQzYTNl
ZTk4Li42Yjg4MmQ4ZTczNDc3NzQ2NDM5ZmYxMmU4N2EwNjg4NDFmZTYwOGU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBA
IC0zMTgsMTAgKzMxOCwxMyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogCiBSZWdpc3RlcklE
KiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5v
ZGUoKSAmJiBnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50cyhzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSkpIHsKLSAgICAgICAgUmVnaXN0ZXJJRCog
cHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwotICAgICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNl
dCgpKTsgICAgCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50QnlWYWwo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZ2VuZXJhdG9yLnVuY2hlY2tlZFJlZ2lz
dGVyRm9yQXJndW1lbnRzKCksIHByb3BlcnR5KTsKKyAgICBpZiAobV9iYXNlLT5pc1Jlc29sdmVO
b2RlKCkpIHsKKyAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9y
LnJlc29sdmUoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCks
IEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3JlYXRlQXJndW1lbnRzRmxhZyk7CisgICAgICAgIGlm
IChyZXNvbHZlUmVzdWx0LmlzQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQq
IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKKyAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5k
T2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRC
eVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVzdWx0LmxvY2Fs
KCksIHByb3BlcnR5KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9zdWJz
Y3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKQEAg
LTMzNCwxNyArMzM3LDE0IEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAKIFJlZ2lzdGVySUQq
IERvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpZiAobV9pZGVudCA9PSBnZW5lcmF0b3IucHJv
cGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBpZiAoIW1fYmFzZS0+aXNSZXNvbHZlTm9k
ZSgpKQotICAgICAgICAgICAgZ290byBub25Bcmd1bWVudHNQYXRoOwotICAgICAgICBSZXNvbHZl
Tm9kZSogcmVzb2x2ZU5vZGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSk7Ci0g
ICAgICAgIGlmICghZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMocmVzb2x2ZU5vZGUt
PmlkZW50aWZpZXIoKSkpCi0gICAgICAgICAgICBnb3RvIG5vbkFyZ3VtZW50c1BhdGg7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwg
ZW5kT2Zmc2V0KCkpOyAgICAKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1l
bnRzTGVuZ3RoKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGdlbmVyYXRvci51bmNo
ZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpKTsKKyAgICBpZiAobV9pZGVudCA9PSBnZW5lcmF0
b3IucHJvcGVydHlOYW1lcygpLmxlbmd0aCAmJiBtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSkgewor
ICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShz
dGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSwgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkRvbnRDcmVhdGVBcmd1bWVudHNGbGFnKTsKKyAgICAgICAgaWYgKHJlc29sdmVS
ZXN1bHQuaXNBcmd1bWVudHMoKSkgeworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7ICAgIAorICAgICAg
ICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1bHQubG9jYWwoKSk7CisgICAgICAgIH0K
ICAgICB9CiAKLW5vbkFyZ3VtZW50c1BhdGg6CiAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9p
ZGVudCk7CkBAIC01NjQsOSArNTY0LDEzIEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsCiAgICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBhcmdzUmVnaXN0ZXI7CiAgICAgICAgICAgICBBcmd1bWVudExpc3ROb2RlKiBhcmdz
ID0gbV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQ7Ci0gICAgICAgICAgICBpZiAoYXJncy0+bV9l
eHByLT5pc1Jlc29sdmVOb2RlKCkgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMo
c3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihhcmdzLT5tX2V4cHIpLT5pZGVudGlmaWVyKCkpKQot
ICAgICAgICAgICAgICAgIGFyZ3NSZWdpc3RlciA9IGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3Rl
ckZvckFyZ3VtZW50cygpOwotICAgICAgICAgICAgZWxzZQorCisgICAgICAgICAgICBpZiAoYXJn
cy0+bV9leHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBSZXNvbHZlUmVz
dWx0IHJlc29sdmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShzdGF0aWNfY2FzdDxSZXNvbHZl
Tm9kZSo+KGFyZ3MtPm1fZXhwciktPmlkZW50aWZpZXIoKSwgQnl0ZWNvZGVHZW5lcmF0b3I6OkRv
bnRDcmVhdGVBcmd1bWVudHNGbGFnKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVJlc3Vs
dC5pc0FyZ3VtZW50cygpKQorICAgICAgICAgICAgICAgICAgICBhcmdzUmVnaXN0ZXIgPSByZXNv
bHZlUmVzdWx0LmxvY2FsKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWFyZ3NS
ZWdpc3Rlci5nZXQoKSkKICAgICAgICAgICAgICAgICBhcmdzUmVnaXN0ZXIgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUoYXJncy0+bV9leHByKTsKIAogICAgICAgICAgICAgLy8gRnVuY3Rpb24ucHJvdG90
eXBlLmFwcGx5IGlnbm9yZXMgZXh0cmEgYXJndW1lbnRzLCBidXQgd2Ugc3RpbGwKQEAgLTE5Nzcs
OSArMTk4MSwxMiBAQCBSZWdpc3RlcklEKiBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICAvLyBVbmNhdWdo
dCBleGNlcHRpb24gcGF0aDogdGhlIGNhdGNoIGJsb2NrLgogICAgICAgICBSZWZQdHI8TGFiZWw+
IGhlcmUgPSBnZW5lcmF0b3IuZW1pdExhYmVsKGdlbmVyYXRvci5uZXdMYWJlbCgpLmdldCgpKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9y
LmVtaXRDYXRjaChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHRyeVN0YXJ0TGFiZWwuZ2V0KCks
IGhlcmUuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1c2hOZXdTY29wZShleGNlcHRp
b25SZWdpc3Rlci5nZXQoKSwgbV9leGNlcHRpb25JZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0
KCkpOworICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZVRlbXBsYXRlID0gSlNTdGF0
aWNTY29wZU9iamVjdDo6Y3JlYXRlKCpnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
c2NvcGVUZW1wbGF0ZS0+YWRkVmFyaWFibGUobV9leGNlcHRpb25JZGVudCwgRG9udERlbGV0ZSk7
CisgICAgICAgIGdlbmVyYXRvci5wdXNoQmxvY2tTY29wZShzY29wZVRlbXBsYXRlLCBTY29wZUNv
bnRleHQ6OkxhemlseVJlaWZ5KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTdGF0aWNWYXIo
Z2VuZXJhdG9yLnJlc29sdmUobV9leGNlcHRpb25JZGVudCksIGV4Y2VwdGlvblJlZ2lzdGVyLmdl
dCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9jYXRjaEJsb2NrKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZSgpOworICAgICAgICBnZW5lcmF0b3IucG9wQmxv
Y2tTY29wZSgpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNhdGNoRW5kTGFiZWwuZ2V0
KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKaW5kZXggOWZjOTY0YzczMzNjNzg2OTA0NjY3ZmZmZjcwNGJlYTU1NDA4MTY2NS4uYmQ2NWQ4
NWFhMDhhZTQ1ODE2NDI2M2Y0YWEwYjI5NjZkNjg0YTM2NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0xMDQyLDggKzEwNDIsNyBAQCBKU0NlbGwq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBmdQogICAgIEpTRnVuY3Rpb24gKmZ1bmN0aW9uID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAgICAgaWYgKCFmdW5jdGlv
bkV4ZWN1dGFibGUtPm5hbWUoKS5pc051bGwoKSkgewogICAgICAgICBKU1N0YXRpY1Njb3BlT2Jq
ZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0KLSAgICAgICAgICAgIEpTU3RhdGljU2NvcGVPYmpl
Y3Q6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBleGVjLCBmdW5jdGlvbkV4ZWN1dGFibGUtPm5h
bWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgICAgICBKU1N0
YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkV4ZWN1
dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAg
IGZ1bmN0aW9uLT5zZXRTY29wZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uLT5zY29wZSgp
LT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmplY3QpKTsKICAgICB9CiAgICAgcmV0dXJuIGZ1bmN0aW9u
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKaW5kZXggY2M1YmIwMzkzYWQwOWVlZTk1YWFhYTRiOTFkZDkxZTdmMWJlOWEzZC4uMTBkYjVl
OWU5YzJlZjQ2MzAyMDUzNWY4OTUwYTMzYTk5MTVmZDJiMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNjI1LDE4ICsxNjI1
LDYgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2sKIH0KICAgICAKICNpZiBFTkFCTEUoQ0xBU1NJ
Q19JTlRFUlBSRVRFUikKLU5FVkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogSW50ZXJwcmV0ZXI6
OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbiogdlBDKQotewotICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJZGVudGlmaWVy
JiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVyYW5kKTsKLSAg
ICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUo
KTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoY2Fs
bEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIERvbnREZWxldGUpOwotICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihkc3QpID0gSlNWYWx1ZShzY29wZSk7Ci0KLSAgICByZXR1cm4gY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCktPnB1c2goc2NvcGUpOwotfQotCiBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnBy
ZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBSZWN1cnNpdmUgaW52b2NhdGlvbiBtYXkgYWxy
ZWFkeSBoYXZlIHNwZWNpYWxpemVkIHRoaXMgaW5zdHJ1Y3Rpb24uCkBAIC00ODI3LDcgKzQ4MTUs
OCBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgICAgIEluaXRpYWxpc2VzIGRzdChy
KSB0byBKU1ZhbHVlKCkuCiAKLSAgICAgICAgICAgVGhpcyBvcGNvZGUgYXBwZWFycyBvbmx5IGF0
IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrLgorICAgICAgICAgICBUaGlzIG9wY29kZSBj
YW4gYXBwZWFyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrIG9yIGF0IHRoZQorICAg
ICAgICAgICBiZWdpbm5pbmcgb2YgYSBibG9jayBzY29wZS4KICAgICAgICAgICovCiAgICAgICAg
IGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogCkBAIC01MDQ5LDQzICs1MDM4LDg0IEBAIHNr
aXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25leHRf
cG5hbWUpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotICAgIERFRklORV9P
UENPREUob3Bfam1wX3Njb3BlcykgewotICAgICAgICAvKiBqbXBfc2NvcGVzIGNvdW50KG4pIHRh
cmdldChvZmZzZXQpCisgICAgREVGSU5FX09QQ09ERShvcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCkg
eworICAgICAgICAvKiBhc3NlcnRfbGF6eV9yZWdfaW5pdCBkc3QocikKIAotICAgICAgICAgICBS
ZW1vdmVzIHRoZSBhIG51bWJlciBvZiBpdGVtcyBmcm9tIHRoZSBjdXJyZW50IHNjb3BlIGNoYWlu
Ci0gICAgICAgICAgIHNwZWNpZmllZCBieSBpbW1lZGlhdGUgbnVtYmVyIGNvdW50LCB0aGVuIGp1
bXBzIHRvIG9mZnNldAotICAgICAgICAgICB0YXJnZXQuCisgICAgICAgICAgIEFzc2VydCB0aGF0
IGRzdCBoYXMgYmVlbiBpbml0aWFsaXplZCwgaS5lLiwgaXMgbm90IGVtcHR5LgogICAgICAgICAq
LwotICAgICAgICBpbnQgY291bnQgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdGFy
Z2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLQotICAgICAgICBTY29wZUNoYWluTm9kZSogdG1wID0g
Y2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgICAgIHdoaWxlIChjb3VudC0tKQotICAgICAg
ICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWlu
KHRtcCk7CisgICAgICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPnVuY2hlY2tlZFIodlBDWzFd
LnUub3BlcmFuZCkuaXNFbXB0eSgpKSkgeworICAgICAgICAgICAgVVN0cmluZyBtZXNzYWdlKCJ1
bmluaXRpYWxpemVkIHZhcmlhYmxlIik7CisgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IEpT
VmFsdWUoY3JlYXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKSk7CisgICAgICAg
ICAgICBnb3RvIHZtX3Rocm93OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCk7CisgICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKKyAgICB9CisgICAgREVGSU5FX09QQ09ERShvcF9hc3NlcnRfbGF6eV9yZWdf
bm90X2luaXQpIHsKKyAgICAgICAgLyogYXNzZXJ0X2xhenlfcmVnX25vdF9pbml0IGRzdChyKQog
Ci0gICAgICAgIHZQQyArPSB0YXJnZXQ7CisgICAgICAgICAgIEFzc2VydCB0aGF0IGRzdCBoYXMg
bm90IGJlZW4gc2V0LCBpLmUuLCB0aGF0IGl0IGlzIGVtcHR5LgorICAgICAgICAqLworICAgICAg
ICBpZiAoVU5MSUtFTFkoIWNhbGxGcmFtZS0+dW5jaGVja2VkUih2UENbMV0udS5vcGVyYW5kKS5p
c0VtcHR5KCkpKSB7CisgICAgICAgICAgICBVU3RyaW5nIG1lc3NhZ2UoImNvbnN0IHZhcmlhYmxl
IGFscmVhZHkgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gSlNW
YWx1ZShjcmVhdGVSZWZlcmVuY2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpKTsKKyAgICAgICAg
ICAgIGdvdG8gdm1fdGhyb3c7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZQQyArPSBP
UENPREVfTEVOR1RIKG9wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdCk7CiAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKICAgICB9Ci0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19J
TlRFUlBSRVRFUikKLSAgICAvLyBBcHBlYXNlIEdDQwotICAgIGdvdG8gKigmJnNraXBfbmV3X3Nj
b3BlKTsKLSNlbmRpZgotICAgIERFRklORV9PUENPREUob3BfcHVzaF9uZXdfc2NvcGUpIHsKLSAg
ICAgICAgLyogbmV3X3Njb3BlIGRzdChyKSBwcm9wZXJ0eShpZCkgdmFsdWUocikKKyAgICBERUZJ
TkVfT1BDT0RFKG9wX3JlaWZ5X3Njb3BlKSB7CisgICAgICAgIC8qIHJlaWZ5X3Njb3BlIGRzdChy
KSB0ZW1wbChyKSBiYXNlKHIpCiAgICAgICAgICAKLSAgICAgICAgICAgQ29uc3RydWN0cyBhIG5l
dyBTdGF0aWNTY29wZU9iamVjdCB3aXRoIHByb3BlcnR5IHNldCB0byB2YWx1ZS4gIFRoYXQgc2Nv
cGUKLSAgICAgICAgICAgb2JqZWN0IGlzIHRoZW4gcHVzaGVkIG9udG8gdGhlIFNjb3BlQ2hhaW4u
ICBUaGUgc2NvcGUgb2JqZWN0IGlzIHRoZW4gc3RvcmVkCi0gICAgICAgICAgIGluIGRzdCBmb3Ig
R0MuCisgICAgICAgICAgIENvbnN0cnVjdHMgYSBuZXcgU3RhdGljU2NvcGVPYmplY3QsIHVzaW5n
IHRlbXBsIGFzIGEgdGVtcGxhdGUuIFRoYXQKKyAgICAgICAgICAgc2NvcGUgb2JqZWN0IGlzIHRo
ZW4gc3RvcmVkIGluIGRzdCBhbmQgcHVzaGVkIG9udG8gdGhlIFNjb3BlQ2hhaW4uCisgICAgICAg
ICAgIFRoZSBzdG9yYWdlIGZvciB0aGlzIGJsb2NrIHNjb3BlIGlzIGluaXRpYWxseSBpbiB0aGUg
cmVnaXN0ZXJzCisgICAgICAgICAgIGZvbGxvd2luZyBiYXNlLiBXaGVuIGNvbnRyb2wgbGVhdmVz
IHRoaXMgc2NvcGUsIHRoZXNlIHZhbHVlcyB3aWxsIGJlCisgICAgICAgICAgIHRvcm4gb2ZmLgog
ICAgICAgICAgKi8KLSAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNyZWF0ZUV4Y2Vw
dGlvblNjb3BlKGNhbGxGcmFtZSwgdlBDKSk7CisgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5v
cGVyYW5kOwogCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3B1c2hfbmV3X3Njb3Bl
KTsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KS5qc1ZhbHVlKCkpIHsK
KyAgICAgICAgICAgIGludCB0ZW1wbCA9IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgYmFzZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1l
LT5yKHRlbXBsKS5qc1ZhbHVlKCkuaXNPYmplY3QoKSk7CisgICAgICAgICAgICBKU09iamVjdCog
c2NvcGVUZW1wbGF0ZSA9IGFzT2JqZWN0KGNhbGxGcmFtZS0+cih0ZW1wbCkuanNWYWx1ZSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVChzY29wZVRlbXBsYXRlLT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkp
OworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogbmV3U2NvcGUgPSBzdGF0aWNfY2Fz
dDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oc2NvcGVUZW1wbGF0ZSk7CisgICAgICAgICAgICBuZXdT
Y29wZSA9IG5ld1Njb3BlLT5yZWlmeSgqZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSArIGJhc2UpOworICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBuZXdT
Y29wZTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKS0+cHVzaChuZXdTY29wZSkpOworICAgICAgICB9CisKKyAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfcmVpZnlfc2NvcGUpOworICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7CisgICAgfQorICAgIERFRklORV9PUENPREUob3BfdGVhcl9vZmZfc2NvcGUpIHsKKyAgICAg
ICAgLyogdGVhcl9vZmZfc2NvcGUgc3JjKHIpCisKKyAgICAgICAgICAgSWYgdGhlIHNjb3BlIHN0
b3JlZCBpbiBTUkMgd2FzIHJlaWZpZWQsIGNvcHkgdGhlIGJsb2NrLXNjb3BlZCBsb2NhbHMKKyAg
ICAgICAgICAgaW4gdGhlIHJlZ2lzdGVycyBmb2xsb3dpbmcgU1JDIGZyb20gdGhlIHJlZ2lzdGVy
IGZpbGUgdG8gdGhlCisgICAgICAgICAgIGhlYXAuIE11bmdlIHRoZSBzY29wZSBvYmplY3Qgc3Rv
cmVkIGluIFNSQyB0byBwb2ludCB0byB0aGlzIG5ldworICAgICAgICAgICBiYWNraW5nIHN0b3Jl
LCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHNjb3BlIGNoYWluLgorCisgICAgICAgICAgIFRoaXMg
b3Bjb2RlIGFwcGVhcnMgd2hlbiBsZWF2aW5nIGJsb2NrIHNjb3Blcy4KKyAgICAgICAgKi8KKwor
ICAgICAgICBpbnQgc3JjID0gdlBDWzFdLnUub3BlcmFuZDsKKworICAgICAgICBpZiAoSlNWYWx1
ZSBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzcmMpLmpzVmFsdWUoKSkgeworICAgICAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHNjb3BlKTsKKyAgICAgICAgICAgIEFT
U0VSVChvYmplY3QtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4ob2JqZWN0KS0+dGVhck9mZigqZ2xvYmFsRGF0YSk7
CisgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjKS5jbGVhcigpOworICAgICAg
ICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5w
b3AoKSk7CisgICAgICAgIH0KKworICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF90ZWFy
X29mZl9zY29wZSk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9Ci0jaWYgRU5B
QkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICBza2lwX25ld19zY29w
ZToKLSNlbmRpZgogICAgIERFRklORV9PUENPREUob3BfY2F0Y2gpIHsKICAgICAgICAgLyogY2F0
Y2ggZXgocikKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDU0MWNjODk2YTMyODkw
ZjZjNWVmNjFiNGI2NWI3MjRlNjhlZTZiNDEuLjRhODUyM2FkNWEwYjQ5YTVlM2Q4Njc5YWM4OTlh
YjM1MzZjYTkxYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTI3Miw3ICsyNzIs
NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9P
UChvcF9qZXFfbnVsbCkKICAgICAgICAgREVGSU5FX09QKG9wX2pmYWxzZSkKICAgICAgICAgREVG
SU5FX09QKG9wX2ptcCkKLSAgICAgICAgREVGSU5FX09QKG9wX2ptcF9zY29wZXMpCiAgICAgICAg
IERFRklORV9PUChvcF9qbmVxX251bGwpCiAgICAgICAgIERFRklORV9PUChvcF9qbmVxX3B0cikK
ICAgICAgICAgREVGSU5FX09QKG9wX2psZXNzKQpAQCAtMzE3LDcgKzMxNiwxMCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9wcmVfaW5j
KQogICAgICAgICBERUZJTkVfT1Aob3BfcHJvZmlsZV9kaWRfY2FsbCkKICAgICAgICAgREVGSU5F
X09QKG9wX3Byb2ZpbGVfd2lsbF9jYWxsKQotICAgICAgICBERUZJTkVfT1Aob3BfcHVzaF9uZXdf
c2NvcGUpCisgICAgICAgIERFRklORV9PUChvcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCkKKyAgICAg
ICAgREVGSU5FX09QKG9wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdCkKKyAgICAgICAgREVGSU5F
X09QKG9wX3JlaWZ5X3Njb3BlKQorICAgICAgICBERUZJTkVfT1Aob3BfdGVhcl9vZmZfc2NvcGUp
CiAgICAgICAgIERFRklORV9PUChvcF9wdXNoX3Njb3BlKQogICAgICAgICBjYXNlIG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNp
dGlvbl9ub3JtYWw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAyZDI4NDFiYWY1NTQ4NmEx
ZWJmNjlkMmU0YjViZDg1Y2VlMTE2YjBkLi40MGZlYjE5ZWM1MWFjMTQ4ZGRjODUwMzkxMjdjZGNl
MWFiZjUwNjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTgxOCw3ICs4MTgsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2plcV9udWxsKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2ptcChJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3Bfam1w
X3Njb3BlcyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfam5lcV9udWxsKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmVxX3B0cihJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qKTsKQEAgLTg2NCw3ICs4
NjMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wcmVfaW5jKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wcm9maWxlX2RpZF9jYWxsKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wcm9maWxlX3dpbGxfY2FsbChJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfcHVzaF9uZXdfc2NvcGUoSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2VydF9sYXp5X3JlZ19pbml0KEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQoSW5zdHJ1
Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3JlaWZ5X3Njb3BlKEluc3RydWN0aW9uKik7
CisgICAgICAgIHZvaWQgZW1pdF9vcF90ZWFyX29mZl9zY29wZShJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHVzaF9zY29wZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9w
dXRfYnlfaW5kZXgoSW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCmluZGV4IDJkYjgyYmY0YWQyMGQ2MDNhZjAzNDlkZTRlZjUxNGNmM2QwMDI2YzYu
LjU4OWJmYjI1NDQ2NDBiYzAxMmM5M2E0MTk1Mjk1YzVmMDY1ZDdmM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTAxNiwxMiArMTAxNiw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19qc251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdf
aW5pdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNoX25ld19zY29wZSk7Ci0gICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgbm90RW1wdHkgPSBicmFuY2hU
ZXN0UHRyKE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfYXNzZXJ0X2xhenlfcmVn
X2luaXQpLmNhbGwoKTsKKyAgICBub3RFbXB0eS5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBKSVRTdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfYXNzZXJ0X2xhenlfcmVnX25vdF9pbml0KS5jYWxsKCk7CisgICAgZW1w
dHkubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVpZnlfc2NvcGUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRlbXBsID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBKdW1wIHNjb3BlUmVpZmllZCA9IGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZWlmeV9zY29w
ZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodGVtcGwsIHJlZ1QxKTsKKyAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoYmFzZSkpOworICAgIHN0dWJDYWxsLmNhbGwoZHN0
KTsKKyAgICBzY29wZVJlaWZpZWQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
dGVhcl9vZmZfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1
bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSnVt
cCBzY29wZU5vdFJlaWZpZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIHNjb3BlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9zY29wZSk7CisgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoc2NvcGUsIHJlZ1QxKTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lz
dGVyKSAqIHNjb3BlKSk7CisgICAgc2NvcGVOb3RSZWlmaWVkLmxpbmsodGhpcyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMDM0LDE0ICsxMDY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qbXBfc2Nv
cGVzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX2ptcF9zY29wZXMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAg
c3R1YkNhbGwuY2FsbCgpOwotICAgIGFkZEp1bXAoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGI2NzY5NmYzNTkwMzc3ZmNhMDA3YTQzODFj
NTE0YzA1YzJkYTEwZGYuLmUxMGM4NWU3NmE3MGIwNWI4Yzk0MjRjNzAzMjgxNzdlZDRkYWJlYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAg
LTEzMzYsMTIgKzEzMzYsNDQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX2pzbnVtYmVyKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2EKICAgICBzdHViQ2Fs
bC5jYWxsKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6
eV9yZWdfaW5pdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNoX25ld19zY29wZSk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSnVtcCBub3RFbXB0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCB0YWdGb3IoZHN0KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpKTsKKyAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQp
LmNhbGwoKTsKKyAgICBub3RFbXB0eS5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIEp1bXAgZW1wdHkgPSBicmFuY2gzMihFcXVhbCwgdGFnRm9yKGRzdCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgSklUU3R1YkNhbGwodGhpcywgY3Rp
X29wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdCkuY2FsbCgpOworICAgIGVtcHR5LmxpbmsodGhp
cyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3JlaWZ5X3Njb3BlKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0ZW1wbCA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgSnVtcCBzY29wZVJlaWZpZWQgPSBicmFuY2gzMihOb3RFcXVhbCwgdGFn
Rm9yKGRzdCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3JlaWZ5X3Njb3BlKTsKKyAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudCh0ZW1wbCwgcmVnVDEpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW0zMihiYXNlKSk7CisgICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAgIHNjb3BlUmVp
ZmllZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9zY29wZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHNjb3BlID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBKdW1wIHNjb3BlTm90UmVpZmll
ZCA9IGJyYW5jaDMyKEVxdWFsLCB0YWdGb3Ioc2NvcGUpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90
ZWFyX29mZl9zY29wZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoc2NvcGUsIHJlZ1QxKTsK
KyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIHNjb3BlKSk7CisgICAg
c2NvcGVOb3RSZWlmaWVkLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYxLDE0ICsxMzkzLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfY2F0Y2gpLCBleGNl
cHRpb24sIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2ptcF9zY29wZXMo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3Bfam1wX3Njb3Blcyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICBzdHVi
Q2FsbC5jYWxsKCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCmluZGV4IGVlYmU5MDQyN2FlYzFjNWQ1NmFiYmNiOTZmNjAyNTVjOWU3OTI1MTEuLjll
ZmVlMDUwYTk2ZDJkMWMxNDI4NjMzYWJlNGFkNTMzZDY1YjkzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC0zMDgwLDcgKzMwODAsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihKU09iamVjdCosIG9wX25ld19mdW5jX2V4cCkKICAgICAgICAgZG9lcyBub3QgYWZm
ZWN0IHRoZSBzY29wZSBlbmNsb3NpbmcgdGhlIEZ1bmN0aW9uRXhwcmVzc2lvbi4KICAgICAgKi8K
ICAgICBpZiAoIWZ1bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNTdGF0aWNT
Y29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNy
ZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmMsIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSk7CisgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIGZ1bmN0aW9uU2NvcGVPYmplY3Qg
PSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgZnVu
Y3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKICAgICAgICAgZnVu
Yy0+c2V0U2NvcGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmMtPnNjb3BlKCktPnB1c2go
ZnVuY3Rpb25TY29wZU9iamVjdCkpOwogICAgIH0KIApAQCAtMzM3MSwyOCArMzM3MSw1NiBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfaW4pCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBw
cm9wZXJ0eSkpKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXNo
X25ld19zY29wZSkKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX2Fzc2VydF9sYXp5X3Jl
Z19pbml0KQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAg
IEpTT2JqZWN0KiBzY29wZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShzdGFja0ZyYW1l
LmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5h
cmdzWzFdLmpzVmFsdWUoKSwgRG9udERlbGV0ZSk7CisgICAgVVN0cmluZyBtZXNzYWdlKCJ1bmlu
aXRpYWxpemVkIHZhcmlhYmxlIik7CisgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRp
b24gPSBjcmVhdGVSZWZlcmVuY2VFcnJvcihzdGFja0ZyYW1lLmNhbGxGcmFtZSwgbWVzc2FnZSk7
CisgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOworfQogCi0gICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBjYWxsRnJhbWUtPnNldFNjb3Bl
Q2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpKTsKLSAgICByZXR1cm4g
c2NvcGU7CitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9hc3NlcnRfbGF6eV9yZWdfbm90
X2luaXQpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAg
VVN0cmluZyBtZXNzYWdlKCJjb25zdCB2YXJpYWJsZSBhbHJlYWR5IGluaXRpYWxpemVkIik7Cisg
ICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVSZWZlcmVuY2VFcnJv
cihzdGFja0ZyYW1lLmNhbGxGcmFtZSwgbWVzc2FnZSk7CisgICAgVk1fVEhST1dfRVhDRVBUSU9O
X0FUX0VORCgpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9qbXBfc2NvcGVz
KQorREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9yZWlmeV9zY29wZSkKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICB1bnNpZ25lZCBjb3Vu
dCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgLy8gQXJndW1lbnRzOiBzY29wZSB0ZW1wbGF0
ZSBvYmplY3QgKGpzdmFsdWUpLCBvZmZzZXQgb2YgcmVnaXN0ZXJzIChpbnQzMikuCisgICAgSlNW
YWx1ZSB0ZW1wbCA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCk7CiAKLSAgICBTY29wZUNoYWlu
Tm9kZSogdG1wID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgd2hpbGUgKGNvdW50LS0p
Ci0gICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0gICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWlu
KHRtcCk7CisgICAgQVNTRVJUKHRlbXBsLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBzY29w
ZVRlbXBsYXRlID0gYXNPYmplY3QodGVtcGwpOworICAgIEFTU0VSVChzY29wZVRlbXBsYXRlLT5p
c1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIG5ld1Njb3Bl
ID0gc3RhdGljX2Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KHNjb3BlVGVtcGxhdGUpOworICAg
IG5ld1Njb3BlID0gbmV3U2NvcGUtPnJlaWZ5KCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNr
RnJhbWUuY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICBzdGFj
a0ZyYW1lLmNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2Nv
cGVDaGFpbigpLT5wdXNoKG5ld1Njb3BlKSk7CisKKyAgICAvLyBHZW5lcmF0ZWQgY29kZSBzdG9y
ZXMgaXQgaW4gY2FsbEZyYW1lLT5yKGRzdCkuCisgICAgcmV0dXJuIG5ld1Njb3BlOworfQorCitE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90ZWFyX29mZl9zY29wZSkKK3sKKyAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICAvLyBBcmd1bWVudHM6IHNjb3Bl
IG9iamVjdCAoanN2YWx1ZSkuCisgICAgSlNWYWx1ZSBzY29wZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKHNjb3BlKTsKKworICAgIEFTU0VSVChzY29wZS5pc09i
amVjdCgpKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qoc2NvcGUpOworICAgIEFT
U0VSVChvYmplY3QtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgc3RhdGljX2Nhc3Q8SlNT
dGF0aWNTY29wZU9iamVjdCo+KG9iamVjdCktPnRlYXJPZmYoKnN0YWNrRnJhbWUuZ2xvYmFsRGF0
YSk7CisgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc3RhY2tGcmFtZS5j
YWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9wKCkpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkLCBvcF9wdXRfYnlfaW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgK
aW5kZXggNDlmNjY2NDY1M2MzNjc1ZGUzMjhhYzljYTVhMDNlZjYwMDY1ZGIyZi4uYTU1YmE3MTVm
ZWVjY2I0NmJhYTgyMDMyZjVmZmNhNzZkNTQ1NGVmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaApAQCAtNDE4LDcgKzQxOCwxMCBAQCBleHRlcm4gIkMiIHsKICAgICBKU09iamVj
dCogSklUX1NUVUIgY3RpX29wX25ld19vYmplY3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAg
ICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19yZWdleHAoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKTsKICAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfYWN0aXZhdGlvbihTVFVC
X0FSR1NfREVDTEFSQVRJT04pOwotICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9u
ZXdfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9v
cF9hc3NlcnRfbGF6eV9yZWdfaW5pdChTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAgIHZvaWQg
SklUX1NUVUIgY3RpX29wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdChTVFVCX0FSR1NfREVDTEFS
QVRJT04pOworICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcmVpZnlfc2NvcGUoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9zY29w
ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3Bf
cHVzaF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpTT2JqZWN0KiBKSVRfU1RV
QiBjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYyhTVFVCX0FSR1NfREVDTEFSQVRJ
T04pOwogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpJVF9TVFVCIGN0aV9vcF9nZXRfcG5h
bWVzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CkBAIC00MzUsNyArNDM4LDYgQEAgZXh0ZXJuICJD
IiB7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfY2hlY2tfaGFzX2luc3RhbmNlKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfZGVidWcoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9lbmQoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsKLSAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9qbXBfc2NvcGVzKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcG9wX3Njb3BlKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHJvZmlsZV9kaWRf
Y2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3By
b2ZpbGVfd2lsbF9jYWxsKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCBiNmJiNjY0YmNmNzIwY2Uy
MGZhMGYwZmMzNzE0YjdiMTg4YTYzMjcyLi4xZmFjZWM5NmVkN2I4MzZkYzJhNTBhZWI3M2M2YTFl
MjI1NDNkZGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKQEAgLTExMjAsMTggKzExMjAsNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcHV0X2dldHRlcl9zZXR0ZXIpCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKLUxMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbXBfc2NvcGVzKQotewotICAgIExMSU5UX0JFR0lOKCk7
Ci0gICAgdW5zaWduZWQgY291bnQgPSBwY1sxXS51Lm9wZXJhbmQ7Ci0gICAgU2NvcGVDaGFpbk5v
ZGUqIHRtcCA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICB3aGlsZSAoY291bnQtLSkKLSAgICAg
ICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICBleGVjLT5zZXRTY29wZUNoYWluKHRtcCk7Ci0gICAg
cGMgKz0gcGNbMl0udS5vcGVyYW5kOwotICAgIExMSU5UX0VORCgpOwotfQotCiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfanRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKQEAgLTE0
NTAsNiArMTQzOCw1MCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGVhcl9vZmZf
YXJndW1lbnRzKQogICAgIExMSU5UX0VORCgpOwogfQogCitMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfYXNzZXJ0X2xhenlfcmVnX2luaXQpCit7CisgICAgTExJTlRfQkVHSU4oKTsKKyAg
ICBVU3RyaW5nIG1lc3NhZ2UoInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiKTsKKyAgICBMTElOVF9U
SFJPVyhjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBtZXNzYWdlKSk7Cit9CisKK0xMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQpCit7CisgICAg
TExJTlRfQkVHSU4oKTsKKyAgICBVU3RyaW5nIG1lc3NhZ2UoImNvbnN0IHZhcmlhYmxlIGFscmVh
ZHkgaW5pdGlhbGl6ZWQiKTsKKyAgICBMTElOVF9USFJPVyhjcmVhdGVSZWZlcmVuY2VFcnJvcihl
eGVjLCBtZXNzYWdlKSk7Cit9CisKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZWlm
eV9zY29wZSkKK3sKKyAgICBMTElOVF9CRUdJTigpOworICAgIGludCBkc3QgPSBwY1sxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IHRlbXBsID0gcGNbMl0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0g
cGNbM10udS5vcGVyYW5kOworICAgIEFTU0VSVCghZXhlYy0+dW5jaGVja2VkUihkc3QpLmpzVmFs
dWUoKSk7CisgICAgQVNTRVJUKGV4ZWMtPnIodGVtcGwpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsK
KyAgICBKU09iamVjdCogc2NvcGVUZW1wbGF0ZSA9IGFzT2JqZWN0KGV4ZWMtPnIodGVtcGwpLmpz
VmFsdWUoKSk7CisgICAgQVNTRVJUKHNjb3BlVGVtcGxhdGUtPmlzU3RhdGljU2NvcGVPYmplY3Qo
KSk7CisgICAgSlNTdGF0aWNTY29wZU9iamVjdCogbmV3U2NvcGUgPSBzdGF0aWNfY2FzdDxKU1N0
YXRpY1Njb3BlT2JqZWN0Kj4oc2NvcGVUZW1wbGF0ZSk7CisgICAgbmV3U2NvcGUgPSBuZXdTY29w
ZS0+cmVpZnkoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKCkgKyBiYXNlKTsKKyAgICBleGVj
LT51bmNoZWNrZWRSKGRzdCkgPSBuZXdTY29wZTsKKyAgICBleGVjLT5zZXRTY29wZUNoYWluKGV4
ZWMtPnNjb3BlQ2hhaW4oKS0+cHVzaChuZXdTY29wZSkpOworICAgIExMSU5UX0VORCgpOworfQor
CitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGVhcl9vZmZfc2NvcGUpCit7CisgICAg
TExJTlRfQkVHSU4oKTsKKyAgICBpbnQgc3JjID0gdlBDWzFdLnUub3BlcmFuZDsKKyAgICBBU1NF
UlQoZXhlYy0+dW5jaGVja2VkUihkc3QpLmpzVmFsdWUoKSk7CisgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tlZFIoc3JjKS5qc1ZhbHVlKCkpOworICAgIEFTU0VS
VChvYmplY3QtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgc3RhdGljX2Nhc3Q8SlNTdGF0
aWNTY29wZU9iamVjdCo+KG9iamVjdCktPnRlYXJPZmYoZ2xvYmFsRGF0YSk7CisgICAgZXhlYy0+
dW5jaGVja2VkUihzcmMpLmNsZWFyKCk7CisgICAgZXhlYy0+c2V0U2NvcGVDaGFpbihleGVjLT5z
Y29wZUNoYWluKCktPnBvcCgpKTsKKyAgICBMTElOVF9FTkQoKTsKK30KKwogTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3N0cmNhdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCA3YjNiOGJkYTY1
NmViMWY5YjdmMzFmMDYyYWJmMDlmNTQ1MzcwZTg1Li4wNTE1OTg3ZDFkNjY4ZjUxNGExMTQ4OGI1
ZDUwYmNkZmI0MTgzYmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuaApAQCAtMTU5LDcgKzE1OSw2IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9wdXRfYnlfdmFsKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWxfYnlf
dmFsKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaW5kZXgpOwogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZXJfc2V0dGVyKTsKLUxMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbXBfc2NvcGVzKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9qdHJ1ZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfamZhbHNl
KTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbGVzcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggOWFm
OTFiZWYyYzQ4MTc1NDg4MzMxZmRiOTQyNDE1NGEwMTg1YTdkZi4uMzYzODdiYjE1YzUxMjNjYTY5
NmFhNzQ4YWZlOTg5MjU3N2NlY2Y2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtNTI1LDEyICs1MjUsNiBAQCBfbGxp
bnRfb3BfcHV0X2dldHRlcl9zZXR0ZXI6CiAgICAgZGlzcGF0Y2goNSkKIAogCi1fbGxpbnRfb3Bf
am1wX3Njb3BlczoKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfam1wX3Njb3BlcykKLSAgICBkaXNwYXRjaCgwKQotCi0KIF9sbGludF9vcF9s
b29wX2lmX3RydWU6CiAgICAgbm9wCiBfbGxpbnRfb3BfanRydWU6CkBAIC03MjcsMTIgKzcyMSw2
IEBAIF9sbGludF9vcF9wb3Bfc2NvcGU6CiAgICAgZGlzcGF0Y2goMSkKIAogCi1fbGxpbnRfb3Bf
cHVzaF9uZXdfc2NvcGU6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX3B1c2hfbmV3X3Njb3BlKQotICAgIGRpc3BhdGNoKDQpCi0KLQogX2xs
aW50X29wX3Rocm93OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjYWxsU2xvd1BhdGgoX2xs
aW50X3Nsb3dfcGF0aF90aHJvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggNDZjNjIyNmU1NDRlODE2
NWVjZmUyZmE1NTI0ZjQwNTk2NDdmYzI0OS4uNjQ2NjQyNDE3MGRlZmE3YzEzMDkzNTM0NTI5MzJk
MWExZDg5NDc5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTE0NTgsNiArMTQ1OCw0MiBAQCBfbGxp
bnRfb3BfdGVhcl9vZmZfYXJndW1lbnRzOgogICAgIGRpc3BhdGNoKDIpCiAKIAorX2xsaW50X29w
X2Fzc2VydF9sYXp5X3JlZ19pbml0OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaSA0
W1BDXSwgdDAKKyAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIEVtcHR5VmFsdWVUYWcs
IC5vcEFzc2VydExhenlSZWdJbml0RG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19w
YXRoX2Fzc2VydF9sYXp5X3JlZ19pbml0KQorLm9wQXNzZXJ0TGF6eVJlZ0luaXREb25lOgorICAg
IGRpc3BhdGNoKDIpCisKKworX2xsaW50X29wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdDoKKyAg
ICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGkgNFtQQ10sIHQwCisgICAgYmllcSBUYWdPZmZz
ZXRbY2ZyLCB0MCwgOF0sIEVtcHR5VmFsdWVUYWcsIC5vcEFzc2VydExhenlSZWdOb3RJbml0RG9u
ZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2Fzc2VydF9sYXp5X3JlZ19ub3Rf
aW5pdCkKKy5vcEFzc2VydExhenlSZWdOb3RJbml0RG9uZToKKyAgICBkaXNwYXRjaCgyKQorCisK
K19sbGludF9vcF9yZWlmeV9zY29wZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGkg
NFtQQ10sIHQwCisgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZhbHVlVGFn
LCAub3BSZWlmeVNjb3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jl
aWZ5X3Njb3BlKQorLm9wUmVpZnlTY29wZURvbmU6CisgICAgZGlzcGF0Y2goNCkKKworCitfbGxp
bnRfb3BfdGVhcl9vZmZfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpIDRb
UENdLCB0MAorICAgIGJpZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZhbHVlVGFnLCAu
b3BUZWFyT2ZmU2NvcGVEb25lCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfdGVh
cl9vZmZfc2NvcGUpCisub3BUZWFyT2ZmU2NvcGVEb25lOgorICAgIGRpc3BhdGNoKDIpCisKKwog
X2xsaW50X29wX3JldDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2hlY2tTd2l0Y2hUb0pJ
VEZvckVwaWxvZ3VlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggZDhjOTMxZmEwYzg5YzdiYmRhNzY1MTMyNzM0
OWNmY2EyY2U0YWZjNC4uOGI4Y2VmMmU2NzE5MDEzYzA5MzBjZjZiOTMyNjBmOTdiMWI5NTYxYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20KQEAgLTEzMTAsNiArMTMxMCw0MiBAQCBfbGxpbnRfb3BfdGVhcl9vZmZfYXJn
dW1lbnRzOgogICAgIGRpc3BhdGNoKDIpCiAKIAorX2xsaW50X29wX2Fzc2VydF9sYXp5X3JlZ19p
bml0OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAor
ICAgIGJ0cG56IFtjZnIsIHQwLCA4XSwgLm9wQXNzZXJ0TGF6eVJlZ0luaXREb25lCisgICAgY2Fs
bFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfYXNzZXJ0X2xhenlfcmVnX2luaXQpCisub3BBc3Nl
cnRMYXp5UmVnSW5pdERvbmU6CisgICAgZGlzcGF0Y2goMikKKworCitfbGxpbnRfb3BfYXNzZXJ0
X2xhenlfcmVnX25vdF9pbml0OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaXMgOFtQ
QiwgUEMsIDhdLCB0MAorICAgIGJ0cHogW2NmciwgdDAsIDhdLCAub3BBc3NlcnRMYXp5UmVnTm90
SW5pdERvbmUKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9hc3NlcnRfbGF6eV9y
ZWdfbm90X2luaXQpCisub3BBc3NlcnRMYXp5UmVnTm90SW5pdERvbmU6CisgICAgZGlzcGF0Y2go
MikKKworCitfbGxpbnRfb3BfcmVpZnlfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAg
IGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCisgICAgYnRweiBbY2ZyLCB0MCwgOF0sIC5vcFJlaWZ5
U2NvcGVEb25lCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVpZnlfc2NvcGUp
Cisub3BSZWlmeVNjb3BlRG9uZToKKyAgICBkaXNwYXRjaCg0KQorCisKK19sbGludF9vcF90ZWFy
X29mZl9zY29wZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGlzIDhbUEIsIFBDLCA4
XSwgdDAKKyAgICBidHB6IFtjZnIsIHQwLCA4XSwgLm9wVGVhck9mZlNjb3BlRG9uZQorICAgIGNh
bGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3RlYXJfb2ZmX3Njb3BlKQorLm9wVGVhck9mZlNj
b3BlRG9uZToKKyAgICBkaXNwYXRjaCgyKQorCisKIF9sbGludF9vcF9yZXQ6CiAgICAgdHJhY2VF
eGVjdXRpb24oKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggZjc1MmI5MWU5NWRkOTQxYjFjZjk4YjEyMDY1MzFl
ZGY5NGU4YzczNy4uYTQwMTllZjQwMmI5NWQ2ZTEwY2Y4MTYxYjdjODhhNzNhZTUwYzExNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMTQyMiw3ICsxNDIyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0VXNlc0FyZ3VtZW50cygpIHsgbV9zY29wZUZs
YWdzIHw9IFVzZXNBcmd1bWVudHNGbGFnOyB9CiAgICAgICAgIGJvb2wgdXNlc1RoaXMoKSBjb25z
dCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBVc2VzVGhpc0ZsYWc7IH0KIAotICAgICAgICBib29s
IG5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9z
Y29wZUZsYWdzICYgKFVzZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcp
OyB9CisgICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSBj
b25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFn
KTsgfQogICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGhhc0Nh
cHR1cmVkVmFyaWFibGVzKCkgfHwgbmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMo
KTsgfQogCiAgICAgICAgIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCA3NTEz
ZDFmMTFmZDQ4OTU4MjhhZjhjYWViZTgwYWRhMTViNWY1N2Y5Li5lNDIwNjI4Zjk5NDU2NTAxNjI3
OTU2OWI2OTc3ZGY0NDk1ODhiOTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmgKQEAgLTE2Miw3ICsxNjIsNyBAQCBzdHJ1Y3QgU2NvcGUgewogICAgIEFMV0FZU19JTkxJTkUg
U2NvcGVGbGFncyB1c2VzRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBBbGxT
Y29wZVVzZXNGbGFnczsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGbGFncyhTY29wZUZs
YWdzIHNjb3BlRmxhZ3MpIHsgbV9zY29wZUZsYWdzIHw9IHNjb3BlRmxhZ3M7IH0KIAotICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBuZWVkc0Z1bGxBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
Y29wZUZsYWdzICYgKFVzZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcp
OyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIG5lZWRzRnVsbEFjdGl2YXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnKTsgfQog
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zY29w
ZUZsYWdzICYgU3RyaWN0TW9kZUZsYWc7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hhZG93
c0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFNoYWRvd3NBcmd1bWVu
dHNGbGFnOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX3Njb3BlRmxhZ3MgJiBGdW5jdGlvbk1vZGVGbGFnOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKaW5kZXggMDhiMzlmY2YwYjRjOTMwMjkwNDM3YmNh
OTAxOTdjYzk1MzAwZWZlNy4uODAxNjkwMTgyOWViMDkxZjRlODczNjNjNjIyODFlYmNjZDY1YzIx
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtMjk0
LDcgKzI5NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgdXNlc0V2YWwoKSBj
b25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBVc2VzRXZhbEZsYWc7IH0KICAgICAgICAgYm9v
bCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgVXNlc0FyZ3Vt
ZW50c0ZsYWc7IH0KLSAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIHx8IG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcg
fCBVc2VzV2l0aEZsYWcgfCBVc2VzQ2F0Y2hGbGFnKTsgfQorICAgICAgICBib29sIG5lZWRzQWN0
aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgfHwgbV9zY29w
ZUZsYWdzICYgKFVzZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyk7IH0KICAgICAgICAgYm9vbCBp
c1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTdHJpY3RNb2RlRmxh
ZzsgfQogCiAgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKaW5kZXggZjg5NDJi
NWY4NjVkYjU5ZTE1NDJkYzRlM2I1YzdjZjI3OWMxNzE2My4uMGVlMDFkYzZlZWVjNDQ2ZjkzZmE0
YmZiYTUxN2I4YzRlMGMxNWM2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKQEAgLTQ2LDcgKzQ2LDggQEAgdm9pZCBK
U1N0YXRpY1Njb3BlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFn
KTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBKU1ZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X3JlZ2lzdGVyU3RvcmUpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycykKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9yZWdpc3RlcnMsIHRoaXNPYmpl
Y3QtPm1fc3ltYm9sVGFibGUtPnNpemUoKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1N0YXRpY1Njb3Bl
T2JqZWN0Ojp0b1RoaXNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCmluZGV4
IGJiZjAzYTM0NzNhMjU3NjlkMmI0MjU5Yjc1MGY2YmY3ZmZkNDBmODkuLmFiNTRlNTk2NDUzYTMz
ZjRlOTFlZDg3ODE3YmNmNjViNTdjZWU4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKQEAgLTM0LDEzICszNCw1MyBAQCBu
YW1lc3BhY2UgSlNDewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2Jq
ZWN0IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIEpTU3RhdGljU2NvcGVPYmplY3QqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2Jq
ZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTU3RhdGljU2NvcGVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU1N0YXRpY1Nj
b3BlT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9u
KGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVlLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIFJlZlB0
cjxTaGFyZWRTeW1ib2xUYWJsZT4gdGFibGUgPSBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZU9iamVjdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RhdGljU2NvcGVPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkp
IEpTU3RhdGljU2NvcGVPYmplY3QoZ2xvYmFsRGF0YSwgdGFibGUucmVsZWFzZSgpLCAwKTsKKyAg
ICAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAg
ICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBK
U1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25z
dCBJZGVudGlmaWVyJiBuYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQor
ICAgICAgICB7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZU9iamVjdCA9
IGNyZWF0ZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHNjb3BlT2JqZWN0LT5hZGRWYXJpYWJs
ZShuYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmll
cjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJp
ZXI8VW5rbm93bj5bMV0pOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdp
c3RlcnMgPSByZWdpc3RlckFycmF5LmdldCgpOworICAgICAgICAgICAgcmVnaXN0ZXJzWzBdLnNl
dChnbG9iYWxEYXRhLCBzY29wZU9iamVjdCwgdmFsdWUpOworICAgICAgICAgICAgc2NvcGVPYmpl
Y3QtPnNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXkucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBh
ZGRWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcmVnaXN0ZXJzKTsKKyAgICAgICAgICAg
IGludCBpZHggPSBzeW1ib2xUYWJsZSgpLnNpemUoKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
KCkuYWRkKG5hbWUuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KGlkeCwgYXR0cmlidXRlcykpOwor
ICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlKCkuc2l6ZSgpID09IGlkeCArIDEpOworICAg
ICAgICAgICAgcmV0dXJuIGlkeDsKKyAgICAgICAgfQorCisgICAgICAgIEpTU3RhdGljU2NvcGVP
YmplY3QqIHJlaWZ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVnaXN0ZXIqIHJlZ2lzdGVy
cykKKyAgICAgICAgeworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCAqc2NvcGVPYmpl
Y3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0YXRpY1Njb3BlT2JqZWN0PihnbG9i
YWxEYXRhLmhlYXApKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGdsb2JhbERhdGEsIG1fc3ltYm9sVGFi
bGUsIHJlZ2lzdGVycyk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHRlYXJPZmYoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAg
ICB7CisgICAgICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdp
c3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W21fc3lt
Ym9sVGFibGUtPnNpemUoKV0pOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBy
ZWdpc3RlcnMgPSByZWdpc3RlckFycmF5LmdldCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX3N5bWJvbFRhYmxlLT5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIHJl
Z2lzdGVyc1tpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9yZWdpc3RlcnNbaV0uZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIC8vIENsZWFyIG9sZCB2YWx1ZXMgdG8gaGVscCBHQyAoPykuCisgICAg
ICAgICAgICAgICAgbV9yZWdpc3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIEpTVmFsdWUo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRSZWdpc3RlcnMocmVnaXN0ZXJzLCBy
ZWdpc3RlckFycmF5LnJlbGVhc2UoKSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgICAgIGJvb2wgaXNE
eW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKICAgICAgICAg
c3RhdGljIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKik7CkBAIC01
NCwyNCArOTQsMTggQEAgbmFtZXNwYWNlIEpTQ3sKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgbV9yZWdp
c3RlclN0b3JlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5
KC0xLCBhdHRyaWJ1dGVzKSk7Ci0gICAgICAgIH0KICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgSlNWYXJpYWJsZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAg
ICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2Jh
bERhdGEoKS5zdGF0aWNTY29wZVN0cnVjdHVyZS5nZXQoKSwgJm1fc3ltYm9sVGFibGUsIHJlaW50
ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSkpCisgICAgICAgIEpT
U3RhdGljU2NvcGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFNo
YXJlZFN5bWJvbFRhYmxlPiB0YWJsZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycykKKyAgICAgICAgICAg
IDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0YXRpY1Njb3BlU3Ry
dWN0dXJlLmdldCgpLCB0YWJsZS5nZXQoKSwgcmVnaXN0ZXJzKQorICAgICAgICAgICAgLCBtX3N5
bWJvbFRhYmxlKHRhYmxlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgICAgIFN5bWJvbFRhYmxlIG1fc3ltYm9sVGFi
bGU7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlZ2lzdGVyU3RvcmU7CisgICAg
ICAgIFJlZlB0cjxTaGFyZWRTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKICAgICB9OwogCiAg
ICAgaW5saW5lIGJvb2wgSlNTdGF0aWNTY29wZU9iamVjdDo6aXNEeW5hbWljU2NvcGUoYm9vbCYp
IGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132839</attachid>
            <date>2012-03-20 09:29:28 -0700</date>
            <delta_ts>2012-03-21 04:47:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20120320172925.patch</filename>
            <type>text/plain</type>
            <size>88406</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
OTgzMjYwZGE1ZTBlZjMwMzg0MjlkMGQyMjMxZWY4YmVjYmU2ZjI1Li5iNDk3MzNmYjNkYjg3N2Zh
ZWVjMzRjYTllNzU2NmZhZjU5MWZlMzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDggQEAKKzIwMTEtMDMtMjAgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIE9wdGltaXplIGFjY2VzcyB0byBibG9jay1zY29wZWQgbG9jYWwgdmFyaWFibGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcwOAor
CisgICAgICAgIFRoaXMgY29tbWl0IGNoYW5nZXMgdGhlIGJ5dGVjb21waWxlciB0byB0cmFjayBi
bG9jayBzY29wZSBvYmplY3RzLAorICAgICAgICBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUgcmVzb2x2ZWQKKyAgICAgICAgYXQgY29tcGls
ZS10aW1lIHRvIHJlZ2lzdGVycy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBpcyB0bwor
ICAgICAgICByZS11c2UgSlNTdGF0aWNTY29wZSwgYWRkaW5nIGxhenkgdGVhci1vZmYgYW5kIHRo
ZSBhYmlsaXR5IHRvIGJpbmQKKyAgICAgICAgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KKworICAg
ICAgICBDdXJyZW50bHksIGluIEVTNSwgb25seSBjYXRjaCBibG9ja3MgZnVuY3Rpb24gYXMgYmxv
Y2sgc2NvcGVzLCBmb3IKKyAgICAgICAgdGhlaXIgZXhjZXB0aW9uIGlkZW50aWZpZXIuICAoTmFt
ZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYWxzbworICAgICAgICBpbnRyb2R1Y2UgYSBraW5kIG9m
IGJsb2NrIHNjb3BlLCBidXQgc2luY2UgdGhleSBhcmUgZXhwcmVzc2lvbnMKKyAgICAgICAgYW5k
IG5vdCBzdGF0ZW1lbnRzIHRoZSBjb21waWxlciBpcyBub3QgYXMgaW52b2x2ZWQuKQorCisgICAg
ICAgIEdpdmVuIHRoYXQgY2F0Y2ggYmxvY2tzIGFyZSBub3QgdmVyeSBjb21tb24gaW4gSlMsIGFu
ZCB0aGV5IGNhbgorICAgICAgICBvbmx5IGJpbmQgb25lIHZhcmlhYmxlLCB0aGlzIHBhdGNoIGlz
IG1vcmUgYSBwcm9vZiBvZiBjb3JyZWN0bmVzcworICAgICAgICBhbmQgYSBiYXNlIGZvciBhIHN1
YnNlcXVlbnQgYmxvY2sgc2NvcGluZyBwYXRjaCB0aGFuIGEgZ2VuZXJhbAorICAgICAgICBvcHRp
bWl6YXRpb24uICBBcyBzdWNoLCBpbiBhbnRpY2lwYXRpb24gb2YgRVM2IGJsb2NrLXNjb3BlZAor
ICAgICAgICBsb2NhbHMsIHRoaXMgcGF0Y2ggYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHJlYWQtIGFu
ZCB3cml0ZS1iYXJyaWVycworICAgICAgICBvbiBibG9jay1zY29wZWQgbG9jYWxzLCB0byBpbXBs
ZW1lbnQgdGhlIHRlbXBvcmFsIGRlYWQgem9uZS4KKworICAgICAgICBUaGVyZSBhcmUgZm91ciBu
ZXcgb3Bjb2RlczogdHdvIGZvciBpbXBsZW1lbnRpbmcgdGhlIHRlbXBvcmFsIGRlYWQKKyAgICAg
ICAgem9uZSwgYW5kIHR3byBmb3IgZGVhbGluZyB3aXRoIGxhemlseSByZWlmaWVkIGFuZCB0b3Ju
LW9mZiBzY29wZXMuCisgICAgICAgIFdoaWxlIHdlJ3JlIGF0IGl0LCB3ZSByZW1vdmUgam1wX3Nj
b3BlcywgYXMgaXQgY2FuJ3QgYmUKKyAgICAgICAgaW1wbGVtZW50ZWQgY2xlYXJseSBpbiB0aGUg
cHJlc2VuY2Ugb2YgbGF6aWx5LXRvcm4tb2ZmIGJsb2NrCisgICAgICAgIHNjb3Blcy4gIEluc3Rl
YWQgdGhlIGNvbXBpbGVyIGVtaXRzIHRoZSBhcHByb3ByaWF0ZSB1bndpbmRpbmdzCisgICAgICAg
IGRpcmVjdGx5LiAgV2UgYWxzbyByZW1vdmUgcHVzaF9uZXdfc2NvcGUgaW4gZmF2b3Igb2YgdGhl
IG1vcmUKKyAgICAgICAgZ2VuZXJpYyBhbmQgZWZmaWNpZW50IGxhemlseSByZWlmaWVkIHN0YXRp
YyBzY29wZXMuCisKKyAgICAgICAgV2hlbiBlbnRlcmluZyBhIGJsb2NrIHNjb3BlLCB0aGUgY29t
cGlsZXIgYWxsb2NhdGVzIGEgY29udGlndW91cworICAgICAgICBibG9jayBvZiByZWdpc3RlcnMg
Zm9yIGJsb2NrIHNjb3Blcy4gIEJsb2NrIHNjb3BlcyB0aGF0IG1heSBiZQorICAgICAgICByZWlm
aWVkIChjYXB0dXJlZCBpbiBhIHNjb3BlIGNoYWluKSBhbHNvIG9jY3VweSBhbiBhZGRpdGlvbmFs
CisgICAgICAgIHJlZ2lzdGVyLCBmb3IgdGhlIHNjb3BlIG9iamVjdCBpdHNlbGYuICBUaGUgc3lt
Ym9sIHRhYmxlcyBmb3IgdGhlCisgICAgICAgIGJsb2NrIHNjb3BlcyBjb21lIGZyb20gInNjb3Bl
IHRlbXBsYXRlcyIsIHdoaWNoIGxpdmUgaW4gdGhlCisgICAgICAgIGNvbnN0YW50cyBzZWN0aW9u
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkNvbnRyb2xGbG93
Q29udGV4dCk6IEluIGFkZGl0aW9uIHRvIGZpbmFsbHkgYW5kIHdpdGggYmxvY2tzLAorICAgICAg
ICBzdXBwb3J0IGJsb2NrLXNjb3BlIGNvbnRyb2wgZmxvdyBjb250ZXh0cy4KKyAgICAgICAgKEpT
Qzo6UmVzb2x2ZVJlc3VsdCk6IEFkZCBhIEJhcnJpZXJGbGFnIGFuZCBhc3NvY2lhdGVkIHR5cGVz
IGZvcgorICAgICAgICBibG9jay1zY29wZWQgYmluZGluZ3MgdGhhdCBuZWVkIHJlYWQtIG9yIHdy
aXRlLSBiYXJyaWVycy4gIEFkZCBhCisgICAgICAgIGZsYWcgZm9yICJhcmd1bWVudHMiLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6c2NvcGVEZXB0aCk6IEFkZCBtX2Jsb2NrU2Nv
cGVEZXB0aC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNhbk9wdGltaXplTm9u
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNob3VsZE9wdGltaXpl
TG9jYWxzKToKKyAgICAgICAgUmVtb3ZlIG5vdy11bnVzZWQgbWV0aG9kcy4KKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6d2lsbFJlc29sdmVUb0FyZ3VtZW50cyk6IFJlbW92ZS4gIENhbGxlcnMKKyAg
ICAgICAgdXNlIFJlc29sdmVSZXN1bHQ6OmlzQXJndW1lbnRzKCksIHBvc3NpYmx5IHdpdGggdGhl
IG5ldworICAgICAgICBEb250Q3JlYXRlQXJndW1lbnRzRmxhZy4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OnJlc29sdmUpOiBTZWFyY2ggYmxvY2sgc2NvcGVzIGJlZm9yZQorICAgICAgICBsb29r
aW5nIGluIHRoZSBsb2NhbCBzeW1ib2wgdGFibGUgZm9yIHJlZ2lzdGVycy4gIEhhbmRsZSBsYXp5
CisgICAgICAgIHJlaWZpY2F0aW9uIG9mICJhcmd1bWVudHMiIGhlcmUuICBJbmxpbmUgY2FuT3B0
aW1pemVOb25Mb2NhbHMgYW5kCisgICAgICAgIHNob3VsZE9wdGltaXplTG9jYWxzLCBhbmQgZm9s
ZCBzb21lIGNvbnN0YW50cy4gIFNldCB0aGUKKyAgICAgICAgQmFycmllckZsYWcgb24gcmVzdWx0
cyB0aGF0IG5lZWQgYSB0ZW1wb3JhbCBkZWFkIHpvbmUuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOiBBZGQgY2FzZXMgZm9yCisgICAgICAgICJhcmd1bWVu
dHMiLiAgQWRkIHJlYWQvd3JpdGUgYmFycmllcnMgZm9yIGxvY2FscyBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIEZvcmJpZCBlbWl0UHV0U3RhdGljVmFyIG9uIHJlYWQtb25seSB2YXJpYWJsZXMgdGhh
dCBhcmUgbm90IGxvY2FsCisgICAgICAgIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vz
c2FyeSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBY3RpdmF0aW9u
SWZOZWNlc3NhcnkpOgorICAgICAgICBSZW1vdmUgbm93LXVudXNlZCBtZXRob2RzLgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEJsb2NrU2NvcGUpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wQmxvY2tTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpyZWlmeVNjb3Blcyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UHVzaFNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRQb3BTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxs
eUNvbnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBTY29wZXMp
OiBSZWZhY3RvciB0byBoYW5kbGUgYmxvY2sKKyAgICAgICAgc2NvcGVzIG9uIHRoZSBDb250cm9s
Rmxvd0NvbnRleHQgc3RhY2suICBXaGVuIHB1c2hpbmcgYSBzY29wZSB0aGF0CisgICAgICAgIHJl
cXVpcmVzIGEgc2NvcGUgY2hhaW4sIHJlaWZ5U2NvcGVzIGlzIGNhbGxlZCwgd2hpY2ggZW5zdXJl
cyB0aGF0CisgICAgICAgIHRoZSBzY29wZSBjaGFpbiBoYXMgYmVlbiBjcmVhdGVkLiAgV2hlbiBj
b250cm9sIGxlYXZlcyBhIGJsb2NrCisgICAgICAgIHNjb3BlIHdob3NlIHNjb3BlIG1heSBoYXZl
IGJlZW4gcmVpZmllZCwgdGVhcl9vZmZfc2NvcGUgd2lsbCB0ZWFyCisgICAgICAgIG9mZiB0aG9z
ZSBsb2NhbHMgZnJvbSB0aGUgc3RhY2sgdG8gdGhlIGhlYXAuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKTogQ2FsbAorICAgICAg
ICByZWlmeVNjb3BlcyBpbnN0ZWFkIG9mIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeS4KKwor
ICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpC
cmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpEb3RBY2Nl
c3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6IEFkYXB0IHRvCisgICAgICAgIHdpbGxSZXNvbHZlVG9B
cmd1bWVudHMgY2hhbmdlLgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZSk6IEFkYXB0IHRvCisgICAgICAgIEpTU3RhdGljU2NvcGUgdGFraW5nIGEg
SlNHbG9iYWxEYXRhIGluc3RlYWQgb2YgYW4gRXhlY1N0YXRlLgorICAgICAgICAoSlNDOjpUcnlO
b2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGFwdCB0byB1c2UgcHVzaEJsb2NrU2NvcGUgYW5kCisgICAg
ICAgIHBvcEJsb2NrU2NvcGUuCisKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDogQWRkIG5l
dyBhc3NlcnRfbGF6eV9yZWdfaW5pdCwKKyAgICAgICAgYXNzZXJ0X2xhenlfcmVnX25vdF9pbml0
LCByZWlmeV9zY29wZSwgYW5kIHRlYXJfb2ZmX3Njb3BlIG9wY29kZXMuCisgICAgICAgIFJlbW92
ZSBwdXNoX25ld19zY29wZSBhbmQgam1wX3Njb3Blcy4KKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suY3BwIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Fzc2VydF9sYXp5X3JlZ19pbml0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9yZWlmeV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90ZWFyX29mZl9zY29wZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcmVpZnlfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdGVhcl9vZmZfc2NvcGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
ICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgor
ICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAg
ICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDogVXBkYXRlIHdpdGggc3VwcG9ydCBm
b3IgdGhlIG5ldworICAgICAgICBvcGNvZGVzLiAgVGhlIExMSW50IGJpdHMgYXJlIHVudGVzdGVk
LgorCisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6
bmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMpOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6Om5lZWRzRnVsbEFjdGl2YXRpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRh
YmxlOjpuZWVkc0FjdGl2YXRpb24pOiAiQ2F0Y2giIGNsYXVzZXMgbm8KKyAgICAgICAgbG9uZ2Vy
IGZvcmNlIHRoZWlyIGZ1bmN0aW9ucyB0byBoYXZlIGFjdGl2YXRpb25zLgorCisgICAgICAgICog
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNT
Y29wZU9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU1N0YXRpY1Nj
b3BlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSk6
CisgICAgICAgIChKU1N0YXRpY1Njb3BlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNT
Y29wZU9iamVjdDo6YWRkVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2Jq
ZWN0OjpyZWlmeSk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnRlYXJPZmYp
OgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpKU1N0YXRpY1Njb3BlT2JqZWN0
KTogQWRhcHQgdG8gc3VwcG9ydAorICAgICAgICBsYXp5IHRlYXItb2ZmLCBhbmQgdGhlIGFiaWxp
dHkgdG8gYmluZCBtb3JlIHRoYW4gb25lIHZhcmlhYmxlLgorCisgICAgICAgICogcnVudGltZS9T
eW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6
OlN5bWJvbFRhYmxlOjpoYXNUZW1wb3JhbERlYWRab25lKToKKyAgICAgICAgKEpTQzo6U3ltYm9s
VGFibGU6OlRlbXBvcmFsRGVhZFpvbmVLaW5kKTogU3RlYWwgYW5vdGhlciBiaXQgZnJvbQorICAg
ICAgICB0aGUgZW50cnkgdG8gbm90ZSB3aGljaCB2YXJpYWJsZXMgbmVlZCBhIHRlbXBvcmFsIGRl
YWQgem9uZS4KKwogMjAxMi0wMy0xOSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBh
cHBsZS5jb20+CiAKICAgICAgICAgSlNDYWxsYmFja0Z1bmN0aW9uOjp0b1N0cmluZ0NhbGxiYWNr
L3ZhbHVlT2ZDYWxsYmFjayBkbyBub3QgaGFuZGxlIDAgcmV0dXJuIHZhbHVlIGZyb20gY29udmVy
dFRvVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApp
bmRleCAyMDk3MmNjNjNiNWFmZDRjYTljMWY4NTIyN2YzYmZlMDBlNjI1ZDg0Li40NDk0YTQyYmY0
ODJiYzFlYjk4ZWMxNGFhOGQ3MmRhZTlhNjIyNGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTIyMCwxNyArMTIyMCwyNiBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46
OmNvbnN0X2l0ZXJhdG9yJgogICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcG9wX3Njb3BlXG4i
LCBsb2NhdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX3B1c2hfbmV3X3Njb3BlOiB7CisgICAgICAgIGNhc2Ugb3BfYXNzZXJ0X2xhenlfcmVnX2lu
aXQ6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgZGF0YUxvZygiWyU0ZF0gYXNzZXJ0X2xhenlfcmVnX2luaXRcdCAlc1xuIiwgbG9jYXRpb24s
IHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfYXNzZXJ0X2xhenlfcmVnX25vdF9pbml0OiB7CisgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGFMb2co
IlslNGRdIGFzc2VydF9sYXp5X3JlZ19ub3RfaW5pdFx0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0
ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9yZWlmeV9zY29wZTogewogICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRh
dGFMb2coIlslNGRdIHB1c2hfbmV3X3Njb3BlIFx0JXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJl
Z2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lk
MF0pLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCkpOworICAgICAgICAgICAg
aW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBy
ZWlmeV9zY29wZVx0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywg
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShl
eGVjLCByMikuZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3Bfam1wX3Njb3BlczogewotICAgICAgICAgICAgaW50IHNjb3BlRGVsdGEgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGptcF9zY29wZXNcdF4lZCwgJWQoLT4lZClc
biIsIGxvY2F0aW9uLCBzY29wZURlbHRhLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAg
ICAgICAgY2FzZSBvcF90ZWFyX29mZl9zY29wZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSB0ZWFyX29mZl9zY29w
ZVx0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jYXRjaDogewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmluZGV4IDQ1NTk4Zjg5OTQ4MGZkNTM4
N2RmOTQ1ZWIwOWQ2Y2M0ZDY4Y2I3YzYuLmRhZjAxYmFmYzM3ZThhZmMyOTk4ZWViOWJmNThjZjc2
ZDQ5NGYyMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNv
ZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTE0
OSw3ICsxNDksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFjcm8ob3Bfam5sZXNzZXEs
IDQpIFwKICAgICAgICAgbWFjcm8ob3Bfam5ncmVhdGVyLCA0KSBcCiAgICAgICAgIG1hY3JvKG9w
X2puZ3JlYXRlcmVxLCA0KSBcCi0gICAgICAgIG1hY3JvKG9wX2ptcF9zY29wZXMsIDMpIFwKICAg
ICAgICAgbWFjcm8ob3BfbG9vcCwgMikgXAogICAgICAgICBtYWNybyhvcF9sb29wX2lmX3RydWUs
IDMpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl9mYWxzZSwgMykgXApAQCAtMTgzLDcgKzE4
MiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9wdXNo
X3Njb3BlLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX3BvcF9zY29wZSwgMSkgXAotICAgICAgICBt
YWNybyhvcF9wdXNoX25ld19zY29wZSwgNCkgXAorICAgICAgICBcCisgICAgICAgIG1hY3JvKG9w
X2Fzc2VydF9sYXp5X3JlZ19pbml0LCAyKSBcCisgICAgICAgIG1hY3JvKG9wX2Fzc2VydF9sYXp5
X3JlZ19ub3RfaW5pdCwgMikgXAorICAgICAgICBcCisgICAgICAgIG1hY3JvKG9wX3JlaWZ5X3Nj
b3BlLCA0KSBcCisgICAgICAgIG1hY3JvKG9wX3RlYXJfb2ZmX3Njb3BlLCAyKSBcCiAgICAgICAg
IFwKICAgICAgICAgbWFjcm8ob3BfY2F0Y2gsIDIpIFwKICAgICAgICAgbWFjcm8ob3BfdGhyb3cs
IDIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNGE2ZjQ2NTNlYWI4OTJmYzZkYTBkYjkzY2I0OWNi
MTU3MWE2YWRmYi4uZWVjZmE2N2MyZjhjYjZlMDZhYTJjNGQ3MjQ4MmJkMjhlNzU3NzhlYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCYXRjaGVkVHJhbnNp
dGlvbk9wdGltaXplci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVk
ZSAiU2NvcGVDaGFpbi5oIgpAQCAtMTMyLDE0ICsxMzMsMjIgQEAgdm9pZCBMYWJlbDo6c2V0TG9j
YXRpb24odW5zaWduZWQgbG9jYXRpb24pCiB2b2lkIFJlc29sdmVSZXN1bHQ6OmNoZWNrVmFsaWRp
dHkoKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBBcmd1bWVudHM6CisgICAg
Y2FzZSBSZWFkT25seUFyZ3VtZW50czoKICAgICBjYXNlIFJlZ2lzdGVyOgogICAgIGNhc2UgUmVh
ZE9ubHlSZWdpc3RlcjoKKyAgICBjYXNlIEJhcnJpZXJSZWdpc3RlcjoKKyAgICBjYXNlIFJlYWRP
bmx5QmFycmllclJlZ2lzdGVyOgogICAgICAgICBBU1NFUlQobV9sb2NhbCk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIExleGljYWw6CiAgICAgY2FzZSBSZWFkT25seUxleGljYWw6CisgICAg
Y2FzZSBCYXJyaWVyTGV4aWNhbDoKKyAgICBjYXNlIFJlYWRPbmx5QmFycmllckxleGljYWw6CiAg
ICAgY2FzZSBEeW5hbWljTGV4aWNhbDoKICAgICBjYXNlIER5bmFtaWNSZWFkT25seUxleGljYWw6
CisgICAgY2FzZSBEeW5hbWljQmFycmllckxleGljYWw6CisgICAgY2FzZSBEeW5hbWljUmVhZE9u
bHlCYXJyaWVyTGV4aWNhbDoKICAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gbWlzc2luZ1N5bWJv
bE1hcmtlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgR2xvYmFsOgpAQCAtMjM4LDYg
KzI0Nyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9k
ZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzCiAgICAgLCBtX3RoaXNSZWdpc3RlcihD
YWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkK
ICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRoKDAp
CiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVUeXBlKEdsb2JhbENvZGUp
CiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQpAQCAtMzA5LDYgKzMxOSw3IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlv
bkJvZHksIFNjb3BlQ2hhaW5OCiAgICAgLCBtX2FjdGl2YXRpb25SZWdpc3RlcigwKQogICAgICwg
bV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1f
YmxvY2tTY29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBtX2Nv
ZGVUeXBlKEZ1bmN0aW9uQ29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCkBAIC00
NzAsNiArNDgxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxO
b2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2gKICAgICAsIG1fdGhpc1JlZ2lz
dGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2ZpbmFsbHlEZXB0
aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQorICAgICwgbV9ibG9ja1Njb3BlRGVw
dGgoMCkKICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoY29kZUJsb2NrLT5iYXNlU2NvcGVEZXB0aCgp
KQogICAgICwgbV9jb2RlVHlwZShFdmFsQ29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0
KDApCkBAIC01MzYsMzMgKzU0OCw2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFBhcmFt
ZXRlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgaW50IHBhcmFtZXRlckluZGV4CiAgICAgbV9j
b2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwogfQogCi1ib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjp3
aWxsUmVzb2x2ZVRvQXJndW1lbnRzKGNvbnN0IElkZW50aWZpZXImIGlkZW50KQotewotICAgIGlm
IChpZGVudCAhPSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgaWYgKCFzaG91bGRPcHRpbWl6ZUxvY2FscygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxl
KCkuZ2V0KGlkZW50LmltcGwoKSk7Ci0gICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkg
JiYgbV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OnVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCkKLXsKLSAgICBBU1NFUlQod2lsbFJlc29s
dmVUb0FyZ3VtZW50cyhwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSk7Ci0KLSAgICBTeW1ib2xU
YWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHlOYW1lcygpLmFyZ3Vt
ZW50cy5pbXBsKCkpOwotICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgIHJldHVybiAm
cmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSk7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKiByZWcp
CiB7CiAgICAgaWYgKG1fbGFzdExhenlGdW5jdGlvbiA8PSByZWctPmluZGV4KCkgfHwgcmVnLT5p
bmRleCgpIDwgbV9maXJzdExhenlGdW5jdGlvbikKQEAgLTExNTQsMzcgKzExMzksODQgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNW
YWx1ZSB2KQogICAgIHJldHVybiBjb25zdGFudElEOwogfQogCi1SZXNvbHZlUmVzdWx0IEJ5dGVj
b2RlR2VuZXJhdG9yOjpyZXNvbHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorUmVzb2x2
ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSwgdW5zaWduZWQgcmVzb2x2ZUZsYWdzKQogewogICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9w
ZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0
OjpyZWdpc3RlclJlc29sdmUodGhpc1JlZ2lzdGVyKCksIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5
RmxhZyk7CiAKKyAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IG1fc2NvcGVDaGFpbi0+YmVn
aW4oKTsKKyAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gbV9zY29wZUNoYWluLT5lbmQoKTsK
KworICAgIGludCBkZXB0aCA9IDA7CisgICAgdW5zaWduZWQgZmxhZ3MgPSAwOworICAgIGZvciAo
aW50IGkgPSBzY29wZURlcHRoKCktMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgc3dpdGNoICht
X3Njb3BlQ29udGV4dFN0YWNrW2ldLmJsb2NrVHlwZSkgeworICAgICAgICBjYXNlIFdpdGhCbG9j
azoKKyAgICAgICAgICAgIC8vIEluIHRoZW9yeSB3ZSBzaG91bGQgYmUgYWJsZSB0byBza2lwIGlu
dGVydmVuaW5nIGJsb2NrIHNjb3BlCisgICAgICAgICAgICAvLyBvYmplY3RzLCBidXQgd2UgZG9u
J3Qga25vdyB3aGljaCBvZiB0aGUgTGF6aWx5UmVpZnkgb25lcyBoYXZlCisgICAgICAgICAgICAv
LyBhY3R1YWxseSBiZWVuIHJlaWZpZWQuIEluc3RlYWQgb2YgZm9yY2luZyBlYWdlciByZWlmaWNh
dGlvbiwKKyAgICAgICAgICAgIC8vIHdlJ2xsIHBlc3NpbWl6ZSAid2l0aCIgcmVzb2x1dGlvbiwg
Zm9yY2luZyBpdCB0byBzdGFydCBmcm9tIHRoZQorICAgICAgICAgICAgLy8gdG9wIG9mIHRoZSBz
Y29wZSBjaGFpbi4KKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVz
b2x2ZSgwKTsKKyAgICAgICAgY2FzZSBGaW5hbGx5QmxvY2s6CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgY2FzZSBTY29wZUJsb2NrOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQoKTsKKyAgICAgICAg
QVNTRVJUKGN1cnJlbnRTY29wZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAgICAgICAgSlNT
dGF0aWNTY29wZU9iamVjdCogY3VycmVudFN0YXRpY1Njb3BlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNTdGF0aWNTY29wZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CisgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBjdXJyZW50U3RhdGljU2NvcGVPYmplY3QtPnN5bWJvbFRhYmxlKCkuZ2V0
KHByb3BlcnR5LmltcGwoKSk7CisKKyAgICAgICAgLy8gQmxvY2stc2NvcGVkIHByb3BlcnR5Lgor
ICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEKiBs
b2NhbCA9IG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0LmJhc2VSZWdpc3RlciAr
IGVudHJ5LmdldEluZGV4KCk7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKQor
ICAgICAgICAgICAgICAgIGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZzsKKyAg
ICAgICAgICAgIGlmIChlbnRyeS5oYXNUZW1wb3JhbERlYWRab25lKCkpCisgICAgICAgICAgICAg
ICAgZmxhZ3MgfD0gUmVzb2x2ZVJlc3VsdDo6QmFycmllckZsYWc7CisgICAgICAgICAgICByZXR1
cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKGxvY2FsLCBmbGFncyk7CisgICAgICAg
IH0KKyAgICAgICAgKytkZXB0aDsKKyAgICAgICAgKytpdGVyOworICAgIH0KKwogICAgIC8vIENo
ZWNrIGlmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgYWxsb2NhdGVkIGluIGEgcmVnaXN0ZXIuCi0g
ICAgaWYgKG1fY29kZVR5cGUgIT0gR2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxvY2Fscygp
KSB7CisgICAgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwog
ICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAocHJvcGVydHkg
PT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICBjcmVhdGVBcmd1
bWVudHNJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSBlbnRyeS5p
c1JlYWRPbmx5KCkgPyBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcgOiAwOwogICAgICAgICAg
ICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVn
aXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOworICAgICAgICAgICAgaWYgKGVudHJ5LmlzUmVh
ZE9ubHkoKSkKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBSZXNvbHZlUmVzdWx0OjpSZWFkT25s
eUZsYWc7CisgICAgICAgICAgICBpZiAoZW50cnkuaGFzVGVtcG9yYWxEZWFkWm9uZSgpKQorICAg
ICAgICAgICAgICAgIGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OkJhcnJpZXJGbGFnOworICAgICAg
ICAgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMgJiYgbV9jb2Rl
QmxvY2stPnVzZXNBcmd1bWVudHMoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzU3RyaWN0TW9kZSgpCisgICAgICAgICAgICAgICAgICAgICYmICEocmVzb2x2ZUZsYWdz
ICYgQnl0ZWNvZGVHZW5lcmF0b3I6OkRvbnRDcmVhdGVBcmd1bWVudHNGbGFnKSkgeworICAgICAg
ICAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVudHMpOworICAgICAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2stPmFyZ3VtZW50c1Jl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmbGFncyB8PSBS
ZXNvbHZlUmVzdWx0OjpBcmd1bWVudHNGbGFnOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZShsb2NhbCwgZmxhZ3MpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgLy8gQ2FzZXMgd2hlcmUgd2UgY2Fubm90IHN0YXRpY2FsbHkg
b3B0aW1pemUgdGhlIGxvb2t1cC4KLSAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cyB8fCAhY2FuT3B0aW1pemVOb25Mb2NhbHMoKSkKLSAgICAgICAgcmV0dXJuIFJl
c29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKDApOworICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzCisgICAgICAgIHx8IG1fY29kZVR5cGUgPT0gRXZhbENvZGUK
KyAgICAgICAgfHwgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJsb2NrLT51
c2VzRXZhbCgpICYmICFtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpKQorICAgICAgICByZXR1
cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoZGVwdGgpOwogCi0gICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0
ZXJhdG9yIGVuZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsK
LSAgICB1bnNpZ25lZCBmbGFncyA9IDA7CisgICAgZGVwdGggKz0gbV9jb2RlQmxvY2stPm5lZWRz
RnVsbFNjb3BlQ2hhaW4oKTsKICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytkZXB0
aCkgewogICAgICAgICBKU09iamVjdCogY3VycmVudFNjb3BlID0gaXRlci0+Z2V0KCk7Ci0gICAg
ICAgIGlmICghY3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpIHsKLSAgICAgICAgICAg
IGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OkR5bmFtaWNGbGFnOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICBpZiAoIWN1cnJlbnRTY29wZS0+aXNWYXJpYWJs
ZU9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNv
bHZlKGRlcHRoKTsKKwogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKICAg
ICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+c3lt
Ym9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKIApAQCAtMTE5Miw3ICsxMjI0LDggQEAg
UmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eSkKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewogICAgICAgICAgICAg
aWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkKICAgICAgICAgICAgICAgICBmbGFncyB8PSBSZXNvbHZl
UmVzdWx0OjpSZWFkT25seUZsYWc7Ci0gICAgICAgICAgICBkZXB0aCArPSBtX2NvZGVCbG9jay0+
bmVlZHNGdWxsU2NvcGVDaGFpbigpOworICAgICAgICAgICAgaWYgKGVudHJ5Lmhhc1RlbXBvcmFs
RGVhZFpvbmUoKSkKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBSZXNvbHZlUmVzdWx0OjpCYXJy
aWVyRmxhZzsKICAgICAgICAgICAgIGlmICgrK2l0ZXIgPT0gZW5kKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGZsYWdzICYgUmVzb2x2ZVJlc3VsdDo6RHluYW1pY0ZsYWcpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5hbWljSW5kZXhlZEdsb2JhbFJlc29sdmUo
ZW50cnkuZ2V0SW5kZXgoKSwgZGVwdGgsIGN1cnJlbnRTY29wZSwgZmxhZ3MpOwpAQCAtMTIxMyw3
ICsxMjQ2LDYgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIAogICAgIC8vIENhbid0IGxvY2F0ZSB0aGUgcHJvcGVy
dHkgYnV0IHdlJ3JlIGFibGUgdG8gYXZvaWQgYSBmZXcgbG9va3Vwcy4KICAgICBKU09iamVjdCog
c2NvcGUgPSBpdGVyLT5nZXQoKTsKLSAgICBkZXB0aCArPSBtX2NvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpOwogICAgIGlmICgrK2l0ZXIgPT0gZW5kKSB7CiAgICAgICAgIGlmICgoZmxh
Z3MgJiBSZXNvbHZlUmVzdWx0OjpEeW5hbWljRmxhZykgJiYgZGVwdGgpCiAgICAgICAgICAgICBy
ZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY0dsb2JhbFJlc29sdmUoZGVwdGgsIHNjb3BlKTsK
QEAgLTE0MjcsMTIgKzE0NTksMzAgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRHZXRTdGF0aWNWYXIoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmUKICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGUgPSAwOwogCiAgICAgc3dpdGNoIChyZXNvbHZlUmVzdWx0LnR5cGUo
KSkgeworICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6QmFycmllclJlZ2lzdGVyOgorICAgIGNhc2Ug
UmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlCYXJyaWVyUmVnaXN0ZXI6CisgICAgICAgIGVtaXRPcGNv
ZGUob3BfYXNzZXJ0X2xhenlfcmVnX2luaXQpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocmVzb2x2ZVJlc3VsdC5sb2NhbCgpLT5pbmRleCgpKTsKKyAgICAgICAgLy8gZmFsbCB0aHJv
dWdoCisgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpBcmd1bWVudHM6CisgICAgY2FzZSBSZXNvbHZl
UmVzdWx0OjpSZWFkT25seUFyZ3VtZW50czoKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlZ2lz
dGVyOgogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlSZWdpc3RlcjoKICAgICAgICAg
aWYgKGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgcmV0dXJuIG1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXNvbHZlUmVzdWx0Lmxv
Y2FsKCkpOwogCisgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpCYXJyaWVyTGV4aWNhbDoKKyAgICBj
YXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5QmFycmllckxleGljYWw6CisgICAgICAgIHByb2Zp
bGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X3Njb3BlZF92YXIpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlc29sdmVSZXN1bHQuaW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChyZXNvbHZlUmVzdWx0LmRlcHRoKCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocHJvZmlsZSk7CisgICAgICAgIGVtaXRPcGNvZGUob3BfYXNzZXJ0X2xhenlfcmVnX2luaXQp
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICAgICAg
cmV0dXJuIGRzdDsKKwogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6TGV4aWNhbDoKICAgICBjYXNl
IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5TGV4aWNhbDoKICAgICAgICAgcHJvZmlsZSA9IGVtaXRQ
cm9maWxlZE9wY29kZShvcF9nZXRfc2NvcGVkX3Zhcik7CkBAIC0xNDY3LDEyICsxNTE3LDI5IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFB1dFN0YXRpY1Zhcihjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVzdWx0LCBSZWdp
c3RlcklEKiB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHJlc29sdmVSZXN1bHQudHlwZSgpKSB7Cisg
ICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUFyZ3VtZW50czoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5QmFycmll
clJlZ2lzdGVyOgorICAgICAgICBlbWl0T3Bjb2RlKG9wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5p
dCk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmxvY2FsKCkt
PmluZGV4KCkpOworICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIFJlc29sdmVSZXN1
bHQ6OkJhcnJpZXJSZWdpc3RlcjoKKyAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkFyZ3VtZW50czoK
ICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlZ2lzdGVyOgogICAgIGNhc2UgUmVzb2x2ZVJlc3Vs
dDo6UmVhZE9ubHlSZWdpc3RlcjoKICAgICAgICAgcmV0dXJuIG1vdmVUb0Rlc3RpbmF0aW9uSWZO
ZWVkZWQocmVzb2x2ZVJlc3VsdC5sb2NhbCgpLCB2YWx1ZSk7CiAKLSAgICBjYXNlIFJlc29sdmVS
ZXN1bHQ6OkxleGljYWw6CisgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUJhcnJpZXJM
ZXhpY2FsOgogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlMZXhpY2FsOgorICAgICAg
ICAvLyBDYWxsZXJzIG11c3QgY2hlY2sgZm9yIFJlc29sdmVSZXN1bHQ6OmlzUmVhZE9ubHkoKSwg
YW5kIG5vdCB1c2UgdGhpcworICAgICAgICAvLyBmdW5jdGlvbiBpbiB0aGF0IGNhc2UuIEl0IGlz
IG9ubHkgdmFsaWQgdG8gaW5pdGlhbGl6ZSBhIGNvbnN0CisgICAgICAgIC8vIHZhcmlhYmxlIGZy
b20gaXRzIGluaXRpYWxpemVyLiBBbnkgb3RoZXIgYXR0ZW1wdCBzaG91bGQgZ28gdGhyb3VnaAor
ICAgICAgICAvLyB0aGUgZHluYW1pYyBtZWNoYW5pc20uCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworCisgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpCYXJyaWVyTGV4aWNhbDoKKyAgICBj
YXNlIFJlc29sdmVSZXN1bHQ6OkxleGljYWw6CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X3Nj
b3BlZF92YXIpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5p
bmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQuZGVw
dGgoKSk7CkBAIC0xNzI2LDcgKzE3OTMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uQm9keQogCiBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVn
aXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKIHsKLSAgICBj
cmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICByZWlmeVNjb3BlcygpOwogICAgIGVt
aXRPcGNvZGUob3BfbmV3X2Z1bmMpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleCk7CkBAIC0xNzQ3LDcgKzE4
MTQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uRXhw
cmVzc2lvbihSZWdpc3RlcklEKiByMCwgRnVuY0V4cAogICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1
bmN0aW9uID0gbi0+Ym9keSgpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gbV9jb2RlQmxvY2stPmFk
ZEZ1bmN0aW9uRXhwcihtYWtlRnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOwogICAg
IAotICAgIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpOworICAgIHJlaWZ5U2NvcGVzKCk7
CiAgICAgZW1pdE9wY29kZShvcF9uZXdfZnVuY19leHApOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChyMC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKQEAg
LTE3NTksMzQgKzE4MjYsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENh
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQQogICAgIHJldHVybiBl
bWl0Q2FsbChvcF9jYWxsLCBkc3QsIGZ1bmMsIGNhbGxBcmd1bWVudHMsIGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQXJn
dW1lbnRzSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29k
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbV9jb2RlQmxvY2stPnVzZXNBcmd1
bWVudHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UncmUgaW4gc3RyaWN0IG1v
ZGUgd2UgdGVhciBvZmYgdGhlIGFyZ3VtZW50cyBvbiBmdW5jdGlvbgotICAgIC8vIGVudHJ5LCBz
byB0aGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgaWYgd2UgbmVlZCB0byBjcmVhdGUgdGhlbQotICAg
IC8vIG5vdwotICAgIGlmIChtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKLX0KLQot
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCkKLXsK
LSAgICBpZiAobV9oYXNDcmVhdGVkQWN0aXZhdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FjdGl2YXRpb24pOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtX2FjdGl2YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7Ci19Ci0KIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKIHsKICAgICByZXR1cm4g
ZW1pdENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1bmMsIGNhbGxBcmd1bWVudHMsIGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKQEAgLTE5NjksOSArMjAwOCwxMCBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBzcmMpCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaFNjb3BlKFJl
Z2lzdGVySUQqIHNjb3BlKQogeworICAgIHJlaWZ5U2NvcGVzKCk7CiAgICAgQVNTRVJUKHNjb3Bl
LT5pc1RlbXBvcmFyeSgpKTsKICAgICBDb250cm9sRmxvd0NvbnRleHQgY29udGV4dDsKLSAgICBj
b250ZXh0LmlzRmluYWxseUJsb2NrID0gZmFsc2U7CisgICAgY29udGV4dC5ibG9ja1R5cGUgPSBX
aXRoQmxvY2s7CiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5hcHBlbmQoY29udGV4dCk7CiAgICAg
bV9keW5hbWljU2NvcGVEZXB0aCsrOwogCkBAIC0xOTgxLDcgKzIwMjEsNyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hTY29wZShSZWdpc3RlcklEKiBzY29wZSkKIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSgpCiB7CiAgICAgQVNTRVJUKG1fc2Nv
cGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKLSAgICBBU1NFUlQoIW1fc2NvcGVDb250ZXh0U3RhY2su
bGFzdCgpLmlzRmluYWxseUJsb2NrKTsKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5s
YXN0KCkuYmxvY2tUeXBlID09IFdpdGhCbG9jayk7CiAKICAgICBlbWl0T3Bjb2RlKG9wX3BvcF9z
Y29wZSk7CiAKQEAgLTIwMDcsNyArMjA0Nyw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXREZWJ1Z0hvb2soRGVidWdIb29rSUQgZGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGluCiB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQoTGFiZWwqIHRhcmdldCwg
UmVnaXN0ZXJJRCogcmV0QWRkckRzdCkKIHsKICAgICBDb250cm9sRmxvd0NvbnRleHQgc2NvcGU7
Ci0gICAgc2NvcGUuaXNGaW5hbGx5QmxvY2sgPSB0cnVlOworICAgIHNjb3BlLmJsb2NrVHlwZSA9
IEZpbmFsbHlCbG9jazsKICAgICBGaW5hbGx5Q29udGV4dCBjb250ZXh0ID0geyB0YXJnZXQsIHJl
dEFkZHJEc3QgfTsKICAgICBzY29wZS5maW5hbGx5Q29udGV4dCA9IGNvbnRleHQ7CiAgICAgbV9z
Y29wZUNvbnRleHRTdGFjay5hcHBlbmQoc2NvcGUpOwpAQCAtMjAxNyw3ICsyMDU3LDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZpbmFsbHlDb250ZXh0KExhYmVsKiB0YXJnZXQsIFJl
Z2lzdGVySUQqIHJldEFkZHJEc3QKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZpbmFsbHlD
b250ZXh0KCkKIHsKICAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOwotICAg
IEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlCbG9jayk7CisgICAg
QVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmJsb2NrVHlwZSA9PSBGaW5hbGx5Qmxv
Y2spOwogICAgIEFTU0VSVChtX2ZpbmFsbHlEZXB0aCA+IDApOwogICAgIG1fc2NvcGVDb250ZXh0
U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgIG1fZmluYWxseURlcHRoLS07CkBAIC0yMTAwLDcwICsy
MTQwLDYgQEAgTGFiZWxTY29wZSogQnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnRpbnVlVGFyZ2V0KGNv
bnN0IElkZW50aWZpZXImIG5hbWUpCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8TGFi
ZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleEp1bXBTY29wZXMoTGFiZWwqIHRhcmdl
dCwgQ29udHJvbEZsb3dDb250ZXh0KiB0b3BTY29wZSwgQ29udHJvbEZsb3dDb250ZXh0KiBib3R0
b21TY29wZSkKLXsKLSAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21TY29wZSkgewotICAgICAg
ICAvLyBGaXJzdCB3ZSBjb3VudCB0aGUgbnVtYmVyIG9mIGR5bmFtaWMgc2NvcGVzIHdlIG5lZWQg
dG8gcmVtb3ZlIHRvIGdldAotICAgICAgICAvLyB0byBhIGZpbmFsbHkgYmxvY2suCi0gICAgICAg
IGludCBuTm9ybWFsU2NvcGVzID0gMDsKLSAgICAgICAgd2hpbGUgKHRvcFNjb3BlID4gYm90dG9t
U2NvcGUpIHsKLSAgICAgICAgICAgIGlmICh0b3BTY29wZS0+aXNGaW5hbGx5QmxvY2spCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICArK25Ob3JtYWxTY29wZXM7Ci0gICAgICAg
ICAgICAtLXRvcFNjb3BlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5Ob3JtYWxTY29wZXMp
IHsKLSAgICAgICAgICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKLQot
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgYSBudW1iZXIgb2YgZHluYW1pYyBzY29w
ZXMgdG8gZ2V0IHRvIHRoZSBuZXh0Ci0gICAgICAgICAgICAvLyBmaW5hbGx5IGJsb2NrCi0gICAg
ICAgICAgICBlbWl0T3Bjb2RlKG9wX2ptcF9zY29wZXMpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKG5Ob3JtYWxTY29wZXMpOwotCi0gICAgICAgICAgICAvLyBJZiB0b3BTY29w
ZSA9PSBib3R0b21TY29wZSB0aGVuIHRoZXJlIGlzbid0IGFjdHVhbGx5IGEgZmluYWxseSBibG9j
awotICAgICAgICAgICAgLy8gbGVmdCB0byBlbWl0LCBzbyBtYWtlIHRoZSBqbXBfc2NvcGVzIGp1
bXAgZGlyZWN0bHkgdG8gdGhlIHRhcmdldCBsYWJlbAotICAgICAgICAgICAgaWYgKHRvcFNjb3Bl
ID09IGJvdHRvbVNjb3BlKSB7Ci0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gT3Ro
ZXJ3aXNlIHdlIGp1c3QgdXNlIGptcF9zY29wZXMgdG8gcG9wIGEgZ3JvdXAgb2Ygc2NvcGVzIGFu
ZCBnbwotICAgICAgICAgICAgLy8gdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAg
IFJlZlB0cjxMYWJlbD4gbmV4dEluc24gPSBuZXdMYWJlbCgpOwotICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG5leHRJbnNuLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpKTsKLSAgICAgICAgICAgIGVtaXRMYWJlbChuZXh0SW5zbi5nZXQoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21TY29wZSAmJiB0b3BTY29wZS0+aXNG
aW5hbGx5QmxvY2spIHsKLSAgICAgICAgICAgIGVtaXRKdW1wU3Vicm91dGluZSh0b3BTY29wZS0+
ZmluYWxseUNvbnRleHQucmV0QWRkckRzdCwgdG9wU2NvcGUtPmZpbmFsbHlDb250ZXh0LmZpbmFs
bHlBZGRyKTsKLSAgICAgICAgICAgIC0tdG9wU2NvcGU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIGVtaXRKdW1wKHRhcmdldCk7Ci19Ci0KLVBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBpbnQgdGFyZ2V0U2NvcGVE
ZXB0aCkKLXsKLSAgICBBU1NFUlQoc2NvcGVEZXB0aCgpIC0gdGFyZ2V0U2NvcGVEZXB0aCA+PSAw
KTsKLSAgICBBU1NFUlQodGFyZ2V0LT5pc0ZvcndhcmQoKSk7Ci0KLSAgICBzaXplX3Qgc2NvcGVE
ZWx0YSA9IHNjb3BlRGVwdGgoKSAtIHRhcmdldFNjb3BlRGVwdGg7Ci0gICAgQVNTRVJUKHNjb3Bl
RGVsdGEgPD0gbV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOwotICAgIGlmICghc2NvcGVEZWx0
YSkKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wKHRhcmdldCk7Ci0KLSAgICBpZiAobV9maW5hbGx5
RGVwdGgpCi0gICAgICAgIHJldHVybiBlbWl0Q29tcGxleEp1bXBTY29wZXModGFyZ2V0LCAmbV9z
Y29wZUNvbnRleHRTdGFjay5sYXN0KCksICZtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKSAtIHNj
b3BlRGVsdGEpOwotCi0gICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwot
Ci0gICAgZW1pdE9wY29kZShvcF9qbXBfc2NvcGVzKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoc2NvcGVEZWx0YSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChi
ZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIHRhcmdldDsKLX0KLQog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRQcm9wZXJ0eU5hbWVzKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogaSwgUmVnaXN0ZXJJRCog
c2l6ZSwgTGFiZWwqIGJyZWFrVGFyZ2V0KQogewogICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0
aW9ucygpLnNpemUoKTsKQEAgLTIxOTYsMTIgKzIxNzIsMTIgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRDYXRjaChSZWdpc3RlcklEKiB0YXJnZXRSZWdpc3RlciwgTGFiZWwq
IHN0YXIKICAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKICNpZiBFTkFCTEUoSklUKQogI2lm
IEVOQUJMRShMTElOVCkKLSAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+YmluZCgwLCAw
KSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1pY1Njb3Bl
RGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+
KCZsbGludF9vcF9jYXRjaCkpKSB9OworICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5i
aW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9keW5h
bWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCwgQ29k
ZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfY2F0Y2gpKSkgfTsKICNlbHNl
Ci0gICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgw
LCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9iYXNl
U2NvcGVEZXB0aCwgQ29kZUxvY2F0aW9uTGFiZWwoKSB9OworICAgIEhhbmRsZXJJbmZvIGluZm8g
PSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNp
emUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsgbV9iYXNlU2Nv
cGVEZXB0aCwgQ29kZUxvY2F0aW9uTGFiZWwoKSB9OwogI2VuZGlmCiAjZWxzZQotICAgIEhhbmRs
ZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3Ry
dWN0aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGgg
fTsKKyAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+YmluZCgwLCAwKSwgZW5kLT5iaW5k
KDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Js
b2NrU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGggfTsKICNlbmRpZgogCiAgICAgbV9jb2Rl
QmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRsZXIoaW5mbyk7CkBAIC0yMjMzLDE3ICsyMjA5LDIwMiBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0U3Vicm91dGluZVJldHVybihSZWdpc3RlcklE
KiByZXRBZGRyU3JjKQogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXRBZGRyU3JjLT5pbmRl
eCgpKTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hOZXdTY29wZShSZWdp
c3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1
ZSkKK3N0cnVjdCBSZWlmaWNhdGlvbldvcmtsaXN0SXRlbSB7CisgICAgUmVnaXN0ZXJJRCogcmVp
ZmllZFNjb3BlUmVnaXN0ZXI7CisgICAgSlNPYmplY3QqIHNjb3BlVGVtcGxhdGU7CisgICAgUmVn
aXN0ZXJJRCogYmFzZVJlZ2lzdGVyOworfTsKKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cmVp
ZnlTY29wZXMoKQoreworICAgIFZlY3RvcjxSZWlmaWNhdGlvbldvcmtsaXN0SXRlbT4gd29ya2xp
c3Q7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7
CisgICAgaW50IGk7CisKKyAgICAvLyBGaXJzdCwgd2FsayB0aGUgc2NvcGUgY2hhaW4gdG8gc2Vl
IHdoYXQgbWlnaHQgbmVlZCByZWlmaWNhdGlvbi4KKyAgICBmb3IgKGkgPSBzY29wZURlcHRoKCkt
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgc3dpdGNoIChtX3Njb3BlQ29udGV4dFN0YWNrW2ld
LmJsb2NrVHlwZSkgeworICAgICAgICBjYXNlIFdpdGhCbG9jazoKKyAgICAgICAgICAgIC8vIFB1
c2hpbmcgYSBgd2l0aCcgYmxvY2sgZm9yY2VzIG91dGVyIHNjb3BlcyB0byBiZSByZWlmaWVkLCBz
byB3ZQorICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBkbyBzbyBoZXJlLgorICAgICAgICAg
ICAgZ290byByZWlmeTsKKyAgICAgICAgY2FzZSBGaW5hbGx5QmxvY2s6CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgY2FzZSBTY29wZUJsb2NrOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQoKTsKKyAg
ICAgICAgQVNTRVJUKGN1cnJlbnRTY29wZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAgICAg
ICAgKytpdGVyOworCisgICAgICAgIHN3aXRjaCAobV9zY29wZUNvbnRleHRTdGFja1tpXS5zY29w
ZUNvbnRleHQucmVpZnlNb2RlKSB7CisgICAgICAgIGNhc2UgU2NvcGVDb250ZXh0OjpFYWdlcmx5
UmVpZnk6CisgICAgICAgICAgICAvLyBMaWtlIGEgYHdpdGgnIGJsb2NrLCBlbnRlcmluZyBhbiBF
YWdlcmx5UmVpZnkgYmxvY2sgZm9yY2VzCisgICAgICAgICAgICAvLyByZWlmaWNhdGlvbiwgc28g
d2UgbmVlZCBsb29rIG5vIGZhcnRoZXIuCisgICAgICAgICAgICBnb3RvIHJlaWZ5OworICAgICAg
ICBjYXNlIFNjb3BlQ29udGV4dDo6TGF6aWx5UmVpZnk6IHsKKyAgICAgICAgICAgIFJlaWZpY2F0
aW9uV29ya2xpc3RJdGVtIGl0ZW07CisgICAgICAgICAgICBpdGVtLnJlaWZpZWRTY29wZVJlZ2lz
dGVyID0gbV9zY29wZUNvbnRleHRTdGFja1tpXS5zY29wZUNvbnRleHQubGFzdFJlZ2lzdGVyOwor
ICAgICAgICAgICAgaXRlbS5zY29wZVRlbXBsYXRlID0gY3VycmVudFNjb3BlOworICAgICAgICAg
ICAgaXRlbS5iYXNlUmVnaXN0ZXIgPSBtX3Njb3BlQ29udGV4dFN0YWNrW2ldLnNjb3BlQ29udGV4
dC5iYXNlUmVnaXN0ZXI7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoaXRlbSk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBjYXNlIFNjb3BlQ29udGV4dDo6TmV2ZXJSZWlm
eToKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKK3JlaWZ5OgorICAgIC8vIElmIHdlIHRyYXZlcnNlZCB0aHJvdWdoIHRoZSB3aG9sZSBi
bG9jayBzY29wZSBjaGFpbiwgcGVyaGFwcyB3ZSBuZWVkIHRvCisgICAgLy8gcmVpZnkgdGhlIGFj
dGl2YXRpb24gZm9yIHRoZSBmdW5jdGlvbi4KKyAgICBpZiAoaSA8IDAgJiYgIW1faGFzQ3JlYXRl
ZEFjdGl2YXRpb24gJiYgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkgeworICAg
ICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hY3RpdmF0aW9uKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICB9CisKKyAg
ICB3aGlsZSAod29ya2xpc3Quc2l6ZSgpKSB7CisgICAgICAgIFJlaWZpY2F0aW9uV29ya2xpc3RJ
dGVtIGl0ZW0gPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogdGVtcGwgPSBlbWl0TG9hZCgwLCBKU1ZhbHVlKGl0ZW0u
c2NvcGVUZW1wbGF0ZSkpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX3JlaWZ5X3Njb3BlKTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGl0ZW0ucmVpZmllZFNjb3BlUmVnaXN0ZXItPmlu
ZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGVtcGwtPmluZGV4KCkpOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXRlbS5iYXNlUmVnaXN0ZXItPmluZGV4KCkp
OworICAgIH0KK30KKworUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRK
dW1wU2NvcGVzKExhYmVsKiB0YXJnZXQsIGludCB0YXJnZXRTY29wZURlcHRoKQoreworICAgIEFT
U0VSVChzY29wZURlcHRoKCkgLSB0YXJnZXRTY29wZURlcHRoID49IDApOworICAgIEFTU0VSVCh0
YXJnZXQtPmlzRm9yd2FyZCgpKTsKKworICAgIHNpemVfdCBzY29wZURlbHRhID0gc2NvcGVEZXB0
aCgpIC0gdGFyZ2V0U2NvcGVEZXB0aDsKKyAgICBBU1NFUlQoc2NvcGVEZWx0YSA8PSBtX3Njb3Bl
Q29udGV4dFN0YWNrLnNpemUoKSk7CisKKyAgICB3aGlsZSAoc2NvcGVEZWx0YS0tKSB7CisgICAg
ICAgIENvbnRyb2xGbG93Q29udGV4dCogY29udGV4dCA9ICZtX3Njb3BlQ29udGV4dFN0YWNrW3Rh
cmdldFNjb3BlRGVwdGggKyBzY29wZURlbHRhXTsKKyAgICAgICAgc3dpdGNoIChjb250ZXh0LT5i
bG9ja1R5cGUpIHsKKyAgICAgICAgY2FzZSBXaXRoQmxvY2s6CisgICAgICAgICAgICBlbWl0T3Bj
b2RlKG9wX3BvcF9zY29wZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaW5h
bGx5QmxvY2s6CisgICAgICAgICAgICBlbWl0SnVtcFN1YnJvdXRpbmUoY29udGV4dC0+ZmluYWxs
eUNvbnRleHQucmV0QWRkckRzdCwgY29udGV4dC0+ZmluYWxseUNvbnRleHQuZmluYWxseUFkZHIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2NvcGVCbG9jazoKKyAgICAgICAg
ICAgIHN3aXRjaCAoY29udGV4dC0+c2NvcGVDb250ZXh0LnJlaWZ5TW9kZSkgeworICAgICAgICAg
ICAgY2FzZSBTY29wZUNvbnRleHQ6OkVhZ2VybHlSZWlmeToKKyAgICAgICAgICAgIGNhc2UgU2Nv
cGVDb250ZXh0OjpMYXppbHlSZWlmeToKKyAgICAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX3Rl
YXJfb2ZmX3Njb3BlKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29u
dGV4dC0+c2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNjb3BlQ29udGV4dDo6TmV2ZXJSZWlmeToKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQtLTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZW1pdEp1bXAodGFyZ2V0KTsKK30KKwordm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6cHVzaEJsb2NrU2NvcGUoSlNTdGF0aWNTY29wZU9iamVjdCAqc2NvcGVUZW1wbGF0
ZSwgU2NvcGVDb250ZXh0OjpSZWlmeU1vZGUgcmVpZnlNb2RlKQogeworICAgIC8vIFJlc2VydmUg
YSBibG9jayBvZiBjb250aWd1b3VzIHJlZ2lzdGVycyBmb3IgdGhlIHZhcmlhYmxlcy4gV2UgaG9s
ZCBhCisgICAgLy8gcmVmZXJlbmNlIG9uIHRoZSBsYXN0IHJlZ2lzdGVyLCBwcmV2ZW50aW5nIHJl
Y2xhbWF0aW9uIG9mIGFueSBwcmV2aW91cworICAgIC8vIHJlZ2lzdGVyLgorICAgIC8vCisgICAg
Ly8gSW4gdGhlIGZ1dHVyZSB3ZSdsbCBzaHVmZmxlIGFyb3VuZCB0aGUgc3ltYm9sIHRhYmxlIHRv
IHB1dCB0aGUgY2FwdHVyZWQKKyAgICAvLyB2YXJpYWJsZXMgZmlyc3QsIGFuZCBwb3BCbG9ja1Nj
b3BlIHdpbGwgcmVtb3ZlIHN5bWJvbCB0YWJsZSBlbnRyaWVzIGZvcgorICAgIC8vIHVuY2FwdHVy
ZWQgdmFyaWFibGVzLgorICAgIFJlZ2lzdGVySUQqIGJhc2UgPSAwOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBsYXN0ID0gMDsKKyAgICBzaXplX3QgbiA9IHNjb3BlVGVtcGxhdGUtPnN5bWJvbFRh
YmxlKCkuc2l6ZSgpOworICAgIEFTU0VSVChuKTsKKyAgICB3aGlsZSAobi0tKSB7CisgICAgICAg
IFJlZ2lzdGVySUQqIG5leHQgPSBuZXdSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQoIWxhc3Qg
fHwgKG5leHQgPT0gbGFzdC5nZXQoKSArIDEpKTsKKworICAgICAgICAvLyBTZXQgdGhlIHJlZ2lz
dGVyJ3MgdmFsdWUgdG8gSlNWYWx1ZSgpLCB0aGUgZW1wdHkgdmFsdWUuIFBlcmhhcHMgd2UKKyAg
ICAgICAgLy8gc2hvdWxkIGRvIHRoaXMgb25seSBmb3IgQmFycmllclJlZ2lzdGVycy4KKyAgICAg
ICAgZW1pdE9wY29kZShvcF9pbml0X2xhenlfcmVnKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKG5leHQtPmluZGV4KCkpOworCisgICAgICAgIGlmICghbGFzdCkKKyAgICAgICAgICAg
IGJhc2UgPSBuZXh0OworICAgICAgICBsYXN0ID0gbmV4dDsKKyAgICB9CisgICAgQVNTRVJUKGxh
c3QpOworICAgIAorICAgIC8vIE5vdyBhbGxvY2F0ZSBhIHJlZ2lzdGVyIGZvciB0aGUgYmxvY2sg
c2NvcGUgb2JqZWN0IGl0c2VsZiwgaWYgbmVjZXNzYXJ5LgorICAgIGlmIChyZWlmeU1vZGUgIT0g
U2NvcGVDb250ZXh0OjpOZXZlclJlaWZ5KSB7CisgICAgICAgIFJlZ2lzdGVySUQqIG5leHQgPSBu
ZXdSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQobmV4dCA9PSBsYXN0LmdldCgpICsgMSk7Cisg
ICAgICAgIGxhc3QgPSBuZXh0OworICAgIH0KKworICAgIC8vIEZpbmFsbHkgdXBkYXRlIHRoZSBj
b250cm9sIGZsb3cgc3RhY2ssIHB1c2ggdGhlIHRlbXBsYXRlIG9udG8gdGhlIHNjb3BlCisgICAg
Ly8gY2hhaW4sIGFuZCByZWlmeSB0aGUgc2NvcGUgaWYgbmVlZGVkLgogICAgIENvbnRyb2xGbG93
Q29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQuaXNGaW5hbGx5QmxvY2sgPSBmYWxzZTsKKyAg
ICBjb250ZXh0LmJsb2NrVHlwZSA9IFNjb3BlQmxvY2s7CisgICAgY29udGV4dC5zY29wZUNvbnRl
eHQucmVpZnlNb2RlID0gcmVpZnlNb2RlOworICAgIGNvbnRleHQuc2NvcGVDb250ZXh0LmJhc2VS
ZWdpc3RlciA9IGJhc2U7CisgICAgY29udGV4dC5zY29wZUNvbnRleHQubGFzdFJlZ2lzdGVyID0g
bGFzdC5yZWxlYXNlKCkubGVha1JlZigpOworCiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5hcHBl
bmQoY29udGV4dCk7Ci0gICAgbV9keW5hbWljU2NvcGVEZXB0aCsrOworICAgIG1fc2NvcGVDaGFp
bi5zZXQoKm1fc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgbV9zY29wZUNoYWluLT5wdXNoKHNjb3Bl
VGVtcGxhdGUpKTsKKyAgICBtX2Jsb2NrU2NvcGVEZXB0aCsrOworCisgICAgLy8gV2UgcmVpZnkg
aXQgbGF6aWx5IGlmIHBvc3NpYmxlLgorICAgIHN3aXRjaCAocmVpZnlNb2RlKSB7CisgICAgY2Fz
ZSBTY29wZUNvbnRleHQ6OkVhZ2VybHlSZWlmeToKKyAgICAgICAgLy8gUmVpZnkgdGhlIHNjb3Bl
IG5vdy4KKyAgICAgICAgcmVpZnlTY29wZXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
Y29wZUNvbnRleHQ6OkxhemlseVJlaWZ5OgorICAgICAgICAvLyBNYXJrIHRoZSBzY29wZSByZWdp
c3RlciBhcyB1bnNldCwgc28gbGF0ZXIgY29kZSBjYW4gZGV0ZWN0IGlmIGl0IHdhcworICAgICAg
ICAvLyBuZXZlciByZWlmaWVkLgorICAgICAgICBlbWl0T3Bjb2RlKG9wX2luaXRfbGF6eV9yZWcp
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC5zY29wZUNvbnRleHQubGFz
dFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY29wZUNvbnRl
eHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CiAKLSAgICBlbWl0
T3Bjb2RlKG9wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0
LT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVy
dHkpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwordm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wQmxvY2tTY29wZSgpCit7CisgICAgQVNTRVJUKG1fc2NvcGVD
b250ZXh0U3RhY2suc2l6ZSgpKTsKKyAgICBDb250cm9sRmxvd0NvbnRleHQgY29udGV4dCA9IG1f
c2NvcGVDb250ZXh0U3RhY2subGFzdCgpOworICAgIEFTU0VSVChjb250ZXh0LmJsb2NrVHlwZSA9
PSBTY29wZUJsb2NrKTsKKworICAgIEFTU0VSVChtX3Njb3BlQ2hhaW4tPmJlZ2luKCktPmdldCgp
LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworCisgICAgaWYgKGNvbnRleHQuc2NvcGVDb250ZXh0
LnJlaWZ5TW9kZSAhPSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnkpIHsKKyAgICAgICAgZW1pdE9w
Y29kZShvcF90ZWFyX29mZl9zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChj
b250ZXh0LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXItPmluZGV4KCkpOworICAgIH0KKworICAg
IGNvbnRleHQuc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rlci0+ZGVyZWYoKTsKKyAgICBjb250ZXh0
LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXIgPSAwOworICAgIAorICAgIG1fYmxvY2tTY29wZURl
cHRoLS07CisgICAgbV9zY29wZUNoYWluLnNldCgqbV9zY29wZUNoYWluLT5nbG9iYWxEYXRhLCBt
X3Njb3BlQ2hhaW4tPnBvcCgpKTsKKyAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnJlbW92ZUxhc3Qo
KTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YmVnaW5Td2l0Y2goUmVnaXN0ZXJJRCog
c2NydXRpbmVlUmVnaXN0ZXIsIFN3aXRjaEluZm86OlN3aXRjaFR5cGUgdHlwZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAppbmRleCBlN2ZlMjM2ZTViYWYwZjBmYjdlOTJlNDY5OGM1NmU4NGNjZWY4N2M1Li41NzgwNGY4
ZmQ5YWRiZmQ3OGE0Y2M0YTc5ZDk1MmJmMjA3NGYwMDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC01MCw2
ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIElkZW50aWZpZXI7CiAgICAgY2xh
c3MgTGFiZWw7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CisgICAgY2xhc3MgSlNTdGF0aWNT
Y29wZU9iamVjdDsKIAogICAgIGNsYXNzIENhbGxBcmd1bWVudHMgewogICAgIHB1YmxpYzoKQEAg
LTc1LDkgKzc2LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiByZXRB
ZGRyRHN0OwogICAgIH07CiAKKyAgICBzdHJ1Y3QgU2NvcGVDb250ZXh0IHsKKyAgICAgICAgZW51
bSBSZWlmeU1vZGUgeyBFYWdlcmx5UmVpZnksIExhemlseVJlaWZ5LCBOZXZlclJlaWZ5IH07Cisg
ICAgICAgIFJlaWZ5TW9kZSByZWlmeU1vZGU7CisgICAgICAgIFJlZ2lzdGVySUQqIGJhc2VSZWdp
c3RlcjsKKyAgICAgICAgUmVnaXN0ZXJJRCogbGFzdFJlZ2lzdGVyOworICAgIH07CisKKyAgICBl
bnVtIEJsb2NrVHlwZSB7IFdpdGhCbG9jaywgRmluYWxseUJsb2NrLCBTY29wZUJsb2NrIH07CisK
ICAgICBzdHJ1Y3QgQ29udHJvbEZsb3dDb250ZXh0IHsKLSAgICAgICAgYm9vbCBpc0ZpbmFsbHlC
bG9jazsKLSAgICAgICAgRmluYWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CisgICAgICAgIGVu
dW0gQmxvY2tUeXBlIGJsb2NrVHlwZTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgRmlu
YWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CisgICAgICAgICAgICBTY29wZUNvbnRleHQgc2Nv
cGVDb250ZXh0OworICAgICAgICB9OwogICAgIH07CiAKICAgICBzdHJ1Y3QgRm9ySW5Db250ZXh0
IHsKQEAgLTEwNiwxOCArMTE5LDM1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLy8g
VGhlIHJlc29sdmVkIGJpbmRpbmcgaXMgaW1tdXRhYmxlLgogICAgICAgICAgICAgUmVhZE9ubHlG
bGFnID0gMHgyMCwKICAgICAgICAgICAgIC8vIFRoZSBiYXNlIG9iamVjdCBpcyB0aGUgZ2xvYmFs
IG9iamVjdC4KLSAgICAgICAgICAgIEdsb2JhbEZsYWcgPSAweDQwCisgICAgICAgICAgICBHbG9i
YWxGbGFnID0gMHg0MCwKKyAgICAgICAgICAgIC8vIFRoZSBpZGVudGlmaWVyIGlzIGFjdHVhbGx5
IHRoZSBhcmd1bWVudHMgb2JqZWN0LgorICAgICAgICAgICAgQXJndW1lbnRzRmxhZyA9IDB4ODAs
CisgICAgICAgICAgICAvLyBSZWFkcyBvZiB0aGlzIHZhcmlhYmxlIG5lZWQgZHluYW1pYyBjaGVj
a3MgdG8gZW5zdXJlIGl0IGlzIHNldC4KKyAgICAgICAgICAgIC8vIElmIHRoaXMgdmFyaWFibGUg
aXMgcmVhZC1vbmx5LCB3cml0ZXMgdG8gdGhpcyB2YXJpYWJsZSBuZWVkCisgICAgICAgICAgICAv
LyBkeW5hbWljIGNoZWNrcyB0byBlbnN1cmUgdGhlIHZhcmlhYmxlIGlzIHVuc2VyLgorICAgICAg
ICAgICAgQmFycmllckZsYWcgPSAweDEwMAogICAgICAgICB9OwogICAgICAgICBlbnVtIFR5cGUg
ewogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IGlzIGxvY2FsLCBhbmQgc3RvcmVkIGluIGEg
cmVnaXN0ZXIuCiAgICAgICAgICAgICBSZWdpc3RlciA9IFJlZ2lzdGVyRmxhZyB8IFN0YXRpY0Zs
YWcsCiAgICAgICAgICAgICAvLyBBIHJlYWQtb25seSBsb2NhbCwgY3JlYXRlZCBieSAiY29uc3Qi
LgogICAgICAgICAgICAgUmVhZE9ubHlSZWdpc3RlciA9IFJlZ2lzdGVyRmxhZyB8IFJlYWRPbmx5
RmxhZyB8IFN0YXRpY0ZsYWcsCisgICAgICAgICAgICAvLyBSZWFkcyBvZiB0aGlzIHJlZ2lzdGVy
IG5lZWQgZHluYW1pYyBjaGVja3MuCisgICAgICAgICAgICBCYXJyaWVyUmVnaXN0ZXIgPSBSZWdp
c3RlckZsYWcgfCBTdGF0aWNGbGFnIHwgQmFycmllckZsYWcsCisgICAgICAgICAgICAvLyBSZWFk
cyBvZiBhbmQgd3JpdGVzIHRvIHRoaXMgcmVnaXN0ZXIgbmVlZCBkeW5hbWljIGNoZWNrcy4KKyAg
ICAgICAgICAgIFJlYWRPbmx5QmFycmllclJlZ2lzdGVyID0gUmVnaXN0ZXJGbGFnIHwgUmVhZE9u
bHlGbGFnIHwgU3RhdGljRmxhZyB8IEJhcnJpZXJGbGFnLAorICAgICAgICAgICAgLy8gVGhlICJh
cmd1bWVudHMiIG9iamVjdC4KKyAgICAgICAgICAgIEFyZ3VtZW50cyA9IEFyZ3VtZW50c0ZsYWcg
fCBSZWdpc3RlckZsYWcgfCBTdGF0aWNGbGFnLAorICAgICAgICAgICAgUmVhZE9ubHlBcmd1bWVu
dHMgPSBBcmd1bWVudHNGbGFnIHwgUmVnaXN0ZXJGbGFnIHwgUmVhZE9ubHlGbGFnIHwgU3RhdGlj
RmxhZywKICAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBpcyBzdGF0aWNhbGx5IHNjb3BlZCBm
cmVlIHZhcmlhYmxlLiBJdHMgY29vcmRpbmF0ZXMKICAgICAgICAgICAgIC8vIGFyZSBpbiAiaW5k
ZXgiIGFuZCAiZGVwdGgiLgogICAgICAgICAgICAgTGV4aWNhbCA9IEluZGV4ZWRGbGFnIHwgU2Nv
cGVkRmxhZyB8IFN0YXRpY0ZsYWcsCiAgICAgICAgICAgICAvLyBBIHJlYWQtb25seSBMZXhpY2Fs
LCBjcmVhdGVkIGJ5ICJjb25zdCIuCiAgICAgICAgICAgICBSZWFkT25seUxleGljYWwgPSBJbmRl
eGVkRmxhZyB8IFNjb3BlZEZsYWcgfCBSZWFkT25seUZsYWcgfCBTdGF0aWNGbGFnLAorICAgICAg
ICAgICAgLy8gUmVhZHMgb2YgdGhpcyBsZXhpY2FsIG5lZWQgZHluYW1pYyBjaGVja3MuCisgICAg
ICAgICAgICBCYXJyaWVyTGV4aWNhbCA9IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFN0YXRp
Y0ZsYWcgfCBCYXJyaWVyRmxhZywKKyAgICAgICAgICAgIC8vIFJlYWQgb2YgYW5kIHdyaXRlcyB0
byB0aGlzIGxleGljYWwgbmVlZCBkeW5hbWljIGNoZWNrcy4KKyAgICAgICAgICAgIFJlYWRPbmx5
QmFycmllckxleGljYWwgPSBJbmRleGVkRmxhZyB8IFNjb3BlZEZsYWcgfCBSZWFkT25seUZsYWcg
fCBTdGF0aWNGbGFnIHwgQmFycmllckZsYWcsCiAgICAgICAgICAgICAvLyBUaGUgcHJvcGVydHkg
d2FzIG5vdCBib3VuZCBsZXhpY2FsbHksIHNvIGF0IHJ1bnRpbWUgd2Ugc2hvdWxkCiAgICAgICAg
ICAgICAvLyBsb29rIGRpcmVjdGx5IGluIHRoZSBnbG9iYWwgb2JqZWN0LgogICAgICAgICAgICAg
R2xvYmFsID0gR2xvYmFsRmxhZywKQEAgLTE0Myw2ICsxNzMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBEeW5hbWljTGV4aWNhbCA9IER5bmFtaWNGbGFnIHwgSW5kZXhlZEZsYWcg
fCBTY29wZWRGbGFnLAogICAgICAgICAgICAgLy8gTGlrZSBSZWFkT25seUxleGljYWwsIGJ1dCB3
aXRoIGludGVydmVuaW5nIG5vbi1zdHJpY3QgYGV2YWwnLgogICAgICAgICAgICAgRHluYW1pY1Jl
YWRPbmx5TGV4aWNhbCA9IER5bmFtaWNGbGFnIHwgSW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnIHwg
UmVhZE9ubHlGbGFnLAorICAgICAgICAgICAgLy8gTGlrZSBCYXJyaWVyTGV4aWNhbCwgYnV0IHdp
dGggaW50ZXJ2ZW5pbmcgbm9uLXN0cmljdCBgZXZhbCcuCisgICAgICAgICAgICBEeW5hbWljQmFy
cmllckxleGljYWwgPSBEeW5hbWljRmxhZyB8IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IEJh
cnJpZXJGbGFnLAorICAgICAgICAgICAgLy8gTGlrZSBSZWFkT25seUJhcnJpZXJMZXhpY2FsLCBi
dXQgd2l0aCBpbnRlcnZlbmluZyBub24tc3RyaWN0IGBldmFsJy4KKyAgICAgICAgICAgIER5bmFt
aWNSZWFkT25seUJhcnJpZXJMZXhpY2FsID0gRHluYW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IFNj
b3BlZEZsYWcgfCBSZWFkT25seUZsYWcgfCBCYXJyaWVyRmxhZywKICAgICAgICAgICAgIC8vIExp
a2UgR2xvYmFsLCBidXQgd2l0aCBpbnRlcnZlbmluZyBub24tc3RyaWN0IGBldmFsJy4gQXMgd2l0
aCAKICAgICAgICAgICAgIC8vIER5bmFtaWMsIFNjb3BlRmxhZyBpcyBzZXQgdG8gaW5kaWNhdGUg
dGhhdCAiZGVwdGgiIGRvZXMgaW5kZWVkCiAgICAgICAgICAgICAvLyBzdG9yZSBhIG51bWJlciBv
ZiBmcmFtZXMgdG8gc2tpcCBiZWZvcmUgZG9pbmcgdGhlIGR5bmFtaWMgY2hlY2tzLgpAQCAtMjAw
LDYgKzIzNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzU2NvcGVkKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlICYgU2NvcGVkRmxhZzsgfQogICAgICAgICBib29sIGlzUmVhZE9u
bHkoKSBjb25zdCB7IHJldHVybiAobV90eXBlICYgUmVhZE9ubHlGbGFnKSAmJiAhaXNEeW5hbWlj
KCk7IH0KICAgICAgICAgYm9vbCBpc0dsb2JhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIEds
b2JhbEZsYWc7IH0KKyAgICAgICAgYm9vbCBpc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZSAmIEFyZ3VtZW50c0ZsYWc7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlc29sdmVS
ZXN1bHQodW5zaWduZWQgdHlwZSwgUmVnaXN0ZXJJRCogbG9jYWwsIGludCBpbmRleCwgc2l6ZV90
IGRlcHRoLCBKU09iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMjUxLDExICsyODYsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBzZXRJc051bWVyaWNDb21wYXJlRnVuY3Rpb24o
Ym9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24pOwogCi0gICAgICAgIGJvb2wgd2lsbFJlc29s
dmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHVu
Y2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCk7CisgICAgICAgIGVudW0gUmVzb2x2ZUZsYWdz
IHsKKyAgICAgICAgICAgIERvbnRDcmVhdGVBcmd1bWVudHNGbGFnID0gMSA8PCAwCisgICAgICAg
IH07CiAKICAgICAgICAgLy8gUmVzb2x2ZSBhbiBpZGVudGlmaWVyLCBnaXZlbiB0aGUgY3VycmVu
dCBjb21waWxlLXRpbWUgc2NvcGUgY2hhaW4uCi0gICAgICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2
ZShjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZShjb25z
dCBJZGVudGlmaWVyJiwgdW5zaWduZWQgcmVzb2x2ZUZsYWdzID0gMCk7CiAgICAgICAgIC8vIEJl
aGF2ZXMgYXMgcmVzb2x2ZSBkb2VzLCBidXQgaWdub3JlcyBkeW5hbWljIHNjb3BlIGFzCiAgICAg
ICAgIC8vIGR5bmFtaWMgc2NvcGUgc2hvdWxkIG5vdCBpbnRlcmZlcmUgd2l0aCBjb25zdCBpbml0
aWFsaXNhdGlvbgogICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29sdmVDb25zdERlY2woY29uc3Qg
SWRlbnRpZmllciYpOwpAQCAtNDk0LDE0ICs1MzAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdm9pZCBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBVU3RyaW5nJiBtZXNzYWdl
KTsKIAotICAgICAgICB2b2lkIGVtaXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpOworICAgICAgICB2b2lk
IHJlaWZ5U2NvcGVzKCk7CisgICAgICAgIHZvaWQgcHVzaEJsb2NrU2NvcGUoSlNTdGF0aWNTY29w
ZU9iamVjdCosIFNjb3BlQ29udGV4dDo6UmVpZnlNb2RlKTsKKyAgICAgICAgdm9pZCBwb3BCbG9j
a1Njb3BlKCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1c2hTY29wZShSZWdpc3RlcklE
KiBzY29wZSk7CiAgICAgICAgIHZvaWQgZW1pdFBvcFNjb3BlKCk7CiAKICAgICAgICAgdm9pZCBl
bWl0RGVidWdIb29rKERlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpOwog
Ci0gICAgICAgIGludCBzY29wZURlcHRoKCkgeyByZXR1cm4gbV9keW5hbWljU2NvcGVEZXB0aCAr
IG1fZmluYWxseURlcHRoOyB9CisgICAgICAgIGludCBzY29wZURlcHRoKCkgeyByZXR1cm4gbV9k
eW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsgbV9maW5hbGx5RGVwdGg7IH0K
ICAgICAgICAgYm9vbCBoYXNGaW5hbGlzZXIoKSB7IHJldHVybiBtX2ZpbmFsbHlEZXB0aCAhPSAw
OyB9CiAKICAgICAgICAgdm9pZCBwdXNoRmluYWxseUNvbnRleHQoTGFiZWwqIHRhcmdldCwgUmVn
aXN0ZXJJRCogcmV0dXJuQWRkckRzdCk7CkBAIC01NDIsOCArNTgwLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRCaW5hcnlPcCgpOwogICAgICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3aW5kVW5hcnlPcCgpOwogCi0gICAgICAgIFBhc3NSZWZQ
dHI8TGFiZWw+IGVtaXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBDb250cm9sRmxv
d0NvbnRleHQqIHRvcFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQqIGJvdHRvbVNjb3BlKTsKLQog
ICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91YmxlLCBKU1ZhbHVlPiBOdW1iZXJNYXA7CiAgICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgSlNTdHJpbmcqLCBJZGVudGlmaWVyUmVw
SGFzaD4gSWRlbnRpZmllclN0cmluZ01hcDsKICAgICAgICAgCkBAIC02MTcsMzUgKzY1Myw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlv
bnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQogICAgICAgICBTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogCi0gICAgICAgIGJvb2wgc2hv
dWxkT3B0aW1pemVMb2NhbHMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9keW5hbWlj
U2NvcGVEZXB0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAg
IGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBjYW5PcHRpbWl6ZU5vbkxvY2FscygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
X2R5bmFtaWNTY29wZURlcHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgaWYgKG1fY29kZVR5cGUgPT0gRXZhbENvZGUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUg
JiYgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAKLSAgICAgICAg
dm9pZCBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwotICAgICAgICB2b2lkIGNyZWF0ZUFj
dGl2YXRpb25JZk5lY2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5UmVn
aXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKik7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8
SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwpAQCAtNjc0LDYgKzY4Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9sYXN0VmFyOwogICAgICAgICBp
bnQgbV9maW5hbGx5RGVwdGg7CiAgICAgICAgIGludCBtX2R5bmFtaWNTY29wZURlcHRoOworICAg
ICAgICBpbnQgbV9ibG9ja1Njb3BlRGVwdGg7CiAgICAgICAgIGludCBtX2Jhc2VTY29wZURlcHRo
OwogICAgICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggYmI5NWNhZmI2ODI2
M2E5YmY1MTBhYTRlNDIyN2Y1ZWE0M2EzZWU5OC4uNTQyYjYyNzAyYmVjYTJmZDczMDIzNDIzZDBk
OTdkNTgyNTc2MTYyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMzE4LDEwICszMTgsMTMgQEAgUmVnaXN0ZXJJRCog
UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGUKIAogUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAg
ICBpZiAobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9B
cmd1bWVudHMoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkp
KSB7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
c3Vic2NyaXB0KTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
LCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7ICAgIAotICAgICAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRHZXRBcmd1bWVudEJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpLCBwcm9wZXJ0eSk7Cisg
ICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKSB7CisgICAgICAgIFJlc29sdmVSZXN1bHQg
cmVzb2x2ZVJlc3VsdCA9IGdlbmVyYXRvci5yZXNvbHZlKHN0YXRpY19jYXN0PFJlc29sdmVOb2Rl
Kj4obV9iYXNlKS0+aWRlbnRpZmllcigpLCBCeXRlY29kZUdlbmVyYXRvcjo6RG9udENyZWF0ZUFy
Z3VtZW50c0ZsYWcpOworICAgICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc0FyZ3VtZW50cygpKSB7
CisgICAgICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X3N1YnNjcmlwdCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgcmVzb2x2ZVJlc3VsdC5sb2NhbCgpLCBwcm9wZXJ0eSk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxl
ZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0
LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CkBAIC0zMzQsMTcgKzMzNywxNCBAQCBSZWdpc3RlcklEKiBC
cmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaQogCiBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaWYg
KG1faWRlbnQgPT0gZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAg
aWYgKCFtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSkKLSAgICAgICAgICAgIGdvdG8gbm9uQXJndW1l
bnRzUGF0aDsKLSAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmVOb2RlID0gc3RhdGljX2Nhc3Q8
UmVzb2x2ZU5vZGUqPihtX2Jhc2UpOwotICAgICAgICBpZiAoIWdlbmVyYXRvci53aWxsUmVzb2x2
ZVRvQXJndW1lbnRzKHJlc29sdmVOb2RlLT5pZGVudGlmaWVyKCkpKQotICAgICAgICAgICAgZ290
byBub25Bcmd1bWVudHNQYXRoOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsgICAgCi0gICAgICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50c0xlbmd0aChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCBnZW5lcmF0b3IudW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKSk7Cisg
ICAgaWYgKG1faWRlbnQgPT0gZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgbV9i
YXNlLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVz
dWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2Up
LT5pZGVudGlmaWVyKCksIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3JlYXRlQXJndW1lbnRzRmxh
Zyk7CisgICAgICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzQXJndW1lbnRzKCkpIHsKKyAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwg
ZW5kT2Zmc2V0KCkpOyAgICAKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFy
Z3VtZW50c0xlbmd0aChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVz
dWx0LmxvY2FsKCkpOworICAgICAgICB9CiAgICAgfQogCi1ub25Bcmd1bWVudHNQYXRoOgogICAg
IFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNl
dCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIGJhc2UsIG1faWRlbnQpOwpAQCAtNTY0LDkgKzU2NCwxMyBAQCBSZWdp
c3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLAogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNS
ZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fZXhwcik7
CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYXJnc1JlZ2lzdGVyOwogICAgICAgICAg
ICAgQXJndW1lbnRMaXN0Tm9kZSogYXJncyA9IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0Owot
ICAgICAgICAgICAgaWYgKGFyZ3MtPm1fZXhwci0+aXNSZXNvbHZlTm9kZSgpICYmIGdlbmVyYXRv
ci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oYXJncy0+
bV9leHByKS0+aWRlbnRpZmllcigpKSkKLSAgICAgICAgICAgICAgICBhcmdzUmVnaXN0ZXIgPSBn
ZW5lcmF0b3IudW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKTsKLSAgICAgICAgICAgIGVs
c2UKKworICAgICAgICAgICAgaWYgKGFyZ3MtPm1fZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7Cisg
ICAgICAgICAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJl
c29sdmUoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihhcmdzLT5tX2V4cHIpLT5pZGVudGlmaWVy
KCksIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3JlYXRlQXJndW1lbnRzRmxhZyk7CisgICAgICAg
ICAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYXJnc1JlZ2lzdGVyID0gcmVzb2x2ZVJlc3VsdC5sb2NhbCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCFhcmdzUmVnaXN0ZXIuZ2V0KCkpCiAgICAgICAgICAgICAgICAg
YXJnc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3MtPm1fZXhwcik7CiAKICAgICAg
ICAgICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSBpZ25vcmVzIGV4dHJhIGFyZ3VtZW50
cywgYnV0IHdlIHN0aWxsCkBAIC0xOTc3LDkgKzE5ODEsMTIgQEAgUmVnaXN0ZXJJRCogVHJ5Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBhdGg6IHRoZSBjYXRjaCBibG9j
ay4KICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2VuZXJhdG9yLmVtaXRMYWJlbChnZW5l
cmF0b3IubmV3TGFiZWwoKS5nZXQoKSk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNl
cHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Q2F0Y2goZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCB0cnlTdGFydExhYmVsLmdldCgpLCBoZXJlLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQdXNoTmV3U2NvcGUoZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIG1fZXhjZXB0aW9uSWRl
bnQsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVj
dCogc2NvcGVUZW1wbGF0ZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSgqZ2VuZXJhdG9y
Lmdsb2JhbERhdGEoKSk7CisgICAgICAgIHNjb3BlVGVtcGxhdGUtPmFkZFZhcmlhYmxlKG1fZXhj
ZXB0aW9uSWRlbnQsIERvbnREZWxldGUsIFN5bWJvbFRhYmxlRW50cnk6Ok5vVGVtcG9yYWxEZWFk
Wm9uZSk7CisgICAgICAgIGdlbmVyYXRvci5wdXNoQmxvY2tTY29wZShzY29wZVRlbXBsYXRlLCBT
Y29wZUNvbnRleHQ6OkxhemlseVJlaWZ5KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTdGF0
aWNWYXIoZ2VuZXJhdG9yLnJlc29sdmUobV9leGNlcHRpb25JZGVudCksIGV4Y2VwdGlvblJlZ2lz
dGVyLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9jYXRjaEJsb2Nr
KTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZSgpOworICAgICAgICBnZW5lcmF0b3Iu
cG9wQmxvY2tTY29wZSgpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNhdGNoRW5kTGFi
ZWwuZ2V0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKaW5kZXggOWZjOTY0YzczMzNjNzg2OTA0NjY3ZmZmZjcwNGJlYTU1NDA4MTY2NS4u
YmQ2NWQ4NWFhMDhhZTQ1ODE2NDI2M2Y0YWEwYjI5NjZkNjg0YTM2NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0xMDQyLDggKzEwNDIsNyBAQCBK
U0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBmdQogICAgIEpTRnVuY3Rpb24gKmZ1bmN0aW9uID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAgICAgaWYgKCFm
dW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKS5pc051bGwoKSkgewogICAgICAgICBKU1N0YXRpY1Nj
b3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0KLSAgICAgICAgICAgIEpTU3RhdGljU2Nv
cGVPYmplY3Q6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBleGVjLCBmdW5jdGlvbkV4ZWN1dGFi
bGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgICAg
ICBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlv
bkV4ZWN1dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAg
ICAgICAgIGZ1bmN0aW9uLT5zZXRTY29wZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uLT5z
Y29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmplY3QpKTsKICAgICB9CiAgICAgcmV0dXJuIGZ1
bmN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAKaW5kZXggY2M1YmIwMzkzYWQwOWVlZTk1YWFhYTRiOTFkZDkxZTdmMWJlOWEzZC4u
MTBkYjVlOWU5YzJlZjQ2MzAyMDUzNWY4OTUwYTMzYTk5MTVmZDJiMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNjI1LDE4
ICsxNjI1LDYgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2sKIH0KICAgICAKICNpZiBFTkFCTEUo
Q0xBU1NJQ19JTlRFUlBSRVRFUikKLU5FVkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogSW50ZXJw
cmV0ZXI6OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJ
bnN0cnVjdGlvbiogdlBDKQotewotICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJZGVu
dGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVyYW5k
KTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpz
VmFsdWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVh
dGUoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIERvbnREZWxldGUpOwotICAgIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShzY29wZSk7Ci0KLSAgICByZXR1cm4gY2FsbEZy
YW1lLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpOwotfQotCiBORVZFUl9JTkxJTkUgdm9pZCBJ
bnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBSZWN1cnNpdmUgaW52b2NhdGlvbiBt
YXkgYWxyZWFkeSBoYXZlIHNwZWNpYWxpemVkIHRoaXMgaW5zdHJ1Y3Rpb24uCkBAIC00ODI3LDcg
KzQ4MTUsOCBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgICAgIEluaXRpYWxpc2Vz
IGRzdChyKSB0byBKU1ZhbHVlKCkuCiAKLSAgICAgICAgICAgVGhpcyBvcGNvZGUgYXBwZWFycyBv
bmx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrLgorICAgICAgICAgICBUaGlzIG9w
Y29kZSBjYW4gYXBwZWFyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrIG9yIGF0IHRo
ZQorICAgICAgICAgICBiZWdpbm5pbmcgb2YgYSBibG9jayBzY29wZS4KICAgICAgICAgICovCiAg
ICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogCkBAIC01MDQ5LDQzICs1MDM4LDg0
IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X25leHRfcG5hbWUpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotICAgIERF
RklORV9PUENPREUob3Bfam1wX3Njb3BlcykgewotICAgICAgICAvKiBqbXBfc2NvcGVzIGNvdW50
KG4pIHRhcmdldChvZmZzZXQpCisgICAgREVGSU5FX09QQ09ERShvcF9hc3NlcnRfbGF6eV9yZWdf
aW5pdCkgeworICAgICAgICAvKiBhc3NlcnRfbGF6eV9yZWdfaW5pdCBkc3QocikKIAotICAgICAg
ICAgICBSZW1vdmVzIHRoZSBhIG51bWJlciBvZiBpdGVtcyBmcm9tIHRoZSBjdXJyZW50IHNjb3Bl
IGNoYWluCi0gICAgICAgICAgIHNwZWNpZmllZCBieSBpbW1lZGlhdGUgbnVtYmVyIGNvdW50LCB0
aGVuIGp1bXBzIHRvIG9mZnNldAotICAgICAgICAgICB0YXJnZXQuCisgICAgICAgICAgIEFzc2Vy
dCB0aGF0IGRzdCBoYXMgYmVlbiBpbml0aWFsaXplZCwgaS5lLiwgaXMgbm90IGVtcHR5LgogICAg
ICAgICAqLwotICAgICAgICBpbnQgY291bnQgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBp
bnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLQotICAgICAgICBTY29wZUNoYWluTm9kZSog
dG1wID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgICAgIHdoaWxlIChjb3VudC0tKQot
ICAgICAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29w
ZUNoYWluKHRtcCk7CisgICAgICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
dlBDWzFdLnUub3BlcmFuZCkuaXNFbXB0eSgpKSkgeworICAgICAgICAgICAgVVN0cmluZyBtZXNz
YWdlKCJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIik7CisgICAgICAgICAgICBleGNlcHRpb25WYWx1
ZSA9IEpTVmFsdWUoY3JlYXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKSk7Cisg
ICAgICAgICAgICBnb3RvIHZtX3Rocm93OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCk7CisgICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKKyAgICB9CisgICAgREVGSU5FX09QQ09ERShvcF9hc3NlcnRfbGF6
eV9yZWdfbm90X2luaXQpIHsKKyAgICAgICAgLyogYXNzZXJ0X2xhenlfcmVnX25vdF9pbml0IGRz
dChyKQogCi0gICAgICAgIHZQQyArPSB0YXJnZXQ7CisgICAgICAgICAgIEFzc2VydCB0aGF0IGRz
dCBoYXMgbm90IGJlZW4gc2V0LCBpLmUuLCB0aGF0IGl0IGlzIGVtcHR5LgorICAgICAgICAqLwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIWNhbGxGcmFtZS0+dW5jaGVja2VkUih2UENbMV0udS5vcGVy
YW5kKS5pc0VtcHR5KCkpKSB7CisgICAgICAgICAgICBVU3RyaW5nIG1lc3NhZ2UoImNvbnN0IHZh
cmlhYmxlIGFscmVhZHkgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVl
ID0gSlNWYWx1ZShjcmVhdGVSZWZlcmVuY2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpKTsKKyAg
ICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdCk7CiAgICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9Ci0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xB
U1NJQ19JTlRFUlBSRVRFUikKLSAgICAvLyBBcHBlYXNlIEdDQwotICAgIGdvdG8gKigmJnNraXBf
bmV3X3Njb3BlKTsKLSNlbmRpZgotICAgIERFRklORV9PUENPREUob3BfcHVzaF9uZXdfc2NvcGUp
IHsKLSAgICAgICAgLyogbmV3X3Njb3BlIGRzdChyKSBwcm9wZXJ0eShpZCkgdmFsdWUocikKKyAg
ICBERUZJTkVfT1BDT0RFKG9wX3JlaWZ5X3Njb3BlKSB7CisgICAgICAgIC8qIHJlaWZ5X3Njb3Bl
IGRzdChyKSB0ZW1wbChyKSBiYXNlKHIpCiAgICAgICAgICAKLSAgICAgICAgICAgQ29uc3RydWN0
cyBhIG5ldyBTdGF0aWNTY29wZU9iamVjdCB3aXRoIHByb3BlcnR5IHNldCB0byB2YWx1ZS4gIFRo
YXQgc2NvcGUKLSAgICAgICAgICAgb2JqZWN0IGlzIHRoZW4gcHVzaGVkIG9udG8gdGhlIFNjb3Bl
Q2hhaW4uICBUaGUgc2NvcGUgb2JqZWN0IGlzIHRoZW4gc3RvcmVkCi0gICAgICAgICAgIGluIGRz
dCBmb3IgR0MuCisgICAgICAgICAgIENvbnN0cnVjdHMgYSBuZXcgU3RhdGljU2NvcGVPYmplY3Qs
IHVzaW5nIHRlbXBsIGFzIGEgdGVtcGxhdGUuIFRoYXQKKyAgICAgICAgICAgc2NvcGUgb2JqZWN0
IGlzIHRoZW4gc3RvcmVkIGluIGRzdCBhbmQgcHVzaGVkIG9udG8gdGhlIFNjb3BlQ2hhaW4uCisg
ICAgICAgICAgIFRoZSBzdG9yYWdlIGZvciB0aGlzIGJsb2NrIHNjb3BlIGlzIGluaXRpYWxseSBp
biB0aGUgcmVnaXN0ZXJzCisgICAgICAgICAgIGZvbGxvd2luZyBiYXNlLiBXaGVuIGNvbnRyb2wg
bGVhdmVzIHRoaXMgc2NvcGUsIHRoZXNlIHZhbHVlcyB3aWxsIGJlCisgICAgICAgICAgIHRvcm4g
b2ZmLgogICAgICAgICAgKi8KLSAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNyZWF0
ZUV4Y2VwdGlvblNjb3BlKGNhbGxGcmFtZSwgdlBDKSk7CisgICAgICAgIGludCBkc3QgPSB2UENb
MV0udS5vcGVyYW5kOwogCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3B1c2hfbmV3
X3Njb3BlKTsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KS5qc1ZhbHVl
KCkpIHsKKyAgICAgICAgICAgIGludCB0ZW1wbCA9IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgYmFzZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBBU1NFUlQoY2Fs
bEZyYW1lLT5yKHRlbXBsKS5qc1ZhbHVlKCkuaXNPYmplY3QoKSk7CisgICAgICAgICAgICBKU09i
amVjdCogc2NvcGVUZW1wbGF0ZSA9IGFzT2JqZWN0KGNhbGxGcmFtZS0+cih0ZW1wbCkuanNWYWx1
ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChzY29wZVRlbXBsYXRlLT5pc1N0YXRpY1Njb3BlT2Jq
ZWN0KCkpOworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogbmV3U2NvcGUgPSBzdGF0
aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oc2NvcGVUZW1wbGF0ZSk7CisgICAgICAgICAg
ICBuZXdTY29wZSA9IG5ld1Njb3BlLT5yZWlmeSgqZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSArIGJhc2UpOworICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkg
PSBuZXdTY29wZTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJh
bWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChuZXdTY29wZSkpOworICAgICAgICB9CisKKyAgICAgICAg
dlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcmVpZnlfc2NvcGUpOworICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7CisgICAgfQorICAgIERFRklORV9PUENPREUob3BfdGVhcl9vZmZfc2NvcGUpIHsK
KyAgICAgICAgLyogdGVhcl9vZmZfc2NvcGUgc3JjKHIpCisKKyAgICAgICAgICAgSWYgdGhlIHNj
b3BlIHN0b3JlZCBpbiBTUkMgd2FzIHJlaWZpZWQsIGNvcHkgdGhlIGJsb2NrLXNjb3BlZCBsb2Nh
bHMKKyAgICAgICAgICAgaW4gdGhlIHJlZ2lzdGVycyBmb2xsb3dpbmcgU1JDIGZyb20gdGhlIHJl
Z2lzdGVyIGZpbGUgdG8gdGhlCisgICAgICAgICAgIGhlYXAuIE11bmdlIHRoZSBzY29wZSBvYmpl
Y3Qgc3RvcmVkIGluIFNSQyB0byBwb2ludCB0byB0aGlzIG5ldworICAgICAgICAgICBiYWNraW5n
IHN0b3JlLCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHNjb3BlIGNoYWluLgorCisgICAgICAgICAg
IFRoaXMgb3Bjb2RlIGFwcGVhcnMgd2hlbiBsZWF2aW5nIGJsb2NrIHNjb3Blcy4KKyAgICAgICAg
Ki8KKworICAgICAgICBpbnQgc3JjID0gdlBDWzFdLnUub3BlcmFuZDsKKworICAgICAgICBpZiAo
SlNWYWx1ZSBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzcmMpLmpzVmFsdWUoKSkgewor
ICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHNjb3BlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChvYmplY3QtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4ob2JqZWN0KS0+dGVhck9mZigqZ2xvYmFs
RGF0YSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjKS5jbGVhcigpOwor
ICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFp
bigpLT5wb3AoKSk7CisgICAgICAgIH0KKworICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF90ZWFyX29mZl9zY29wZSk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9Ci0j
aWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICBza2lwX25l
d19zY29wZToKLSNlbmRpZgogICAgIERFRklORV9PUENPREUob3BfY2F0Y2gpIHsKICAgICAgICAg
LyogY2F0Y2ggZXgocikKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDU0MWNjODk2
YTMyODkwZjZjNWVmNjFiNGI2NWI3MjRlNjhlZTZiNDEuLjRhODUyM2FkNWEwYjQ5YTVlM2Q4Njc5
YWM4OTlhYjM1MzZjYTkxYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTI3Miw3
ICsyNzIsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERF
RklORV9PUChvcF9qZXFfbnVsbCkKICAgICAgICAgREVGSU5FX09QKG9wX2pmYWxzZSkKICAgICAg
ICAgREVGSU5FX09QKG9wX2ptcCkKLSAgICAgICAgREVGSU5FX09QKG9wX2ptcF9zY29wZXMpCiAg
ICAgICAgIERFRklORV9PUChvcF9qbmVxX251bGwpCiAgICAgICAgIERFRklORV9PUChvcF9qbmVx
X3B0cikKICAgICAgICAgREVGSU5FX09QKG9wX2psZXNzKQpAQCAtMzE3LDcgKzMxNiwxMCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9w
cmVfaW5jKQogICAgICAgICBERUZJTkVfT1Aob3BfcHJvZmlsZV9kaWRfY2FsbCkKICAgICAgICAg
REVGSU5FX09QKG9wX3Byb2ZpbGVfd2lsbF9jYWxsKQotICAgICAgICBERUZJTkVfT1Aob3BfcHVz
aF9uZXdfc2NvcGUpCisgICAgICAgIERFRklORV9PUChvcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCkK
KyAgICAgICAgREVGSU5FX09QKG9wX2Fzc2VydF9sYXp5X3JlZ19ub3RfaW5pdCkKKyAgICAgICAg
REVGSU5FX09QKG9wX3JlaWZ5X3Njb3BlKQorICAgICAgICBERUZJTkVfT1Aob3BfdGVhcl9vZmZf
c2NvcGUpCiAgICAgICAgIERFRklORV9PUChvcF9wdXNoX3Njb3BlKQogICAgICAgICBjYXNlIG9w
X3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRf
dHJhbnNpdGlvbl9ub3JtYWw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAyZDI4NDFiYWY1
NTQ4NmExZWJmNjlkMmU0YjViZDg1Y2VlMTE2YjBkLi40MGZlYjE5ZWM1MWFjMTQ4ZGRjODUwMzkx
MjdjZGNlMWFiZjUwNjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTgxOCw3ICs4MTgs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2plcV9udWxsKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2ptcChJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRf
b3Bfam1wX3Njb3BlcyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfam5lcV9u
dWxsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmVxX3B0cihJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qKTsKQEAgLTg2
NCw3ICs4NjMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wcmVf
aW5jKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wcm9maWxlX2RpZF9jYWxs
KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wcm9maWxlX3dpbGxfY2FsbChJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfcHVzaF9uZXdfc2NvcGUoSW5zdHJ1
Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2VydF9sYXp5X3JlZ19pbml0KEluc3Ry
dWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQo
SW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3JlaWZ5X3Njb3BlKEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90ZWFyX29mZl9zY29wZShJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfcHVzaF9zY29wZShJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9wdXRfYnlfaW5kZXgoSW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCmluZGV4IDJkYjgyYmY0YWQyMGQ2MDNhZjAzNDlkZTRlZjUxNGNmM2Qw
MDI2YzYuLjcwODZjNjgxZTJlMjdhMzJiMzk3NDg5ZTVkODA5MzAxNjI2MTVlMzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTAxNiwxMiArMTAxNiw0MyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b19qc251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6
eV9yZWdfaW5pdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNoX25ld19zY29wZSk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgc3R1YkNhbGwu
Y2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICB1bnNpZ25lZCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgbm90RW1wdHkgPSBi
cmFuY2hUZXN0UHRyKE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNp
emVvZihSZWdpc3RlcikpKTsKKyAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfYXNzZXJ0X2xh
enlfcmVnX2luaXQpLmNhbGwoKTsKKyAgICBub3RFbXB0eS5saW5rKHRoaXMpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBKSVRT
dHViQ2FsbCh0aGlzLCBjdGlfb3BfYXNzZXJ0X2xhenlfcmVnX25vdF9pbml0KS5jYWxsKCk7Cisg
ICAgZW1wdHkubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVpZnlfc2NvcGUo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRlbXBsID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBKdW1wIHNjb3BlUmVpZmllZCA9IGJyYW5j
aFRlc3RQdHIoTm9uWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZWlm
eV9zY29wZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodGVtcGwsIHJlZ1QxKTsKKyAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoYmFzZSkpOworICAgIHN0dWJDYWxsLmNh
bGwoZHN0KTsKKyAgICBzY29wZVJlaWZpZWQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfdGVhcl9vZmZfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Cisg
ICAgSnVtcCBzY29wZU5vdFJlaWZpZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIHNjb3BlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9zY29wZSk7CisgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoc2NvcGUsIHJlZ1QxKTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgc2Nv
cGVOb3RSZWlmaWVkLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDM0LDE0ICsxMDY1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qbXBfc2NvcGVzKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2pt
cF9zY29wZXMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIGFk
ZEp1bXAoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLX0KLQogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CmluZGV4IGI2NzY5NmYzNTkwMzc3ZmNhMDA3YTQzODFjNTE0YzA1YzJkYTEwZGYuLmEyMjA3ODBl
MDY4NjI4YzA2YjQ2MDVlYWE3ZWVjZTUxYmYxZmQwOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTEzMzYsMTIgKzEzMzYsNDUgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RvX2pzbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2EKICAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9wdXNoX25ld19zY29wZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CisgICAgSnVtcCBub3RFbXB0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IoZHN0KSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICBKSVRTdHViQ2FsbCh0
aGlzLCBjdGlfb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQpLmNhbGwoKTsKKyAgICBub3RFbXB0eS5s
aW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfbm90X2lu
aXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgZW1wdHkgPSBicmFu
Y2gzMihFcXVhbCwgdGFnRm9yKGRzdCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSk7CisgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX2Fzc2VydF9sYXp5X3JlZ19ub3Rf
aW5pdCkuY2FsbCgpOworICAgIGVtcHR5LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX3JlaWZ5X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
dW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNp
Z25lZCB0ZW1wbCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWdu
ZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgSnVtcCBzY29w
ZVJlaWZpZWQgPSBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKGRzdCksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgZW1pdExvYWRQYXlsb2FkKHRlbXBsLCByZWdU
MCk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3JlaWZ5X3Njb3BlKTsK
KyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoVHJ1c3RlZEltbTMyKGJhc2UpKTsKKyAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgc2Nv
cGVSZWlmaWVkLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX3Nj
b3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgc2Nv
cGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgc2NvcGVOb3RS
ZWlmaWVkID0gYnJhbmNoMzIoRXF1YWwsIHRhZ0ZvcihzY29wZSksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgZW1pdExvYWRQYXlsb2FkKHNjb3BlLCByZWdUMCk7
CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3RlYXJfb2ZmX3Njb3BlKTsK
KyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CisgICAgc3R1YkNhbGwuY2FsbCgpOwor
ICAgIHNjb3BlTm90UmVpZmllZC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM2MSwxNCArMTM5NCw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2NhdGNoKSwg
ZXhjZXB0aW9uLCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qbXBfc2Nv
cGVzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX2ptcF9zY29wZXMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAg
c3R1YkNhbGwuY2FsbCgpOwotICAgIGFkZEp1bXAoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAppbmRleCBlZWJlOTA0MjdhZWMxYzVkNTZhYmJjYjk2ZjYwMjU1YzllNzkyNTEx
Li45ZWZlZTA1MGE5NmQyZDFjMTQyODYzM2FiZTRhZDUzM2Q2NWI5MzA1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzA4MCw3ICszMDgwLDcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfZnVuY19leHApCiAgICAgICAgIGRvZXMgbm90
IGFmZmVjdCB0aGUgc2NvcGUgZW5jbG9zaW5nIHRoZSBGdW5jdGlvbkV4cHJlc3Npb24uCiAgICAg
ICovCiAgICAgaWYgKCFmdW5jdGlvbi0+bmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIEpTU3Rh
dGljU2NvcGVPYmplY3QqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBKU1N0YXRpY1Njb3BlT2JqZWN0
OjpjcmVhdGUoY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERv
bnREZWxldGUpOworICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2Jq
ZWN0ID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEs
IGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAg
IGZ1bmMtPnNldFNjb3BlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jLT5zY29wZSgpLT5w
dXNoKGZ1bmN0aW9uU2NvcGVPYmplY3QpKTsKICAgICB9CiAKQEAgLTMzNzEsMjggKzMzNzEsNTYg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2luKQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5KGNhbGxGcmFt
ZSwgcHJvcGVydHkpKSk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3Bf
cHVzaF9uZXdfc2NvcGUpCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9hc3NlcnRfbGF6
eV9yZWdfaW5pdCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAK
LSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoc3RhY2tG
cmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIHN0YWNrRnJh
bWUuYXJnc1sxXS5qc1ZhbHVlKCksIERvbnREZWxldGUpOworICAgIFVTdHJpbmcgbWVzc2FnZSgi
dW5pbml0aWFsaXplZCB2YXJpYWJsZSIpOworICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhj
ZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNlRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsIG1lc3Nh
Z2UpOworICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKK30KIAotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgY2FsbEZyYW1lLT5zZXRT
Y29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKHNjb3BlKSk7Ci0gICAgcmV0
dXJuIHNjb3BlOworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfYXNzZXJ0X2xhenlfcmVn
X25vdF9pbml0KQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKwor
ICAgIFVTdHJpbmcgbWVzc2FnZSgiY29uc3QgdmFyaWFibGUgYWxyZWFkeSBpbml0aWFsaXplZCIp
OworICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNl
RXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsIG1lc3NhZ2UpOworICAgIFZNX1RIUk9XX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bfam1wX3Nj
b3BlcykKK0RFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcmVpZnlfc2NvcGUpCiB7
CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgdW5zaWduZWQg
Y291bnQgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIC8vIEFyZ3VtZW50czogc2NvcGUgdGVt
cGxhdGUgb2JqZWN0IChqc3ZhbHVlKSwgb2Zmc2V0IG9mIHJlZ2lzdGVycyAoaW50MzIpLgorICAg
IEpTVmFsdWUgdGVtcGwgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpOwogCi0gICAgU2NvcGVD
aGFpbk5vZGUqIHRtcCA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwotICAgIHdoaWxlIChjb3Vu
dC0tKQotICAgICAgICB0bXAgPSB0bXAtPnBvcCgpOwotICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVD
aGFpbih0bXApOworICAgIEFTU0VSVCh0ZW1wbC5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCog
c2NvcGVUZW1wbGF0ZSA9IGFzT2JqZWN0KHRlbXBsKTsKKyAgICBBU1NFUlQoc2NvcGVUZW1wbGF0
ZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBuZXdT
Y29wZSA9IHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihzY29wZVRlbXBsYXRlKTsK
KyAgICBuZXdTY29wZSA9IG5ld1Njb3BlLT5yZWlmeSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBz
dGFja0ZyYW1lLmNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7CisgICAg
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc3RhY2tGcmFtZS5jYWxsRnJhbWUt
PnNjb3BlQ2hhaW4oKS0+cHVzaChuZXdTY29wZSkpOworCisgICAgLy8gR2VuZXJhdGVkIGNvZGUg
c3RvcmVzIGl0IGluIGNhbGxGcmFtZS0+cihkc3QpLgorICAgIHJldHVybiBuZXdTY29wZTsKK30K
KworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZfc2NvcGUpCit7CisgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgLy8gQXJndW1lbnRzOiBz
Y29wZSBvYmplY3QgKGpzdmFsdWUpLgorICAgIEpTVmFsdWUgc2NvcGUgPSBzdGFja0ZyYW1lLmFy
Z3NbMF0uanNWYWx1ZSgpOworICAgIEFTU0VSVChzY29wZSk7CisKKyAgICBBU1NFUlQoc2NvcGUu
aXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHNjb3BlKTsKKyAg
ICBBU1NFUlQob2JqZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgIHN0YXRpY19jYXN0
PEpTU3RhdGljU2NvcGVPYmplY3QqPihvYmplY3QpLT50ZWFyT2ZmKCpzdGFja0ZyYW1lLmdsb2Jh
bERhdGEpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHN0YWNrRnJh
bWUuY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnBvcCgpKTsKIH0KIAogREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3BfcHV0X2J5X2luZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCmluZGV4IDQ5ZjY2NjQ2NTNjMzY3NWRlMzI4YWM5Y2E1YTAzZWY2MDA2NWRiMmYuLmE1NWJh
NzE1ZmVlY2NiNDZiYWE4MjAzMmY1ZmZjYTc2ZDU0NTRlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmgKQEAgLTQxOCw3ICs0MTgsMTAgQEAgZXh0ZXJuICJDIiB7CiAgICAgSlNP
YmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfb2JqZWN0KFNUVUJfQVJHU19ERUNMQVJBVElPTik7
CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfcmVnZXhwKFNUVUJfQVJHU19ERUNM
QVJBVElPTik7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9wdXNoX2FjdGl2YXRpb24o
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1
c2hfbmV3X3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9pZCBKSVRfU1RVQiBj
dGlfb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2
b2lkIEpJVF9TVFVCIGN0aV9vcF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsKKyAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3JlaWZ5X3Njb3BlKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZf
c2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09iamVjdCogSklUX1NUVUIgY3Rp
X29wX3B1c2hfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09iamVjdCogSklU
X1NUVUIgY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MoU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKTsKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKSVRfU1RVQiBjdGlfb3BfZ2V0
X3BuYW1lcyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpAQCAtNDM1LDcgKzQzOCw2IEBAIGV4dGVy
biAiQyIgewogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2NoZWNrX2hhc19pbnN0YW5jZShTVFVC
X0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2RlYnVnKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfZW5kKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7Ci0gICAgdm9pZCBKSVRfU1RVQiBjdGlfb3Bfam1wX3Njb3BlcyhTVFVC
X0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3BvcF9zY29wZShT
VFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3Byb2ZpbGVf
ZGlkX2NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9v
cF9wcm9maWxlX3dpbGxfY2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggYjZiYjY2NGJjZjcy
MGNlMjBmYTBmMGZjMzcxNGI3YjE4OGE2MzI3Mi4uMWZhY2VjOTZlZDdiODM2ZGMyYTUwYWViNzNj
NmExZTIyNTQzZGRlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCkBAIC0xMTIwLDE4ICsxMTIwLDYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3B1dF9nZXR0ZXJfc2V0dGVyKQogICAgIExMSU5UX0VORCgpOwogfQogCi1MTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfam1wX3Njb3BlcykKLXsKLSAgICBMTElOVF9CRUdJ
TigpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gcGNbMV0udS5vcGVyYW5kOwotICAgIFNjb3BlQ2hh
aW5Ob2RlKiB0bXAgPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAgd2hpbGUgKGNvdW50LS0pCi0g
ICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0gICAgZXhlYy0+c2V0U2NvcGVDaGFpbih0bXApOwot
ICAgIHBjICs9IHBjWzJdLnUub3BlcmFuZDsKLSAgICBMTElOVF9FTkQoKTsKLX0KLQogTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2p0cnVlKQogewogICAgIExMSU5UX0JFR0lOKCk7CkBA
IC0xNDUwLDYgKzE0MzgsNTAgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJf
b2ZmX2FyZ3VtZW50cykKICAgICBMTElOVF9FTkQoKTsKIH0KIAorTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2Fzc2VydF9sYXp5X3JlZ19pbml0KQoreworICAgIExMSU5UX0JFR0lOKCk7
CisgICAgVVN0cmluZyBtZXNzYWdlKCJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIik7CisgICAgTExJ
TlRfVEhST1coY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgbWVzc2FnZSkpOworfQorCitMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfYXNzZXJ0X2xhenlfcmVnX25vdF9pbml0KQorewor
ICAgIExMSU5UX0JFR0lOKCk7CisgICAgVVN0cmluZyBtZXNzYWdlKCJjb25zdCB2YXJpYWJsZSBh
bHJlYWR5IGluaXRpYWxpemVkIik7CisgICAgTExJTlRfVEhST1coY3JlYXRlUmVmZXJlbmNlRXJy
b3IoZXhlYywgbWVzc2FnZSkpOworfQorCitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cmVpZnlfc2NvcGUpCit7CisgICAgTExJTlRfQkVHSU4oKTsKKyAgICBpbnQgZHN0ID0gcGNbMV0u
dS5vcGVyYW5kOworICAgIGludCB0ZW1wbCA9IHBjWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFz
ZSA9IHBjWzNdLnUub3BlcmFuZDsKKyAgICBBU1NFUlQoIWV4ZWMtPnVuY2hlY2tlZFIoZHN0KS5q
c1ZhbHVlKCkpOworICAgIEFTU0VSVChleGVjLT5yKHRlbXBsKS5qc1ZhbHVlKCkuaXNPYmplY3Qo
KSk7CisgICAgSlNPYmplY3QqIHNjb3BlVGVtcGxhdGUgPSBhc09iamVjdChleGVjLT5yKHRlbXBs
KS5qc1ZhbHVlKCkpOworICAgIEFTU0VSVChzY29wZVRlbXBsYXRlLT5pc1N0YXRpY1Njb3BlT2Jq
ZWN0KCkpOworICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIG5ld1Njb3BlID0gc3RhdGljX2Nhc3Q8
SlNTdGF0aWNTY29wZU9iamVjdCo+KHNjb3BlVGVtcGxhdGUpOworICAgIG5ld1Njb3BlID0gbmV3
U2NvcGUtPnJlaWZ5KGdsb2JhbERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpICsgYmFzZSk7CisgICAg
ZXhlYy0+dW5jaGVja2VkUihkc3QpID0gbmV3U2NvcGU7CisgICAgZXhlYy0+c2V0U2NvcGVDaGFp
bihleGVjLT5zY29wZUNoYWluKCktPnB1c2gobmV3U2NvcGUpKTsKKyAgICBMTElOVF9FTkQoKTsK
K30KKworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX3Njb3BlKQorewor
ICAgIExMSU5UX0JFR0lOKCk7CisgICAgaW50IHNyYyA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAg
QVNTRVJUKGV4ZWMtPnVuY2hlY2tlZFIoZHN0KS5qc1ZhbHVlKCkpOworICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBhc09iamVjdChleGVjLT51bmNoZWNrZWRSKHNyYykuanNWYWx1ZSgpKTsKKyAgICBB
U1NFUlQob2JqZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgIHN0YXRpY19jYXN0PEpT
U3RhdGljU2NvcGVPYmplY3QqPihvYmplY3QpLT50ZWFyT2ZmKGdsb2JhbERhdGEpOworICAgIGV4
ZWMtPnVuY2hlY2tlZFIoc3JjKS5jbGVhcigpOworICAgIGV4ZWMtPnNldFNjb3BlQ2hhaW4oZXhl
Yy0+c2NvcGVDaGFpbigpLT5wb3AoKSk7CisgICAgTExJTlRfRU5EKCk7Cit9CisKIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKaW5kZXggN2IzYjhi
ZGE2NTZlYjFmOWI3ZjMxZjA2MmFiZjA5ZjU0NTM3MGU4NS4uMDUxNTk4N2QxZDY2OGY1MTRhMTE0
ODhiNWQ1MGJjZGZiNDE4M2JiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmgKQEAgLTE1OSw3ICsxNTksNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcHV0X2J5X3ZhbCk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVs
X2J5X3ZhbCk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2luZGV4KTsK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2V0dGVyX3NldHRlcik7Ci1MTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfam1wX3Njb3Blcyk7CiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfanRydWUpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pm
YWxzZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfamxlc3MpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4
IDlhZjkxYmVmMmM0ODE3NTQ4ODMzMWZkYjk0MjQxNTRhMDE4NWE3ZGYuLjM2Mzg3YmIxNWM1MTIz
Y2E2OTZhYTc0OGFmZTk4OTI1NzdjZWNmNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTUyNSwxMiArNTI1LDYgQEAg
X2xsaW50X29wX3B1dF9nZXR0ZXJfc2V0dGVyOgogICAgIGRpc3BhdGNoKDUpCiAKIAotX2xsaW50
X29wX2ptcF9zY29wZXM6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX2ptcF9zY29wZXMpCi0gICAgZGlzcGF0Y2goMCkKLQotCiBfbGxpbnRf
b3BfbG9vcF9pZl90cnVlOgogICAgIG5vcAogX2xsaW50X29wX2p0cnVlOgpAQCAtNzI3LDEyICs3
MjEsNiBAQCBfbGxpbnRfb3BfcG9wX3Njb3BlOgogICAgIGRpc3BhdGNoKDEpCiAKIAotX2xsaW50
X29wX3B1c2hfbmV3X3Njb3BlOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBjYWxsU2xvd1Bh
dGgoX2xsaW50X3Nsb3dfcGF0aF9wdXNoX25ld19zY29wZSkKLSAgICBkaXNwYXRjaCg0KQotCi0K
IF9sbGludF9vcF90aHJvdzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfdGhyb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDQ2YzYyMjZlNTQ0
ZTgxNjVlY2ZlMmZhNTUyNGY0MDU5NjQ3ZmMyNDkuLjY0NjY0MjQxNzBkZWZhN2MxMzA5MzUzNDUy
OTMyZDFhMWQ4OTQ3OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xNDU4LDYgKzE0NTgsNDIgQEAg
X2xsaW50X29wX3RlYXJfb2ZmX2FyZ3VtZW50czoKICAgICBkaXNwYXRjaCgyKQogCiAKK19sbGlu
dF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9h
ZGkgNFtQQ10sIHQwCisgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZhbHVl
VGFnLCAub3BBc3NlcnRMYXp5UmVnSW5pdERvbmUKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Ns
b3dfcGF0aF9hc3NlcnRfbGF6eV9yZWdfaW5pdCkKKy5vcEFzc2VydExhenlSZWdJbml0RG9uZToK
KyAgICBkaXNwYXRjaCgyKQorCisKK19sbGludF9vcF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQ6
CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpIDRbUENdLCB0MAorICAgIGJpZXEgVGFn
T2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BBc3NlcnRMYXp5UmVnTm90SW5p
dERvbmUKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9hc3NlcnRfbGF6eV9yZWdf
bm90X2luaXQpCisub3BBc3NlcnRMYXp5UmVnTm90SW5pdERvbmU6CisgICAgZGlzcGF0Y2goMikK
KworCitfbGxpbnRfb3BfcmVpZnlfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxv
YWRpIDRbUENdLCB0MAorICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgRW1wdHlWYWx1
ZVRhZywgLm9wUmVpZnlTY29wZURvbmUKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF9yZWlmeV9zY29wZSkKKy5vcFJlaWZ5U2NvcGVEb25lOgorICAgIGRpc3BhdGNoKDQpCisKKwor
X2xsaW50X29wX3RlYXJfb2ZmX3Njb3BlOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2Fk
aSA0W1BDXSwgdDAKKyAgICBiaWVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgRW1wdHlWYWx1ZVRh
ZywgLm9wVGVhck9mZlNjb3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRo
X3RlYXJfb2ZmX3Njb3BlKQorLm9wVGVhck9mZlNjb3BlRG9uZToKKyAgICBkaXNwYXRjaCgyKQor
CisKIF9sbGludF9vcF9yZXQ6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNoZWNrU3dpdGNo
VG9KSVRGb3JFcGlsb2d1ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGQ4YzkzMWZhMGM4OWM3YmJkYTc2NTEz
MjczNDljZmNhMmNlNGFmYzQuLjhiOGNlZjJlNjcxOTAxM2MwOTMwY2Y2YjkzMjYwZjk3YjFiOTU2
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCkBAIC0xMzEwLDYgKzEzMTAsNDIgQEAgX2xsaW50X29wX3RlYXJfb2Zm
X2FyZ3VtZW50czoKICAgICBkaXNwYXRjaCgyKQogCiAKK19sbGludF9vcF9hc3NlcnRfbGF6eV9y
ZWdfaW5pdDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwg
dDAKKyAgICBidHBueiBbY2ZyLCB0MCwgOF0sIC5vcEFzc2VydExhenlSZWdJbml0RG9uZQorICAg
IGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2Fzc2VydF9sYXp5X3JlZ19pbml0KQorLm9w
QXNzZXJ0TGF6eVJlZ0luaXREb25lOgorICAgIGRpc3BhdGNoKDIpCisKKworX2xsaW50X29wX2Fz
c2VydF9sYXp5X3JlZ19ub3RfaW5pdDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGlz
IDhbUEIsIFBDLCA4XSwgdDAKKyAgICBidHB6IFtjZnIsIHQwLCA4XSwgLm9wQXNzZXJ0TGF6eVJl
Z05vdEluaXREb25lCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfYXNzZXJ0X2xh
enlfcmVnX25vdF9pbml0KQorLm9wQXNzZXJ0TGF6eVJlZ05vdEluaXREb25lOgorICAgIGRpc3Bh
dGNoKDIpCisKKworX2xsaW50X29wX3JlaWZ5X3Njb3BlOgorICAgIHRyYWNlRXhlY3V0aW9uKCkK
KyAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAorICAgIGJ0cHogW2NmciwgdDAsIDhdLCAub3BS
ZWlmeVNjb3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3JlaWZ5X3Nj
b3BlKQorLm9wUmVpZnlTY29wZURvbmU6CisgICAgZGlzcGF0Y2goNCkKKworCitfbGxpbnRfb3Bf
dGVhcl9vZmZfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpcyA4W1BCLCBQ
QywgOF0sIHQwCisgICAgYnRweiBbY2ZyLCB0MCwgOF0sIC5vcFRlYXJPZmZTY29wZURvbmUKKyAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF90ZWFyX29mZl9zY29wZSkKKy5vcFRlYXJP
ZmZTY29wZURvbmU6CisgICAgZGlzcGF0Y2goMikKKworCiBfbGxpbnRfb3BfcmV0OgogICAgIHRy
YWNlRXhlY3V0aW9uKCkKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IGY3NTJiOTFlOTVkZDk0MWIxY2Y5OGIxMjA2
NTMxZWRmOTRlOGM3MzcuLmE0MDE5ZWY0MDJiOTVkNmUxMGNmODE2MWI3Yzg4YTczYWU1MGMxMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTE0MjIsNyArMTQyMiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldFVzZXNBcmd1bWVudHMoKSB7IG1fc2Nv
cGVGbGFncyB8PSBVc2VzQXJndW1lbnRzRmxhZzsgfQogICAgICAgICBib29sIHVzZXNUaGlzKCkg
Y29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgVXNlc1RoaXNGbGFnOyB9CiAKLSAgICAgICAg
Ym9vbCBuZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcgfCBVc2VzV2l0aEZsYWcgfCBVc2VzQ2F0Y2hG
bGFnKTsgfQorICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVz
KCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVzZXNFdmFsRmxhZyB8IFVzZXNXaXRo
RmxhZyk7IH0KICAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBo
YXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IG5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFi
bGVzKCk7IH0KIAogICAgICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKaW5kZXgg
NzUxM2QxZjExZmQ0ODk1ODI4YWY4Y2FlYmU4MGFkYTE1YjVmNTdmOS4uZTQyMDYyOGY5OTQ1NjUw
MTYyNzk1NjliNjk3N2RmNDQ5NTg4Yjk3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5oCkBAIC0xNjIsNyArMTYyLDcgQEAgc3RydWN0IFNjb3BlIHsKICAgICBBTFdBWVNfSU5M
SU5FIFNjb3BlRmxhZ3MgdXNlc0ZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYg
QWxsU2NvcGVVc2VzRmxhZ3M7IH0KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RmxhZ3MoU2Nv
cGVGbGFncyBzY29wZUZsYWdzKSB7IG1fc2NvcGVGbGFncyB8PSBzY29wZUZsYWdzOyB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgbmVlZHNGdWxsQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcgfCBVc2VzV2l0aEZsYWcgfCBVc2VzQ2F0Y2hG
bGFnKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBuZWVkc0Z1bGxBY3RpdmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVzZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyk7
IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NvcGVGbGFncyAmIFN0cmljdE1vZGVGbGFnOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIHNo
YWRvd3NBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTaGFkb3dzQXJn
dW1lbnRzRmxhZzsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zY29wZUZsYWdzICYgRnVuY3Rpb25Nb2RlRmxhZzsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCmluZGV4IDA4YjM5ZmNmMGI0YzkzMDI5MDQz
N2JjYTkwMTk3Y2M5NTMwMGVmZTcuLjgwMTY5MDE4MjllYjA5MWY0ZTg3MzYzYzYyMjgxZWJjY2Q2
NWMyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAg
LTI5NCw3ICsyOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIHVzZXNFdmFs
KCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgVXNlc0V2YWxGbGFnOyB9CiAgICAgICAg
IGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNB
cmd1bWVudHNGbGFnOyB9Ci0gICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyB8fCBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxG
bGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNlc0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBuZWVk
c0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIHx8IG1f
c2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcgfCBVc2VzV2l0aEZsYWcpOyB9CiAgICAgICAgIGJv
b2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU3RyaWN0TW9k
ZUZsYWc7IH0KIAogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCmluZGV4IGY4
OTQyYjVmODY1ZGI1OWUxNTQyZGM0ZTNiNWM3Y2YyNzljMTcxNjMuLjBlZTAxZGM2ZWVlYzQ0NmY5
M2ZhNGJmYmE1MTdiOGM0ZTBjMTVjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCkBAIC00Niw3ICs0Niw4IEBAIHZv
aWQgSlNTdGF0aWNTY29wZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5n
RmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgSlNWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9yZWdpc3RlclN0b3JlKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9yZWdpc3RlcnMpCisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzLCB0aGlz
T2JqZWN0LT5tX3N5bWJvbFRhYmxlLT5zaXplKCkpOwogfQogCiBKU09iamVjdCogSlNTdGF0aWNT
Y29wZU9iamVjdDo6dG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3Qu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaApp
bmRleCBiYmYwM2EzNDczYTI1NzY5ZDJiNDI1OWI3NTBmNmJmN2ZmZDQwZjg5Li5jYjRmMmJjMDMy
MWZkMTkwNzUwMzMyNGM0NTk5NzBhMzAzNTc3MDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCkBAIC0zNCwxMyArMzQsNTMg
QEAgbmFtZXNwYWNlIEpTQ3sKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJs
ZU9iamVjdCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29w
ZU9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAg
ICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU1N0YXRpY1Njb3BlT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNTdGF0
aWNTY29wZU9iamVjdChleGVjKTsKLSAgICAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVh
dGlvbihleGVjLCBpZGVudGlmaWVyLCB2YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICBS
ZWZQdHI8U2hhcmVkU3ltYm9sVGFibGU+IHRhYmxlID0gU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0
ZSgpOworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0YXRpY1Njb3BlT2JqZWN0PihnbG9iYWxEYXRhLmhl
YXApKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGdsb2JhbERhdGEsIHRhYmxlLnJlbGVhc2UoKSwgMCk7
CisgICAgICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAg
ICAgICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0
aWMgSlNTdGF0aWNTY29wZU9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cykKKyAgICAgICAgeworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogc2NvcGVPYmpl
Y3QgPSBjcmVhdGUoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+YWRkVmFy
aWFibGUobmFtZSwgYXR0cmlidXRlcywgU3ltYm9sVGFibGVFbnRyeTo6Tm9UZW1wb3JhbERlYWRa
b25lKTsKKyAgICAgICAgICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJl
Z2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5bMV0p
OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMgPSByZWdpc3Rl
ckFycmF5LmdldCgpOworICAgICAgICAgICAgcmVnaXN0ZXJzWzBdLnNldChnbG9iYWxEYXRhLCBz
Y29wZU9iamVjdCwgdmFsdWUpOworICAgICAgICAgICAgc2NvcGVPYmplY3QtPnNldFJlZ2lzdGVy
cyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXkucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBzY29wZU9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBhZGRWYXJpYWJsZShjb25z
dCBJZGVudGlmaWVyJiBuYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTeW1ib2xUYWJsZUVudHJ5
OjpUZW1wb3JhbERlYWRab25lS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoIW1fcmVnaXN0ZXJzKTsKKyAgICAgICAgICAgIGludCBpZHggPSBzeW1ib2xUYWJsZSgpLnNp
emUoKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlKCkuYWRkKG5hbWUuaW1wbCgpLCBTeW1ib2xU
YWJsZUVudHJ5KGlkeCwgYXR0cmlidXRlcywga2luZCkpOworICAgICAgICAgICAgQVNTRVJUKHN5
bWJvbFRhYmxlKCkuc2l6ZSgpID09IGlkeCArIDEpOworICAgICAgICAgICAgcmV0dXJuIGlkeDsK
KyAgICAgICAgfQorCisgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHJlaWZ5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgUmVnaXN0ZXIqIHJlZ2lzdGVycykKKyAgICAgICAgeworICAgICAg
ICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCAqc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1N0YXRpY1Njb3BlT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0YXRp
Y1Njb3BlT2JqZWN0KGdsb2JhbERhdGEsIG1fc3ltYm9sVGFibGUsIHJlZ2lzdGVycyk7CisgICAg
ICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAg
ICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHRlYXJP
ZmYoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBPd25B
cnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRBcnJh
eVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W21fc3ltYm9sVGFibGUtPnNpemUoKV0pOwor
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMgPSByZWdpc3RlckFy
cmF5LmdldCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3N5bWJvbFRhYmxl
LT5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgbV9yZWdpc3RlcnNbaV0uZ2V0KCkpOworICAgICAgICAgICAgICAgIC8vIENs
ZWFyIG9sZCB2YWx1ZXMgdG8gaGVscCBHQyAoPykuCisgICAgICAgICAgICAgICAgbV9yZWdpc3Rl
cnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIEpTVmFsdWUoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzZXRSZWdpc3RlcnMocmVnaXN0ZXJzLCByZWdpc3RlckFycmF5LnJlbGVhc2Uo
KSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAgICAgICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVx
dWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiB0b1Ro
aXNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKik7CkBAIC01NCwyNCArOTQsMTggQEAgbmFtZXNw
YWNlIEpTQ3sKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVj
LT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgbV9yZWdpc3RlclN0b3JlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlKCkuYWRk
KGlkZW50aWZpZXIuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KC0xLCBhdHRyaWJ1dGVzKSk7Ci0g
ICAgICAgIH0KICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
SXNFbnZpcm9ubWVudFJlY29yZCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNWYXJpYWJs
ZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBwcml2YXRlOgotICAgICAgICBKU1N0YXRp
Y1Njb3BlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAgIDogSlNWYXJpYWJsZU9i
amVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5zdGF0aWNTY29wZVN0
cnVjdHVyZS5nZXQoKSwgJm1fc3ltYm9sVGFibGUsIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIq
PigmbV9yZWdpc3RlclN0b3JlICsgMSkpCisgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFNoYXJlZFN5bWJvbFRhYmxlPiB0YWJs
ZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycykKKyAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0YXRpY1Njb3BlU3RydWN0dXJlLmdldCgpLCB0YWJsZS5n
ZXQoKSwgcmVnaXN0ZXJzKQorICAgICAgICAgICAgLCBtX3N5bWJvbFRhYmxlKHRhYmxlKQogICAg
ICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogCi0gICAgICAgIFN5bWJvbFRhYmxlIG1fc3ltYm9sVGFibGU7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiBtX3JlZ2lzdGVyU3RvcmU7CisgICAgICAgIFJlZlB0cjxTaGFyZWRTeW1i
b2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKICAgICB9OwogCiAgICAgaW5saW5lIGJvb2wgSlNTdGF0
aWNTY29wZU9iamVjdDo6aXNEeW5hbWljU2NvcGUoYm9vbCYpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAppbmRleCBmNTQwYTEyYzczZWYxNzI2ZjZj
MmZkYWVmZWQ1OTFlNWNlZWEzNjlkLi45ZjNkYWViMjYzMTJmZTliYWQ4NWVhM2FmYTRlZDljYWI4
Yzk2NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgK
QEAgLTUxLDEzICs1MSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3ltYm9sVGFibGVF
bnRyeShpbnQgaW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkSW5k
ZXgoaW5kZXgpKTsKLSAgICAgICAgICAgIHBhY2soaW5kZXgsIGZhbHNlLCBmYWxzZSk7CisgICAg
ICAgICAgICBwYWNrKGluZGV4LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgfQogCiAg
ICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaW50IGluZGV4LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQog
ICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAg
ICAgICAgICBwYWNrKGluZGV4LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBE
b250RW51bSk7CisgICAgICAgICAgICBwYWNrKGluZGV4LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHks
IGF0dHJpYnV0ZXMgJiBEb250RW51bSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgZW51
bSBUZW1wb3JhbERlYWRab25lS2luZCB7IEhhc1RlbXBvcmFsRGVhZFpvbmUsIE5vVGVtcG9yYWxE
ZWFkWm9uZSB9OworCisgICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaW50IGluZGV4LCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBUZW1wb3JhbERlYWRab25lS2luZCBraW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoaXNWYWxpZEluZGV4KGluZGV4KSk7CisgICAgICAgICAgICBwYWNrKGlu
ZGV4LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSwga2luZCA9
PSBIYXNUZW1wb3JhbERlYWRab25lKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9v
bCBpc051bGwoKSBjb25zdApAQCAtODIsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIHNldEF0dHJpYnV0ZXModW5zaWduZWQgYXR0cmlidXRlcykKICAgICAgICAgewot
ICAgICAgICAgICAgcGFjayhnZXRJbmRleCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJp
YnV0ZXMgJiBEb250RW51bSk7CisgICAgICAgICAgICBwYWNrKGdldEluZGV4KCksIGF0dHJpYnV0
ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtLCBoYXNUZW1wb3JhbERlYWRab25l
KCkpOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QKQEAgLTkw
LDE5ICs5OCwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBtX2JpdHMg
JiBSZWFkT25seUZsYWc7CiAgICAgICAgIH0KIAorICAgICAgICBib29sIGhhc1RlbXBvcmFsRGVh
ZFpvbmUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iaXRzICYgSGFz
VGVtcG9yYWxEZWFkWm9uZUZsYWc7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBSZWFkT25seUZsYWcgPSAweDE7CiAgICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBEb250RW51bUZsYWcgPSAweDI7CiAgICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBOb3ROdWxsRmxhZyA9IDB4NDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIEZsYWdCaXRzID0gMzsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEhhc1RlbXBv
cmFsRGVhZFpvbmVGbGFnID0gMHg4OworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRmxh
Z0JpdHMgPSA0OwogCi0gICAgICAgIHZvaWQgcGFjayhpbnQgaW5kZXgsIGJvb2wgcmVhZE9ubHks
IGJvb2wgZG9udEVudW0pCisgICAgICAgIHZvaWQgcGFjayhpbnQgaW5kZXgsIGJvb2wgcmVhZE9u
bHksIGJvb2wgZG9udEVudW0sIGJvb2wgaGFzVGVtcG9yYWxEZWFkWm9uZSkKICAgICAgICAgewog
ICAgICAgICAgICAgbV9iaXRzID0gKGluZGV4IDw8IEZsYWdCaXRzKSB8IE5vdE51bGxGbGFnOwog
ICAgICAgICAgICAgaWYgKHJlYWRPbmx5KQogICAgICAgICAgICAgICAgIG1fYml0cyB8PSBSZWFk
T25seUZsYWc7CiAgICAgICAgICAgICBpZiAoZG9udEVudW0pCiAgICAgICAgICAgICAgICAgbV9i
aXRzIHw9IERvbnRFbnVtRmxhZzsKKyAgICAgICAgICAgIGlmIChoYXNUZW1wb3JhbERlYWRab25l
KQorICAgICAgICAgICAgICAgIG1fYml0cyB8PSBIYXNUZW1wb3JhbERlYWRab25lRmxhZzsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9vbCBpc1ZhbGlkSW5kZXgoaW50IGluZGV4KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133011</attachid>
            <date>2012-03-21 04:47:44 -0700</date>
            <delta_ts>2012-03-21 05:08:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20120321124742.patch</filename>
            <type>text/plain</type>
            <size>93991</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
OTgzMjYwZGE1ZTBlZjMwMzg0MjlkMGQyMjMxZWY4YmVjYmU2ZjI1Li5lMzE3OTk1M2MwMDU3Njcz
MjEwOTRmZDM1M2VmNDcxY2NjZWIyYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDcgQEAKKzIwMTEtMDMtMjAgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIE9wdGltaXplIGFjY2VzcyB0byBibG9jay1zY29wZWQgbG9jYWwgdmFyaWFibGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcwOAor
CisgICAgICAgIFRoaXMgY29tbWl0IGNoYW5nZXMgdGhlIGJ5dGVjb21waWxlciB0byB0cmFjayBi
bG9jayBzY29wZSBvYmplY3RzLAorICAgICAgICBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUgcmVzb2x2ZWQKKyAgICAgICAgYXQgY29tcGls
ZS10aW1lIHRvIHJlZ2lzdGVycy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBpcyB0bwor
ICAgICAgICByZS11c2UgSlNTdGF0aWNTY29wZSwgYWRkaW5nIGxhenkgdGVhci1vZmYgYW5kIHRo
ZSBhYmlsaXR5IHRvIGJpbmQKKyAgICAgICAgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KKworICAg
ICAgICBDdXJyZW50bHksIGluIEVTNSwgb25seSBjYXRjaCBibG9ja3MgZnVuY3Rpb24gYXMgYmxv
Y2sgc2NvcGVzLCBmb3IKKyAgICAgICAgdGhlaXIgZXhjZXB0aW9uIGlkZW50aWZpZXIuICAoTmFt
ZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYWxzbworICAgICAgICBpbnRyb2R1Y2UgYSBraW5kIG9m
IGJsb2NrIHNjb3BlLCBidXQgc2luY2UgdGhleSBhcmUgZXhwcmVzc2lvbnMKKyAgICAgICAgYW5k
IG5vdCBzdGF0ZW1lbnRzIHRoZSBjb21waWxlciBpcyBub3QgYXMgaW52b2x2ZWQuKQorCisgICAg
ICAgIEdpdmVuIHRoYXQgY2F0Y2ggYmxvY2tzIGFyZSBub3QgdmVyeSBjb21tb24gaW4gSlMsIGFu
ZCB0aGV5IGNhbgorICAgICAgICBvbmx5IGJpbmQgb25lIHZhcmlhYmxlLCB0aGlzIHBhdGNoIGlz
IG1vcmUgYSBwcm9vZiBvZiBjb3JyZWN0bmVzcworICAgICAgICBhbmQgYSBiYXNlIGZvciBhIHN1
YnNlcXVlbnQgYmxvY2sgc2NvcGluZyBwYXRjaCB0aGFuIGEgZ2VuZXJhbAorICAgICAgICBvcHRp
bWl6YXRpb24uICBBcyBzdWNoLCBpbiBhbnRpY2lwYXRpb24gb2YgRVM2IGJsb2NrLXNjb3BlZAor
ICAgICAgICBsb2NhbHMsIHRoaXMgcGF0Y2ggYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHJlYWQgYmFy
cmllcnMgb24KKyAgICAgICAgYmxvY2stc2NvcGVkIGxvY2FscywgdG8gaW1wbGVtZW50IHRoZSB0
ZW1wb3JhbCBkZWFkIHpvbmUuCisKKyAgICAgICAgVGhlcmUgYXJlIHRocmVlIG5ldyBvcGNvZGVz
OiBvbmUgdG8gYXNzZXJ0IHRoYXQgYSBibG9jay1zY29wZWQKKyAgICAgICAgbG9jYWwgaGFzIGJl
ZW4gaW5pdGlhbGl6ZWQsIGFuZCB0d28gZm9yIGRlYWxpbmcgd2l0aCBsYXppbHkKKyAgICAgICAg
cmVpZmllZCBhbmQgdG9ybi1vZmYgc2NvcGVzLiAgV2hpbGUgd2UncmUgYXQgaXQsIHdlIHJlbW92
ZQorICAgICAgICBqbXBfc2NvcGVzLCBhcyBpdCBjYW4ndCBiZSBpbXBsZW1lbnRlZCBjbGVhcmx5
IGluIHRoZSBwcmVzZW5jZSBvZgorICAgICAgICBsYXppbHktdG9ybi1vZmYgYmxvY2sgc2NvcGVz
LiAgSW5zdGVhZCB0aGUgY29tcGlsZXIgZW1pdHMgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIHVu
d2luZGluZ3MgZGlyZWN0bHkuICBXZSBhbHNvIHJlbW92ZSBwdXNoX25ld19zY29wZSBpbgorICAg
ICAgICBmYXZvciBvZiB0aGUgbW9yZSBnZW5lcmljIGFuZCBlZmZpY2llbnQgbGF6aWx5IHJlaWZp
ZWQgc3RhdGljCisgICAgICAgIHNjb3Blcy4KKworICAgICAgICBXaGVuIGVudGVyaW5nIGEgYmxv
Y2sgc2NvcGUsIHRoZSBjb21waWxlciBhbGxvY2F0ZXMgYSBjb250aWd1b3VzCisgICAgICAgIGJs
b2NrIG9mIHJlZ2lzdGVycyBmb3IgYmxvY2sgc2NvcGVzLiAgQmxvY2sgc2NvcGVzIHRoYXQgbWF5
IGJlCisgICAgICAgIHJlaWZpZWQgKGNhcHR1cmVkIGluIGEgc2NvcGUgY2hhaW4pIGFsc28gb2Nj
dXB5IGFuIGFkZGl0aW9uYWwKKyAgICAgICAgcmVnaXN0ZXIsIGZvciB0aGUgc2NvcGUgb2JqZWN0
IGl0c2VsZi4gIFRoZSBzeW1ib2wgdGFibGVzIGZvciB0aGUKKyAgICAgICAgYmxvY2sgc2NvcGVz
IGNvbWUgZnJvbSAic2NvcGUgdGVtcGxhdGVzIiwgd2hpY2ggbGl2ZSBpbiB0aGUKKyAgICAgICAg
Y29uc3RhbnRzIHNlY3Rpb24uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6Q29udHJvbEZsb3dDb250ZXh0KTogSW4gYWRkaXRpb24gdG8gZmluYWxseSBhbmQgd2l0
aCBibG9ja3MsCisgICAgICAgIHN1cHBvcnQgYmxvY2stc2NvcGUgY29udHJvbCBmbG93IGNvbnRl
eHRzLgorICAgICAgICAoSlNDOjpSZXNvbHZlUmVzdWx0KTogU2VwYXJhdGUgInR5cGUiIChlLmcu
IHJlZ2lzdGVyLCBsZXhpY2FsLAorICAgICAgICBldGMpIGZyb20gImF0dHJpYnV0ZXMiIChlLmcu
IHJlYWQtb25seSkuICBBZGQgdHdvIG5ldyBhdHRyaWJ1dGVzOgorICAgICAgICBCYXJyaWVyQXR0
cmlidXRlLCBpbmRpY2F0aW5nIHRoZSBuZWVkIGZvciBhIFREWiBjaGVjaywgYW5kCisgICAgICAg
IEFyZ3VtZW50c0F0dHJpYnV0ZSwgaW5kaWNhdGluZyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBhY3R1
YWxseSB0aGUKKyAgICAgICAgYXJndW1lbnRzIG9iamVjdC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNjb3BlRGVwdGgpOiBBZGQgbV9ibG9ja1Njb3BlRGVwdGguCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpjYW5PcHRpbWl6ZU5vbkxvY2Fscyk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpzaG91bGRPcHRpbWl6ZUxvY2Fscyk6CisgICAgICAg
IFJlbW92ZSBub3ctdW51c2VkIG1ldGhvZHMuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OndpbGxS
ZXNvbHZlVG9Bcmd1bWVudHMpOiBSZW1vdmUuICBDYWxsZXJzCisgICAgICAgIHVzZSBSZXNvbHZl
UmVzdWx0Ojppc0FyZ3VtZW50cygpLCBwb3NzaWJseSB3aXRoIHRoZSBuZXcKKyAgICAgICAgRG9u
dENyZWF0ZUFyZ3VtZW50c0ZsYWcuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWdpc3RlckZvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKTog
U2VhcmNoIGJsb2NrIHNjb3BlcyBiZWZvcmUKKyAgICAgICAgbG9va2luZyBpbiB0aGUgbG9jYWwg
c3ltYm9sIHRhYmxlIGZvciByZWdpc3RlcnMuICBIYW5kbGUgbGF6eQorICAgICAgICByZWlmaWNh
dGlvbiBvZiAiYXJndW1lbnRzIiBoZXJlLiAgSW5saW5lIGNhbk9wdGltaXplTm9uTG9jYWxzIGFu
ZAorICAgICAgICBzaG91bGRPcHRpbWl6ZUxvY2FscywgYW5kIGZvbGQgc29tZSBjb25zdGFudHMu
ICBTZXQgdGhlCisgICAgICAgIEJhcnJpZXJBdHRyaWJ1dGUgb24gcmVzdWx0cyB0aGF0IG5lZWQg
YSB0ZW1wb3JhbCBkZWFkIHpvbmUuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0R2V0U3RhdGljVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQ
dXRTdGF0aWNWYXIpOiBTaW1wbGlmeSBmb3IgdGhlCisgICAgICAgIHNlcGFyYXRpb24gb2YgUmVz
b2x2ZVJlc3VsdDo6dHlwZSgpIGFuZAorICAgICAgICBSZXNvbHZlUmVzdWx0OjphdHRyaWJ1dGVz
KCkuICBBZGQgcmVhZCBiYXJyaWVycyBpZiBuZWNlc3NhcnkuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkpOgorICAgICAg
ICBSZW1vdmUgbm93LXVudXNlZCBtZXRob2RzLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6cHVzaEJsb2NrU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
cG9wQmxvY2tTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWlmeVNj
b3Blcyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaFNjb3BlKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNvbnRleHQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBTY29wZXMpOiBSZWZhY3RvciB0byBoYW5kbGUg
YmxvY2sKKyAgICAgICAgc2NvcGVzIG9uIHRoZSBDb250cm9sRmxvd0NvbnRleHQgc3RhY2suICBX
aGVuIHB1c2hpbmcgYSBzY29wZSB0aGF0CisgICAgICAgIHJlcXVpcmVzIGEgc2NvcGUgY2hhaW4s
IHJlaWZ5U2NvcGVzIGlzIGNhbGxlZCwgd2hpY2ggZW5zdXJlcyB0aGF0CisgICAgICAgIHRoZSBz
Y29wZSBjaGFpbiBoYXMgYmVlbiBjcmVhdGVkLiAgV2hlbiBjb250cm9sIGxlYXZlcyBhIGJsb2Nr
CisgICAgICAgIHNjb3BlIHdob3NlIHNjb3BlIG1heSBoYXZlIGJlZW4gcmVpZmllZCwgdGVhcl9v
ZmZfc2NvcGUgd2lsbCB0ZWFyCisgICAgICAgIG9mZiB0aG9zZSBsb2NhbHMgZnJvbSB0aGUgc3Rh
Y2sgdG8gdGhlIGhlYXAuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3
RnVuY3Rpb25JbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TmV3RnVuY3Rpb25FeHByZXNzaW9uKTogQ2FsbAorICAgICAgICByZWlmeVNjb3BlcyBpbnN0ZWFk
IG9mIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeS4KKworICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpCcmFja2V0QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29k
ZSk6IEFkYXB0IHRvCisgICAgICAgIHdpbGxSZXNvbHZlVG9Bcmd1bWVudHMgY2hhbmdlLgorICAg
ICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6IEFkYXB0
IHRvCisgICAgICAgIEpTU3RhdGljU2NvcGUgdGFraW5nIGEgSlNHbG9iYWxEYXRhIGluc3RlYWQg
b2YgYW4gRXhlY1N0YXRlLgorICAgICAgICAoSlNDOjpUcnlOb2RlOjplbWl0Qnl0ZWNvZGUpOiBB
ZGFwdCB0byB1c2UgcHVzaEJsb2NrU2NvcGUgYW5kCisgICAgICAgIHBvcEJsb2NrU2NvcGUuCisK
KyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDogQWRkIG5ldyBhc3NlcnRfbGF6eV9yZWdfaW5p
dCwgcmVpZnlfc2NvcGUsCisgICAgICAgIGFuZCB0ZWFyX29mZl9zY29wZSBvcGNvZGVzLiBSZW1v
dmUgcHVzaF9uZXdfc2NvcGUgYW5kIGptcF9zY29wZXMuCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcCAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZWlmeV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90ZWFyX29mZl9zY29wZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZWlmeV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90ZWFyX29mZl9zY29wZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5j
cHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206
CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOiBVcGRhdGUgd2l0aCBzdXBw
b3J0IGZvciB0aGUgbmV3CisgICAgICAgIG9wY29kZXMuICBUaGUgTExJbnQgYml0cyBhcmUgdW50
ZXN0ZWQuCisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U2NvcGVO
b2RlOjpuZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcyk6CisgICAgICAgICogcGFy
c2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpTY29wZTo6bmVlZHNGdWxsQWN0aXZhdGlvbik6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6Om5lZWRzQWN0aXZhdGlvbik6ICJDYXRjaCIgY2xhdXNlcyBubworICAgICAgICBs
b25nZXIgZm9yY2UgdGhlaXIgZnVuY3Rpb25zIHRvIGhhdmUgYWN0aXZhdGlvbnMuCisKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N0
YXRpY1Njb3BlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTU3RhdGljU2NvcGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N0
YXRpY1Njb3BlT2JqZWN0OjphZGRWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2Nv
cGVPYmplY3Q6OnJlaWZ5KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6dGVh
ck9mZik6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OkpTU3RhdGljU2NvcGVP
YmplY3QpOiBBZGFwdCB0byBzdXBwb3J0CisgICAgICAgIGxhenkgdGVhci1vZmYsIGFuZCB0aGUg
YWJpbGl0eSB0byBiaW5kIG1vcmUgdGhhbiBvbmUgdmFyaWFibGUuCisKKyAgICAgICAgKiBydW50
aW1lL1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlKToKKyAgICAgICAg
KEpTQzo6U3ltYm9sVGFibGU6Omhhc1RlbXBvcmFsRGVhZFpvbmUpOgorICAgICAgICAoSlNDOjpT
eW1ib2xUYWJsZTo6VGVtcG9yYWxEZWFkWm9uZUtpbmQpOiBTdGVhbCBhbm90aGVyIGJpdCBmcm9t
CisgICAgICAgIHRoZSBlbnRyeSB0byBub3RlIHdoaWNoIHZhcmlhYmxlcyBuZWVkIGEgdGVtcG9y
YWwgZGVhZCB6b25lLgorCiAyMDEyLTAzLTE5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xv
dWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0NhbGxiYWNrRnVuY3Rpb246OnRvU3RyaW5nQ2Fs
bGJhY2svdmFsdWVPZkNhbGxiYWNrIGRvIG5vdCBoYW5kbGUgMCByZXR1cm4gdmFsdWUgZnJvbSBj
b252ZXJ0VG9UeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCmluZGV4IDIwOTcyY2M2M2I1YWZkNGNhOWMxZjg1MjI3ZjNiZmUwMGU2MjVkODQuLjQ0OTRh
NDJiZjQ4MmJjMWViOThlYzE0YWE4ZDcyZGFlOWE2MjI0YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0xMjIwLDE3ICsxMjIwLDI2IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPEluc3RydWN0
aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBwb3Bfc2Nv
cGVcbiIsIGxvY2F0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfcHVzaF9uZXdfc2NvcGU6IHsKKyAgICAgICAgY2FzZSBvcF9hc3NlcnRfbGF6eV9y
ZWdfaW5pdDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBkYXRhTG9nKCJbJTRkXSBhc3NlcnRfbGF6eV9yZWdfaW5pdFx0ICVzXG4iLCBsb2Nh
dGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9hc3NlcnRfbGF6eV9yZWdfbm90X2luaXQ6IHsK
KyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0
YUxvZygiWyU0ZF0gYXNzZXJ0X2xhenlfcmVnX25vdF9pbml0XHQgJXNcbiIsIGxvY2F0aW9uLCBy
ZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX3JlaWZ5X3Njb3BlOiB7CiAgICAgICAgICAgICBpbnQgcjAg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3Bl
cmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgZGF0YUxvZygiWyU0ZF0gcHVzaF9uZXdfc2NvcGUgXHQlcywgJXMsICVzXG4iLCBsb2NhdGlv
biwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmll
cnNbaWQwXSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSk7CisgICAgICAg
ICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGFMb2coIlsl
NGRdIHJlaWZ5X3Njb3BlXHQgJXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShl
eGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGV4ZWMsIHIyKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9qbXBfc2NvcGVzOiB7Ci0gICAgICAgICAgICBpbnQgc2NvcGVEZWx0YSA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gam1wX3Njb3Blc1x0XiVkLCAlZCgt
PiVkKVxuIiwgbG9jYXRpb24sIHNjb3BlRGVsdGEsIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQp
OworICAgICAgICBjYXNlIG9wX3RlYXJfb2ZmX3Njb3BlOiB7CisgICAgICAgICAgICBpbnQgcjAg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHRlYXJfb2Zm
X3Njb3BlXHQgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhdGNoOiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDU1OThmODk5NDgw
ZmQ1Mzg3ZGY5NDVlYjA5ZDZjYzRkNjhjYjdjNi4uZGFmMDFiYWZjMzdlOGFmYzI5OThlZWI5YmY1
OGNmNzZkNDk0ZjIwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApA
QCAtMTQ5LDcgKzE0OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9qbmxl
c3NlcSwgNCkgXAogICAgICAgICBtYWNybyhvcF9qbmdyZWF0ZXIsIDQpIFwKICAgICAgICAgbWFj
cm8ob3Bfam5ncmVhdGVyZXEsIDQpIFwKLSAgICAgICAgbWFjcm8ob3Bfam1wX3Njb3BlcywgMykg
XAogICAgICAgICBtYWNybyhvcF9sb29wLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX2xvb3BfaWZf
dHJ1ZSwgMykgXAogICAgICAgICBtYWNybyhvcF9sb29wX2lmX2ZhbHNlLCAzKSBcCkBAIC0xODMs
NyArMTgyLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9w
X3B1c2hfc2NvcGUsIDIpIFwKICAgICAgICAgbWFjcm8ob3BfcG9wX3Njb3BlLCAxKSBcCi0gICAg
ICAgIG1hY3JvKG9wX3B1c2hfbmV3X3Njb3BlLCA0KSBcCisgICAgICAgIFwKKyAgICAgICAgbWFj
cm8ob3BfYXNzZXJ0X2xhenlfcmVnX2luaXQsIDIpIFwKKyAgICAgICAgbWFjcm8ob3BfYXNzZXJ0
X2xhenlfcmVnX25vdF9pbml0LCAyKSBcCisgICAgICAgIFwKKyAgICAgICAgbWFjcm8ob3BfcmVp
Znlfc2NvcGUsIDQpIFwKKyAgICAgICAgbWFjcm8ob3BfdGVhcl9vZmZfc2NvcGUsIDIpIFwKICAg
ICAgICAgXAogICAgICAgICBtYWNybyhvcF9jYXRjaCwgMikgXAogICAgICAgICBtYWNybyhvcF90
aHJvdywgMikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA0YTZmNDY1M2VhYjg5MmZjNmRhMGRiOTNj
YjQ5Y2IxNTcxYTZhZGZiLi42YzBkNzViMmRiYjQ3MTFiNGU0MzY0OTIzNGY0ZTA5ZTU0MjRlNDhl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJhdGNoZWRU
cmFuc2l0aW9uT3B0aW1pemVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNp
bmNsdWRlICJTY29wZUNoYWluLmgiCkBAIC0xMzMsMTMgKzEzNCwxMCBAQCB2b2lkIFJlc29sdmVS
ZXN1bHQ6OmNoZWNrVmFsaWRpdHkoKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2Fz
ZSBSZWdpc3RlcjoKLSAgICBjYXNlIFJlYWRPbmx5UmVnaXN0ZXI6CiAgICAgICAgIEFTU0VSVCht
X2xvY2FsKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGV4aWNhbDoKLSAgICBjYXNlIFJl
YWRPbmx5TGV4aWNhbDoKICAgICBjYXNlIER5bmFtaWNMZXhpY2FsOgotICAgIGNhc2UgRHluYW1p
Y1JlYWRPbmx5TGV4aWNhbDoKICAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gbWlzc2luZ1N5bWJv
bE1hcmtlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgR2xvYmFsOgpAQCAtMTQ3LDkg
KzE0NSw3IEBAIHZvaWQgUmVzb2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiAgICAgICAgIEFT
U0VSVChtX2dsb2JhbE9iamVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEluZGV4ZWRH
bG9iYWw6Ci0gICAgY2FzZSBSZWFkT25seUluZGV4ZWRHbG9iYWw6CiAgICAgY2FzZSBEeW5hbWlj
SW5kZXhlZEdsb2JhbDoKLSAgICBjYXNlIER5bmFtaWNSZWFkT25seUluZGV4ZWRHbG9iYWw6CiAg
ICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7CiAgICAgICAg
IEFTU0VSVChtX2dsb2JhbE9iamVjdCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIzOCw2ICsyMzQs
NyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHBy
b2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogcwogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZy
YW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAg
LCBtX2R5bmFtaWNTY29wZURlcHRoKDApCisgICAgLCBtX2Jsb2NrU2NvcGVEZXB0aCgwKQogICAg
ICwgbV9iYXNlU2NvcGVEZXB0aCgwKQogICAgICwgbV9jb2RlVHlwZShHbG9iYWxDb2RlKQogICAg
ICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKQEAgLTMwOSw2ICszMDYsNyBAQCBCeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5
LCBTY29wZUNoYWluTgogICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIoMCkKICAgICAsIG1fZmlu
YWxseURlcHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURlcHRoKDApCisgICAgLCBtX2Jsb2Nr
U2NvcGVEZXB0aCgwKQogICAgICwgbV9iYXNlU2NvcGVEZXB0aCgwKQogICAgICwgbV9jb2RlVHlw
ZShGdW5jdGlvbkNvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQpAQCAtNDcwLDYg
KzQ2OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSog
ZXZhbE5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoCiAgICAgLCBtX3RoaXNSZWdpc3RlcihD
YWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkK
ICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRoKDAp
CiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGNvZGVCbG9jay0+YmFzZVNjb3BlRGVwdGgoKSkKICAg
ICAsIG1fY29kZVR5cGUoRXZhbENvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQpA
QCAtNTM2LDMzICs1MzUsNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRQYXJhbWV0ZXIo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGludCBwYXJhbWV0ZXJJbmRleAogICAgIG1fY29kZUJs
b2NrLT5hZGRQYXJhbWV0ZXIoKTsKIH0KIAotYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6d2lsbFJl
c29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICBpZiAoaWRl
bnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdl
dChpZGVudC5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIGlmIChtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIG1f
Y29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjp1bmNo
ZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpCi17Ci0gICAgQVNTRVJUKHdpbGxSZXNvbHZlVG9B
cmd1bWVudHMocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykpOwotCi0gICAgU3ltYm9sVGFibGVF
bnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMu
aW1wbCgpKTsKLSAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICByZXR1cm4gJnJlZ2lz
dGVyRm9yKGVudHJ5LmdldEluZGV4KCkpOwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6Y3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCogcmVnKQogewog
ICAgIGlmIChtX2xhc3RMYXp5RnVuY3Rpb24gPD0gcmVnLT5pbmRleCgpIHx8IHJlZy0+aW5kZXgo
KSA8IG1fZmlyc3RMYXp5RnVuY3Rpb24pCkBAIC0xMTU0LDY4ICsxMTI2LDExOCBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVl
IHYpCiAgICAgcmV0dXJuIGNvbnN0YW50SUQ7CiB9CiAKLVJlc29sdmVSZXN1bHQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OnJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCitSZXNvbHZlUmVz
dWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
LCB1bnNpZ25lZCByZXNvbHZlRmxhZ3MpCiB7CiAgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5
TmFtZXMoKS50aGlzSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJl
Z2lzdGVyUmVzb2x2ZSh0aGlzUmVnaXN0ZXIoKSwgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFn
KTsKKyAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZSh0aGlzUmVn
aXN0ZXIoKSwgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlBdHRyaWJ1dGUpOworCisgICAgU2NvcGVD
aGFpbkl0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7CisgICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGVuZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7CisKKyAgICBpbnQgZGVwdGggPSAw
OworICAgIGJvb2wgZHluYW1pYyA9IGZhbHNlOworICAgIHVpbnQ4X3QgYXR0cmlidXRlcyA9IDA7
CisgICAgZm9yIChpbnQgaSA9IHNjb3BlRGVwdGgoKS0xOyBpID49IDA7IC0taSkgeworICAgICAg
ICBzd2l0Y2ggKG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uYmxvY2tUeXBlKSB7CisgICAgICAgIGNh
c2UgV2l0aEJsb2NrOgorICAgICAgICAgICAgLy8gSW4gdGhlb3J5IHdlIHNob3VsZCBiZSBhYmxl
IHRvIHNraXAgaW50ZXJ2ZW5pbmcgYmxvY2sgc2NvcGUKKyAgICAgICAgICAgIC8vIG9iamVjdHMs
IGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIG9mIHRoZSBMYXppbHlSZWlmeSBvbmVzIGhhdmUKKyAg
ICAgICAgICAgIC8vIGFjdHVhbGx5IGJlZW4gcmVpZmllZC4gSW5zdGVhZCBvZiBmb3JjaW5nIGVh
Z2VyIHJlaWZpY2F0aW9uLAorICAgICAgICAgICAgLy8gd2UnbGwgcGVzc2ltaXplICJ3aXRoIiBy
ZXNvbHV0aW9uLCBmb3JjaW5nIGl0IHRvIHN0YXJ0IGZyb20gdGhlCisgICAgICAgICAgICAvLyB0
b3Agb2YgdGhlIHNjb3BlIGNoYWluLgorICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6
OmR5bmFtaWNSZXNvbHZlKDApOworICAgICAgICBjYXNlIEZpbmFsbHlCbG9jazoKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIFNjb3BlQmxvY2s6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRTY29wZSA9IGl0ZXItPmdldCgp
OworICAgICAgICBBU1NFUlQoY3VycmVudFNjb3BlLT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOwor
ICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjdXJyZW50U3RhdGljU2NvcGVPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKKyAgICAgICAg
U3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1cnJlbnRTdGF0aWNTY29wZU9iamVjdC0+c3ltYm9s
VGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKKworICAgICAgICAvLyBCbG9jay1zY29wZWQg
cHJvcGVydHkuCisgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIFJl
Z2lzdGVySUQqIGxvY2FsID0gbV9zY29wZUNvbnRleHRTdGFja1tpXS5zY29wZUNvbnRleHQuYmFz
ZVJlZ2lzdGVyICsgZW50cnkuZ2V0SW5kZXgoKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5pc1Jl
YWRPbmx5KCkpCisgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBSZXNvbHZlUmVzdWx0OjpS
ZWFkT25seUF0dHJpYnV0ZTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5oYXNUZW1wb3JhbERlYWRa
b25lKCkpCisgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBSZXNvbHZlUmVzdWx0OjpCYXJy
aWVyQXR0cmlidXRlOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVy
UmVzb2x2ZShsb2NhbCwgYXR0cmlidXRlcyk7CisgICAgICAgIH0KKyAgICAgICAgKytkZXB0aDsK
KyAgICAgICAgKytpdGVyOworICAgIH0KIAogICAgIC8vIENoZWNrIGlmIHRoZSBwcm9wZXJ0eSBz
aG91bGQgYmUgYWxsb2NhdGVkIGluIGEgcmVnaXN0ZXIuCi0gICAgaWYgKG1fY29kZVR5cGUgIT0g
R2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxvY2FscygpKSB7CisgICAgaWYgKG1fY29kZVR5
cGUgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBz
eW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogICAgICAgICBpZiAoIWVudHJ5Lmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLmFy
Z3VtZW50cykKLSAgICAgICAgICAgICAgICBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwot
ICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSBlbnRyeS5pc1JlYWRPbmx5KCkgPyBSZXNvbHZl
UmVzdWx0OjpSZWFkT25seUZsYWcgOiAwOwogICAgICAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwg
PSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5k
ZXgoKSkpOwotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2
ZShsb2NhbCwgZmxhZ3MpOworICAgICAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkKKyAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5QXR0cmli
dXRlOworICAgICAgICAgICAgaWYgKGVudHJ5Lmhhc1RlbXBvcmFsRGVhZFpvbmUoKSkKKyAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJlc29sdmVSZXN1bHQ6OkJhcnJpZXJBdHRyaWJ1dGU7
CisgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyAm
JiBtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIShyZXNv
bHZlRmxhZ3MgJiBCeXRlY29kZUdlbmVyYXRvcjo6RG9udENyZWF0ZUFyZ3VtZW50c0ZsYWcpKSB7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FyZ3VtZW50cyk7Cisg
ICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9jay0+YXJn
dW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6QXJndW1lbnRzQXR0cmlidXRlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZShs
b2NhbCwgYXR0cmlidXRlcyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBDYXNlcyB3aGVy
ZSB3ZSBjYW5ub3Qgc3RhdGljYWxseSBvcHRpbWl6ZSB0aGUgbG9va3VwLgotICAgIGlmIChwcm9w
ZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzIHx8ICFjYW5PcHRpbWl6ZU5vbkxvY2Fs
cygpKQotICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoMCk7Cisg
ICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMKKyAgICAgICAgfHwg
bV9jb2RlVHlwZSA9PSBFdmFsQ29kZQorICAgICAgICB8fCAobV9jb2RlVHlwZSA9PSBGdW5jdGlv
bkNvZGUgJiYgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIW1fY29kZUJsb2NrLT5pc1N0cmlj
dE1vZGUoKSkpCisgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZShk
ZXB0aCk7CiAKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IG1fc2NvcGVDaGFpbi0+YmVn
aW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gbV9zY29wZUNoYWluLT5lbmQoKTsK
LSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIHVuc2lnbmVkIGZsYWdzID0gMDsKKyAgICBkZXB0
aCArPSBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwogICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyLCArK2RlcHRoKSB7CiAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2Nv
cGUgPSBpdGVyLT5nZXQoKTsKLSAgICAgICAgaWYgKCFjdXJyZW50U2NvcGUtPmlzVmFyaWFibGVP
YmplY3QoKSkgewotICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2ZVJlc3VsdDo6RHluYW1pY0Zs
YWc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIGlmICgh
Y3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gUmVz
b2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoZGVwdGgpOworCiAgICAgICAgIEpTVmFyaWFibGVP
YmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmpl
Y3QqPihjdXJyZW50U2NvcGUpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gY3Vy
cmVudFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwog
CiAgICAgICAgIC8vIEZvdW5kIHRoZSBwcm9wZXJ0eQogICAgICAgICBpZiAoIWVudHJ5LmlzTnVs
bCgpKSB7CiAgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKQotICAgICAgICAgICAg
ICAgIGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZzsKLSAgICAgICAgICAgIGRl
cHRoICs9IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CisgICAgICAgICAgICAg
ICAgYXR0cmlidXRlcyB8PSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUF0dHJpYnV0ZTsKKyAgICAg
ICAgICAgIGlmIChlbnRyeS5oYXNUZW1wb3JhbERlYWRab25lKCkpCisgICAgICAgICAgICAgICAg
YXR0cmlidXRlcyB8PSBSZXNvbHZlUmVzdWx0OjpCYXJyaWVyQXR0cmlidXRlOwogICAgICAgICAg
ICAgaWYgKCsraXRlciA9PSBlbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBSZXNv
bHZlUmVzdWx0OjpEeW5hbWljRmxhZykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc29s
dmVSZXN1bHQ6OmR5bmFtaWNJbmRleGVkR2xvYmFsUmVzb2x2ZShlbnRyeS5nZXRJbmRleCgpLCBk
ZXB0aCwgY3VycmVudFNjb3BlLCBmbGFncyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFJlc29s
dmVSZXN1bHQ6OmluZGV4ZWRHbG9iYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGN1cnJlbnRT
Y29wZSwgZmxhZ3MpOworICAgICAgICAgICAgICAgIGlmIChkeW5hbWljKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY0luZGV4ZWRHbG9iYWxSZXNvbHZl
KGVudHJ5LmdldEluZGV4KCksIGRlcHRoLCBjdXJyZW50U2NvcGUsIGF0dHJpYnV0ZXMpOworICAg
ICAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjppbmRleGVkR2xvYmFsUmVzb2x2ZShl
bnRyeS5nZXRJbmRleCgpLCBjdXJyZW50U2NvcGUsIGF0dHJpYnV0ZXMpOwogICAgICAgICAgICAg
fQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgICAgIGlmIChKU0FjdGl2YXRpb24qIGFj
dGl2YXRpb24gPSBqc0R5bmFtaWNDYXN0PEpTQWN0aXZhdGlvbio+KGN1cnJlbnRWYXJpYWJsZU9i
amVjdCkpCiAgICAgICAgICAgICAgICAgQVNTRVJUKGFjdGl2YXRpb24tPmlzVmFsaWRTY29wZWRM
b29rdXAoZW50cnkuZ2V0SW5kZXgoKSkpOwogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gUmVz
b2x2ZVJlc3VsdDo6bGV4aWNhbFJlc29sdmUoZW50cnkuZ2V0SW5kZXgoKSwgZGVwdGgsIGZsYWdz
KTsKKyAgICAgICAgICAgIHJldHVybiBkeW5hbWljCisgICAgICAgICAgICAgICAgPyBSZXNvbHZl
UmVzdWx0OjpkeW5hbWljTGV4aWNhbFJlc29sdmUoZW50cnkuZ2V0SW5kZXgoKSwgZGVwdGgsIGF0
dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgOiBSZXNvbHZlUmVzdWx0OjpsZXhpY2FsUmVzb2x2
ZShlbnRyeS5nZXRJbmRleCgpLCBkZXB0aCwgYXR0cmlidXRlcyk7CiAgICAgICAgIH0KICAgICAg
ICAgYm9vbCBzY29wZVJlcXVpcmVzRHluYW1pY0NoZWNrcyA9IGZhbHNlOwogICAgICAgICBpZiAo
Y3VycmVudFZhcmlhYmxlT2JqZWN0LT5pc0R5bmFtaWNTY29wZShzY29wZVJlcXVpcmVzRHluYW1p
Y0NoZWNrcykpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKHNjb3BlUmVxdWlyZXNE
eW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2ZVJlc3VsdDo6RHluYW1p
Y0ZsYWc7CisgICAgICAgICAgICBkeW5hbWljID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBDYW4n
dCBsb2NhdGUgdGhlIHByb3BlcnR5IGJ1dCB3ZSdyZSBhYmxlIHRvIGF2b2lkIGEgZmV3IGxvb2t1
cHMuCiAgICAgSlNPYmplY3QqIHNjb3BlID0gaXRlci0+Z2V0KCk7Ci0gICAgZGVwdGggKz0gbV9j
b2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKICAgICBpZiAoKytpdGVyID09IGVuZCkg
ewotICAgICAgICBpZiAoKGZsYWdzICYgUmVzb2x2ZVJlc3VsdDo6RHluYW1pY0ZsYWcpICYmIGRl
cHRoKQorICAgICAgICBpZiAoZHluYW1pYyAmJiBkZXB0aCkKICAgICAgICAgICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0OjpkeW5hbWljR2xvYmFsUmVzb2x2ZShkZXB0aCwgc2NvcGUpOwogICAgICAg
ICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6Z2xvYmFsUmVzb2x2ZShzY29wZSk7CiAgICAgfQpAQCAt
MTIyOCw5ICsxMjUwLDkgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2
ZUNvbnN0RGVjbChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKICAgICBpZiAobV9jb2RlVHlw
ZSAhPSBFdmFsQ29kZSAmJiBtX2NvZGVUeXBlICE9IEdsb2JhbENvZGUpIHsKICAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7
CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGZs
YWdzID0gZW50cnkuaXNSZWFkT25seSgpID8gUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnIDog
MDsKKyAgICAgICAgICAgIHVpbnQ4X3QgYXR0cmlidXRlcyA9IGVudHJ5LmlzUmVhZE9ubHkoKSA/
IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5QXR0cmlidXRlIDogMDsKICAgICAgICAgICAgIFJlZ2lz
dGVySUQqIGxvY2FsID0gY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoJnJlZ2lzdGVyRm9y
KGVudHJ5LmdldEluZGV4KCkpKTsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0Ojpy
ZWdpc3RlclJlc29sdmUobG9jYWwsIGZsYWdzKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZl
UmVzdWx0OjpyZWdpc3RlclJlc29sdmUobG9jYWwsIGF0dHJpYnV0ZXMpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0xNDI4LDIyICsxNDUwLDI3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0U3RhdGljVmFyKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlCiAK
ICAgICBzd2l0Y2ggKHJlc29sdmVSZXN1bHQudHlwZSgpKSB7CiAgICAgY2FzZSBSZXNvbHZlUmVz
dWx0OjpSZWdpc3RlcjoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5UmVnaXN0ZXI6
CisgICAgICAgIGlmIChyZXNvbHZlUmVzdWx0Lm5lZWRzQmFycmllcigpKSB7CisgICAgICAgICAg
ICBlbWl0T3Bjb2RlKG9wX2Fzc2VydF9sYXp5X3JlZ19pbml0KTsKKyAgICAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmxvY2FsKCktPmluZGV4KCkpOworICAgICAg
ICB9CiAgICAgICAgIGlmIChkc3QgPT0gaWdub3JlZFJlc3VsdCgpKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIHJldHVybiBtb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVz
b2x2ZVJlc3VsdC5sb2NhbCgpKTsKIAogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6TGV4aWNhbDoK
LSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5TGV4aWNhbDoKICAgICAgICAgcHJvZmls
ZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfc2NvcGVkX3Zhcik7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHJlc29sdmVSZXN1bHQuZGVwdGgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChwcm9maWxlKTsKKyAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQubmVlZHNCYXJyaWVyKCkpIHsK
KyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfYXNzZXJ0X2xhenlfcmVnX2luaXQpOworICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIGRzdDsKIAogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6SW5kZXhlZEdsb2Jh
bDoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5SW5kZXhlZEdsb2JhbDoKICAgICAg
ICAgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX3B1dF9nbG9iYWxfdmFyKSB7CiAgICAgICAgICAg
ICBpbnQgZHN0SW5kZXg7CiAgICAgICAgICAgICBpbnQgc3JjSW5kZXg7CkBAIC0xNDY4LDExICsx
NDk1LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIo
Y29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3UKIHsKICAgICBzd2l0Y2ggKHJlc29sdmVS
ZXN1bHQudHlwZSgpKSB7CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWdpc3RlcjoKLSAgICBj
YXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5UmVnaXN0ZXI6CiAgICAgICAgIHJldHVybiBtb3Zl
VG9EZXN0aW5hdGlvbklmTmVlZGVkKHJlc29sdmVSZXN1bHQubG9jYWwoKSwgdmFsdWUpOwogCiAg
ICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpMZXhpY2FsOgotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6
UmVhZE9ubHlMZXhpY2FsOgogICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9zY29wZWRfdmFyKTsK
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQuaW5kZXgoKSk7CiAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmRlcHRoKCkpOwpAQCAt
MTQ4MCw3ICsxNTA1LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRT
dGF0aWNWYXIoY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3UKICAgICAgICAgcmV0dXJu
IHZhbHVlOwogCiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpJbmRleGVkR2xvYmFsOgotICAgIGNh
c2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlJbmRleGVkR2xvYmFsOgogICAgICAgICBlbWl0T3Bj
b2RlKG9wX3B1dF9nbG9iYWxfdmFyKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJl
c29sdmVSZXN1bHQuaW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1
ZS0+aW5kZXgoKSk7CkBAIC0xNzI2LDcgKzE3NTAsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uQm9k
eQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJu
YWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKIHsK
LSAgICBjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICByZWlmeVNjb3BlcygpOwog
ICAgIGVtaXRPcGNvZGUob3BfbmV3X2Z1bmMpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleCk7CkBAIC0xNzQ3
LDcgKzE3NzEsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0
aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiByMCwgRnVuY0V4cAogICAgIEZ1bmN0aW9uQm9keU5v
ZGUqIGZ1bmN0aW9uID0gbi0+Ym9keSgpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gbV9jb2RlQmxv
Y2stPmFkZEZ1bmN0aW9uRXhwcihtYWtlRnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlvbikp
OwogICAgIAotICAgIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpOworICAgIHJlaWZ5U2Nv
cGVzKCk7CiAgICAgZW1pdE9wY29kZShvcF9uZXdfZnVuY19leHApOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyMC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4
KTsKQEAgLTE3NTksMzQgKzE3ODMsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQQogICAgIHJl
dHVybiBlbWl0Q2FsbChvcF9jYWxsLCBkc3QsIGZ1bmMsIGNhbGxBcmd1bWVudHMsIGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3Jl
YXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0
aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbV9jb2RlQmxvY2stPnVz
ZXNBcmd1bWVudHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UncmUgaW4gc3Ry
aWN0IG1vZGUgd2UgdGVhciBvZmYgdGhlIGFyZ3VtZW50cyBvbiBmdW5jdGlvbgotICAgIC8vIGVu
dHJ5LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgaWYgd2UgbmVlZCB0byBjcmVhdGUgdGhl
bQotICAgIC8vIG5vdwotICAgIGlmIChtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsK
LX0KLQotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5
KCkKLXsKLSAgICBpZiAobV9oYXNDcmVhdGVkQWN0aXZhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FjdGl2YXRpb24pOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChtX2FjdGl2YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7Ci19Ci0KIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKIHsKICAgICBy
ZXR1cm4gZW1pdENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1bmMsIGNhbGxBcmd1bWVudHMsIGRp
dm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKQEAgLTE5NjksOSArMTk2NSwxMCBAQCB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMpCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaFNj
b3BlKFJlZ2lzdGVySUQqIHNjb3BlKQogeworICAgIHJlaWZ5U2NvcGVzKCk7CiAgICAgQVNTRVJU
KHNjb3BlLT5pc1RlbXBvcmFyeSgpKTsKICAgICBDb250cm9sRmxvd0NvbnRleHQgY29udGV4dDsK
LSAgICBjb250ZXh0LmlzRmluYWxseUJsb2NrID0gZmFsc2U7CisgICAgY29udGV4dC5ibG9ja1R5
cGUgPSBXaXRoQmxvY2s7CiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5hcHBlbmQoY29udGV4dCk7
CiAgICAgbV9keW5hbWljU2NvcGVEZXB0aCsrOwogCkBAIC0xOTgxLDcgKzE5NzgsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hTY29wZShSZWdpc3RlcklEKiBzY29w
ZSkKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSgpCiB7CiAgICAgQVNTRVJU
KG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKLSAgICBBU1NFUlQoIW1fc2NvcGVDb250ZXh0
U3RhY2subGFzdCgpLmlzRmluYWxseUJsb2NrKTsKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRT
dGFjay5sYXN0KCkuYmxvY2tUeXBlID09IFdpdGhCbG9jayk7CiAKICAgICBlbWl0T3Bjb2RlKG9w
X3BvcF9zY29wZSk7CiAKQEAgLTIwMDcsNyArMjAwNCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQgZGVidWdIb29rSUQsIGludCBmaXJzdExpbmUs
IGluCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQoTGFiZWwqIHRh
cmdldCwgUmVnaXN0ZXJJRCogcmV0QWRkckRzdCkKIHsKICAgICBDb250cm9sRmxvd0NvbnRleHQg
c2NvcGU7Ci0gICAgc2NvcGUuaXNGaW5hbGx5QmxvY2sgPSB0cnVlOworICAgIHNjb3BlLmJsb2Nr
VHlwZSA9IEZpbmFsbHlCbG9jazsKICAgICBGaW5hbGx5Q29udGV4dCBjb250ZXh0ID0geyB0YXJn
ZXQsIHJldEFkZHJEc3QgfTsKICAgICBzY29wZS5maW5hbGx5Q29udGV4dCA9IGNvbnRleHQ7CiAg
ICAgbV9zY29wZUNvbnRleHRTdGFjay5hcHBlbmQoc2NvcGUpOwpAQCAtMjAxNyw3ICsyMDE0LDcg
QEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZpbmFsbHlDb250ZXh0KExhYmVsKiB0YXJn
ZXQsIFJlZ2lzdGVySUQqIHJldEFkZHJEc3QKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZp
bmFsbHlDb250ZXh0KCkKIHsKICAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkp
OwotICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlCbG9jayk7
CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmJsb2NrVHlwZSA9PSBGaW5h
bGx5QmxvY2spOwogICAgIEFTU0VSVChtX2ZpbmFsbHlEZXB0aCA+IDApOwogICAgIG1fc2NvcGVD
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgIG1fZmluYWxseURlcHRoLS07CkBAIC0yMTAw
LDcwICsyMDk3LDYgQEAgTGFiZWxTY29wZSogQnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnRpbnVlVGFy
Z2V0KGNvbnN0IElkZW50aWZpZXImIG5hbWUpCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQ
dHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleEp1bXBTY29wZXMoTGFiZWwq
IHRhcmdldCwgQ29udHJvbEZsb3dDb250ZXh0KiB0b3BTY29wZSwgQ29udHJvbEZsb3dDb250ZXh0
KiBib3R0b21TY29wZSkKLXsKLSAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21TY29wZSkgewot
ICAgICAgICAvLyBGaXJzdCB3ZSBjb3VudCB0aGUgbnVtYmVyIG9mIGR5bmFtaWMgc2NvcGVzIHdl
IG5lZWQgdG8gcmVtb3ZlIHRvIGdldAotICAgICAgICAvLyB0byBhIGZpbmFsbHkgYmxvY2suCi0g
ICAgICAgIGludCBuTm9ybWFsU2NvcGVzID0gMDsKLSAgICAgICAgd2hpbGUgKHRvcFNjb3BlID4g
Ym90dG9tU2NvcGUpIHsKLSAgICAgICAgICAgIGlmICh0b3BTY29wZS0+aXNGaW5hbGx5QmxvY2sp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICArK25Ob3JtYWxTY29wZXM7Ci0g
ICAgICAgICAgICAtLXRvcFNjb3BlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5Ob3JtYWxT
Y29wZXMpIHsKLSAgICAgICAgICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUo
KTsKLQotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgYSBudW1iZXIgb2YgZHluYW1p
YyBzY29wZXMgdG8gZ2V0IHRvIHRoZSBuZXh0Ci0gICAgICAgICAgICAvLyBmaW5hbGx5IGJsb2Nr
Ci0gICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2ptcF9zY29wZXMpOwotICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG5Ob3JtYWxTY29wZXMpOwotCi0gICAgICAgICAgICAvLyBJZiB0
b3BTY29wZSA9PSBib3R0b21TY29wZSB0aGVuIHRoZXJlIGlzbid0IGFjdHVhbGx5IGEgZmluYWxs
eSBibG9jawotICAgICAgICAgICAgLy8gbGVmdCB0byBlbWl0LCBzbyBtYWtlIHRoZSBqbXBfc2Nv
cGVzIGp1bXAgZGlyZWN0bHkgdG8gdGhlIHRhcmdldCBsYWJlbAotICAgICAgICAgICAgaWYgKHRv
cFNjb3BlID09IGJvdHRvbVNjb3BlKSB7Ci0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlIHdlIGp1c3QgdXNlIGptcF9zY29wZXMgdG8gcG9wIGEgZ3JvdXAgb2Ygc2Nv
cGVzIGFuZCBnbwotICAgICAgICAgICAgLy8gdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24KLSAgICAg
ICAgICAgIFJlZlB0cjxMYWJlbD4gbmV4dEluc24gPSBuZXdMYWJlbCgpOwotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG5leHRJbnNuLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMo
KS5zaXplKCkpKTsKLSAgICAgICAgICAgIGVtaXRMYWJlbChuZXh0SW5zbi5nZXQoKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21TY29wZSAmJiB0b3BTY29w
ZS0+aXNGaW5hbGx5QmxvY2spIHsKLSAgICAgICAgICAgIGVtaXRKdW1wU3Vicm91dGluZSh0b3BT
Y29wZS0+ZmluYWxseUNvbnRleHQucmV0QWRkckRzdCwgdG9wU2NvcGUtPmZpbmFsbHlDb250ZXh0
LmZpbmFsbHlBZGRyKTsKLSAgICAgICAgICAgIC0tdG9wU2NvcGU7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGVtaXRKdW1wKHRhcmdldCk7Ci19Ci0KLVBhc3NSZWZQdHI8TGFiZWw+IEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBpbnQgdGFyZ2V0
U2NvcGVEZXB0aCkKLXsKLSAgICBBU1NFUlQoc2NvcGVEZXB0aCgpIC0gdGFyZ2V0U2NvcGVEZXB0
aCA+PSAwKTsKLSAgICBBU1NFUlQodGFyZ2V0LT5pc0ZvcndhcmQoKSk7Ci0KLSAgICBzaXplX3Qg
c2NvcGVEZWx0YSA9IHNjb3BlRGVwdGgoKSAtIHRhcmdldFNjb3BlRGVwdGg7Ci0gICAgQVNTRVJU
KHNjb3BlRGVsdGEgPD0gbV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOwotICAgIGlmICghc2Nv
cGVEZWx0YSkKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wKHRhcmdldCk7Ci0KLSAgICBpZiAobV9m
aW5hbGx5RGVwdGgpCi0gICAgICAgIHJldHVybiBlbWl0Q29tcGxleEp1bXBTY29wZXModGFyZ2V0
LCAmbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCksICZtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3Qo
KSAtIHNjb3BlRGVsdGEpOwotCi0gICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotCi0gICAgZW1pdE9wY29kZShvcF9qbXBfc2NvcGVzKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoc2NvcGVEZWx0YSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+
YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIHRhcmdldDsK
LX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRQcm9wZXJ0eU5hbWVz
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogaSwgUmVnaXN0
ZXJJRCogc2l6ZSwgTGFiZWwqIGJyZWFrVGFyZ2V0KQogewogICAgIHNpemVfdCBiZWdpbiA9IGlu
c3RydWN0aW9ucygpLnNpemUoKTsKQEAgLTIxOTYsMTIgKzIxMjksMTIgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYXRjaChSZWdpc3RlcklEKiB0YXJnZXRSZWdpc3Rlciwg
TGFiZWwqIHN0YXIKICAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKICNpZiBFTkFCTEUoSklU
KQogI2lmIEVOQUJMRShMTElOVCkKLSAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+Ymlu
ZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1p
Y1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fz
c2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8
dm9pZCo+KCZsbGludF9vcF9jYXRjaCkpKSB9OworICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0
YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNpemUoKSwg
bV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0
aCwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfY2F0Y2gpKSkgfTsK
ICNlbHNlCi0gICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+
YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsg
bV9iYXNlU2NvcGVEZXB0aCwgQ29kZUxvY2F0aW9uTGFiZWwoKSB9OworICAgIEhhbmRsZXJJbmZv
IGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9u
cygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsgbV9i
YXNlU2NvcGVEZXB0aCwgQ29kZUxvY2F0aW9uTGFiZWwoKSB9OwogI2VuZGlmCiAjZWxzZQotICAg
IEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCks
IGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmFzZVNjb3Bl
RGVwdGggfTsKKyAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+YmluZCgwLCAwKSwgZW5k
LT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHluYW1pY1Njb3BlRGVwdGgg
KyBtX2Jsb2NrU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGggfTsKICNlbmRpZgogCiAgICAg
bV9jb2RlQmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRsZXIoaW5mbyk7CkBAIC0yMjMzLDE3ICsyMTY2
LDIwMiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0U3Vicm91dGluZVJldHVybihSZWdp
c3RlcklEKiByZXRBZGRyU3JjKQogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXRBZGRyU3Jj
LT5pbmRleCgpKTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hOZXdTY29w
ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklE
KiB2YWx1ZSkKK3N0cnVjdCBSZWlmaWNhdGlvbldvcmtsaXN0SXRlbSB7CisgICAgUmVnaXN0ZXJJ
RCogcmVpZmllZFNjb3BlUmVnaXN0ZXI7CisgICAgSlNPYmplY3QqIHNjb3BlVGVtcGxhdGU7Cisg
ICAgUmVnaXN0ZXJJRCogYmFzZVJlZ2lzdGVyOworfTsKKwordm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cmVpZnlTY29wZXMoKQoreworICAgIFZlY3RvcjxSZWlmaWNhdGlvbldvcmtsaXN0SXRlbT4g
d29ya2xpc3Q7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJl
Z2luKCk7CisgICAgaW50IGk7CisKKyAgICAvLyBGaXJzdCwgd2FsayB0aGUgc2NvcGUgY2hhaW4g
dG8gc2VlIHdoYXQgbWlnaHQgbmVlZCByZWlmaWNhdGlvbi4KKyAgICBmb3IgKGkgPSBzY29wZURl
cHRoKCktMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgc3dpdGNoIChtX3Njb3BlQ29udGV4dFN0
YWNrW2ldLmJsb2NrVHlwZSkgeworICAgICAgICBjYXNlIFdpdGhCbG9jazoKKyAgICAgICAgICAg
IC8vIFB1c2hpbmcgYSBgd2l0aCcgYmxvY2sgZm9yY2VzIG91dGVyIHNjb3BlcyB0byBiZSByZWlm
aWVkLCBzbyB3ZQorICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBkbyBzbyBoZXJlLgorICAg
ICAgICAgICAgZ290byByZWlmeTsKKyAgICAgICAgY2FzZSBGaW5hbGx5QmxvY2s6CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBTY29wZUJsb2NrOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorCisgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQo
KTsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRTY29wZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsK
KyAgICAgICAgKytpdGVyOworCisgICAgICAgIHN3aXRjaCAobV9zY29wZUNvbnRleHRTdGFja1tp
XS5zY29wZUNvbnRleHQucmVpZnlNb2RlKSB7CisgICAgICAgIGNhc2UgU2NvcGVDb250ZXh0OjpF
YWdlcmx5UmVpZnk6CisgICAgICAgICAgICAvLyBMaWtlIGEgYHdpdGgnIGJsb2NrLCBlbnRlcmlu
ZyBhbiBFYWdlcmx5UmVpZnkgYmxvY2sgZm9yY2VzCisgICAgICAgICAgICAvLyByZWlmaWNhdGlv
biwgc28gd2UgbmVlZCBsb29rIG5vIGZhcnRoZXIuCisgICAgICAgICAgICBnb3RvIHJlaWZ5Owor
ICAgICAgICBjYXNlIFNjb3BlQ29udGV4dDo6TGF6aWx5UmVpZnk6IHsKKyAgICAgICAgICAgIFJl
aWZpY2F0aW9uV29ya2xpc3RJdGVtIGl0ZW07CisgICAgICAgICAgICBpdGVtLnJlaWZpZWRTY29w
ZVJlZ2lzdGVyID0gbV9zY29wZUNvbnRleHRTdGFja1tpXS5zY29wZUNvbnRleHQubGFzdFJlZ2lz
dGVyOworICAgICAgICAgICAgaXRlbS5zY29wZVRlbXBsYXRlID0gY3VycmVudFNjb3BlOworICAg
ICAgICAgICAgaXRlbS5iYXNlUmVnaXN0ZXIgPSBtX3Njb3BlQ29udGV4dFN0YWNrW2ldLnNjb3Bl
Q29udGV4dC5iYXNlUmVnaXN0ZXI7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoaXRlbSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBjYXNlIFNjb3BlQ29udGV4dDo6TmV2
ZXJSZWlmeToKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisKK3JlaWZ5OgorICAgIC8vIElmIHdlIHRyYXZlcnNlZCB0aHJvdWdoIHRoZSB3
aG9sZSBibG9jayBzY29wZSBjaGFpbiwgcGVyaGFwcyB3ZSBuZWVkIHRvCisgICAgLy8gcmVpZnkg
dGhlIGFjdGl2YXRpb24gZm9yIHRoZSBmdW5jdGlvbi4KKyAgICBpZiAoaSA8IDAgJiYgIW1faGFz
Q3JlYXRlZEFjdGl2YXRpb24gJiYgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkg
eworICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hY3RpdmF0aW9uKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICB9
CisKKyAgICB3aGlsZSAod29ya2xpc3Quc2l6ZSgpKSB7CisgICAgICAgIFJlaWZpY2F0aW9uV29y
a2xpc3RJdGVtIGl0ZW0gPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogdGVtcGwgPSBlbWl0TG9hZCgwLCBKU1ZhbHVl
KGl0ZW0uc2NvcGVUZW1wbGF0ZSkpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX3JlaWZ5X3Njb3Bl
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGl0ZW0ucmVpZmllZFNjb3BlUmVnaXN0
ZXItPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGVtcGwtPmluZGV4
KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXRlbS5iYXNlUmVnaXN0ZXItPmlu
ZGV4KCkpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRKdW1wU2NvcGVzKExhYmVsKiB0YXJnZXQsIGludCB0YXJnZXRTY29wZURlcHRoKQogewor
ICAgIEFTU0VSVChzY29wZURlcHRoKCkgLSB0YXJnZXRTY29wZURlcHRoID49IDApOworICAgIEFT
U0VSVCh0YXJnZXQtPmlzRm9yd2FyZCgpKTsKKworICAgIHNpemVfdCBzY29wZURlbHRhID0gc2Nv
cGVEZXB0aCgpIC0gdGFyZ2V0U2NvcGVEZXB0aDsKKyAgICBBU1NFUlQoc2NvcGVEZWx0YSA8PSBt
X3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7CisKKyAgICB3aGlsZSAoc2NvcGVEZWx0YS0tKSB7
CisgICAgICAgIENvbnRyb2xGbG93Q29udGV4dCogY29udGV4dCA9ICZtX3Njb3BlQ29udGV4dFN0
YWNrW3RhcmdldFNjb3BlRGVwdGggKyBzY29wZURlbHRhXTsKKyAgICAgICAgc3dpdGNoIChjb250
ZXh0LT5ibG9ja1R5cGUpIHsKKyAgICAgICAgY2FzZSBXaXRoQmxvY2s6CisgICAgICAgICAgICBl
bWl0T3Bjb2RlKG9wX3BvcF9zY29wZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGaW5hbGx5QmxvY2s6CisgICAgICAgICAgICBlbWl0SnVtcFN1YnJvdXRpbmUoY29udGV4dC0+
ZmluYWxseUNvbnRleHQucmV0QWRkckRzdCwgY29udGV4dC0+ZmluYWxseUNvbnRleHQuZmluYWxs
eUFkZHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2NvcGVCbG9jazoKKyAg
ICAgICAgICAgIHN3aXRjaCAoY29udGV4dC0+c2NvcGVDb250ZXh0LnJlaWZ5TW9kZSkgeworICAg
ICAgICAgICAgY2FzZSBTY29wZUNvbnRleHQ6OkVhZ2VybHlSZWlmeToKKyAgICAgICAgICAgIGNh
c2UgU2NvcGVDb250ZXh0OjpMYXppbHlSZWlmeToKKyAgICAgICAgICAgICAgICBlbWl0T3Bjb2Rl
KG9wX3RlYXJfb2ZmX3Njb3BlKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoY29udGV4dC0+c2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNjb3BlQ29udGV4dDo6TmV2ZXJSZWlm
eToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQt
LTsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEp1bXAodGFyZ2V0KTsKK30KKwordm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6cHVzaEJsb2NrU2NvcGUoSlNTdGF0aWNTY29wZU9iamVjdCAqc2NvcGVU
ZW1wbGF0ZSwgU2NvcGVDb250ZXh0OjpSZWlmeU1vZGUgcmVpZnlNb2RlKQoreworICAgIC8vIFJl
c2VydmUgYSBibG9jayBvZiBjb250aWd1b3VzIHJlZ2lzdGVycyBmb3IgdGhlIHZhcmlhYmxlcy4g
V2UgaG9sZCBhCisgICAgLy8gcmVmZXJlbmNlIG9uIHRoZSBsYXN0IHJlZ2lzdGVyLCBwcmV2ZW50
aW5nIHJlY2xhbWF0aW9uIG9mIGFueSBwcmV2aW91cworICAgIC8vIHJlZ2lzdGVyLgorICAgIC8v
CisgICAgLy8gSW4gdGhlIGZ1dHVyZSB3ZSdsbCBzaHVmZmxlIGFyb3VuZCB0aGUgc3ltYm9sIHRh
YmxlIHRvIHB1dCB0aGUgY2FwdHVyZWQKKyAgICAvLyB2YXJpYWJsZXMgZmlyc3QsIGFuZCBwb3BC
bG9ja1Njb3BlIHdpbGwgcmVtb3ZlIHN5bWJvbCB0YWJsZSBlbnRyaWVzIGZvcgorICAgIC8vIHVu
Y2FwdHVyZWQgdmFyaWFibGVzLgorICAgIFJlZ2lzdGVySUQqIGJhc2UgPSAwOworICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBsYXN0ID0gMDsKKyAgICBzaXplX3QgbiA9IHNjb3BlVGVtcGxhdGUtPnN5
bWJvbFRhYmxlKCkuc2l6ZSgpOworICAgIEFTU0VSVChuKTsKKyAgICB3aGlsZSAobi0tKSB7Cisg
ICAgICAgIFJlZ2lzdGVySUQqIG5leHQgPSBuZXdSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQo
IWxhc3QgfHwgKG5leHQgPT0gbGFzdC5nZXQoKSArIDEpKTsKKworICAgICAgICAvLyBTZXQgdGhl
IHJlZ2lzdGVyJ3MgdmFsdWUgdG8gSlNWYWx1ZSgpLCB0aGUgZW1wdHkgdmFsdWUuIFBlcmhhcHMg
d2UKKyAgICAgICAgLy8gc2hvdWxkIGRvIHRoaXMgb25seSBmb3IgQmFycmllclJlZ2lzdGVycy4K
KyAgICAgICAgZW1pdE9wY29kZShvcF9pbml0X2xhenlfcmVnKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKG5leHQtPmluZGV4KCkpOworCisgICAgICAgIGlmICghbGFzdCkKKyAgICAg
ICAgICAgIGJhc2UgPSBuZXh0OworICAgICAgICBsYXN0ID0gbmV4dDsKKyAgICB9CisgICAgQVNT
RVJUKGxhc3QpOworICAgIAorICAgIC8vIE5vdyBhbGxvY2F0ZSBhIHJlZ2lzdGVyIGZvciB0aGUg
YmxvY2sgc2NvcGUgb2JqZWN0IGl0c2VsZiwgaWYgbmVjZXNzYXJ5LgorICAgIGlmIChyZWlmeU1v
ZGUgIT0gU2NvcGVDb250ZXh0OjpOZXZlclJlaWZ5KSB7CisgICAgICAgIFJlZ2lzdGVySUQqIG5l
eHQgPSBuZXdSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQobmV4dCA9PSBsYXN0LmdldCgpICsg
MSk7CisgICAgICAgIGxhc3QgPSBuZXh0OworICAgIH0KKworICAgIC8vIEZpbmFsbHkgdXBkYXRl
IHRoZSBjb250cm9sIGZsb3cgc3RhY2ssIHB1c2ggdGhlIHRlbXBsYXRlIG9udG8gdGhlIHNjb3Bl
CisgICAgLy8gY2hhaW4sIGFuZCByZWlmeSB0aGUgc2NvcGUgaWYgbmVlZGVkLgogICAgIENvbnRy
b2xGbG93Q29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQuaXNGaW5hbGx5QmxvY2sgPSBmYWxz
ZTsKKyAgICBjb250ZXh0LmJsb2NrVHlwZSA9IFNjb3BlQmxvY2s7CisgICAgY29udGV4dC5zY29w
ZUNvbnRleHQucmVpZnlNb2RlID0gcmVpZnlNb2RlOworICAgIGNvbnRleHQuc2NvcGVDb250ZXh0
LmJhc2VSZWdpc3RlciA9IGJhc2U7CisgICAgY29udGV4dC5zY29wZUNvbnRleHQubGFzdFJlZ2lz
dGVyID0gbGFzdC5yZWxlYXNlKCkubGVha1JlZigpOworCiAgICAgbV9zY29wZUNvbnRleHRTdGFj
ay5hcHBlbmQoY29udGV4dCk7Ci0gICAgbV9keW5hbWljU2NvcGVEZXB0aCsrOworICAgIG1fc2Nv
cGVDaGFpbi5zZXQoKm1fc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgbV9zY29wZUNoYWluLT5wdXNo
KHNjb3BlVGVtcGxhdGUpKTsKKyAgICBtX2Jsb2NrU2NvcGVEZXB0aCsrOworCisgICAgLy8gV2Ug
cmVpZnkgaXQgbGF6aWx5IGlmIHBvc3NpYmxlLgorICAgIHN3aXRjaCAocmVpZnlNb2RlKSB7Cisg
ICAgY2FzZSBTY29wZUNvbnRleHQ6OkVhZ2VybHlSZWlmeToKKyAgICAgICAgLy8gUmVpZnkgdGhl
IHNjb3BlIG5vdy4KKyAgICAgICAgcmVpZnlTY29wZXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5OgorICAgICAgICAvLyBNYXJrIHRoZSBzY29w
ZSByZWdpc3RlciBhcyB1bnNldCwgc28gbGF0ZXIgY29kZSBjYW4gZGV0ZWN0IGlmIGl0IHdhcwor
ICAgICAgICAvLyBuZXZlciByZWlmaWVkLgorICAgICAgICBlbWl0T3Bjb2RlKG9wX2luaXRfbGF6
eV9yZWcpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC5zY29wZUNvbnRl
eHQubGFzdFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY29w
ZUNvbnRleHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CiAKLSAg
ICBlbWl0T3Bjb2RlKG9wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQo
cHJvcGVydHkpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwor
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wQmxvY2tTY29wZSgpCit7CisgICAgQVNTRVJUKG1f
c2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKKyAgICBDb250cm9sRmxvd0NvbnRleHQgY29udGV4
dCA9IG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpOworICAgIEFTU0VSVChjb250ZXh0LmJsb2Nr
VHlwZSA9PSBTY29wZUJsb2NrKTsKKworICAgIEFTU0VSVChtX3Njb3BlQ2hhaW4tPmJlZ2luKCkt
PmdldCgpLT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworCisgICAgaWYgKGNvbnRleHQuc2NvcGVD
b250ZXh0LnJlaWZ5TW9kZSAhPSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnkpIHsKKyAgICAgICAg
ZW1pdE9wY29kZShvcF90ZWFyX29mZl9zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChjb250ZXh0LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXItPmluZGV4KCkpOworICAgIH0K
KworICAgIGNvbnRleHQuc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rlci0+ZGVyZWYoKTsKKyAgICBj
b250ZXh0LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXIgPSAwOworICAgIAorICAgIG1fYmxvY2tT
Y29wZURlcHRoLS07CisgICAgbV9zY29wZUNoYWluLnNldCgqbV9zY29wZUNoYWluLT5nbG9iYWxE
YXRhLCBtX3Njb3BlQ2hhaW4tPnBvcCgpKTsKKyAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnJlbW92
ZUxhc3QoKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YmVnaW5Td2l0Y2goUmVnaXN0
ZXJJRCogc2NydXRpbmVlUmVnaXN0ZXIsIFN3aXRjaEluZm86OlN3aXRjaFR5cGUgdHlwZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAppbmRleCBlN2ZlMjM2ZTViYWYwZjBmYjdlOTJlNDY5OGM1NmU4NGNjZWY4N2M1Li44
NzI2NmZlMjA0OTRhM2ZiMGQ0OTVmYmUxYTQxYzUyZDA3OGE1MDMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBA
IC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIElkZW50aWZpZXI7CiAg
ICAgY2xhc3MgTGFiZWw7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CisgICAgY2xhc3MgSlNT
dGF0aWNTY29wZU9iamVjdDsKIAogICAgIGNsYXNzIENhbGxBcmd1bWVudHMgewogICAgIHB1Ymxp
YzoKQEAgLTc1LDkgKzc2LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklE
KiByZXRBZGRyRHN0OwogICAgIH07CiAKKyAgICBzdHJ1Y3QgU2NvcGVDb250ZXh0IHsKKyAgICAg
ICAgZW51bSBSZWlmeU1vZGUgeyBFYWdlcmx5UmVpZnksIExhemlseVJlaWZ5LCBOZXZlclJlaWZ5
IH07CisgICAgICAgIFJlaWZ5TW9kZSByZWlmeU1vZGU7CisgICAgICAgIFJlZ2lzdGVySUQqIGJh
c2VSZWdpc3RlcjsKKyAgICAgICAgUmVnaXN0ZXJJRCogbGFzdFJlZ2lzdGVyOworICAgIH07CisK
KyAgICBlbnVtIEJsb2NrVHlwZSB7IFdpdGhCbG9jaywgRmluYWxseUJsb2NrLCBTY29wZUJsb2Nr
IH07CisKICAgICBzdHJ1Y3QgQ29udHJvbEZsb3dDb250ZXh0IHsKLSAgICAgICAgYm9vbCBpc0Zp
bmFsbHlCbG9jazsKLSAgICAgICAgRmluYWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CisgICAg
ICAgIGVudW0gQmxvY2tUeXBlIGJsb2NrVHlwZTsKKyAgICAgICAgdW5pb24geworICAgICAgICAg
ICAgRmluYWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CisgICAgICAgICAgICBTY29wZUNvbnRl
eHQgc2NvcGVDb250ZXh0OworICAgICAgICB9OwogICAgIH07CiAKICAgICBzdHJ1Y3QgRm9ySW5D
b250ZXh0IHsKQEAgLTg5LDcgKzEwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
UmVzb2x2ZVJlc3VsdCB7CiAgICAgcHVibGljOgotICAgICAgICBlbnVtIEZsYWdzIHsKKyAgICAg
ICAgZW51bSBUeXBlRmxhZ3MgewogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IGlzIGxvY2Fs
bHkgYm91bmQsIGluIGEgcmVnaXN0ZXIuCiAgICAgICAgICAgICBSZWdpc3RlckZsYWcgPSAweDEs
CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHRyYXZlcnNlIHRoZSBzY29wZSBjaGFpbiBhdCBy
dW50aW1lLCBjaGVja2luZyBmb3IKQEAgLTEwMywyMSArMTE2LDE2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgSW5kZXhlZEZsYWcgPSAweDgsCiAgICAgICAgICAgICAvLyBTa2lwIHNv
bWUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNjb3BlIGNoYWluLCBnaXZlbiBieSAiZGVwdGgi
LgogICAgICAgICAgICAgU2NvcGVkRmxhZyA9IDB4MTAsCi0gICAgICAgICAgICAvLyBUaGUgcmVz
b2x2ZWQgYmluZGluZyBpcyBpbW11dGFibGUuCi0gICAgICAgICAgICBSZWFkT25seUZsYWcgPSAw
eDIwLAogICAgICAgICAgICAgLy8gVGhlIGJhc2Ugb2JqZWN0IGlzIHRoZSBnbG9iYWwgb2JqZWN0
LgotICAgICAgICAgICAgR2xvYmFsRmxhZyA9IDB4NDAKKyAgICAgICAgICAgIEdsb2JhbEZsYWcg
PSAweDIwCiAgICAgICAgIH07CisKICAgICAgICAgZW51bSBUeXBlIHsKICAgICAgICAgICAgIC8v
IFRoZSBwcm9wZXJ0eSBpcyBsb2NhbCwgYW5kIHN0b3JlZCBpbiBhIHJlZ2lzdGVyLgogICAgICAg
ICAgICAgUmVnaXN0ZXIgPSBSZWdpc3RlckZsYWcgfCBTdGF0aWNGbGFnLAotICAgICAgICAgICAg
Ly8gQSByZWFkLW9ubHkgbG9jYWwsIGNyZWF0ZWQgYnkgImNvbnN0Ii4KLSAgICAgICAgICAgIFJl
YWRPbmx5UmVnaXN0ZXIgPSBSZWdpc3RlckZsYWcgfCBSZWFkT25seUZsYWcgfCBTdGF0aWNGbGFn
LAogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IGlzIHN0YXRpY2FsbHkgc2NvcGVkIGZyZWUg
dmFyaWFibGUuIEl0cyBjb29yZGluYXRlcwogICAgICAgICAgICAgLy8gYXJlIGluICJpbmRleCIg
YW5kICJkZXB0aCIuCiAgICAgICAgICAgICBMZXhpY2FsID0gSW5kZXhlZEZsYWcgfCBTY29wZWRG
bGFnIHwgU3RhdGljRmxhZywKLSAgICAgICAgICAgIC8vIEEgcmVhZC1vbmx5IExleGljYWwsIGNy
ZWF0ZWQgYnkgImNvbnN0Ii4KLSAgICAgICAgICAgIFJlYWRPbmx5TGV4aWNhbCA9IEluZGV4ZWRG
bGFnIHwgU2NvcGVkRmxhZyB8IFJlYWRPbmx5RmxhZyB8IFN0YXRpY0ZsYWcsCiAgICAgICAgICAg
ICAvLyBUaGUgcHJvcGVydHkgd2FzIG5vdCBib3VuZCBsZXhpY2FsbHksIHNvIGF0IHJ1bnRpbWUg
d2Ugc2hvdWxkCiAgICAgICAgICAgICAvLyBsb29rIGRpcmVjdGx5IGluIHRoZSBnbG9iYWwgb2Jq
ZWN0LgogICAgICAgICAgICAgR2xvYmFsID0gR2xvYmFsRmxhZywKQEAgLTEyNiw5ICsxMzQsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIC8vIGJpbmRpbmcgY3JlYXRlZCB3aXRoICJ2
YXIiIGF0IHRoZSB0b3AgbGV2ZWwuIEF0IHJ1bnRpbWUgd2UnbGwKICAgICAgICAgICAgIC8vIGp1
c3QgaW5kZXggaW50byB0aGUgZ2xvYmFsIG9iamVjdC4KICAgICAgICAgICAgIEluZGV4ZWRHbG9i
YWwgPSBJbmRleGVkRmxhZyB8IEdsb2JhbEZsYWcgfCBTdGF0aWNGbGFnLAotICAgICAgICAgICAg
Ly8gTGlrZSBJbmRleGVkR2xvYmFsLCBidXQgdGhlIHByb3BlcnR5IGlzIGFsc28gcmVhZC1vbmx5
LCBsaWtlIE5hTiwKLSAgICAgICAgICAgIC8vIEluZmluaXR5LCBvciB1bmRlZmluZWQuCi0gICAg
ICAgICAgICBSZWFkT25seUluZGV4ZWRHbG9iYWwgPSBJbmRleGVkRmxhZyB8IFJlYWRPbmx5Rmxh
ZyB8IEdsb2JhbEZsYWcgfCBTdGF0aWNGbGFnLAogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5
IGNvdWxkIG5vdCBiZSByZXNvbHZlZCBzdGF0aWNhbGx5LCBkdWUgdG8gdGhlCiAgICAgICAgICAg
ICAvLyBwcmVzZW5jZSBvZiBgd2l0aCcgYmxvY2tzLiBBdCBydW50aW1lIHdlJ2xsIGhhdmUgdG8g
d2FsayB0aGUKICAgICAgICAgICAgIC8vIHNjb3BlIGNoYWluLiBTY29wZWRGbGFnIGlzIHNldCB0
byBpbmRpY2F0ZSB0aGF0ICJkZXB0aCIgd2lsbApAQCAtMTQxLDUwICsxNDYsNTggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICAvLyBjaGVjayBmb3IgdGhlIGFic2VuY2Ugb2YgdGhpcyBw
cm9wZXJ0eSBpbiB0aG9zZSBpbnRlcnZlbmluZwogICAgICAgICAgICAgLy8gc2NvcGVzLgogICAg
ICAgICAgICAgRHluYW1pY0xleGljYWwgPSBEeW5hbWljRmxhZyB8IEluZGV4ZWRGbGFnIHwgU2Nv
cGVkRmxhZywKLSAgICAgICAgICAgIC8vIExpa2UgUmVhZE9ubHlMZXhpY2FsLCBidXQgd2l0aCBp
bnRlcnZlbmluZyBub24tc3RyaWN0IGBldmFsJy4KLSAgICAgICAgICAgIER5bmFtaWNSZWFkT25s
eUxleGljYWwgPSBEeW5hbWljRmxhZyB8IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFJlYWRP
bmx5RmxhZywKICAgICAgICAgICAgIC8vIExpa2UgR2xvYmFsLCBidXQgd2l0aCBpbnRlcnZlbmlu
ZyBub24tc3RyaWN0IGBldmFsJy4gQXMgd2l0aCAKICAgICAgICAgICAgIC8vIER5bmFtaWMsIFNj
b3BlRmxhZyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCAiZGVwdGgiIGRvZXMgaW5kZWVkCiAgICAg
ICAgICAgICAvLyBzdG9yZSBhIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBiZWZvcmUgZG9pbmcg
dGhlIGR5bmFtaWMgY2hlY2tzLgogICAgICAgICAgICAgRHluYW1pY0dsb2JhbCA9IER5bmFtaWNG
bGFnIHwgR2xvYmFsRmxhZyB8IFNjb3BlZEZsYWcsCiAgICAgICAgICAgICAvLyBMaWtlIEluZGV4
ZWRHbG9iYWwsIGJ1dCB3aXRoIGludGVydmVuaW5nIG5vbi1zdHJpY3QgYGV2YWwnLgogICAgICAg
ICAgICAgRHluYW1pY0luZGV4ZWRHbG9iYWwgPSBEeW5hbWljRmxhZyB8IEluZGV4ZWRGbGFnIHwg
R2xvYmFsRmxhZyB8IFNjb3BlZEZsYWcsCi0gICAgICAgICAgICAvLyBMaWtlIFJlYWRPbmx5SW5k
ZXhlZEdsb2JhbCwgYnV0IHdpdGggaW50ZXJ2ZW5pbmcgbm9uLXN0cmljdAotICAgICAgICAgICAg
Ly8gYGV2YWwnLgotICAgICAgICAgICAgRHluYW1pY1JlYWRPbmx5SW5kZXhlZEdsb2JhbCA9IER5
bmFtaWNGbGFnIHwgSW5kZXhlZEZsYWcgfCBSZWFkT25seUZsYWcgfCBHbG9iYWxGbGFnIHwgU2Nv
cGVkRmxhZywKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCByZWdp
c3RlclJlc29sdmUoUmVnaXN0ZXJJRCAqbG9jYWwsIHVuc2lnbmVkIGZsYWdzKQorICAgICAgICBl
bnVtIEF0dHJpYnV0ZXMgeworICAgICAgICAgICAgLy8gVGhlIHJlc29sdmVkIGJpbmRpbmcgaXMg
aW1tdXRhYmxlLgorICAgICAgICAgICAgUmVhZE9ubHlBdHRyaWJ1dGUgPSAweDEsCisgICAgICAg
ICAgICAvLyBUaGUgcmVzb2x2ZSBiaW5kaW5nIGlzIGFjdHVhbGx5IHRoZSBhcmd1bWVudHMgb2Jq
ZWN0LgorICAgICAgICAgICAgQXJndW1lbnRzQXR0cmlidXRlID0gMHgyLAorICAgICAgICAgICAg
Ly8gUmVhZHMgb2YgdGhpcyB2YXJpYWJsZSBuZWVkIGR5bmFtaWMgY2hlY2tzIHRvIGVuc3VyZSBp
dCBpcyBzZXQuCisgICAgICAgICAgICBCYXJyaWVyQXR0cmlidXRlID0gMHg0CisgICAgICAgIH07
CisKKyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgcmVnaXN0ZXJSZXNvbHZlKFJlZ2lzdGVy
SUQgKmxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gUmVzb2x2ZVJlc3VsdChSZWdpc3RlciB8IGZsYWdzLCBsb2NhbCwgbWlzc2luZ1N5bWJv
bE1hcmtlcigpLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KFJlZ2lz
dGVyLCBhdHRyaWJ1dGVzLCBsb2NhbCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCAwLCAwKTsKICAg
ICAgICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBkeW5hbWljUmVzb2x2ZShzaXpl
X3QgZGVwdGgpCisgICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGxleGljYWxSZXNvbHZlKGlu
dCBpbmRleCwgc2l6ZV90IGRlcHRoLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChEeW5hbWljLCAwLCBtaXNzaW5nU3ltYm9s
TWFya2VyKCksIGRlcHRoLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KExl
eGljYWwsIGF0dHJpYnV0ZXMsIDAsIGluZGV4LCBkZXB0aCwgMCk7CiAgICAgICAgIH0KLSAgICAg
ICAgc3RhdGljIFJlc29sdmVSZXN1bHQgbGV4aWNhbFJlc29sdmUoaW50IGluZGV4LCBzaXplX3Qg
ZGVwdGgsIHVuc2lnbmVkIGZsYWdzKQorICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBnbG9i
YWxSZXNvbHZlKEpTT2JqZWN0ICpnbG9iYWxPYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHR5cGUgPSAoZmxhZ3MgJiBEeW5hbWljRmxhZykgPyBEeW5hbWljTGV4aWNhbCA6
IExleGljYWw7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdCh0eXBlIHwgZmxhZ3Ms
IDAsIGluZGV4LCBkZXB0aCwgMCk7CisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChH
bG9iYWwsIDAsIDAsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgMCwgZ2xvYmFsT2JqZWN0KTsKICAg
ICAgICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBpbmRleGVkR2xvYmFsUmVzb2x2
ZShpbnQgaW5kZXgsIEpTT2JqZWN0ICpnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGZsYWdzKQorICAg
ICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBpbmRleGVkR2xvYmFsUmVzb2x2ZShpbnQgaW5kZXgs
IEpTT2JqZWN0ICpnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KEluZGV4ZWRHbG9iYWwgfCBmbGFncywg
MCwgaW5kZXgsIDAsIGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJl
c3VsdChJbmRleGVkR2xvYmFsLCBhdHRyaWJ1dGVzLCAwLCBpbmRleCwgMCwgZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBkeW5hbWljSW5kZXhl
ZEdsb2JhbFJlc29sdmUoaW50IGluZGV4LCBzaXplX3QgZGVwdGgsIEpTT2JqZWN0ICpnbG9iYWxP
YmplY3QsIHVuc2lnbmVkIGZsYWdzKQorICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBkeW5h
bWljUmVzb2x2ZShzaXplX3QgZGVwdGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0KER5bmFtaWNJbmRleGVkR2xvYmFsIHwgZmxhZ3MsIDAsIGluZGV4LCBkZXB0
aCwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KER5bmFt
aWMsIDAsIDAsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgZGVwdGgsIDApOwogICAgICAgICB9Ci0g
ICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGdsb2JhbFJlc29sdmUoSlNPYmplY3QgKmdsb2Jh
bE9iamVjdCkKKyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHluYW1pY0xleGljYWxSZXNv
bHZlKGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChHbG9iYWwsIDAsIG1pc3NpbmdT
eW1ib2xNYXJrZXIoKSwgMCwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBSZXNv
bHZlUmVzdWx0KER5bmFtaWNMZXhpY2FsLCBhdHRyaWJ1dGVzLCAwLCBpbmRleCwgZGVwdGgsIDAp
OwogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFtaWNHbG9iYWxS
ZXNvbHZlKHNpemVfdCBkeW5hbWljRGVwdGgsIEpTT2JqZWN0ICpnbG9iYWxPYmplY3QpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KER5bmFtaWNHbG9iYWwsIDAs
IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgZHluYW1pY0RlcHRoLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQoRHluYW1pY0dsb2JhbCwgMCwgMCwgbWlzc2lu
Z1N5bWJvbE1hcmtlcigpLCBkeW5hbWljRGVwdGgsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIH0K
KyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHluYW1pY0luZGV4ZWRHbG9iYWxSZXNvbHZl
KGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCBKU09iamVjdCAqZ2xvYmFsT2JqZWN0LCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3Vs
dChEeW5hbWljSW5kZXhlZEdsb2JhbCwgYXR0cmlidXRlcywgMCwgaW5kZXgsIGRlcHRoLCBnbG9i
YWxPYmplY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorICAgICAgICB1aW50OF90IHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KKyAgICAgICAgdWludDhfdCBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGVzOyB9CiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIGNvcnJlc3BvbmRp
bmcgdG8gYSBsb2NhbCB2YXJpYWJsZSwgb3IgMCBpZiBubwogICAgICAgICAvLyBzdWNoIHJlZ2lz
dGVyIGV4aXN0cy4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5IFJlc29sdmVSZXN1bHQ6OmxvY2FsKCkg
ZG8KICAgICAgICAgLy8gbm90IHJlcXVpcmUgZXhwbGljaXQgcmVmZXJlbmNlIGNvdW50aW5nLgpA
QCAtMTk4LDEyICsyMTEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTdGF0
aWMoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBTdGF0aWNGbGFnOyB9CiAgICAgICAgIGJvb2wg
aXNJbmRleGVkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgSW5kZXhlZEZsYWc7IH0KICAgICAg
ICAgYm9vbCBpc1Njb3BlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIFNjb3BlZEZsYWc7IH0K
LSAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gKG1fdHlwZSAmIFJlYWRP
bmx5RmxhZykgJiYgIWlzRHluYW1pYygpOyB9CiAgICAgICAgIGJvb2wgaXNHbG9iYWwoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgJiBHbG9iYWxGbGFnOyB9CiAKKyAgICAgICAgYm9vbCBpc1JlYWRP
bmx5KCkgY29uc3QgeyByZXR1cm4gKG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5QXR0cmlidXRlKSAm
JiAhaXNEeW5hbWljKCk7IH0KKyAgICAgICAgYm9vbCBpc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlcyAmIEFyZ3VtZW50c0F0dHJpYnV0ZTsgfQorICAgICAgICBib29sIG5l
ZWRzQmFycmllcigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcyAmIEJhcnJpZXJBdHRyaWJ1
dGU7IH0KKwogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlc29sdmVSZXN1bHQodW5zaWduZWQgdHlw
ZSwgUmVnaXN0ZXJJRCogbG9jYWwsIGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCBKU09iamVjdCog
Z2xvYmFsT2JqZWN0KQorICAgICAgICBSZXNvbHZlUmVzdWx0KHVpbnQ4X3QgdHlwZSwgdWludDhf
dCBhdHRyaWJ1dGVzLCBSZWdpc3RlcklEKiBsb2NhbCwgaW50IGluZGV4LCBzaXplX3QgZGVwdGgs
IEpTT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAg
ICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICAgICAgICAgICwgbV9pbmRl
eChpbmRleCkKICAgICAgICAgICAgICwgbV9sb2NhbChsb2NhbCkKICAgICAgICAgICAgICwgbV9k
ZXB0aChkZXB0aCkKQEAgLTIxOCw3ICsyMzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBjaGVja1ZhbGlkaXR5KCk7CiAjZW5kaWYKIAotICAgICAgICB1bnNpZ25lZCBtX3R5cGU7
CisgICAgICAgIHVpbnQ4X3QgbV90eXBlOworICAgICAgICB1aW50OF90IG1fYXR0cmlidXRlczsK
ICAgICAgICAgaW50IG1faW5kZXg7IC8vIEluZGV4IGluIHNjb3BlLCBpZiBJbmRleGVkRmxhZyBp
cyBzZXQKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sb2NhbDsgLy8gTG9jYWwgcmVnaXN0ZXIsIGlm
IFJlZ2lzdGVyRmxhZyBpcyBzZXQKICAgICAgICAgc2l6ZV90IG1fZGVwdGg7IC8vIERlcHRoIGlu
IHNjb3BlIGNoYWluLCBpZiBTY29wZWRGbGFnIGlzIHNldApAQCAtMjUxLDExICsyNjksMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBzZXRJc051bWVyaWNDb21wYXJlRnVuY3Rp
b24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24pOwogCi0gICAgICAgIGJvb2wgd2lsbFJl
c29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgICAgIFJlZ2lzdGVySUQq
IHVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCk7CisgICAgICAgIGVudW0gUmVzb2x2ZUZs
YWdzIHsKKyAgICAgICAgICAgIERvbnRDcmVhdGVBcmd1bWVudHNGbGFnID0gMSA8PCAwCisgICAg
ICAgIH07CiAKICAgICAgICAgLy8gUmVzb2x2ZSBhbiBpZGVudGlmaWVyLCBnaXZlbiB0aGUgY3Vy
cmVudCBjb21waWxlLXRpbWUgc2NvcGUgY2hhaW4uCi0gICAgICAgIFJlc29sdmVSZXN1bHQgcmVz
b2x2ZShjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZShj
b25zdCBJZGVudGlmaWVyJiwgdW5zaWduZWQgcmVzb2x2ZUZsYWdzID0gMCk7CiAgICAgICAgIC8v
IEJlaGF2ZXMgYXMgcmVzb2x2ZSBkb2VzLCBidXQgaWdub3JlcyBkeW5hbWljIHNjb3BlIGFzCiAg
ICAgICAgIC8vIGR5bmFtaWMgc2NvcGUgc2hvdWxkIG5vdCBpbnRlcmZlcmUgd2l0aCBjb25zdCBp
bml0aWFsaXNhdGlvbgogICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29sdmVDb25zdERlY2woY29u
c3QgSWRlbnRpZmllciYpOwpAQCAtNDk0LDE0ICs1MTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBVU3RyaW5nJiBtZXNz
YWdlKTsKIAotICAgICAgICB2b2lkIGVtaXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpOworICAgICAgICB2
b2lkIHJlaWZ5U2NvcGVzKCk7CisgICAgICAgIHZvaWQgcHVzaEJsb2NrU2NvcGUoSlNTdGF0aWNT
Y29wZU9iamVjdCosIFNjb3BlQ29udGV4dDo6UmVpZnlNb2RlKTsKKyAgICAgICAgdm9pZCBwb3BC
bG9ja1Njb3BlKCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1c2hTY29wZShSZWdpc3Rl
cklEKiBzY29wZSk7CiAgICAgICAgIHZvaWQgZW1pdFBvcFNjb3BlKCk7CiAKICAgICAgICAgdm9p
ZCBlbWl0RGVidWdIb29rKERlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUp
OwogCi0gICAgICAgIGludCBzY29wZURlcHRoKCkgeyByZXR1cm4gbV9keW5hbWljU2NvcGVEZXB0
aCArIG1fZmluYWxseURlcHRoOyB9CisgICAgICAgIGludCBzY29wZURlcHRoKCkgeyByZXR1cm4g
bV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsgbV9maW5hbGx5RGVwdGg7
IH0KICAgICAgICAgYm9vbCBoYXNGaW5hbGlzZXIoKSB7IHJldHVybiBtX2ZpbmFsbHlEZXB0aCAh
PSAwOyB9CiAKICAgICAgICAgdm9pZCBwdXNoRmluYWxseUNvbnRleHQoTGFiZWwqIHRhcmdldCwg
UmVnaXN0ZXJJRCogcmV0dXJuQWRkckRzdCk7CkBAIC01NDIsOCArNTYzLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRCaW5hcnlPcCgpOwogICAg
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3aW5kVW5hcnlPcCgpOwogCi0gICAgICAgIFBhc3NS
ZWZQdHI8TGFiZWw+IGVtaXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBDb250cm9s
Rmxvd0NvbnRleHQqIHRvcFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQqIGJvdHRvbVNjb3BlKTsK
LQogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91YmxlLCBKU1ZhbHVlPiBOdW1iZXJNYXA7CiAg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgSlNTdHJpbmcqLCBJZGVudGlmaWVy
UmVwSGFzaD4gSWRlbnRpZmllclN0cmluZ01hcDsKICAgICAgICAgCkBAIC02MTcsMzUgKzYzNiw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVj
dGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQogICAgICAgICBTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogCi0gICAgICAgIGJvb2wg
c2hvdWxkT3B0aW1pemVMb2NhbHMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9keW5h
bWljU2NvcGVEZXB0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYm9vbCBjYW5PcHRpbWl6ZU5vbkxvY2FscygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX2R5bmFtaWNTY29wZURlcHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAgICAgaWYgKG1fY29kZVR5cGUgPT0gRXZhbENvZGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNv
ZGUgJiYgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAKLSAgICAg
ICAgdm9pZCBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwotICAgICAgICB2b2lkIGNyZWF0
ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5
UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKik7CiAgICAgICAgIAogICAgICAgICBWZWN0
b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwpAQCAtNjc0LDYgKzY2Niw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9sYXN0VmFyOwogICAgICAg
ICBpbnQgbV9maW5hbGx5RGVwdGg7CiAgICAgICAgIGludCBtX2R5bmFtaWNTY29wZURlcHRoOwor
ICAgICAgICBpbnQgbV9ibG9ja1Njb3BlRGVwdGg7CiAgICAgICAgIGludCBtX2Jhc2VTY29wZURl
cHRoOwogICAgICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggYmI5NWNhZmI2
ODI2M2E5YmY1MTBhYTRlNDIyN2Y1ZWE0M2EzZWU5OC4uNTQyYjYyNzAyYmVjYTJmZDczMDIzNDIz
ZDBkOTdkNTgyNTc2MTYyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMzE4LDEwICszMTgsMTMgQEAgUmVnaXN0ZXJJ
RCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGUKIAogUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
LSAgICBpZiAobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZl
VG9Bcmd1bWVudHMoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVy
KCkpKSB7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fc3Vic2NyaXB0KTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7ICAgIAotICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRHZXRBcmd1bWVudEJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpLCBwcm9wZXJ0eSk7
CisgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKSB7CisgICAgICAgIFJlc29sdmVSZXN1
bHQgcmVzb2x2ZVJlc3VsdCA9IGdlbmVyYXRvci5yZXNvbHZlKHN0YXRpY19jYXN0PFJlc29sdmVO
b2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpLCBCeXRlY29kZUdlbmVyYXRvcjo6RG9udENyZWF0
ZUFyZ3VtZW50c0ZsYWcpOworICAgICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc0FyZ3VtZW50cygp
KSB7CisgICAgICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX3N1YnNjcmlwdCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0KSwgcmVzb2x2ZVJlc3VsdC5sb2NhbCgpLCBwcm9wZXJ0eSk7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZv
ckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2Ny
aXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CkBAIC0zMzQsMTcgKzMzNywxNCBAQCBSZWdpc3RlcklE
KiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaQogCiBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAg
aWYgKG1faWRlbnQgPT0gZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAg
ICAgaWYgKCFtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSkKLSAgICAgICAgICAgIGdvdG8gbm9uQXJn
dW1lbnRzUGF0aDsKLSAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmVOb2RlID0gc3RhdGljX2Nh
c3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpOwotICAgICAgICBpZiAoIWdlbmVyYXRvci53aWxsUmVz
b2x2ZVRvQXJndW1lbnRzKHJlc29sdmVOb2RlLT5pZGVudGlmaWVyKCkpKQotICAgICAgICAgICAg
Z290byBub25Bcmd1bWVudHNQYXRoOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsgICAgCi0gICAgICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50c0xlbmd0aChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpLCBnZW5lcmF0b3IudW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKSk7
CisgICAgaWYgKG1faWRlbnQgPT0gZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYg
bV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZl
UmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jh
c2UpLT5pZGVudGlmaWVyKCksIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3JlYXRlQXJndW1lbnRz
RmxhZyk7CisgICAgICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzQXJndW1lbnRzKCkpIHsKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQo
KSwgZW5kT2Zmc2V0KCkpOyAgICAKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdl
dEFyZ3VtZW50c0xlbmd0aChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZl
UmVzdWx0LmxvY2FsKCkpOworICAgICAgICB9CiAgICAgfQogCi1ub25Bcmd1bWVudHNQYXRoOgog
ICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9m
ZnNldCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIGJhc2UsIG1faWRlbnQpOwpAQCAtNTY0LDkgKzU2NCwxMyBAQCBS
ZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRo
aXNSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fZXhw
cik7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYXJnc1JlZ2lzdGVyOwogICAgICAg
ICAgICAgQXJndW1lbnRMaXN0Tm9kZSogYXJncyA9IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0
OwotICAgICAgICAgICAgaWYgKGFyZ3MtPm1fZXhwci0+aXNSZXNvbHZlTm9kZSgpICYmIGdlbmVy
YXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oYXJn
cy0+bV9leHByKS0+aWRlbnRpZmllcigpKSkKLSAgICAgICAgICAgICAgICBhcmdzUmVnaXN0ZXIg
PSBnZW5lcmF0b3IudW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKTsKLSAgICAgICAgICAg
IGVsc2UKKworICAgICAgICAgICAgaWYgKGFyZ3MtPm1fZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7
CisgICAgICAgICAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9y
LnJlc29sdmUoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihhcmdzLT5tX2V4cHIpLT5pZGVudGlm
aWVyKCksIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3JlYXRlQXJndW1lbnRzRmxhZyk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNBcmd1bWVudHMoKSkKKyAgICAgICAgICAg
ICAgICAgICAgYXJnc1JlZ2lzdGVyID0gcmVzb2x2ZVJlc3VsdC5sb2NhbCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCFhcmdzUmVnaXN0ZXIuZ2V0KCkpCiAgICAgICAgICAgICAg
ICAgYXJnc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3MtPm1fZXhwcik7CiAKICAg
ICAgICAgICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSBpZ25vcmVzIGV4dHJhIGFyZ3Vt
ZW50cywgYnV0IHdlIHN0aWxsCkBAIC0xOTc3LDkgKzE5ODEsMTIgQEAgUmVnaXN0ZXJJRCogVHJ5
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBhdGg6IHRoZSBjYXRjaCBi
bG9jay4KICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2VuZXJhdG9yLmVtaXRMYWJlbChn
ZW5lcmF0b3IubmV3TGFiZWwoKS5nZXQoKSk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBl
eGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Q2F0Y2goZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCB0cnlTdGFydExhYmVsLmdldCgpLCBoZXJlLmdldCgpKTsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQdXNoTmV3U2NvcGUoZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIG1fZXhjZXB0aW9u
SWRlbnQsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAgSlNTdGF0aWNTY29wZU9i
amVjdCogc2NvcGVUZW1wbGF0ZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSgqZ2VuZXJh
dG9yLmdsb2JhbERhdGEoKSk7CisgICAgICAgIHNjb3BlVGVtcGxhdGUtPmFkZFZhcmlhYmxlKG1f
ZXhjZXB0aW9uSWRlbnQsIERvbnREZWxldGUsIFN5bWJvbFRhYmxlRW50cnk6Ok5vVGVtcG9yYWxE
ZWFkWm9uZSk7CisgICAgICAgIGdlbmVyYXRvci5wdXNoQmxvY2tTY29wZShzY29wZVRlbXBsYXRl
LCBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRT
dGF0aWNWYXIoZ2VuZXJhdG9yLnJlc29sdmUobV9leGNlcHRpb25JZGVudCksIGV4Y2VwdGlvblJl
Z2lzdGVyLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9jYXRjaEJs
b2NrKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZSgpOworICAgICAgICBnZW5lcmF0
b3IucG9wQmxvY2tTY29wZSgpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNhdGNoRW5k
TGFiZWwuZ2V0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKaW5kZXggOWZjOTY0YzczMzNjNzg2OTA0NjY3ZmZmZjcwNGJlYTU1NDA4MTY2
NS4uYmQ2NWQ4NWFhMDhhZTQ1ODE2NDI2M2Y0YWEwYjI5NjZkNjg0YTM2NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0xMDQyLDggKzEwNDIsNyBA
QCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdQogICAgIEpTRnVuY3Rpb24gKmZ1bmN0aW9uID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAgICAgaWYg
KCFmdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKS5pc051bGwoKSkgewogICAgICAgICBKU1N0YXRp
Y1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0KLSAgICAgICAgICAgIEpTU3RhdGlj
U2NvcGVPYmplY3Q6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBleGVjLCBmdW5jdGlvbkV4ZWN1
dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAg
ICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5j
dGlvbkV4ZWN1dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7
CiAgICAgICAgIGZ1bmN0aW9uLT5zZXRTY29wZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9u
LT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmplY3QpKTsKICAgICB9CiAgICAgcmV0dXJu
IGZ1bmN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKaW5kZXggY2M1YmIwMzkzYWQwOWVlZTk1YWFhYTRiOTFkZDkxZTdmMWJlOWEz
ZC4uZDQ2YmU3M2E1NTcyOTAyMjM4OTZhYTkwNjIwZjVlNTg0MTgyMWEzNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNjI1
LDE4ICsxNjI1LDYgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2sKIH0KICAgICAKICNpZiBFTkFC
TEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLU5FVkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogSW50
ZXJwcmV0ZXI6OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25z
dCBJbnN0cnVjdGlvbiogdlBDKQotewotICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVy
YW5kKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0Ojpj
cmVhdGUoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIERvbnREZWxldGUpOwotICAgIGNhbGxG
cmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShzY29wZSk7Ci0KLSAgICByZXR1cm4gY2Fs
bEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpOwotfQotCiBORVZFUl9JTkxJTkUgdm9p
ZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBSZWN1cnNpdmUgaW52b2NhdGlv
biBtYXkgYWxyZWFkeSBoYXZlIHNwZWNpYWxpemVkIHRoaXMgaW5zdHJ1Y3Rpb24uCkBAIC00ODI3
LDcgKzQ4MTUsOCBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgICAgIEluaXRpYWxp
c2VzIGRzdChyKSB0byBKU1ZhbHVlKCkuCiAKLSAgICAgICAgICAgVGhpcyBvcGNvZGUgYXBwZWFy
cyBvbmx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrLgorICAgICAgICAgICBUaGlz
IG9wY29kZSBjYW4gYXBwZWFyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrIG9yIGF0
IHRoZQorICAgICAgICAgICBiZWdpbm5pbmcgb2YgYSBibG9jayBzY29wZS4KICAgICAgICAgICov
CiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogCkBAIC01MDQ5LDQzICs1MDM4
LDY5IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX25leHRfcG5hbWUpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotICAg
IERFRklORV9PUENPREUob3Bfam1wX3Njb3BlcykgewotICAgICAgICAvKiBqbXBfc2NvcGVzIGNv
dW50KG4pIHRhcmdldChvZmZzZXQpCisgICAgREVGSU5FX09QQ09ERShvcF9hc3NlcnRfbGF6eV9y
ZWdfaW5pdCkgeworICAgICAgICAvKiBhc3NlcnRfbGF6eV9yZWdfaW5pdCBkc3QocikKIAotICAg
ICAgICAgICBSZW1vdmVzIHRoZSBhIG51bWJlciBvZiBpdGVtcyBmcm9tIHRoZSBjdXJyZW50IHNj
b3BlIGNoYWluCi0gICAgICAgICAgIHNwZWNpZmllZCBieSBpbW1lZGlhdGUgbnVtYmVyIGNvdW50
LCB0aGVuIGp1bXBzIHRvIG9mZnNldAotICAgICAgICAgICB0YXJnZXQuCisgICAgICAgICAgIEFz
c2VydCB0aGF0IGRzdCBoYXMgYmVlbiBpbml0aWFsaXplZCwgaS5lLiwgaXMgbm90IGVtcHR5Lgog
ICAgICAgICAqLwotICAgICAgICBpbnQgY291bnQgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLQotICAgICAgICBTY29wZUNoYWluTm9k
ZSogdG1wID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgICAgIHdoaWxlIChjb3VudC0t
KQotICAgICAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRT
Y29wZUNoYWluKHRtcCk7Ci0KLSAgICAgICAgdlBDICs9IHRhcmdldDsKKyAgICAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+dW5jaGVja2VkUih2UENbMV0udS5vcGVyYW5kKS5pc0VtcHR5KCkp
KSB7CisgICAgICAgICAgICBVU3RyaW5nIG1lc3NhZ2UoInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUi
KTsKKyAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gSlNWYWx1ZShjcmVhdGVSZWZlcmVuY2VF
cnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2Fzc2Vy
dF9sYXp5X3JlZ19pbml0KTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KLSNp
ZiBFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIC8vIEFwcGVh
c2UgR0NDCi0gICAgZ290byAqKCYmc2tpcF9uZXdfc2NvcGUpOwotI2VuZGlmCi0gICAgREVGSU5F
X09QQ09ERShvcF9wdXNoX25ld19zY29wZSkgewotICAgICAgICAvKiBuZXdfc2NvcGUgZHN0KHIp
IHByb3BlcnR5KGlkKSB2YWx1ZShyKQorICAgIERFRklORV9PUENPREUob3BfcmVpZnlfc2NvcGUp
IHsKKyAgICAgICAgLyogcmVpZnlfc2NvcGUgZHN0KHIpIHRlbXBsKHIpIGJhc2UocikKICAgICAg
ICAgIAotICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IFN0YXRpY1Njb3BlT2JqZWN0IHdpdGgg
cHJvcGVydHkgc2V0IHRvIHZhbHVlLiAgVGhhdCBzY29wZQotICAgICAgICAgICBvYmplY3QgaXMg
dGhlbiBwdXNoZWQgb250byB0aGUgU2NvcGVDaGFpbi4gIFRoZSBzY29wZSBvYmplY3QgaXMgdGhl
biBzdG9yZWQKLSAgICAgICAgICAgaW4gZHN0IGZvciBHQy4KKyAgICAgICAgICAgQ29uc3RydWN0
cyBhIG5ldyBTdGF0aWNTY29wZU9iamVjdCwgdXNpbmcgdGVtcGwgYXMgYSB0ZW1wbGF0ZS4gVGhh
dAorICAgICAgICAgICBzY29wZSBvYmplY3QgaXMgdGhlbiBzdG9yZWQgaW4gZHN0IGFuZCBwdXNo
ZWQgb250byB0aGUgU2NvcGVDaGFpbi4KKyAgICAgICAgICAgVGhlIHN0b3JhZ2UgZm9yIHRoaXMg
YmxvY2sgc2NvcGUgaXMgaW5pdGlhbGx5IGluIHRoZSByZWdpc3RlcnMKKyAgICAgICAgICAgZm9s
bG93aW5nIGJhc2UuIFdoZW4gY29udHJvbCBsZWF2ZXMgdGhpcyBzY29wZSwgdGhlc2UgdmFsdWVz
IHdpbGwgYmUKKyAgICAgICAgICAgdG9ybiBvZmYuCiAgICAgICAgICAqLwotICAgICAgICBjYWxs
RnJhbWUtPnNldFNjb3BlQ2hhaW4oY3JlYXRlRXhjZXB0aW9uU2NvcGUoY2FsbEZyYW1lLCB2UEMp
KTsKKyAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisKKyAgICAgICAgaWYgKCFj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KS5qc1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIGludCB0
ZW1wbCA9IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IHZQQ1szXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5yKHRlbXBsKS5qc1ZhbHVl
KCkuaXNPYmplY3QoKSk7CisgICAgICAgICAgICBKU09iamVjdCogc2NvcGVUZW1wbGF0ZSA9IGFz
T2JqZWN0KGNhbGxGcmFtZS0+cih0ZW1wbCkuanNWYWx1ZSgpKTsKKyAgICAgICAgICAgIEFTU0VS
VChzY29wZVRlbXBsYXRlLT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgICAgICAgICAgSlNT
dGF0aWNTY29wZU9iamVjdCogbmV3U2NvcGUgPSBzdGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2Jq
ZWN0Kj4oc2NvcGVUZW1wbGF0ZSk7CisgICAgICAgICAgICBuZXdTY29wZSA9IG5ld1Njb3BlLT5y
ZWlmeSgqZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGJhc2UpOworICAgICAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBuZXdTY29wZTsKKyAgICAgICAgICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChu
ZXdTY29wZSkpOworICAgICAgICB9CiAKLSAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
cHVzaF9uZXdfc2NvcGUpOworICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9yZWlmeV9z
Y29wZSk7CisgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKKyAgICB9CisgICAgREVGSU5FX09Q
Q09ERShvcF90ZWFyX29mZl9zY29wZSkgeworICAgICAgICAvKiB0ZWFyX29mZl9zY29wZSBzcmMo
cikKKworICAgICAgICAgICBJZiB0aGUgc2NvcGUgc3RvcmVkIGluIFNSQyB3YXMgcmVpZmllZCwg
Y29weSB0aGUgYmxvY2stc2NvcGVkIGxvY2FscworICAgICAgICAgICBpbiB0aGUgcmVnaXN0ZXJz
IGZvbGxvd2luZyBTUkMgZnJvbSB0aGUgcmVnaXN0ZXIgZmlsZSB0byB0aGUKKyAgICAgICAgICAg
aGVhcC4gTXVuZ2UgdGhlIHNjb3BlIG9iamVjdCBzdG9yZWQgaW4gU1JDIHRvIHBvaW50IHRvIHRo
aXMgbmV3CisgICAgICAgICAgIGJhY2tpbmcgc3RvcmUsIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUg
c2NvcGUgY2hhaW4uCisKKyAgICAgICAgICAgVGhpcyBvcGNvZGUgYXBwZWFycyB3aGVuIGxlYXZp
bmcgYmxvY2sgc2NvcGVzLgorICAgICAgICAqLworCisgICAgICAgIGludCBzcmMgPSB2UENbMV0u
dS5vcGVyYW5kOworCisgICAgICAgIGlmIChKU1ZhbHVlIHNjb3BlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKHNyYykuanNWYWx1ZSgpKSB7CisgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0g
YXNPYmplY3Qoc2NvcGUpOworICAgICAgICAgICAgQVNTRVJUKG9iamVjdC0+aXNTdGF0aWNTY29w
ZU9iamVjdCgpKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3Qq
PihvYmplY3QpLT50ZWFyT2ZmKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+
c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9wKCkpOworICAgICAgICB9
CisKKyAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdGVhcl9vZmZfc2NvcGUpOwogICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotI2lmIEVOQUJMRShDT01QVVRFRF9HT1RP
X0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgc2tpcF9uZXdfc2NvcGU6Ci0jZW5kaWYKICAgICBE
RUZJTkVfT1BDT0RFKG9wX2NhdGNoKSB7CiAgICAgICAgIC8qIGNhdGNoIGV4KHIpCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA1NDFjYzg5NmEzMjg5MGY2YzVlZjYxYjRiNjViNzI0
ZTY4ZWU2YjQxLi40YTg1MjNhZDVhMGI0OWE1ZTNkODY3OWFjODk5YWIzNTM2Y2E5MWFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0yNzIsNyArMjcyLDYgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfamVxX251bGwpCiAg
ICAgICAgIERFRklORV9PUChvcF9qZmFsc2UpCiAgICAgICAgIERFRklORV9PUChvcF9qbXApCi0g
ICAgICAgIERFRklORV9PUChvcF9qbXBfc2NvcGVzKQogICAgICAgICBERUZJTkVfT1Aob3Bfam5l
cV9udWxsKQogICAgICAgICBERUZJTkVfT1Aob3Bfam5lcV9wdHIpCiAgICAgICAgIERFRklORV9P
UChvcF9qbGVzcykKQEAgLTMxNyw3ICszMTYsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfcHJlX2luYykKICAgICAgICAgREVGSU5F
X09QKG9wX3Byb2ZpbGVfZGlkX2NhbGwpCiAgICAgICAgIERFRklORV9PUChvcF9wcm9maWxlX3dp
bGxfY2FsbCkKLSAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfbmV3X3Njb3BlKQorICAgICAgICBE
RUZJTkVfT1Aob3BfYXNzZXJ0X2xhenlfcmVnX2luaXQpCisgICAgICAgIERFRklORV9PUChvcF9h
c3NlcnRfbGF6eV9yZWdfbm90X2luaXQpCisgICAgICAgIERFRklORV9PUChvcF9yZWlmeV9zY29w
ZSkKKyAgICAgICAgREVGSU5FX09QKG9wX3RlYXJfb2ZmX3Njb3BlKQogICAgICAgICBERUZJTkVf
T1Aob3BfcHVzaF9zY29wZSkKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9k
aXJlY3Q6CiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKaW5kZXggMmQyODQxYmFmNTU0ODZhMWViZjY5ZDJlNGI1YmQ4NWNl
ZTExNmIwZC4uNDBmZWIxOWVjNTFhYzE0OGRkYzg1MDM5MTI3Y2RjZTFhYmY1MDY3ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCkBAIC04MTgsNyArODE4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9qZXFfbnVsbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfamZhbHNlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbXAo
SW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2ptcF9zY29wZXMoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2puZXFfbnVsbChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3Bfam5lcV9wdHIoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2psZXNzKEluc3RydWN0aW9uKik7CkBAIC04NjQsNyArODYzLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfcHJlX2luYyhJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV9kaWRfY2FsbChJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHJvZmlsZV93aWxsX2NhbGwoSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAg
dm9pZCBlbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQg
ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdChJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfYXNzZXJ0X2xhenlfcmVnX25vdF9pbml0KEluc3RydWN0aW9uKik7CisgICAgICAg
IHZvaWQgZW1pdF9vcF9yZWlmeV9zY29wZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVt
aXRfb3BfdGVhcl9vZmZfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3B1c2hfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF9ieV9p
ZChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X2J5X2luZGV4KEluc3Ry
dWN0aW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCAy
ZGI4MmJmNGFkMjBkNjAzYWYwMzQ5ZGU0ZWY1MTRjZjNkMDAyNmM2Li5lMmE3NjM1Y2QwN2Y4ZGQ5
ZmU4YTcwY2VhNWMzZWMwM2NjODFhNzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKQEAgLTEwMTYsMTIgKzEwMTYsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
anNudW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9wdXNoX25ld19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfcHVzaF9uZXdfc2NvcGUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJ
bW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICBKdW1wIG5vdEVtcHR5ID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAg
SklUU3R1YkNhbGwodGhpcywgY3RpX29wX2Fzc2VydF9sYXp5X3JlZ19pbml0KS5jYWxsKCk7Cisg
ICAgbm90RW1wdHkubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVpZnlfc2Nv
cGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRlbXBsID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBKdW1wIHNjb3BlUmVpZmllZCA9IGJy
YW5jaFRlc3RQdHIoTm9uWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9y
ZWlmeV9zY29wZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodGVtcGwsIHJlZ1QxKTsKKyAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoYmFzZSkpOworICAgIHN0dWJDYWxs
LmNhbGwoZHN0KTsKKyAgICBzY29wZVJlaWZpZWQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfdGVhcl9vZmZfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgSnVtcCBzY29wZU5vdFJlaWZpZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIHNjb3BlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9zY29wZSk7CisgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoc2NvcGUsIHJlZ1QxKTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAg
c2NvcGVOb3RSZWlmaWVkLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDM0LDE0ICsxMDU3LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qbXBfc2NvcGVzKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29w
X2ptcF9zY29wZXMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAg
IGFkZEp1bXAoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLX0KLQog
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCmluZGV4IGI2NzY5NmYzNTkwMzc3ZmNhMDA3YTQzODFjNTE0YzA1YzJkYTEwZGYuLmYxMjAy
YzcyMjYyNTRjNWU5OWNjYTI1MGYzZDBiMWZjNzdmYjc4ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTEzMzYsMTIgKzEzMzYsMzcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX2pzbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2EKICAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9wdXNoX25ld19zY29wZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3Rl
ZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgSnVtcCBub3RFbXB0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IoZHN0
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICBKSVRTdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQpLmNhbGwoKTsKKyAgICBub3RFbXB0
eS5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9yZWlmeV9zY29wZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGVtcGwgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEp1bXAgc2NvcGVSZWlmaWVkID0gYnJhbmNoMzIoTm90
RXF1YWwsIHRhZ0Zvcihkc3QpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
OworICAgIGVtaXRMb2FkUGF5bG9hZCh0ZW1wbCwgcmVnVDApOworICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9yZWlmeV9zY29wZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQocmVnVDApOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihiYXNlKSk7
CisgICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAgIHNjb3BlUmVpZmllZC5saW5rKHRoaXMpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9zY29wZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHNjb3BlID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBKdW1wIHNjb3BlTm90UmVpZmllZCA9IGJyYW5jaDMyKEVxdWFs
LCB0YWdGb3Ioc2NvcGUpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwor
ICAgIGVtaXRMb2FkUGF5bG9hZChzY29wZSwgcmVnVDApOworICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9zY29wZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQocmVnVDApOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBzY29wZU5vdFJlaWZpZWQubGlu
ayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTEzNjEsMTQgKzEzODYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1hcChtX2J5dGVjb2Rl
T2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9jYXRjaCksIGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1Qw
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wX3Njb3BlcyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9q
bXBfc2NvcGVzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICBh
ZGRKdW1wKGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci19Ci0KIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggZWViZTkw
NDI3YWVjMWM1ZDU2YWJiY2I5NmY2MDI1NWM5ZTc5MjUxMS4uYjI2ZGUxZWFkZWJkOWJmNjZhMzlj
NjdhMGZhNGUxZThkNDNlOWY5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKQEAgLTMwODAsNyArMzA4MCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwg
b3BfbmV3X2Z1bmNfZXhwKQogICAgICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xv
c2luZyB0aGUgRnVuY3Rpb25FeHByZXNzaW9uLgogICAgICAqLwogICAgIGlmICghZnVuY3Rpb24t
Pm5hbWUoKS5pc051bGwoKSkgewotICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlv
blNjb3BlT2JqZWN0ID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVu
Y3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgSlNT
dGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpTU3RhdGljU2NvcGVPYmpl
Y3Q6OmNyZWF0ZSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5j
LCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgICAgICBmdW5jLT5zZXRTY29wZShjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0
KSk7CiAgICAgfQogCkBAIC0zMzcxLDI4ICszMzcxLDQ3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF9pbikKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KSkpOwogfQogCi1E
RUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfbmV3X3Njb3BlKQorREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQpCiB7CiAgICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgSlNPYmplY3QqIHNjb3BlID0g
SlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0Zy
YW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpLCBE
b250RGVsZXRlKTsKKyAgICBVU3RyaW5nIG1lc3NhZ2UoInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUi
KTsKKyAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBtZXNzYWdlKTsKKyAgICBWTV9USFJPV19FWENF
UFRJT05fQVRfRU5EKCk7Cit9CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJh
bWUuY2FsbEZyYW1lOwotICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKS0+cHVzaChzY29wZSkpOwotICAgIHJldHVybiBzY29wZTsKK0RFRklORV9TVFVC
X0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcmVpZnlfc2NvcGUpCit7CisgICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgLy8gQXJndW1lbnRzOiBzY29wZSB0ZW1wbGF0
ZSBvYmplY3QgKGpzdmFsdWUpLCBvZmZzZXQgb2YgcmVnaXN0ZXJzIChpbnQzMikuCisgICAgSlNW
YWx1ZSB0ZW1wbCA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCk7CisKKyAgICBBU1NFUlQodGVt
cGwuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlVGVtcGxhdGUgPSBhc09iamVjdCh0
ZW1wbCk7CisgICAgQVNTRVJUKHNjb3BlVGVtcGxhdGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7
CisgICAgSlNTdGF0aWNTY29wZU9iamVjdCogbmV3U2NvcGUgPSBzdGF0aWNfY2FzdDxKU1N0YXRp
Y1Njb3BlT2JqZWN0Kj4oc2NvcGVUZW1wbGF0ZSk7CisgICAgbmV3U2NvcGUgPSBuZXdTY29wZS0+
cmVpZnkoKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnJlZ2lz
dGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRT
Y29wZUNoYWluKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2gobmV3U2Nv
cGUpKTsKKworICAgIC8vIEdlbmVyYXRlZCBjb2RlIHN0b3JlcyBpdCBpbiBjYWxsRnJhbWUtPnIo
ZHN0KS4KKyAgICByZXR1cm4gbmV3U2NvcGU7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX2ptcF9zY29wZXMpCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90ZWFyX29m
Zl9zY29wZSkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAg
ICB1bnNpZ25lZCBjb3VudCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwotICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgLy8gQXJndW1lbnRz
OiBzY29wZSBvYmplY3QgKGpzdmFsdWUpLgorICAgIEpTVmFsdWUgc2NvcGUgPSBzdGFja0ZyYW1l
LmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEFTU0VSVChzY29wZSk7CiAKLSAgICBTY29wZUNoYWlu
Tm9kZSogdG1wID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgd2hpbGUgKGNvdW50LS0p
Ci0gICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0gICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWlu
KHRtcCk7CisgICAgQVNTRVJUKHNjb3BlLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdChzY29wZSk7CisgICAgQVNTRVJUKG9iamVjdC0+aXNTdGF0aWNTY29wZU9i
amVjdCgpKTsKKyAgICBzdGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4ob2JqZWN0KS0+
dGVhck9mZigqc3RhY2tGcmFtZS5nbG9iYWxEYXRhKTsKKyAgICBzdGFja0ZyYW1lLmNhbGxGcmFt
ZS0+c2V0U2NvcGVDaGFpbihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wb3Ao
KSk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV9pbmRleCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAppbmRleCA0OWY2NjY0NjUzYzM2NzVkZTMyOGFj
OWNhNWEwM2VmNjAwNjVkYjJmLi41ZWI4ZjFkYWM3NWZmNDY2NWMwZjk0NmZhNGI2MzBhZWM4MWZh
YzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCkBAIC00MTgsNyArNDE4LDkg
QEAgZXh0ZXJuICJDIiB7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfb2JqZWN0
KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9u
ZXdfcmVnZXhwKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVC
IGN0aV9vcF9wdXNoX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICBKU09i
amVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfbmV3X3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKKyAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3JlaWZ5X3Nj
b3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVh
cl9vZmZfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09iamVjdCogSklUX1NU
VUIgY3RpX29wX3B1c2hfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09iamVj
dCogSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKTsKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKSVRfU1RVQiBjdGlf
b3BfZ2V0X3BuYW1lcyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpAQCAtNDM1LDcgKzQzNyw2IEBA
IGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2NoZWNrX2hhc19pbnN0YW5j
ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2RlYnVn
KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfZW5kKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgdm9pZCBKSVRfU1RVQiBjdGlfb3Bfam1wX3Njb3Bl
cyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3BvcF9z
Y29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3By
b2ZpbGVfZGlkX2NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVC
IGN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggYjZiYjY2
NGJjZjcyMGNlMjBmYTBmMGZjMzcxNGI3YjE4OGE2MzI3Mi4uMDU5YzE1NDBkMmVmODE4ZWJkZmY3
OGQ2NTE2YTIzZDQ5YjY4NjZjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCkBAIC0xMTIwLDE4ICsxMTIwLDYgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZXJfc2V0dGVyKQogICAgIExMSU5UX0VORCgpOwogfQog
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfam1wX3Njb3BlcykKLXsKLSAgICBMTElO
VF9CRUdJTigpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gcGNbMV0udS5vcGVyYW5kOwotICAgIFNj
b3BlQ2hhaW5Ob2RlKiB0bXAgPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAgd2hpbGUgKGNvdW50
LS0pCi0gICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0gICAgZXhlYy0+c2V0U2NvcGVDaGFpbih0
bXApOwotICAgIHBjICs9IHBjWzJdLnUub3BlcmFuZDsKLSAgICBMTElOVF9FTkQoKTsKLX0KLQog
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2p0cnVlKQogewogICAgIExMSU5UX0JFR0lO
KCk7CkBAIC0xMjQzLDcgKzEyMzEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bmV3X2Z1bmNfZXhwKQogICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBmdW5jdGlvbi0+bWFrZShleGVj
LCBleGVjLT5zY29wZUNoYWluKCkpOwogICAgIAogICAgIGlmICghZnVuY3Rpb24tPm5hbWUoKS5p
c051bGwoKSkgewotICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2Jq
ZWN0ID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uLT5uYW1lKCks
IGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgIEpTU3RhdGljU2NvcGVPYmpl
Y3QqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsK
ICAgICAgICAgZnVuYy0+c2V0U2NvcGUoZ2xvYmFsRGF0YSwgZnVuYy0+c2NvcGUoKS0+cHVzaChm
dW5jdGlvblNjb3BlT2JqZWN0KSk7CiAgICAgfQogICAgIApAQCAtMTQ1MCw2ICsxNDM4LDQyIEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90ZWFyX29mZl9hcmd1bWVudHMpCiAgICAg
TExJTlRfRU5EKCk7CiB9CiAKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9hc3NlcnRf
bGF6eV9yZWdfaW5pdCkKK3sKKyAgICBMTElOVF9CRUdJTigpOworICAgIFVTdHJpbmcgbWVzc2Fn
ZSgidW5pbml0aWFsaXplZCB2YXJpYWJsZSIpOworICAgIExMSU5UX1RIUk9XKGNyZWF0ZVJlZmVy
ZW5jZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKK30KKworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3JlaWZ5X3Njb3BlKQoreworICAgIExMSU5UX0JFR0lOKCk7CisgICAgaW50IGRzdCA9
IHBjWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdGVtcGwgPSBwY1syXS51Lm9wZXJhbmQ7CisgICAg
aW50IGJhc2UgPSBwY1szXS51Lm9wZXJhbmQ7CisgICAgQVNTRVJUKCFleGVjLT51bmNoZWNrZWRS
KGRzdCkuanNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoZXhlYy0+cih0ZW1wbCkuanNWYWx1ZSgpLmlz
T2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBzY29wZVRlbXBsYXRlID0gYXNPYmplY3QoZXhlYy0+
cih0ZW1wbCkuanNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoc2NvcGVUZW1wbGF0ZS0+aXNTdGF0aWNT
Y29wZU9iamVjdCgpKTsKKyAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBuZXdTY29wZSA9IHN0YXRp
Y19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihzY29wZVRlbXBsYXRlKTsKKyAgICBuZXdTY29w
ZSA9IG5ld1Njb3BlLT5yZWlmeShnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKSArIGJhc2Up
OworICAgIGV4ZWMtPnVuY2hlY2tlZFIoZHN0KSA9IG5ld1Njb3BlOworICAgIGV4ZWMtPnNldFNj
b3BlQ2hhaW4oZXhlYy0+c2NvcGVDaGFpbigpLT5wdXNoKG5ld1Njb3BlKSk7CisgICAgTExJTlRf
RU5EKCk7Cit9CisKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90ZWFyX29mZl9zY29w
ZSkKK3sKKyAgICBMTElOVF9CRUdJTigpOworICAgIGludCBzcmMgPSBwY1sxXS51Lm9wZXJhbmQ7
CisgICAgQVNTRVJUKGV4ZWMtPnVuY2hlY2tlZFIoZHN0KS5qc1ZhbHVlKCkpOworICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdChleGVjLT51bmNoZWNrZWRSKHNyYykuanNWYWx1ZSgpKTsK
KyAgICBBU1NFUlQob2JqZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgIHN0YXRpY19j
YXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihvYmplY3QpLT50ZWFyT2ZmKGdsb2JhbERhdGEpOwor
ICAgIGV4ZWMtPnNldFNjb3BlQ2hhaW4oZXhlYy0+c2NvcGVDaGFpbigpLT5wb3AoKSk7CisgICAg
TExJTlRfRU5EKCk7Cit9CisKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdHJjYXQp
CiB7CiAgICAgTExJTlRfQkVHSU4oKTsKQEAgLTE1MTgsMTUgKzE1NDIsNiBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcG9wX3Njb3BlKQogICAgIExMSU5UX0VORCgpOwogfQogCi1M
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF9uZXdfc2NvcGUpCi17Ci0gICAgTExJ
TlRfQkVHSU4oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIEpTT2JqZWN0KiBzY29wZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShleGVj
LCBjb2RlQmxvY2stPmlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKSwgTExJTlRfT1AoMykuanNW
YWx1ZSgpLCBEb250RGVsZXRlKTsKLSAgICBleGVjLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3Bl
Q2hhaW4oKS0+cHVzaChzY29wZSkpOwotICAgIExMSU5UX1JFVFVSTihzY29wZSk7Ci19Ci0KIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90aHJvdykKIHsKICAgICBMTElOVF9CRUdJTigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCA3
YjNiOGJkYTY1NmViMWY5YjdmMzFmMDYyYWJmMDlmNTQ1MzcwZTg1Li5kMjExYmNkOWQ4ZjAzY2Q2
OTJjZmZmYTY4ZTdkNjcyMzNkY2I1OTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuaApAQCAtMTU5LDcgKzE1OSw2IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wdXRfYnlfdmFsKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9kZWxfYnlfdmFsKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaW5k
ZXgpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZXJfc2V0dGVyKTsK
LUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbXBfc2NvcGVzKTsKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9qdHJ1ZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfamZhbHNlKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbGVzcyk7CkBAIC0x
ODEsMTMgKzE4MCwxNSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJh
cmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwpOwogTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX2FjdGl2YXRpb24pOwogTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX2FyZ3VtZW50cyk7CitMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfYXNzZXJ0X2xhenlfcmVnX2luaXQpOworTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3JlaWZ5X3Njb3BlKTsKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF90ZWFyX29mZl9zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3Ry
Y2F0KTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOwogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9wbmFtZXMpOwogTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25leHRfcG5hbWUpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3B1c2hfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3BvcF9zY29w
ZSk7Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF9uZXdfc2NvcGUpOwogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rocm93KTsKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF90aHJvd19yZWZlcmVuY2VfZXJyb3IpOwogTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2RlYnVnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCA5YWY5MWJlZjJjNDgxNzU0ODgzMzFmZGI5NDI0
MTU0YTAxODVhN2RmLi4zNjM4N2JiMTVjNTEyM2NhNjk2YWE3NDhhZmU5ODkyNTc3Y2VjZjZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCkBAIC01MjUsMTIgKzUyNSw2IEBAIF9sbGludF9vcF9wdXRfZ2V0dGVyX3NldHRlcjoK
ICAgICBkaXNwYXRjaCg1KQogCiAKLV9sbGludF9vcF9qbXBfc2NvcGVzOgotICAgIHRyYWNlRXhl
Y3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9qbXBfc2NvcGVzKQot
ICAgIGRpc3BhdGNoKDApCi0KLQogX2xsaW50X29wX2xvb3BfaWZfdHJ1ZToKICAgICBub3AKIF9s
bGludF9vcF9qdHJ1ZToKQEAgLTcyNywxMiArNzIxLDYgQEAgX2xsaW50X29wX3BvcF9zY29wZToK
ICAgICBkaXNwYXRjaCgxKQogCiAKLV9sbGludF9vcF9wdXNoX25ld19zY29wZToKLSAgICB0cmFj
ZUV4ZWN1dGlvbigpCi0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcHVzaF9uZXdf
c2NvcGUpCi0gICAgZGlzcGF0Y2goNCkKLQotCiBfbGxpbnRfb3BfdGhyb3c6CiAgICAgdHJhY2VF
eGVjdXRpb24oKQogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Rocm93KQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQppbmRleCA0NmM2MjI2ZTU0NGU4MTY1ZWNmZTJmYTU1MjRmNDA1OTY0N2ZjMjQ5
Li5jYmM1ZDRhZjg0YjdkYTY0MTI0NTQ4NWY2NTQ5NmZhZmE3MjJkYzg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQpAQCAtMTQ1OCw2ICsxNDU4LDMzIEBAIF9sbGludF9vcF90ZWFyX29mZl9hcmd1bWVudHM6
CiAgICAgZGlzcGF0Y2goMikKIAogCitfbGxpbnRfb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQ6Cisg
ICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpIDRbUENdLCB0MAorICAgIGJpbmVxIFRhZ09m
ZnNldFtjZnIsIHQwLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm9wQXNzZXJ0TGF6eVJlZ0luaXREb25l
CisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfYXNzZXJ0X2xhenlfcmVnX2luaXQp
Cisub3BBc3NlcnRMYXp5UmVnSW5pdERvbmU6CisgICAgZGlzcGF0Y2goMikKKworCitfbGxpbnRf
b3BfcmVpZnlfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpIDRbUENdLCB0
MAorICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm9wUmVp
ZnlTY29wZURvbmUKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9yZWlmeV9zY29w
ZSkKKy5vcFJlaWZ5U2NvcGVEb25lOgorICAgIGRpc3BhdGNoKDQpCisKKworX2xsaW50X29wX3Rl
YXJfb2ZmX3Njb3BlOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaSA0W1BDXSwgdDAK
KyAgICBiaWVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm9wVGVhck9m
ZlNjb3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3RlYXJfb2ZmX3Nj
b3BlKQorLm9wVGVhck9mZlNjb3BlRG9uZToKKyAgICBkaXNwYXRjaCgyKQorCisKIF9sbGludF9v
cF9yZXQ6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGls
b2d1ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCmluZGV4IGQ4YzkzMWZhMGM4OWM3YmJkYTc2NTEzMjczNDljZmNhMmNl
NGFmYzQuLjE3NGVkYmZjZmI5YjE3YjcxZTUyZTQ5NzE2N2RiMWViMjdlMjhjZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCkBAIC0xMzEwLDYgKzEzMTAsMzMgQEAgX2xsaW50X29wX3RlYXJfb2ZmX2FyZ3VtZW50czoK
ICAgICBkaXNwYXRjaCgyKQogCiAKK19sbGludF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdDoKKyAg
ICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBidHBu
eiBbY2ZyLCB0MCwgOF0sIC5vcEFzc2VydExhenlSZWdJbml0RG9uZQorICAgIGNhbGxTbG93UGF0
aChfbGxpbnRfc2xvd19wYXRoX2Fzc2VydF9sYXp5X3JlZ19pbml0KQorLm9wQXNzZXJ0TGF6eVJl
Z0luaXREb25lOgorICAgIGRpc3BhdGNoKDIpCisKKworX2xsaW50X29wX3JlaWZ5X3Njb3BlOgor
ICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAorICAgIGJ0
cHogW2NmciwgdDAsIDhdLCAub3BSZWlmeVNjb3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxp
bnRfc2xvd19wYXRoX3JlaWZ5X3Njb3BlKQorLm9wUmVpZnlTY29wZURvbmU6CisgICAgZGlzcGF0
Y2goNCkKKworCitfbGxpbnRfb3BfdGVhcl9vZmZfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24o
KQorICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCisgICAgYnRweiBbY2ZyLCB0MCwgOF0sIC5v
cFRlYXJPZmZTY29wZURvbmUKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF90ZWFy
X29mZl9zY29wZSkKKy5vcFRlYXJPZmZTY29wZURvbmU6CisgICAgZGlzcGF0Y2goMikKKworCiBf
bGxpbnRfb3BfcmV0OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjaGVja1N3aXRjaFRvSklU
Rm9yRXBpbG9ndWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IGY3NTJi
OTFlOTVkZDk0MWIxY2Y5OGIxMjA2NTMxZWRmOTRlOGM3MzcuLmE0MDE5ZWY0MDJiOTVkNmUxMGNm
ODE2MWI3Yzg4YTczYWU1MGMxMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
QEAgLTE0MjIsNyArMTQyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldFVz
ZXNBcmd1bWVudHMoKSB7IG1fc2NvcGVGbGFncyB8PSBVc2VzQXJndW1lbnRzRmxhZzsgfQogICAg
ICAgICBib29sIHVzZXNUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgVXNlc1Ro
aXNGbGFnOyB9CiAKLSAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlh
YmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcgfCBVc2Vz
V2l0aEZsYWcgfCBVc2VzQ2F0Y2hGbGFnKTsgfQorICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlv
bkZvck1vcmVUaGFuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVz
ZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyk7IH0KICAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRp
b24oKSBjb25zdCB7IHJldHVybiBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IG5lZWRzQWN0aXZh
dGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCk7IH0KIAogICAgICAgICBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmgKaW5kZXggNzUxM2QxZjExZmQ0ODk1ODI4YWY4Y2FlYmU4MGFkYTE1YjVm
NTdmOS4uZTQyMDYyOGY5OTQ1NjUwMTYyNzk1NjliNjk3N2RmNDQ5NTg4Yjk3YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0xNjIsNyArMTYyLDcgQEAgc3RydWN0IFNj
b3BlIHsKICAgICBBTFdBWVNfSU5MSU5FIFNjb3BlRmxhZ3MgdXNlc0ZsYWdzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY29wZUZsYWdzICYgQWxsU2NvcGVVc2VzRmxhZ3M7IH0KICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0RmxhZ3MoU2NvcGVGbGFncyBzY29wZUZsYWdzKSB7IG1fc2NvcGVGbGFncyB8
PSBzY29wZUZsYWdzOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbmVlZHNGdWxsQWN0aXZh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcgfCBVc2Vz
V2l0aEZsYWcgfCBVc2VzQ2F0Y2hGbGFnKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBuZWVk
c0Z1bGxBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVzZXNFdmFs
RmxhZyB8IFVzZXNXaXRoRmxhZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc3RyaWN0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFN0cmljdE1vZGVGbGFnOyB9CiAgICAg
QUxXQVlTX0lOTElORSBib29sIHNoYWRvd3NBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3Nj
b3BlRmxhZ3MgJiBTaGFkb3dzQXJndW1lbnRzRmxhZzsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgRnVuY3Rpb25Nb2Rl
RmxhZzsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCmluZGV4
IDA4YjM5ZmNmMGI0YzkzMDI5MDQzN2JjYTkwMTk3Y2M5NTMwMGVmZTcuLjgwMTY5MDE4MjllYjA5
MWY0ZTg3MzYzYzYyMjgxZWJjY2Q2NWMyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgKQEAgLTI5NCw3ICsyOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgVXNl
c0V2YWxGbGFnOyB9CiAgICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fc2NvcGVGbGFncyAmIFVzZXNBcmd1bWVudHNGbGFnOyB9Ci0gICAgICAgIGJvb2wgbmVlZHNB
Y3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyB8fCBtX3Nj
b3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNlc0NhdGNoRmxhZyk7
IH0KKyAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hhc0Nh
cHR1cmVkVmFyaWFibGVzIHx8IG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcgfCBVc2VzV2l0
aEZsYWcpOyB9CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9z
Y29wZUZsYWdzICYgU3RyaWN0TW9kZUZsYWc7IH0KIAogICAgICAgICB2b2lkIHVubGlua0NhbGxz
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Nj
b3BlT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2Nv
cGVPYmplY3QuY3BwCmluZGV4IGY4OTQyYjVmODY1ZGI1OWUxNTQyZGM0ZTNiNWM3Y2YyNzljMTcx
NjMuLjBlZTAxZGM2ZWVlYzQ0NmY5M2ZhNGJmYmE1MTdiOGM0ZTBjMTVjNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3Bw
CkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIENPTVBJTEVfQVNTRVJU
KFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CiAgICAgSlNWYXJp
YWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdpc3RlclN0b3JlKTsKKyAgICBpZiAodGhpc09i
amVjdC0+bV9yZWdpc3RlcnMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmpl
Y3QtPm1fcmVnaXN0ZXJzLCB0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlLT5zaXplKCkpOwogfQog
CiBKU09iamVjdCogSlNTdGF0aWNTY29wZU9iamVjdDo6dG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4
ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RhdGljU2NvcGVPYmplY3QuaAppbmRleCBiYmYwM2EzNDczYTI1NzY5ZDJiNDI1OWI3NTBmNmJm
N2ZmZDQwZjg5Li40MzIzYjE0ZjU4OTU2YmZkN2I1MGRiNjdkNzlhMWJhNTVkZmUxOTZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVj
dC5oCkBAIC0zNCwxMyArMzQsNTAgQEAgbmFtZXNwYWNlIEpTQ3sKICAgICBwdWJsaWM6CiAgICAg
ICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBKU1N0
YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgICAg
ICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogc2NvcGVP
YmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0YXRpY1Njb3BlT2JqZWN0Pigq
ZXhlYy0+aGVhcCgpKSkgSlNTdGF0aWNTY29wZU9iamVjdChleGVjKTsKLSAgICAgICAgICAgIHNj
b3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCBpZGVudGlmaWVyLCB2YWx1ZSwgYXR0cmli
dXRlcyk7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkU3ltYm9sVGFibGU+IHRhYmxlID0gU2hh
cmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpOworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVj
dCogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0YXRpY1Njb3Bl
T2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGdsb2JhbERhdGEs
IHRhYmxlLnJlbGVhc2UoKSwgMCk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CiAgICAg
ICAgIH0KIAorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVjdCogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgSlNTdGF0aWNT
Y29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBjcmVhdGUoZ2xvYmFsRGF0YSk7CisgICAgICAgICAg
ICBzY29wZU9iamVjdC0+YWRkVmFyaWFibGUobmFtZSwgYXR0cmlidXRlcywgU3ltYm9sVGFibGVF
bnRyeTo6Tm9UZW1wb3JhbERlYWRab25lKTsKKyAgICAgICAgICAgIE93bkFycmF5UHRyPFdyaXRl
QmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5UHRyKG5ldyBXcml0
ZUJhcnJpZXI8VW5rbm93bj5bMV0pOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiByZWdpc3RlcnMgPSByZWdpc3RlckFycmF5LmdldCgpOworICAgICAgICAgICAgcmVnaXN0ZXJz
WzBdLnNldChnbG9iYWxEYXRhLCBzY29wZU9iamVjdCwgdmFsdWUpOworICAgICAgICAgICAgc2Nv
cGVPYmplY3QtPnNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXkucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAg
IGludCBhZGRWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBTeW1ib2xUYWJsZUVudHJ5OjpUZW1wb3JhbERlYWRab25lS2luZCBraW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcmVnaXN0ZXJzKTsKKyAgICAgICAgICAgIGludCBp
ZHggPSBzeW1ib2xUYWJsZSgpLnNpemUoKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlKCkuYWRk
KG5hbWUuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KGlkeCwgYXR0cmlidXRlcywga2luZCkpOwor
ICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlKCkuc2l6ZSgpID09IGlkeCArIDEpOworICAg
ICAgICAgICAgcmV0dXJuIGlkeDsKKyAgICAgICAgfQorCisgICAgICAgIEpTU3RhdGljU2NvcGVP
YmplY3QqIHJlaWZ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVnaXN0ZXIqIHJlZ2lzdGVy
cykKKyAgICAgICAgeworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCAqc2NvcGVPYmpl
Y3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0YXRpY1Njb3BlT2JqZWN0PihnbG9i
YWxEYXRhLmhlYXApKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGdsb2JhbERhdGEsIG1fc3ltYm9sVGFi
bGUsIHJlZ2lzdGVycyk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHRlYXJPZmYoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAg
ICB7CisgICAgICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdp
c3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W21fc3lt
Ym9sVGFibGUtPnNpemUoKV0pOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBy
ZWdpc3RlcnMgPSByZWdpc3RlckFycmF5LmdldCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX3N5bWJvbFRhYmxlLT5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICByZWdp
c3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdldCgpKTsKKyAg
ICAgICAgICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXkucmVsZWFzZSgp
KTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1
aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhp
c09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqKTsKQEAgLTU0LDI0ICs5MSwxOCBAQCBuYW1lc3Bh
Y2UgSlNDewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyU3RvcmUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUoKS5hZGQo
aWRlbnRpZmllci5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKLSAg
ICAgICAgfQogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBJ
c0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1ZhcmlhYmxl
T2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTU3RhdGlj
U2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2Jq
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0YXRpY1Njb3BlU3Ry
dWN0dXJlLmdldCgpLCAmbV9zeW1ib2xUYWJsZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+
KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSkKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U2hhcmVkU3ltYm9sVGFibGU+IHRhYmxl
LCBSZWdpc3RlciogcmVnaXN0ZXJzKQorICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGds
b2JhbERhdGEsIGdsb2JhbERhdGEuc3RhdGljU2NvcGVTdHJ1Y3R1cmUuZ2V0KCksIHRhYmxlLmdl
dCgpLCByZWdpc3RlcnMpCisgICAgICAgICAgICAsIG1fc3ltYm9sVGFibGUodGFibGUpCiAgICAg
ICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAKLSAgICAgICAgU3ltYm9sVGFibGUgbV9zeW1ib2xUYWJsZTsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+IG1fcmVnaXN0ZXJTdG9yZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFN5bWJv
bFRhYmxlPiBtX3N5bWJvbFRhYmxlOwogICAgIH07CiAKICAgICBpbmxpbmUgYm9vbCBKU1N0YXRp
Y1Njb3BlT2JqZWN0Ojppc0R5bmFtaWNTY29wZShib29sJikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCmluZGV4IGY1NDBhMTJjNzNlZjE3MjZmNmMy
ZmRhZWZlZDU5MWU1Y2VlYTM2OWQuLjlmM2RhZWIyNjMxMmZlOWJhZDg1ZWEzYWZhNGVkOWNhYjhj
OTY3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaApA
QCAtNTEsMTMgKzUxLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5KGludCBpbmRleCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRl
eChpbmRleCkpOwotICAgICAgICAgICAgcGFjayhpbmRleCwgZmFsc2UsIGZhbHNlKTsKKyAgICAg
ICAgICAgIHBhY2soaW5kZXgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAKICAg
ICAgICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICAg
ICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERv
bnRFbnVtKTsKKyAgICAgICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwg
YXR0cmlidXRlcyAmIERvbnRFbnVtLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBlbnVt
IFRlbXBvcmFsRGVhZFpvbmVLaW5kIHsgSGFzVGVtcG9yYWxEZWFkWm9uZSwgTm9UZW1wb3JhbERl
YWRab25lIH07CisKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIFRlbXBvcmFsRGVhZFpvbmVLaW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHBhY2soaW5k
ZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtLCBraW5kID09
IEhhc1RlbXBvcmFsRGVhZFpvbmUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29s
IGlzTnVsbCgpIGNvbnN0CkBAIC04Miw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHZvaWQgc2V0QXR0cmlidXRlcyh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBwYWNrKGdldEluZGV4KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmli
dXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgICAgIHBhY2soZ2V0SW5kZXgoKSwgYXR0cmlidXRl
cyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0sIGhhc1RlbXBvcmFsRGVhZFpvbmUo
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdApAQCAtOTAs
MTkgKzk4LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fYml0cyAm
IFJlYWRPbmx5RmxhZzsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgaGFzVGVtcG9yYWxEZWFk
Wm9uZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdHMgJiBIYXNU
ZW1wb3JhbERlYWRab25lRmxhZzsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFJlYWRPbmx5RmxhZyA9IDB4MTsKICAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIERvbnRFbnVtRmxhZyA9IDB4MjsKICAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIE5vdE51bGxGbGFnID0gMHg0OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgRmxhZ0JpdHMgPSAzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSGFzVGVtcG9y
YWxEZWFkWm9uZUZsYWcgPSAweDg7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBGbGFn
Qml0cyA9IDQ7CiAKLSAgICAgICAgdm9pZCBwYWNrKGludCBpbmRleCwgYm9vbCByZWFkT25seSwg
Ym9vbCBkb250RW51bSkKKyAgICAgICAgdm9pZCBwYWNrKGludCBpbmRleCwgYm9vbCByZWFkT25s
eSwgYm9vbCBkb250RW51bSwgYm9vbCBoYXNUZW1wb3JhbERlYWRab25lKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtX2JpdHMgPSAoaW5kZXggPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWc7CiAg
ICAgICAgICAgICBpZiAocmVhZE9ubHkpCiAgICAgICAgICAgICAgICAgbV9iaXRzIHw9IFJlYWRP
bmx5RmxhZzsKICAgICAgICAgICAgIGlmIChkb250RW51bSkKICAgICAgICAgICAgICAgICBtX2Jp
dHMgfD0gRG9udEVudW1GbGFnOworICAgICAgICAgICAgaWYgKGhhc1RlbXBvcmFsRGVhZFpvbmUp
CisgICAgICAgICAgICAgICAgbV9iaXRzIHw9IEhhc1RlbXBvcmFsRGVhZFpvbmVGbGFnOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGlzVmFsaWRJbmRleChpbnQgaW5kZXgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133014</attachid>
            <date>2012-03-21 05:08:55 -0700</date>
            <delta_ts>2012-03-26 07:00:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20120321130853.patch</filename>
            <type>text/plain</type>
            <size>93609</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
OTgzMjYwZGE1ZTBlZjMwMzg0MjlkMGQyMjMxZWY4YmVjYmU2ZjI1Li5lMzE3OTk1M2MwMDU3Njcz
MjEwOTRmZDM1M2VmNDcxY2NjZWIyYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDcgQEAKKzIwMTEtMDMtMjAgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIE9wdGltaXplIGFjY2VzcyB0byBibG9jay1zY29wZWQgbG9jYWwgdmFyaWFibGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcwOAor
CisgICAgICAgIFRoaXMgY29tbWl0IGNoYW5nZXMgdGhlIGJ5dGVjb21waWxlciB0byB0cmFjayBi
bG9jayBzY29wZSBvYmplY3RzLAorICAgICAgICBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUgcmVzb2x2ZWQKKyAgICAgICAgYXQgY29tcGls
ZS10aW1lIHRvIHJlZ2lzdGVycy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBpcyB0bwor
ICAgICAgICByZS11c2UgSlNTdGF0aWNTY29wZSwgYWRkaW5nIGxhenkgdGVhci1vZmYgYW5kIHRo
ZSBhYmlsaXR5IHRvIGJpbmQKKyAgICAgICAgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KKworICAg
ICAgICBDdXJyZW50bHksIGluIEVTNSwgb25seSBjYXRjaCBibG9ja3MgZnVuY3Rpb24gYXMgYmxv
Y2sgc2NvcGVzLCBmb3IKKyAgICAgICAgdGhlaXIgZXhjZXB0aW9uIGlkZW50aWZpZXIuICAoTmFt
ZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYWxzbworICAgICAgICBpbnRyb2R1Y2UgYSBraW5kIG9m
IGJsb2NrIHNjb3BlLCBidXQgc2luY2UgdGhleSBhcmUgZXhwcmVzc2lvbnMKKyAgICAgICAgYW5k
IG5vdCBzdGF0ZW1lbnRzIHRoZSBjb21waWxlciBpcyBub3QgYXMgaW52b2x2ZWQuKQorCisgICAg
ICAgIEdpdmVuIHRoYXQgY2F0Y2ggYmxvY2tzIGFyZSBub3QgdmVyeSBjb21tb24gaW4gSlMsIGFu
ZCB0aGV5IGNhbgorICAgICAgICBvbmx5IGJpbmQgb25lIHZhcmlhYmxlLCB0aGlzIHBhdGNoIGlz
IG1vcmUgYSBwcm9vZiBvZiBjb3JyZWN0bmVzcworICAgICAgICBhbmQgYSBiYXNlIGZvciBhIHN1
YnNlcXVlbnQgYmxvY2sgc2NvcGluZyBwYXRjaCB0aGFuIGEgZ2VuZXJhbAorICAgICAgICBvcHRp
bWl6YXRpb24uICBBcyBzdWNoLCBpbiBhbnRpY2lwYXRpb24gb2YgRVM2IGJsb2NrLXNjb3BlZAor
ICAgICAgICBsb2NhbHMsIHRoaXMgcGF0Y2ggYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHJlYWQgYmFy
cmllcnMgb24KKyAgICAgICAgYmxvY2stc2NvcGVkIGxvY2FscywgdG8gaW1wbGVtZW50IHRoZSB0
ZW1wb3JhbCBkZWFkIHpvbmUuCisKKyAgICAgICAgVGhlcmUgYXJlIHRocmVlIG5ldyBvcGNvZGVz
OiBvbmUgdG8gYXNzZXJ0IHRoYXQgYSBibG9jay1zY29wZWQKKyAgICAgICAgbG9jYWwgaGFzIGJl
ZW4gaW5pdGlhbGl6ZWQsIGFuZCB0d28gZm9yIGRlYWxpbmcgd2l0aCBsYXppbHkKKyAgICAgICAg
cmVpZmllZCBhbmQgdG9ybi1vZmYgc2NvcGVzLiAgV2hpbGUgd2UncmUgYXQgaXQsIHdlIHJlbW92
ZQorICAgICAgICBqbXBfc2NvcGVzLCBhcyBpdCBjYW4ndCBiZSBpbXBsZW1lbnRlZCBjbGVhcmx5
IGluIHRoZSBwcmVzZW5jZSBvZgorICAgICAgICBsYXppbHktdG9ybi1vZmYgYmxvY2sgc2NvcGVz
LiAgSW5zdGVhZCB0aGUgY29tcGlsZXIgZW1pdHMgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIHVu
d2luZGluZ3MgZGlyZWN0bHkuICBXZSBhbHNvIHJlbW92ZSBwdXNoX25ld19zY29wZSBpbgorICAg
ICAgICBmYXZvciBvZiB0aGUgbW9yZSBnZW5lcmljIGFuZCBlZmZpY2llbnQgbGF6aWx5IHJlaWZp
ZWQgc3RhdGljCisgICAgICAgIHNjb3Blcy4KKworICAgICAgICBXaGVuIGVudGVyaW5nIGEgYmxv
Y2sgc2NvcGUsIHRoZSBjb21waWxlciBhbGxvY2F0ZXMgYSBjb250aWd1b3VzCisgICAgICAgIGJs
b2NrIG9mIHJlZ2lzdGVycyBmb3IgYmxvY2sgc2NvcGVzLiAgQmxvY2sgc2NvcGVzIHRoYXQgbWF5
IGJlCisgICAgICAgIHJlaWZpZWQgKGNhcHR1cmVkIGluIGEgc2NvcGUgY2hhaW4pIGFsc28gb2Nj
dXB5IGFuIGFkZGl0aW9uYWwKKyAgICAgICAgcmVnaXN0ZXIsIGZvciB0aGUgc2NvcGUgb2JqZWN0
IGl0c2VsZi4gIFRoZSBzeW1ib2wgdGFibGVzIGZvciB0aGUKKyAgICAgICAgYmxvY2sgc2NvcGVz
IGNvbWUgZnJvbSAic2NvcGUgdGVtcGxhdGVzIiwgd2hpY2ggbGl2ZSBpbiB0aGUKKyAgICAgICAg
Y29uc3RhbnRzIHNlY3Rpb24uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6Q29udHJvbEZsb3dDb250ZXh0KTogSW4gYWRkaXRpb24gdG8gZmluYWxseSBhbmQgd2l0
aCBibG9ja3MsCisgICAgICAgIHN1cHBvcnQgYmxvY2stc2NvcGUgY29udHJvbCBmbG93IGNvbnRl
eHRzLgorICAgICAgICAoSlNDOjpSZXNvbHZlUmVzdWx0KTogU2VwYXJhdGUgInR5cGUiIChlLmcu
IHJlZ2lzdGVyLCBsZXhpY2FsLAorICAgICAgICBldGMpIGZyb20gImF0dHJpYnV0ZXMiIChlLmcu
IHJlYWQtb25seSkuICBBZGQgdHdvIG5ldyBhdHRyaWJ1dGVzOgorICAgICAgICBCYXJyaWVyQXR0
cmlidXRlLCBpbmRpY2F0aW5nIHRoZSBuZWVkIGZvciBhIFREWiBjaGVjaywgYW5kCisgICAgICAg
IEFyZ3VtZW50c0F0dHJpYnV0ZSwgaW5kaWNhdGluZyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBhY3R1
YWxseSB0aGUKKyAgICAgICAgYXJndW1lbnRzIG9iamVjdC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNjb3BlRGVwdGgpOiBBZGQgbV9ibG9ja1Njb3BlRGVwdGguCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpjYW5PcHRpbWl6ZU5vbkxvY2Fscyk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpzaG91bGRPcHRpbWl6ZUxvY2Fscyk6CisgICAgICAg
IFJlbW92ZSBub3ctdW51c2VkIG1ldGhvZHMuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OndpbGxS
ZXNvbHZlVG9Bcmd1bWVudHMpOiBSZW1vdmUuICBDYWxsZXJzCisgICAgICAgIHVzZSBSZXNvbHZl
UmVzdWx0Ojppc0FyZ3VtZW50cygpLCBwb3NzaWJseSB3aXRoIHRoZSBuZXcKKyAgICAgICAgRG9u
dENyZWF0ZUFyZ3VtZW50c0ZsYWcuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWdpc3RlckZvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKTog
U2VhcmNoIGJsb2NrIHNjb3BlcyBiZWZvcmUKKyAgICAgICAgbG9va2luZyBpbiB0aGUgbG9jYWwg
c3ltYm9sIHRhYmxlIGZvciByZWdpc3RlcnMuICBIYW5kbGUgbGF6eQorICAgICAgICByZWlmaWNh
dGlvbiBvZiAiYXJndW1lbnRzIiBoZXJlLiAgSW5saW5lIGNhbk9wdGltaXplTm9uTG9jYWxzIGFu
ZAorICAgICAgICBzaG91bGRPcHRpbWl6ZUxvY2FscywgYW5kIGZvbGQgc29tZSBjb25zdGFudHMu
ICBTZXQgdGhlCisgICAgICAgIEJhcnJpZXJBdHRyaWJ1dGUgb24gcmVzdWx0cyB0aGF0IG5lZWQg
YSB0ZW1wb3JhbCBkZWFkIHpvbmUuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0R2V0U3RhdGljVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQ
dXRTdGF0aWNWYXIpOiBTaW1wbGlmeSBmb3IgdGhlCisgICAgICAgIHNlcGFyYXRpb24gb2YgUmVz
b2x2ZVJlc3VsdDo6dHlwZSgpIGFuZAorICAgICAgICBSZXNvbHZlUmVzdWx0OjphdHRyaWJ1dGVz
KCkuICBBZGQgcmVhZCBiYXJyaWVycyBpZiBuZWNlc3NhcnkuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkpOgorICAgICAg
ICBSZW1vdmUgbm93LXVudXNlZCBtZXRob2RzLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6cHVzaEJsb2NrU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
cG9wQmxvY2tTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWlmeVNj
b3Blcyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaFNjb3BlKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNvbnRleHQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBTY29wZXMpOiBSZWZhY3RvciB0byBoYW5kbGUg
YmxvY2sKKyAgICAgICAgc2NvcGVzIG9uIHRoZSBDb250cm9sRmxvd0NvbnRleHQgc3RhY2suICBX
aGVuIHB1c2hpbmcgYSBzY29wZSB0aGF0CisgICAgICAgIHJlcXVpcmVzIGEgc2NvcGUgY2hhaW4s
IHJlaWZ5U2NvcGVzIGlzIGNhbGxlZCwgd2hpY2ggZW5zdXJlcyB0aGF0CisgICAgICAgIHRoZSBz
Y29wZSBjaGFpbiBoYXMgYmVlbiBjcmVhdGVkLiAgV2hlbiBjb250cm9sIGxlYXZlcyBhIGJsb2Nr
CisgICAgICAgIHNjb3BlIHdob3NlIHNjb3BlIG1heSBoYXZlIGJlZW4gcmVpZmllZCwgdGVhcl9v
ZmZfc2NvcGUgd2lsbCB0ZWFyCisgICAgICAgIG9mZiB0aG9zZSBsb2NhbHMgZnJvbSB0aGUgc3Rh
Y2sgdG8gdGhlIGhlYXAuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3
RnVuY3Rpb25JbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TmV3RnVuY3Rpb25FeHByZXNzaW9uKTogQ2FsbAorICAgICAgICByZWlmeVNjb3BlcyBpbnN0ZWFk
IG9mIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeS4KKworICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpCcmFja2V0QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29k
ZSk6IEFkYXB0IHRvCisgICAgICAgIHdpbGxSZXNvbHZlVG9Bcmd1bWVudHMgY2hhbmdlLgorICAg
ICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6IEFkYXB0
IHRvCisgICAgICAgIEpTU3RhdGljU2NvcGUgdGFraW5nIGEgSlNHbG9iYWxEYXRhIGluc3RlYWQg
b2YgYW4gRXhlY1N0YXRlLgorICAgICAgICAoSlNDOjpUcnlOb2RlOjplbWl0Qnl0ZWNvZGUpOiBB
ZGFwdCB0byB1c2UgcHVzaEJsb2NrU2NvcGUgYW5kCisgICAgICAgIHBvcEJsb2NrU2NvcGUuCisK
KyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDogQWRkIG5ldyBhc3NlcnRfbGF6eV9yZWdfaW5p
dCwgcmVpZnlfc2NvcGUsCisgICAgICAgIGFuZCB0ZWFyX29mZl9zY29wZSBvcGNvZGVzLiBSZW1v
dmUgcHVzaF9uZXdfc2NvcGUgYW5kIGptcF9zY29wZXMuCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcCAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZWlmeV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90ZWFyX29mZl9zY29wZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZWlmeV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90ZWFyX29mZl9zY29wZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5j
cHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206
CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOiBVcGRhdGUgd2l0aCBzdXBw
b3J0IGZvciB0aGUgbmV3CisgICAgICAgIG9wY29kZXMuICBUaGUgTExJbnQgYml0cyBhcmUgdW50
ZXN0ZWQuCisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U2NvcGVO
b2RlOjpuZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcyk6CisgICAgICAgICogcGFy
c2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpTY29wZTo6bmVlZHNGdWxsQWN0aXZhdGlvbik6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6Om5lZWRzQWN0aXZhdGlvbik6ICJDYXRjaCIgY2xhdXNlcyBubworICAgICAgICBs
b25nZXIgZm9yY2UgdGhlaXIgZnVuY3Rpb25zIHRvIGhhdmUgYWN0aXZhdGlvbnMuCisKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N0
YXRpY1Njb3BlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTU3RhdGljU2NvcGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N0
YXRpY1Njb3BlT2JqZWN0OjphZGRWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2Nv
cGVPYmplY3Q6OnJlaWZ5KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6dGVh
ck9mZik6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OkpTU3RhdGljU2NvcGVP
YmplY3QpOiBBZGFwdCB0byBzdXBwb3J0CisgICAgICAgIGxhenkgdGVhci1vZmYsIGFuZCB0aGUg
YWJpbGl0eSB0byBiaW5kIG1vcmUgdGhhbiBvbmUgdmFyaWFibGUuCisKKyAgICAgICAgKiBydW50
aW1lL1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlKToKKyAgICAgICAg
KEpTQzo6U3ltYm9sVGFibGU6Omhhc1RlbXBvcmFsRGVhZFpvbmUpOgorICAgICAgICAoSlNDOjpT
eW1ib2xUYWJsZTo6VGVtcG9yYWxEZWFkWm9uZUtpbmQpOiBTdGVhbCBhbm90aGVyIGJpdCBmcm9t
CisgICAgICAgIHRoZSBlbnRyeSB0byBub3RlIHdoaWNoIHZhcmlhYmxlcyBuZWVkIGEgdGVtcG9y
YWwgZGVhZCB6b25lLgorCiAyMDEyLTAzLTE5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xv
dWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0NhbGxiYWNrRnVuY3Rpb246OnRvU3RyaW5nQ2Fs
bGJhY2svdmFsdWVPZkNhbGxiYWNrIGRvIG5vdCBoYW5kbGUgMCByZXR1cm4gdmFsdWUgZnJvbSBj
b252ZXJ0VG9UeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCmluZGV4IDIwOTcyY2M2M2I1YWZkNGNhOWMxZjg1MjI3ZjNiZmUwMGU2MjVkODQuLmMyYzU4
N2RjNDgzMDFlMDI2MjIxMmMzYzg5NWZiNzZiNTJmYWQ3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0xMjIwLDE3ICsxMjIwLDIxIEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPEluc3RydWN0
aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBwb3Bfc2Nv
cGVcbiIsIGxvY2F0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfcHVzaF9uZXdfc2NvcGU6IHsKKyAgICAgICAgY2FzZSBvcF9hc3NlcnRfbGF6eV9y
ZWdfaW5pdDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBkYXRhTG9nKCJbJTRkXSBhc3NlcnRfbGF6eV9yZWdfaW5pdFx0ICVzXG4iLCBsb2Nh
dGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZWlmeV9zY29wZTogewogICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGRhdGFMb2coIlslNGRdIHB1c2hfbmV3X3Njb3BlIFx0JXMsICVzLCAlc1xuIiwg
bG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lk
ZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCkpOwor
ICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRh
TG9nKCJbJTRkXSByZWlmeV9zY29wZVx0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rl
ck5hbWUoZXhlYywgcjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShleGVjLCByMikuZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3Bfam1wX3Njb3BlczogewotICAgICAgICAgICAgaW50IHNjb3Bl
RGVsdGEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGptcF9zY29wZXNcdF4l
ZCwgJWQoLT4lZClcbiIsIGxvY2F0aW9uLCBzY29wZURlbHRhLCBvZmZzZXQsIGxvY2F0aW9uICsg
b2Zmc2V0KTsKKyAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9zY29wZTogeworICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSB0
ZWFyX29mZl9zY29wZVx0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5k
YXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9j
YXRjaDogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29k
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmluZGV4IDQ1NTk4
Zjg5OTQ4MGZkNTM4N2RmOTQ1ZWIwOWQ2Y2M0ZDY4Y2I3YzYuLmVhMGVjZTQ0YmE4MzM0M2FiNWQ1
MmRlMDM4ZTgyYmJiYTk5OGZkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bj
b2RlLmgKQEAgLTE0OSw3ICsxNDksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFjcm8o
b3Bfam5sZXNzZXEsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfam5ncmVhdGVyLCA0KSBcCiAgICAg
ICAgIG1hY3JvKG9wX2puZ3JlYXRlcmVxLCA0KSBcCi0gICAgICAgIG1hY3JvKG9wX2ptcF9zY29w
ZXMsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcCwgMikgXAogICAgICAgICBtYWNybyhvcF9s
b29wX2lmX3RydWUsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl9mYWxzZSwgMykgXApA
QCAtMTgzLDcgKzE4MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgXAogICAgICAgICBt
YWNybyhvcF9wdXNoX3Njb3BlLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX3BvcF9zY29wZSwgMSkg
XAotICAgICAgICBtYWNybyhvcF9wdXNoX25ld19zY29wZSwgNCkgXAorICAgICAgICBcCisgICAg
ICAgIG1hY3JvKG9wX2Fzc2VydF9sYXp5X3JlZ19pbml0LCAyKSBcCisgICAgICAgIFwKKyAgICAg
ICAgbWFjcm8ob3BfcmVpZnlfc2NvcGUsIDQpIFwKKyAgICAgICAgbWFjcm8ob3BfdGVhcl9vZmZf
c2NvcGUsIDIpIFwKICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9jYXRjaCwgMikgXAogICAg
ICAgICBtYWNybyhvcF90aHJvdywgMikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA0YTZmNDY1M2Vh
Yjg5MmZjNmRhMGRiOTNjYjQ5Y2IxNTcxYTZhZGZiLi42YzBkNzViMmRiYjQ3MTFiNGU0MzY0OTIz
NGY0ZTA5ZTU0MjRlNDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0
aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVP
YmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCkBAIC0xMzMsMTMgKzEzNCwxMCBA
QCB2b2lkIFJlc29sdmVSZXN1bHQ6OmNoZWNrVmFsaWRpdHkoKQogewogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBSZWdpc3RlcjoKLSAgICBjYXNlIFJlYWRPbmx5UmVnaXN0ZXI6CiAg
ICAgICAgIEFTU0VSVChtX2xvY2FsKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGV4aWNh
bDoKLSAgICBjYXNlIFJlYWRPbmx5TGV4aWNhbDoKICAgICBjYXNlIER5bmFtaWNMZXhpY2FsOgot
ICAgIGNhc2UgRHluYW1pY1JlYWRPbmx5TGV4aWNhbDoKICAgICAgICAgQVNTRVJUKG1faW5kZXgg
IT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgR2xv
YmFsOgpAQCAtMTQ3LDkgKzE0NSw3IEBAIHZvaWQgUmVzb2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0
eSgpCiAgICAgICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEluZGV4ZWRHbG9iYWw6Ci0gICAgY2FzZSBSZWFkT25seUluZGV4ZWRHbG9iYWw6CiAg
ICAgY2FzZSBEeW5hbWljSW5kZXhlZEdsb2JhbDoKLSAgICBjYXNlIER5bmFtaWNSZWFkT25seUlu
ZGV4ZWRHbG9iYWw6CiAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJr
ZXIoKSk7CiAgICAgICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTIzOCw2ICsyMzQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
UHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogcwogICAgICwgbV90aGlz
UmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZmluYWxs
eURlcHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURlcHRoKDApCisgICAgLCBtX2Jsb2NrU2Nv
cGVEZXB0aCgwKQogICAgICwgbV9iYXNlU2NvcGVEZXB0aCgwKQogICAgICwgbV9jb2RlVHlwZShH
bG9iYWxDb2RlKQogICAgICwgbV9uZXh0Q29uc3RhbnRPZmZzZXQoMCkKQEAgLTMwOSw2ICszMDYs
NyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9k
ZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWluTgogICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIo
MCkKICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURlcHRoKDAp
CisgICAgLCBtX2Jsb2NrU2NvcGVEZXB0aCgwKQogICAgICwgbV9iYXNlU2NvcGVEZXB0aCgwKQog
ICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNl
dCgwKQpAQCAtNDcwLDYgKzQ2OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihFdmFsTm9kZSogZXZhbE5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoCiAgICAgLCBt
X3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQogICAgICwgbV9m
aW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fYmxv
Y2tTY29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGNvZGVCbG9jay0+YmFzZVNj
b3BlRGVwdGgoKSkKICAgICAsIG1fY29kZVR5cGUoRXZhbENvZGUpCiAgICAgLCBtX25leHRDb25z
dGFudE9mZnNldCgwKQpAQCAtNTM2LDMzICs1MzUsNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGludCBwYXJhbWV0ZXJJbmRl
eAogICAgIG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKIH0KIAotYm9vbCBCeXRlY29kZUdl
bmVyYXRvcjo6d2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
LXsKLSAgICBpZiAoaWRlbnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBz
eW1ib2xUYWJsZSgpLmdldChpZGVudC5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChtX2NvZGVCbG9jay0+dXNlc0Fy
Z3VtZW50cygpICYmIG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjp1bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpCi17Ci0gICAgQVNTRVJU
KHdpbGxSZXNvbHZlVG9Bcmd1bWVudHMocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykpOwotCi0g
ICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMuaW1wbCgpKTsKLSAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAg
ICByZXR1cm4gJnJlZ2lzdGVyRm9yKGVudHJ5LmdldEluZGV4KCkpOwotfQotCiBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0
ZXJJRCogcmVnKQogewogICAgIGlmIChtX2xhc3RMYXp5RnVuY3Rpb24gPD0gcmVnLT5pbmRleCgp
IHx8IHJlZy0+aW5kZXgoKSA8IG1fZmlyc3RMYXp5RnVuY3Rpb24pCkBAIC0xMTU0LDY4ICsxMTI2
LDExOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJ
RCogZHN0LCBKU1ZhbHVlIHYpCiAgICAgcmV0dXJuIGNvbnN0YW50SUQ7CiB9CiAKLVJlc29sdmVS
ZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHkpCitSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5LCB1bnNpZ25lZCByZXNvbHZlRmxhZ3MpCiB7CiAgICAgaWYgKHByb3Bl
cnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIFJl
c29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZSh0aGlzUmVnaXN0ZXIoKSwgUmVzb2x2ZVJlc3Vs
dDo6UmVhZE9ubHlGbGFnKTsKKyAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVy
UmVzb2x2ZSh0aGlzUmVnaXN0ZXIoKSwgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlBdHRyaWJ1dGUp
OworCisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7
CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7CisKKyAg
ICBpbnQgZGVwdGggPSAwOworICAgIGJvb2wgZHluYW1pYyA9IGZhbHNlOworICAgIHVpbnQ4X3Qg
YXR0cmlidXRlcyA9IDA7CisgICAgZm9yIChpbnQgaSA9IHNjb3BlRGVwdGgoKS0xOyBpID49IDA7
IC0taSkgeworICAgICAgICBzd2l0Y2ggKG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uYmxvY2tUeXBl
KSB7CisgICAgICAgIGNhc2UgV2l0aEJsb2NrOgorICAgICAgICAgICAgLy8gSW4gdGhlb3J5IHdl
IHNob3VsZCBiZSBhYmxlIHRvIHNraXAgaW50ZXJ2ZW5pbmcgYmxvY2sgc2NvcGUKKyAgICAgICAg
ICAgIC8vIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIG9mIHRoZSBMYXppbHlSZWlm
eSBvbmVzIGhhdmUKKyAgICAgICAgICAgIC8vIGFjdHVhbGx5IGJlZW4gcmVpZmllZC4gSW5zdGVh
ZCBvZiBmb3JjaW5nIGVhZ2VyIHJlaWZpY2F0aW9uLAorICAgICAgICAgICAgLy8gd2UnbGwgcGVz
c2ltaXplICJ3aXRoIiByZXNvbHV0aW9uLCBmb3JjaW5nIGl0IHRvIHN0YXJ0IGZyb20gdGhlCisg
ICAgICAgICAgICAvLyB0b3Agb2YgdGhlIHNjb3BlIGNoYWluLgorICAgICAgICAgICAgcmV0dXJu
IFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKDApOworICAgICAgICBjYXNlIEZpbmFsbHlC
bG9jazoKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIFNjb3BlQmxvY2s6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRTY29w
ZSA9IGl0ZXItPmdldCgpOworICAgICAgICBBU1NFUlQoY3VycmVudFNjb3BlLT5pc1N0YXRpY1Nj
b3BlT2JqZWN0KCkpOworICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjdXJyZW50U3RhdGlj
U2NvcGVPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY3VycmVudFNj
b3BlKTsKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1cnJlbnRTdGF0aWNTY29w
ZU9iamVjdC0+c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKKworICAgICAgICAv
LyBCbG9jay1zY29wZWQgcHJvcGVydHkuCisgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gbV9zY29wZUNvbnRleHRTdGFja1tpXS5z
Y29wZUNvbnRleHQuYmFzZVJlZ2lzdGVyICsgZW50cnkuZ2V0SW5kZXgoKTsKKyAgICAgICAgICAg
IGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpCisgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBS
ZXNvbHZlUmVzdWx0OjpSZWFkT25seUF0dHJpYnV0ZTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5o
YXNUZW1wb3JhbERlYWRab25lKCkpCisgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBSZXNv
bHZlUmVzdWx0OjpCYXJyaWVyQXR0cmlidXRlOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVS
ZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZShsb2NhbCwgYXR0cmlidXRlcyk7CisgICAgICAgIH0KKyAg
ICAgICAgKytkZXB0aDsKKyAgICAgICAgKytpdGVyOworICAgIH0KIAogICAgIC8vIENoZWNrIGlm
IHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgYWxsb2NhdGVkIGluIGEgcmVnaXN0ZXIuCi0gICAgaWYg
KG1fY29kZVR5cGUgIT0gR2xvYmFsQ29kZSAmJiBzaG91bGRPcHRpbWl6ZUxvY2FscygpKSB7Cisg
ICAgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogICAgICAg
ICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gcHJv
cGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICBjcmVhdGVBcmd1bWVudHNJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSBlbnRyeS5pc1JlYWRP
bmx5KCkgPyBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcgOiAwOwogICAgICAgICAgICAgUmVn
aXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJG
b3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6
OnJlZ2lzdGVyUmVzb2x2ZShsb2NhbCwgZmxhZ3MpOworICAgICAgICAgICAgaWYgKGVudHJ5Lmlz
UmVhZE9ubHkoKSkKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJlc29sdmVSZXN1bHQ6
OlJlYWRPbmx5QXR0cmlidXRlOworICAgICAgICAgICAgaWYgKGVudHJ5Lmhhc1RlbXBvcmFsRGVh
ZFpvbmUoKSkKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJlc29sdmVSZXN1bHQ6OkJh
cnJpZXJBdHRyaWJ1dGU7CisgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cyAmJiBtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkKKyAgICAgICAgICAgICAg
ICAgICAgJiYgIShyZXNvbHZlRmxhZ3MgJiBCeXRlY29kZUdlbmVyYXRvcjo6RG9udENyZWF0ZUFy
Z3VtZW50c0ZsYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRl
X2FyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCht
X2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6QXJndW1lbnRzQXR0cmli
dXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJl
Z2lzdGVyUmVzb2x2ZShsb2NhbCwgYXR0cmlidXRlcyk7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICAvLyBDYXNlcyB3aGVyZSB3ZSBjYW5ub3Qgc3RhdGljYWxseSBvcHRpbWl6ZSB0aGUgbG9va3Vw
LgotICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzIHx8ICFjYW5P
cHRpbWl6ZU5vbkxvY2FscygpKQotICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1p
Y1Jlc29sdmUoMCk7CisgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVu
dHMKKyAgICAgICAgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZQorICAgICAgICB8fCAobV9jb2Rl
VHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIW1fY29k
ZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkpCisgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0Ojpk
eW5hbWljUmVzb2x2ZShkZXB0aCk7CiAKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IG1f
c2NvcGVDaGFpbi0+YmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gbV9zY29w
ZUNoYWluLT5lbmQoKTsKLSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIHVuc2lnbmVkIGZsYWdz
ID0gMDsKKyAgICBkZXB0aCArPSBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwog
ICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyLCArK2RlcHRoKSB7CiAgICAgICAgIEpTT2Jq
ZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQoKTsKLSAgICAgICAgaWYgKCFjdXJyZW50U2Nv
cGUtPmlzVmFyaWFibGVPYmplY3QoKSkgewotICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2ZVJl
c3VsdDo6RHluYW1pY0ZsYWc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAgICAg
CisgICAgICAgIGlmICghY3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpCisgICAgICAg
ICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoZGVwdGgpOworCiAgICAg
ICAgIEpTVmFyaWFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IHN0YXRpY19jYXN0
PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50U2NvcGUpOwogICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5IGVudHJ5ID0gY3VycmVudFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9w
ZXJ0eS5pbXBsKCkpOwogCiAgICAgICAgIC8vIEZvdW5kIHRoZSBwcm9wZXJ0eQogICAgICAgICBp
ZiAoIWVudHJ5LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgp
KQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZzsK
LSAgICAgICAgICAgIGRlcHRoICs9IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7
CisgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUF0
dHJpYnV0ZTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5oYXNUZW1wb3JhbERlYWRab25lKCkpCisg
ICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBSZXNvbHZlUmVzdWx0OjpCYXJyaWVyQXR0cmli
dXRlOwogICAgICAgICAgICAgaWYgKCsraXRlciA9PSBlbmQpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoZmxhZ3MgJiBSZXNvbHZlUmVzdWx0OjpEeW5hbWljRmxhZykKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNJbmRleGVkR2xvYmFsUmVzb2x2ZShlbnRy
eS5nZXRJbmRleCgpLCBkZXB0aCwgY3VycmVudFNjb3BlLCBmbGFncyk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmluZGV4ZWRHbG9iYWxSZXNvbHZlKGVudHJ5LmdldElu
ZGV4KCksIGN1cnJlbnRTY29wZSwgZmxhZ3MpOworICAgICAgICAgICAgICAgIGlmIChkeW5hbWlj
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY0luZGV4
ZWRHbG9iYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGRlcHRoLCBjdXJyZW50U2NvcGUsIGF0
dHJpYnV0ZXMpOworICAgICAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjppbmRleGVk
R2xvYmFsUmVzb2x2ZShlbnRyeS5nZXRJbmRleCgpLCBjdXJyZW50U2NvcGUsIGF0dHJpYnV0ZXMp
OwogICAgICAgICAgICAgfQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgICAgIGlmIChK
U0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBqc0R5bmFtaWNDYXN0PEpTQWN0aXZhdGlvbio+KGN1
cnJlbnRWYXJpYWJsZU9iamVjdCkpCiAgICAgICAgICAgICAgICAgQVNTRVJUKGFjdGl2YXRpb24t
PmlzVmFsaWRTY29wZWRMb29rdXAoZW50cnkuZ2V0SW5kZXgoKSkpOwogI2VuZGlmCi0gICAgICAg
ICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6bGV4aWNhbFJlc29sdmUoZW50cnkuZ2V0SW5kZXgo
KSwgZGVwdGgsIGZsYWdzKTsKKyAgICAgICAgICAgIHJldHVybiBkeW5hbWljCisgICAgICAgICAg
ICAgICAgPyBSZXNvbHZlUmVzdWx0OjpkeW5hbWljTGV4aWNhbFJlc29sdmUoZW50cnkuZ2V0SW5k
ZXgoKSwgZGVwdGgsIGF0dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgOiBSZXNvbHZlUmVzdWx0
OjpsZXhpY2FsUmVzb2x2ZShlbnRyeS5nZXRJbmRleCgpLCBkZXB0aCwgYXR0cmlidXRlcyk7CiAg
ICAgICAgIH0KICAgICAgICAgYm9vbCBzY29wZVJlcXVpcmVzRHluYW1pY0NoZWNrcyA9IGZhbHNl
OwogICAgICAgICBpZiAoY3VycmVudFZhcmlhYmxlT2JqZWN0LT5pc0R5bmFtaWNTY29wZShzY29w
ZVJlcXVpcmVzRHluYW1pY0NoZWNrcykpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYg
KHNjb3BlUmVxdWlyZXNEeW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2
ZVJlc3VsdDo6RHluYW1pY0ZsYWc7CisgICAgICAgICAgICBkeW5hbWljID0gdHJ1ZTsKICAgICB9
CiAKICAgICAvLyBDYW4ndCBsb2NhdGUgdGhlIHByb3BlcnR5IGJ1dCB3ZSdyZSBhYmxlIHRvIGF2
b2lkIGEgZmV3IGxvb2t1cHMuCiAgICAgSlNPYmplY3QqIHNjb3BlID0gaXRlci0+Z2V0KCk7Ci0g
ICAgZGVwdGggKz0gbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKICAgICBpZiAo
KytpdGVyID09IGVuZCkgewotICAgICAgICBpZiAoKGZsYWdzICYgUmVzb2x2ZVJlc3VsdDo6RHlu
YW1pY0ZsYWcpICYmIGRlcHRoKQorICAgICAgICBpZiAoZHluYW1pYyAmJiBkZXB0aCkKICAgICAg
ICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5hbWljR2xvYmFsUmVzb2x2ZShkZXB0aCwg
c2NvcGUpOwogICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6Z2xvYmFsUmVzb2x2ZShzY29w
ZSk7CiAgICAgfQpAQCAtMTIyOCw5ICsxMjUwLDkgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdl
bmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKICAg
ICBpZiAobV9jb2RlVHlwZSAhPSBFdmFsQ29kZSAmJiBtX2NvZGVUeXBlICE9IEdsb2JhbENvZGUp
IHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHBy
b3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGZsYWdzID0gZW50cnkuaXNSZWFkT25seSgpID8gUmVzb2x2ZVJlc3VsdDo6
UmVhZE9ubHlGbGFnIDogMDsKKyAgICAgICAgICAgIHVpbnQ4X3QgYXR0cmlidXRlcyA9IGVudHJ5
LmlzUmVhZE9ubHkoKSA/IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5QXR0cmlidXRlIDogMDsKICAg
ICAgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3Nh
cnkoJnJlZ2lzdGVyRm9yKGVudHJ5LmdldEluZGV4KCkpKTsKLSAgICAgICAgICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0OjpyZWdpc3RlclJlc29sdmUobG9jYWwsIGZsYWdzKTsKKyAgICAgICAgICAg
IHJldHVybiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclJlc29sdmUobG9jYWwsIGF0dHJpYnV0ZXMp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNDI4LDIyICsxNDUwLDI3IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKFJlZ2lzdGVySUQqIGRzdCwgY29u
c3QgUmVzb2x2ZVJlCiAKICAgICBzd2l0Y2ggKHJlc29sdmVSZXN1bHQudHlwZSgpKSB7CiAgICAg
Y2FzZSBSZXNvbHZlUmVzdWx0OjpSZWdpc3RlcjoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJl
YWRPbmx5UmVnaXN0ZXI6CisgICAgICAgIGlmIChyZXNvbHZlUmVzdWx0Lm5lZWRzQmFycmllcigp
KSB7CisgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2Fzc2VydF9sYXp5X3JlZ19pbml0KTsKKyAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmxvY2FsKCktPmlu
ZGV4KCkpOworICAgICAgICB9CiAgICAgICAgIGlmIChkc3QgPT0gaWdub3JlZFJlc3VsdCgpKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgcmVzb2x2ZVJlc3VsdC5sb2NhbCgpKTsKIAogICAgIGNhc2UgUmVzb2x2ZVJl
c3VsdDo6TGV4aWNhbDoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5TGV4aWNhbDoK
ICAgICAgICAgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfc2NvcGVkX3Zhcik7
CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQuZGVwdGgoKSk7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKKyAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQubmVl
ZHNCYXJyaWVyKCkpIHsKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfYXNzZXJ0X2xhenlfcmVn
X2luaXQpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRzdDsKIAogICAgIGNhc2UgUmVzb2x2ZVJlc3Vs
dDo6SW5kZXhlZEdsb2JhbDoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5SW5kZXhl
ZEdsb2JhbDoKICAgICAgICAgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX3B1dF9nbG9iYWxfdmFy
KSB7CiAgICAgICAgICAgICBpbnQgZHN0SW5kZXg7CiAgICAgICAgICAgICBpbnQgc3JjSW5kZXg7
CkBAIC0xNDY4LDExICsxNDk1LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRQdXRTdGF0aWNWYXIoY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3UKIHsKICAgICBz
d2l0Y2ggKHJlc29sdmVSZXN1bHQudHlwZSgpKSB7CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpS
ZWdpc3RlcjoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5UmVnaXN0ZXI6CiAgICAg
ICAgIHJldHVybiBtb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKHJlc29sdmVSZXN1bHQubG9jYWwo
KSwgdmFsdWUpOwogCiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpMZXhpY2FsOgotICAgIGNhc2Ug
UmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlMZXhpY2FsOgogICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1
dF9zY29wZWRfdmFyKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1
bHQuaW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0
LmRlcHRoKCkpOwpAQCAtMTQ4MCw3ICsxNTA1LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIoY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3UK
ICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpJbmRleGVk
R2xvYmFsOgotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlJbmRleGVkR2xvYmFsOgog
ICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9nbG9iYWxfdmFyKTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQuaW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CkBAIC0xNzI2LDcgKzE3NTAsNyBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBk
c3QsIEZ1bmN0aW9uQm9keQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
d0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBk
b051bGxDaGVjaykKIHsKLSAgICBjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBy
ZWlmeVNjb3BlcygpOwogICAgIGVtaXRPcGNvZGUob3BfbmV3X2Z1bmMpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChp
bmRleCk7CkBAIC0xNzQ3LDcgKzE3NzEsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiByMCwgRnVuY0V4cAogICAg
IEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gbi0+Ym9keSgpOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRXhwcihtYWtlRnVuY3Rpb24obV9nbG9iYWxE
YXRhLCBmdW5jdGlvbikpOwogICAgIAotICAgIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgp
OworICAgIHJlaWZ5U2NvcGVzKCk7CiAgICAgZW1pdE9wY29kZShvcF9uZXdfZnVuY19leHApOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyMC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGluZGV4KTsKQEAgLTE3NTksMzQgKzE3ODMsNiBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5j
LCBDYWxsQQogICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsLCBkc3QsIGZ1bmMsIGNhbGxBcmd1
bWVudHMsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIH0KIAotdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6Y3JlYXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX2Nv
ZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICgh
bV9jb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
SWYgd2UncmUgaW4gc3RyaWN0IG1vZGUgd2UgdGVhciBvZmYgdGhlIGFyZ3VtZW50cyBvbiBmdW5j
dGlvbgotICAgIC8vIGVudHJ5LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgaWYgd2UgbmVl
ZCB0byBjcmVhdGUgdGhlbQotICAgIC8vIG5vdwotICAgIGlmIChtX2NvZGVCbG9jay0+aXNTdHJp
Y3RNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2Fy
Z3VtZW50cyk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5hcmd1bWVu
dHNSZWdpc3RlcigpKTsKLX0KLQotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZh
dGlvbklmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAobV9oYXNDcmVhdGVkQWN0aXZhdGlvbikKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4o
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FjdGl2YXRpb24p
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FjdGl2YXRpb25SZWdpc3Rlci0+aW5kZXgo
KSk7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbEV2YWwoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1l
bnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCkKIHsKICAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1bmMsIGNh
bGxBcmd1bWVudHMsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKQEAgLTE5NjksOSAr
MTk2NSwxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9QcmltaXRpdmUoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKQogeworICAgIHJlaWZ5U2NvcGVz
KCk7CiAgICAgQVNTRVJUKHNjb3BlLT5pc1RlbXBvcmFyeSgpKTsKICAgICBDb250cm9sRmxvd0Nv
bnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0LmlzRmluYWxseUJsb2NrID0gZmFsc2U7CisgICAg
Y29udGV4dC5ibG9ja1R5cGUgPSBXaXRoQmxvY2s7CiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5h
cHBlbmQoY29udGV4dCk7CiAgICAgbV9keW5hbWljU2NvcGVEZXB0aCsrOwogCkBAIC0xOTgxLDcg
KzE5NzgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hTY29wZShS
ZWdpc3RlcklEKiBzY29wZSkKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSgp
CiB7CiAgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKLSAgICBBU1NFUlQo
IW1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmlzRmluYWxseUJsb2NrKTsKKyAgICBBU1NFUlQo
bV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkuYmxvY2tUeXBlID09IFdpdGhCbG9jayk7CiAKICAg
ICBlbWl0T3Bjb2RlKG9wX3BvcF9zY29wZSk7CiAKQEAgLTIwMDcsNyArMjAwNCw3IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQgZGVidWdIb29rSUQs
IGludCBmaXJzdExpbmUsIGluCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNv
bnRleHQoTGFiZWwqIHRhcmdldCwgUmVnaXN0ZXJJRCogcmV0QWRkckRzdCkKIHsKICAgICBDb250
cm9sRmxvd0NvbnRleHQgc2NvcGU7Ci0gICAgc2NvcGUuaXNGaW5hbGx5QmxvY2sgPSB0cnVlOwor
ICAgIHNjb3BlLmJsb2NrVHlwZSA9IEZpbmFsbHlCbG9jazsKICAgICBGaW5hbGx5Q29udGV4dCBj
b250ZXh0ID0geyB0YXJnZXQsIHJldEFkZHJEc3QgfTsKICAgICBzY29wZS5maW5hbGx5Q29udGV4
dCA9IGNvbnRleHQ7CiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5hcHBlbmQoc2NvcGUpOwpAQCAt
MjAxNyw3ICsyMDE0LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZpbmFsbHlDb250
ZXh0KExhYmVsKiB0YXJnZXQsIFJlZ2lzdGVySUQqIHJldEFkZHJEc3QKIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OnBvcEZpbmFsbHlDb250ZXh0KCkKIHsKICAgICBBU1NFUlQobV9zY29wZUNvbnRl
eHRTdGFjay5zaXplKCkpOwotICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5p
c0ZpbmFsbHlCbG9jayk7CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmJs
b2NrVHlwZSA9PSBGaW5hbGx5QmxvY2spOwogICAgIEFTU0VSVChtX2ZpbmFsbHlEZXB0aCA+IDAp
OwogICAgIG1fc2NvcGVDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgIG1fZmluYWxseURl
cHRoLS07CkBAIC0yMTAwLDcwICsyMDk3LDYgQEAgTGFiZWxTY29wZSogQnl0ZWNvZGVHZW5lcmF0
b3I6OmNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImIG5hbWUpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleEp1
bXBTY29wZXMoTGFiZWwqIHRhcmdldCwgQ29udHJvbEZsb3dDb250ZXh0KiB0b3BTY29wZSwgQ29u
dHJvbEZsb3dDb250ZXh0KiBib3R0b21TY29wZSkKLXsKLSAgICB3aGlsZSAodG9wU2NvcGUgPiBi
b3R0b21TY29wZSkgewotICAgICAgICAvLyBGaXJzdCB3ZSBjb3VudCB0aGUgbnVtYmVyIG9mIGR5
bmFtaWMgc2NvcGVzIHdlIG5lZWQgdG8gcmVtb3ZlIHRvIGdldAotICAgICAgICAvLyB0byBhIGZp
bmFsbHkgYmxvY2suCi0gICAgICAgIGludCBuTm9ybWFsU2NvcGVzID0gMDsKLSAgICAgICAgd2hp
bGUgKHRvcFNjb3BlID4gYm90dG9tU2NvcGUpIHsKLSAgICAgICAgICAgIGlmICh0b3BTY29wZS0+
aXNGaW5hbGx5QmxvY2spCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICArK25O
b3JtYWxTY29wZXM7Ci0gICAgICAgICAgICAtLXRvcFNjb3BlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG5Ob3JtYWxTY29wZXMpIHsKLSAgICAgICAgICAgIHNpemVfdCBiZWdpbiA9IGluc3Ry
dWN0aW9ucygpLnNpemUoKTsKLQotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgYSBu
dW1iZXIgb2YgZHluYW1pYyBzY29wZXMgdG8gZ2V0IHRvIHRoZSBuZXh0Ci0gICAgICAgICAgICAv
LyBmaW5hbGx5IGJsb2NrCi0gICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2ptcF9zY29wZXMpOwot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG5Ob3JtYWxTY29wZXMpOwotCi0gICAg
ICAgICAgICAvLyBJZiB0b3BTY29wZSA9PSBib3R0b21TY29wZSB0aGVuIHRoZXJlIGlzbid0IGFj
dHVhbGx5IGEgZmluYWxseSBibG9jawotICAgICAgICAgICAgLy8gbGVmdCB0byBlbWl0LCBzbyBt
YWtlIHRoZSBqbXBfc2NvcGVzIGp1bXAgZGlyZWN0bHkgdG8gdGhlIHRhcmdldCBsYWJlbAotICAg
ICAgICAgICAgaWYgKHRvcFNjb3BlID09IGJvdHRvbVNjb3BlKSB7Ci0gICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGp1c3QgdXNlIGptcF9zY29wZXMgdG8gcG9w
IGEgZ3JvdXAgb2Ygc2NvcGVzIGFuZCBnbwotICAgICAgICAgICAgLy8gdG8gdGhlIG5leHQgaW5z
dHJ1Y3Rpb24KLSAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gbmV4dEluc24gPSBuZXdMYWJlbCgp
OwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG5leHRJbnNuLT5iaW5kKGJlZ2lu
LCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICAgICAgICAgIGVtaXRMYWJlbChuZXh0SW5z
bi5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21T
Y29wZSAmJiB0b3BTY29wZS0+aXNGaW5hbGx5QmxvY2spIHsKLSAgICAgICAgICAgIGVtaXRKdW1w
U3Vicm91dGluZSh0b3BTY29wZS0+ZmluYWxseUNvbnRleHQucmV0QWRkckRzdCwgdG9wU2NvcGUt
PmZpbmFsbHlDb250ZXh0LmZpbmFsbHlBZGRyKTsKLSAgICAgICAgICAgIC0tdG9wU2NvcGU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVtaXRKdW1wKHRhcmdldCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcFNjb3BlcyhMYWJlbCogdGFy
Z2V0LCBpbnQgdGFyZ2V0U2NvcGVEZXB0aCkKLXsKLSAgICBBU1NFUlQoc2NvcGVEZXB0aCgpIC0g
dGFyZ2V0U2NvcGVEZXB0aCA+PSAwKTsKLSAgICBBU1NFUlQodGFyZ2V0LT5pc0ZvcndhcmQoKSk7
Ci0KLSAgICBzaXplX3Qgc2NvcGVEZWx0YSA9IHNjb3BlRGVwdGgoKSAtIHRhcmdldFNjb3BlRGVw
dGg7Ci0gICAgQVNTRVJUKHNjb3BlRGVsdGEgPD0gbV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkp
OwotICAgIGlmICghc2NvcGVEZWx0YSkKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wKHRhcmdldCk7
Ci0KLSAgICBpZiAobV9maW5hbGx5RGVwdGgpCi0gICAgICAgIHJldHVybiBlbWl0Q29tcGxleEp1
bXBTY29wZXModGFyZ2V0LCAmbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCksICZtX3Njb3BlQ29u
dGV4dFN0YWNrLmxhc3QoKSAtIHNjb3BlRGVsdGEpOwotCi0gICAgc2l6ZV90IGJlZ2luID0gaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpOwotCi0gICAgZW1pdE9wY29kZShvcF9qbXBfc2NvcGVzKTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVEZWx0YSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAg
cmV0dXJuIHRhcmdldDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRH
ZXRQcm9wZXJ0eU5hbWVzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0
ZXJJRCogaSwgUmVnaXN0ZXJJRCogc2l6ZSwgTGFiZWwqIGJyZWFrVGFyZ2V0KQogewogICAgIHNp
emVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKQEAgLTIxOTYsMTIgKzIxMjksMTIg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYXRjaChSZWdpc3RlcklEKiB0
YXJnZXRSZWdpc3RlciwgTGFiZWwqIHN0YXIKICAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsK
ICNpZiBFTkFCTEUoSklUKQogI2lmIEVOQUJMRShMTElOVCkKLSAgICBIYW5kbGVySW5mbyBpbmZv
ID0geyBzdGFydC0+YmluZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5z
aXplKCksIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRp
b25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZsbGludF9vcF9jYXRjaCkpKSB9OworICAgIEhhbmRsZXJJ
bmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0
aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsg
bV9iYXNlU2NvcGVEZXB0aCwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRf
b3BfY2F0Y2gpKSkgfTsKICNlbHNlCi0gICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJp
bmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFt
aWNTY29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCwgQ29kZUxvY2F0aW9uTGFiZWwoKSB9Owor
ICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwg
MCksIGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tT
Y29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCwgQ29kZUxvY2F0aW9uTGFiZWwoKSB9OwogI2Vu
ZGlmCiAjZWxzZQotICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBl
bmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0
aCArIG1fYmFzZVNjb3BlRGVwdGggfTsKKyAgICBIYW5kbGVySW5mbyBpbmZvID0geyBzdGFydC0+
YmluZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fZHlu
YW1pY1Njb3BlRGVwdGggKyBtX2Jsb2NrU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGggfTsK
ICNlbmRpZgogCiAgICAgbV9jb2RlQmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRsZXIoaW5mbyk7CkBA
IC0yMjMzLDE3ICsyMTY2LDIwMiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0U3Vicm91
dGluZVJldHVybihSZWdpc3RlcklEKiByZXRBZGRyU3JjKQogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChyZXRBZGRyU3JjLT5pbmRleCgpKTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5LCBSZWdpc3RlcklEKiB2YWx1ZSkKK3N0cnVjdCBSZWlmaWNhdGlvbldvcmtsaXN0SXRlbSB7
CisgICAgUmVnaXN0ZXJJRCogcmVpZmllZFNjb3BlUmVnaXN0ZXI7CisgICAgSlNPYmplY3QqIHNj
b3BlVGVtcGxhdGU7CisgICAgUmVnaXN0ZXJJRCogYmFzZVJlZ2lzdGVyOworfTsKKwordm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cmVpZnlTY29wZXMoKQoreworICAgIFZlY3RvcjxSZWlmaWNhdGlv
bldvcmtsaXN0SXRlbT4gd29ya2xpc3Q7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBt
X3Njb3BlQ2hhaW4tPmJlZ2luKCk7CisgICAgaW50IGk7CisKKyAgICAvLyBGaXJzdCwgd2FsayB0
aGUgc2NvcGUgY2hhaW4gdG8gc2VlIHdoYXQgbWlnaHQgbmVlZCByZWlmaWNhdGlvbi4KKyAgICBm
b3IgKGkgPSBzY29wZURlcHRoKCktMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgc3dpdGNoICht
X3Njb3BlQ29udGV4dFN0YWNrW2ldLmJsb2NrVHlwZSkgeworICAgICAgICBjYXNlIFdpdGhCbG9j
azoKKyAgICAgICAgICAgIC8vIFB1c2hpbmcgYSBgd2l0aCcgYmxvY2sgZm9yY2VzIG91dGVyIHNj
b3BlcyB0byBiZSByZWlmaWVkLCBzbyB3ZQorICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBk
byBzbyBoZXJlLgorICAgICAgICAgICAgZ290byByZWlmeTsKKyAgICAgICAgY2FzZSBGaW5hbGx5
QmxvY2s6CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBTY29wZUJsb2NrOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2Nv
cGUgPSBpdGVyLT5nZXQoKTsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRTY29wZS0+aXNTdGF0aWNT
Y29wZU9iamVjdCgpKTsKKyAgICAgICAgKytpdGVyOworCisgICAgICAgIHN3aXRjaCAobV9zY29w
ZUNvbnRleHRTdGFja1tpXS5zY29wZUNvbnRleHQucmVpZnlNb2RlKSB7CisgICAgICAgIGNhc2Ug
U2NvcGVDb250ZXh0OjpFYWdlcmx5UmVpZnk6CisgICAgICAgICAgICAvLyBMaWtlIGEgYHdpdGgn
IGJsb2NrLCBlbnRlcmluZyBhbiBFYWdlcmx5UmVpZnkgYmxvY2sgZm9yY2VzCisgICAgICAgICAg
ICAvLyByZWlmaWNhdGlvbiwgc28gd2UgbmVlZCBsb29rIG5vIGZhcnRoZXIuCisgICAgICAgICAg
ICBnb3RvIHJlaWZ5OworICAgICAgICBjYXNlIFNjb3BlQ29udGV4dDo6TGF6aWx5UmVpZnk6IHsK
KyAgICAgICAgICAgIFJlaWZpY2F0aW9uV29ya2xpc3RJdGVtIGl0ZW07CisgICAgICAgICAgICBp
dGVtLnJlaWZpZWRTY29wZVJlZ2lzdGVyID0gbV9zY29wZUNvbnRleHRTdGFja1tpXS5zY29wZUNv
bnRleHQubGFzdFJlZ2lzdGVyOworICAgICAgICAgICAgaXRlbS5zY29wZVRlbXBsYXRlID0gY3Vy
cmVudFNjb3BlOworICAgICAgICAgICAgaXRlbS5iYXNlUmVnaXN0ZXIgPSBtX3Njb3BlQ29udGV4
dFN0YWNrW2ldLnNjb3BlQ29udGV4dC5iYXNlUmVnaXN0ZXI7CisgICAgICAgICAgICB3b3JrbGlz
dC5hcHBlbmQoaXRlbSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBjYXNlIFNj
b3BlQ29udGV4dDo6TmV2ZXJSZWlmeToKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKK3JlaWZ5OgorICAgIC8vIElmIHdlIHRyYXZlcnNl
ZCB0aHJvdWdoIHRoZSB3aG9sZSBibG9jayBzY29wZSBjaGFpbiwgcGVyaGFwcyB3ZSBuZWVkIHRv
CisgICAgLy8gcmVpZnkgdGhlIGFjdGl2YXRpb24gZm9yIHRoZSBmdW5jdGlvbi4KKyAgICBpZiAo
aSA8IDAgJiYgIW1faGFzQ3JlYXRlZEFjdGl2YXRpb24gJiYgbV9jb2RlQmxvY2stPm5lZWRzRnVs
bFNjb3BlQ2hhaW4oKSkgeworICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hY3RpdmF0aW9u
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5p
bmRleCgpKTsKKyAgICB9CisKKyAgICB3aGlsZSAod29ya2xpc3Quc2l6ZSgpKSB7CisgICAgICAg
IFJlaWZpY2F0aW9uV29ya2xpc3RJdGVtIGl0ZW0gPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAg
IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogdGVtcGwgPSBlbWl0
TG9hZCgwLCBKU1ZhbHVlKGl0ZW0uc2NvcGVUZW1wbGF0ZSkpOworICAgICAgICBlbWl0T3Bjb2Rl
KG9wX3JlaWZ5X3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGl0ZW0ucmVp
ZmllZFNjb3BlUmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodGVtcGwtPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXRlbS5i
YXNlUmVnaXN0ZXItPmluZGV4KCkpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxMYWJlbD4gQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wU2NvcGVzKExhYmVsKiB0YXJnZXQsIGludCB0YXJnZXRT
Y29wZURlcHRoKQogeworICAgIEFTU0VSVChzY29wZURlcHRoKCkgLSB0YXJnZXRTY29wZURlcHRo
ID49IDApOworICAgIEFTU0VSVCh0YXJnZXQtPmlzRm9yd2FyZCgpKTsKKworICAgIHNpemVfdCBz
Y29wZURlbHRhID0gc2NvcGVEZXB0aCgpIC0gdGFyZ2V0U2NvcGVEZXB0aDsKKyAgICBBU1NFUlQo
c2NvcGVEZWx0YSA8PSBtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7CisKKyAgICB3aGlsZSAo
c2NvcGVEZWx0YS0tKSB7CisgICAgICAgIENvbnRyb2xGbG93Q29udGV4dCogY29udGV4dCA9ICZt
X3Njb3BlQ29udGV4dFN0YWNrW3RhcmdldFNjb3BlRGVwdGggKyBzY29wZURlbHRhXTsKKyAgICAg
ICAgc3dpdGNoIChjb250ZXh0LT5ibG9ja1R5cGUpIHsKKyAgICAgICAgY2FzZSBXaXRoQmxvY2s6
CisgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX3BvcF9zY29wZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGaW5hbGx5QmxvY2s6CisgICAgICAgICAgICBlbWl0SnVtcFN1YnJv
dXRpbmUoY29udGV4dC0+ZmluYWxseUNvbnRleHQucmV0QWRkckRzdCwgY29udGV4dC0+ZmluYWxs
eUNvbnRleHQuZmluYWxseUFkZHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U2NvcGVCbG9jazoKKyAgICAgICAgICAgIHN3aXRjaCAoY29udGV4dC0+c2NvcGVDb250ZXh0LnJl
aWZ5TW9kZSkgeworICAgICAgICAgICAgY2FzZSBTY29wZUNvbnRleHQ6OkVhZ2VybHlSZWlmeToK
KyAgICAgICAgICAgIGNhc2UgU2NvcGVDb250ZXh0OjpMYXppbHlSZWlmeToKKyAgICAgICAgICAg
ICAgICBlbWl0T3Bjb2RlKG9wX3RlYXJfb2ZmX3Njb3BlKTsKKyAgICAgICAgICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC0+c2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rlci0+aW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNjb3BlQ29u
dGV4dDo6TmV2ZXJSZWlmeToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgICAgIGNvbnRleHQtLTsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEp1bXAodGFyZ2V0KTsK
K30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEJsb2NrU2NvcGUoSlNTdGF0aWNTY29w
ZU9iamVjdCAqc2NvcGVUZW1wbGF0ZSwgU2NvcGVDb250ZXh0OjpSZWlmeU1vZGUgcmVpZnlNb2Rl
KQoreworICAgIC8vIFJlc2VydmUgYSBibG9jayBvZiBjb250aWd1b3VzIHJlZ2lzdGVycyBmb3Ig
dGhlIHZhcmlhYmxlcy4gV2UgaG9sZCBhCisgICAgLy8gcmVmZXJlbmNlIG9uIHRoZSBsYXN0IHJl
Z2lzdGVyLCBwcmV2ZW50aW5nIHJlY2xhbWF0aW9uIG9mIGFueSBwcmV2aW91cworICAgIC8vIHJl
Z2lzdGVyLgorICAgIC8vCisgICAgLy8gSW4gdGhlIGZ1dHVyZSB3ZSdsbCBzaHVmZmxlIGFyb3Vu
ZCB0aGUgc3ltYm9sIHRhYmxlIHRvIHB1dCB0aGUgY2FwdHVyZWQKKyAgICAvLyB2YXJpYWJsZXMg
Zmlyc3QsIGFuZCBwb3BCbG9ja1Njb3BlIHdpbGwgcmVtb3ZlIHN5bWJvbCB0YWJsZSBlbnRyaWVz
IGZvcgorICAgIC8vIHVuY2FwdHVyZWQgdmFyaWFibGVzLgorICAgIFJlZ2lzdGVySUQqIGJhc2Ug
PSAwOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsYXN0ID0gMDsKKyAgICBzaXplX3QgbiA9IHNj
b3BlVGVtcGxhdGUtPnN5bWJvbFRhYmxlKCkuc2l6ZSgpOworICAgIEFTU0VSVChuKTsKKyAgICB3
aGlsZSAobi0tKSB7CisgICAgICAgIFJlZ2lzdGVySUQqIG5leHQgPSBuZXdSZWdpc3RlcigpOwor
ICAgICAgICBBU1NFUlQoIWxhc3QgfHwgKG5leHQgPT0gbGFzdC5nZXQoKSArIDEpKTsKKworICAg
ICAgICAvLyBTZXQgdGhlIHJlZ2lzdGVyJ3MgdmFsdWUgdG8gSlNWYWx1ZSgpLCB0aGUgZW1wdHkg
dmFsdWUuIFBlcmhhcHMgd2UKKyAgICAgICAgLy8gc2hvdWxkIGRvIHRoaXMgb25seSBmb3IgQmFy
cmllclJlZ2lzdGVycy4KKyAgICAgICAgZW1pdE9wY29kZShvcF9pbml0X2xhenlfcmVnKTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG5leHQtPmluZGV4KCkpOworCisgICAgICAgIGlm
ICghbGFzdCkKKyAgICAgICAgICAgIGJhc2UgPSBuZXh0OworICAgICAgICBsYXN0ID0gbmV4dDsK
KyAgICB9CisgICAgQVNTRVJUKGxhc3QpOworICAgIAorICAgIC8vIE5vdyBhbGxvY2F0ZSBhIHJl
Z2lzdGVyIGZvciB0aGUgYmxvY2sgc2NvcGUgb2JqZWN0IGl0c2VsZiwgaWYgbmVjZXNzYXJ5Lgor
ICAgIGlmIChyZWlmeU1vZGUgIT0gU2NvcGVDb250ZXh0OjpOZXZlclJlaWZ5KSB7CisgICAgICAg
IFJlZ2lzdGVySUQqIG5leHQgPSBuZXdSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQobmV4dCA9
PSBsYXN0LmdldCgpICsgMSk7CisgICAgICAgIGxhc3QgPSBuZXh0OworICAgIH0KKworICAgIC8v
IEZpbmFsbHkgdXBkYXRlIHRoZSBjb250cm9sIGZsb3cgc3RhY2ssIHB1c2ggdGhlIHRlbXBsYXRl
IG9udG8gdGhlIHNjb3BlCisgICAgLy8gY2hhaW4sIGFuZCByZWlmeSB0aGUgc2NvcGUgaWYgbmVl
ZGVkLgogICAgIENvbnRyb2xGbG93Q29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQuaXNGaW5h
bGx5QmxvY2sgPSBmYWxzZTsKKyAgICBjb250ZXh0LmJsb2NrVHlwZSA9IFNjb3BlQmxvY2s7Cisg
ICAgY29udGV4dC5zY29wZUNvbnRleHQucmVpZnlNb2RlID0gcmVpZnlNb2RlOworICAgIGNvbnRl
eHQuc2NvcGVDb250ZXh0LmJhc2VSZWdpc3RlciA9IGJhc2U7CisgICAgY29udGV4dC5zY29wZUNv
bnRleHQubGFzdFJlZ2lzdGVyID0gbGFzdC5yZWxlYXNlKCkubGVha1JlZigpOworCiAgICAgbV9z
Y29wZUNvbnRleHRTdGFjay5hcHBlbmQoY29udGV4dCk7Ci0gICAgbV9keW5hbWljU2NvcGVEZXB0
aCsrOworICAgIG1fc2NvcGVDaGFpbi5zZXQoKm1fc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgbV9z
Y29wZUNoYWluLT5wdXNoKHNjb3BlVGVtcGxhdGUpKTsKKyAgICBtX2Jsb2NrU2NvcGVEZXB0aCsr
OworCisgICAgLy8gV2UgcmVpZnkgaXQgbGF6aWx5IGlmIHBvc3NpYmxlLgorICAgIHN3aXRjaCAo
cmVpZnlNb2RlKSB7CisgICAgY2FzZSBTY29wZUNvbnRleHQ6OkVhZ2VybHlSZWlmeToKKyAgICAg
ICAgLy8gUmVpZnkgdGhlIHNjb3BlIG5vdy4KKyAgICAgICAgcmVpZnlTY29wZXMoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5OgorICAgICAgICAv
LyBNYXJrIHRoZSBzY29wZSByZWdpc3RlciBhcyB1bnNldCwgc28gbGF0ZXIgY29kZSBjYW4gZGV0
ZWN0IGlmIGl0IHdhcworICAgICAgICAvLyBuZXZlciByZWlmaWVkLgorICAgICAgICBlbWl0T3Bj
b2RlKG9wX2luaXRfbGF6eV9yZWcpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29u
dGV4dC5zY29wZUNvbnRleHQubGFzdFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnk6CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CiAKLSAgICBlbWl0T3Bjb2RlKG9wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFs
dWUtPmluZGV4KCkpOwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wQmxvY2tTY29wZSgpCit7
CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKKyAgICBDb250cm9sRmxv
d0NvbnRleHQgY29udGV4dCA9IG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpOworICAgIEFTU0VS
VChjb250ZXh0LmJsb2NrVHlwZSA9PSBTY29wZUJsb2NrKTsKKworICAgIEFTU0VSVChtX3Njb3Bl
Q2hhaW4tPmJlZ2luKCktPmdldCgpLT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworCisgICAgaWYg
KGNvbnRleHQuc2NvcGVDb250ZXh0LnJlaWZ5TW9kZSAhPSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVp
ZnkpIHsKKyAgICAgICAgZW1pdE9wY29kZShvcF90ZWFyX29mZl9zY29wZSk7CisgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXItPmlu
ZGV4KCkpOworICAgIH0KKworICAgIGNvbnRleHQuc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rlci0+
ZGVyZWYoKTsKKyAgICBjb250ZXh0LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXIgPSAwOworICAg
IAorICAgIG1fYmxvY2tTY29wZURlcHRoLS07CisgICAgbV9zY29wZUNoYWluLnNldCgqbV9zY29w
ZUNoYWluLT5nbG9iYWxEYXRhLCBtX3Njb3BlQ2hhaW4tPnBvcCgpKTsKKyAgICBtX3Njb3BlQ29u
dGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YmVn
aW5Td2l0Y2goUmVnaXN0ZXJJRCogc2NydXRpbmVlUmVnaXN0ZXIsIFN3aXRjaEluZm86OlN3aXRj
aFR5cGUgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCBlN2ZlMjM2ZTViYWYwZjBmYjdlOTJlNDY5OGM1
NmU4NGNjZWY4N2M1Li44NzI2NmZlMjA0OTRhM2ZiMGQ0OTVmYmUxYTQxYzUyZDA3OGE1MDMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNz
IElkZW50aWZpZXI7CiAgICAgY2xhc3MgTGFiZWw7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7
CisgICAgY2xhc3MgSlNTdGF0aWNTY29wZU9iamVjdDsKIAogICAgIGNsYXNzIENhbGxBcmd1bWVu
dHMgewogICAgIHB1YmxpYzoKQEAgLTc1LDkgKzc2LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBSZWdpc3RlcklEKiByZXRBZGRyRHN0OwogICAgIH07CiAKKyAgICBzdHJ1Y3QgU2NvcGVD
b250ZXh0IHsKKyAgICAgICAgZW51bSBSZWlmeU1vZGUgeyBFYWdlcmx5UmVpZnksIExhemlseVJl
aWZ5LCBOZXZlclJlaWZ5IH07CisgICAgICAgIFJlaWZ5TW9kZSByZWlmeU1vZGU7CisgICAgICAg
IFJlZ2lzdGVySUQqIGJhc2VSZWdpc3RlcjsKKyAgICAgICAgUmVnaXN0ZXJJRCogbGFzdFJlZ2lz
dGVyOworICAgIH07CisKKyAgICBlbnVtIEJsb2NrVHlwZSB7IFdpdGhCbG9jaywgRmluYWxseUJs
b2NrLCBTY29wZUJsb2NrIH07CisKICAgICBzdHJ1Y3QgQ29udHJvbEZsb3dDb250ZXh0IHsKLSAg
ICAgICAgYm9vbCBpc0ZpbmFsbHlCbG9jazsKLSAgICAgICAgRmluYWxseUNvbnRleHQgZmluYWxs
eUNvbnRleHQ7CisgICAgICAgIGVudW0gQmxvY2tUeXBlIGJsb2NrVHlwZTsKKyAgICAgICAgdW5p
b24geworICAgICAgICAgICAgRmluYWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CisgICAgICAg
ICAgICBTY29wZUNvbnRleHQgc2NvcGVDb250ZXh0OworICAgICAgICB9OwogICAgIH07CiAKICAg
ICBzdHJ1Y3QgRm9ySW5Db250ZXh0IHsKQEAgLTg5LDcgKzEwMiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgUmVzb2x2ZVJlc3VsdCB7CiAgICAgcHVibGljOgotICAgICAgICBlbnVt
IEZsYWdzIHsKKyAgICAgICAgZW51bSBUeXBlRmxhZ3MgewogICAgICAgICAgICAgLy8gVGhlIHBy
b3BlcnR5IGlzIGxvY2FsbHkgYm91bmQsIGluIGEgcmVnaXN0ZXIuCiAgICAgICAgICAgICBSZWdp
c3RlckZsYWcgPSAweDEsCiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHRyYXZlcnNlIHRoZSBz
Y29wZSBjaGFpbiBhdCBydW50aW1lLCBjaGVja2luZyBmb3IKQEAgLTEwMywyMSArMTE2LDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgSW5kZXhlZEZsYWcgPSAweDgsCiAgICAgICAg
ICAgICAvLyBTa2lwIHNvbWUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNjb3BlIGNoYWluLCBn
aXZlbiBieSAiZGVwdGgiLgogICAgICAgICAgICAgU2NvcGVkRmxhZyA9IDB4MTAsCi0gICAgICAg
ICAgICAvLyBUaGUgcmVzb2x2ZWQgYmluZGluZyBpcyBpbW11dGFibGUuCi0gICAgICAgICAgICBS
ZWFkT25seUZsYWcgPSAweDIwLAogICAgICAgICAgICAgLy8gVGhlIGJhc2Ugb2JqZWN0IGlzIHRo
ZSBnbG9iYWwgb2JqZWN0LgotICAgICAgICAgICAgR2xvYmFsRmxhZyA9IDB4NDAKKyAgICAgICAg
ICAgIEdsb2JhbEZsYWcgPSAweDIwCiAgICAgICAgIH07CisKICAgICAgICAgZW51bSBUeXBlIHsK
ICAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBpcyBsb2NhbCwgYW5kIHN0b3JlZCBpbiBhIHJl
Z2lzdGVyLgogICAgICAgICAgICAgUmVnaXN0ZXIgPSBSZWdpc3RlckZsYWcgfCBTdGF0aWNGbGFn
LAotICAgICAgICAgICAgLy8gQSByZWFkLW9ubHkgbG9jYWwsIGNyZWF0ZWQgYnkgImNvbnN0Ii4K
LSAgICAgICAgICAgIFJlYWRPbmx5UmVnaXN0ZXIgPSBSZWdpc3RlckZsYWcgfCBSZWFkT25seUZs
YWcgfCBTdGF0aWNGbGFnLAogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IGlzIHN0YXRpY2Fs
bHkgc2NvcGVkIGZyZWUgdmFyaWFibGUuIEl0cyBjb29yZGluYXRlcwogICAgICAgICAgICAgLy8g
YXJlIGluICJpbmRleCIgYW5kICJkZXB0aCIuCiAgICAgICAgICAgICBMZXhpY2FsID0gSW5kZXhl
ZEZsYWcgfCBTY29wZWRGbGFnIHwgU3RhdGljRmxhZywKLSAgICAgICAgICAgIC8vIEEgcmVhZC1v
bmx5IExleGljYWwsIGNyZWF0ZWQgYnkgImNvbnN0Ii4KLSAgICAgICAgICAgIFJlYWRPbmx5TGV4
aWNhbCA9IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFJlYWRPbmx5RmxhZyB8IFN0YXRpY0Zs
YWcsCiAgICAgICAgICAgICAvLyBUaGUgcHJvcGVydHkgd2FzIG5vdCBib3VuZCBsZXhpY2FsbHks
IHNvIGF0IHJ1bnRpbWUgd2Ugc2hvdWxkCiAgICAgICAgICAgICAvLyBsb29rIGRpcmVjdGx5IGlu
IHRoZSBnbG9iYWwgb2JqZWN0LgogICAgICAgICAgICAgR2xvYmFsID0gR2xvYmFsRmxhZywKQEAg
LTEyNiw5ICsxMzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIC8vIGJpbmRpbmcg
Y3JlYXRlZCB3aXRoICJ2YXIiIGF0IHRoZSB0b3AgbGV2ZWwuIEF0IHJ1bnRpbWUgd2UnbGwKICAg
ICAgICAgICAgIC8vIGp1c3QgaW5kZXggaW50byB0aGUgZ2xvYmFsIG9iamVjdC4KICAgICAgICAg
ICAgIEluZGV4ZWRHbG9iYWwgPSBJbmRleGVkRmxhZyB8IEdsb2JhbEZsYWcgfCBTdGF0aWNGbGFn
LAotICAgICAgICAgICAgLy8gTGlrZSBJbmRleGVkR2xvYmFsLCBidXQgdGhlIHByb3BlcnR5IGlz
IGFsc28gcmVhZC1vbmx5LCBsaWtlIE5hTiwKLSAgICAgICAgICAgIC8vIEluZmluaXR5LCBvciB1
bmRlZmluZWQuCi0gICAgICAgICAgICBSZWFkT25seUluZGV4ZWRHbG9iYWwgPSBJbmRleGVkRmxh
ZyB8IFJlYWRPbmx5RmxhZyB8IEdsb2JhbEZsYWcgfCBTdGF0aWNGbGFnLAogICAgICAgICAgICAg
Ly8gVGhlIHByb3BlcnR5IGNvdWxkIG5vdCBiZSByZXNvbHZlZCBzdGF0aWNhbGx5LCBkdWUgdG8g
dGhlCiAgICAgICAgICAgICAvLyBwcmVzZW5jZSBvZiBgd2l0aCcgYmxvY2tzLiBBdCBydW50aW1l
IHdlJ2xsIGhhdmUgdG8gd2FsayB0aGUKICAgICAgICAgICAgIC8vIHNjb3BlIGNoYWluLiBTY29w
ZWRGbGFnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0ICJkZXB0aCIgd2lsbApAQCAtMTQxLDUwICsx
NDYsNTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAvLyBjaGVjayBmb3IgdGhlIGFi
c2VuY2Ugb2YgdGhpcyBwcm9wZXJ0eSBpbiB0aG9zZSBpbnRlcnZlbmluZwogICAgICAgICAgICAg
Ly8gc2NvcGVzLgogICAgICAgICAgICAgRHluYW1pY0xleGljYWwgPSBEeW5hbWljRmxhZyB8IElu
ZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZywKLSAgICAgICAgICAgIC8vIExpa2UgUmVhZE9ubHlMZXhp
Y2FsLCBidXQgd2l0aCBpbnRlcnZlbmluZyBub24tc3RyaWN0IGBldmFsJy4KLSAgICAgICAgICAg
IER5bmFtaWNSZWFkT25seUxleGljYWwgPSBEeW5hbWljRmxhZyB8IEluZGV4ZWRGbGFnIHwgU2Nv
cGVkRmxhZyB8IFJlYWRPbmx5RmxhZywKICAgICAgICAgICAgIC8vIExpa2UgR2xvYmFsLCBidXQg
d2l0aCBpbnRlcnZlbmluZyBub24tc3RyaWN0IGBldmFsJy4gQXMgd2l0aCAKICAgICAgICAgICAg
IC8vIER5bmFtaWMsIFNjb3BlRmxhZyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCAiZGVwdGgiIGRv
ZXMgaW5kZWVkCiAgICAgICAgICAgICAvLyBzdG9yZSBhIG51bWJlciBvZiBmcmFtZXMgdG8gc2tp
cCBiZWZvcmUgZG9pbmcgdGhlIGR5bmFtaWMgY2hlY2tzLgogICAgICAgICAgICAgRHluYW1pY0ds
b2JhbCA9IER5bmFtaWNGbGFnIHwgR2xvYmFsRmxhZyB8IFNjb3BlZEZsYWcsCiAgICAgICAgICAg
ICAvLyBMaWtlIEluZGV4ZWRHbG9iYWwsIGJ1dCB3aXRoIGludGVydmVuaW5nIG5vbi1zdHJpY3Qg
YGV2YWwnLgogICAgICAgICAgICAgRHluYW1pY0luZGV4ZWRHbG9iYWwgPSBEeW5hbWljRmxhZyB8
IEluZGV4ZWRGbGFnIHwgR2xvYmFsRmxhZyB8IFNjb3BlZEZsYWcsCi0gICAgICAgICAgICAvLyBM
aWtlIFJlYWRPbmx5SW5kZXhlZEdsb2JhbCwgYnV0IHdpdGggaW50ZXJ2ZW5pbmcgbm9uLXN0cmlj
dAotICAgICAgICAgICAgLy8gYGV2YWwnLgotICAgICAgICAgICAgRHluYW1pY1JlYWRPbmx5SW5k
ZXhlZEdsb2JhbCA9IER5bmFtaWNGbGFnIHwgSW5kZXhlZEZsYWcgfCBSZWFkT25seUZsYWcgfCBH
bG9iYWxGbGFnIHwgU2NvcGVkRmxhZywKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgUmVz
b2x2ZVJlc3VsdCByZWdpc3RlclJlc29sdmUoUmVnaXN0ZXJJRCAqbG9jYWwsIHVuc2lnbmVkIGZs
YWdzKQorICAgICAgICBlbnVtIEF0dHJpYnV0ZXMgeworICAgICAgICAgICAgLy8gVGhlIHJlc29s
dmVkIGJpbmRpbmcgaXMgaW1tdXRhYmxlLgorICAgICAgICAgICAgUmVhZE9ubHlBdHRyaWJ1dGUg
PSAweDEsCisgICAgICAgICAgICAvLyBUaGUgcmVzb2x2ZSBiaW5kaW5nIGlzIGFjdHVhbGx5IHRo
ZSBhcmd1bWVudHMgb2JqZWN0LgorICAgICAgICAgICAgQXJndW1lbnRzQXR0cmlidXRlID0gMHgy
LAorICAgICAgICAgICAgLy8gUmVhZHMgb2YgdGhpcyB2YXJpYWJsZSBuZWVkIGR5bmFtaWMgY2hl
Y2tzIHRvIGVuc3VyZSBpdCBpcyBzZXQuCisgICAgICAgICAgICBCYXJyaWVyQXR0cmlidXRlID0g
MHg0CisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgcmVnaXN0ZXJS
ZXNvbHZlKFJlZ2lzdGVySUQgKmxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChSZWdpc3RlciB8IGZsYWdzLCBsb2Nh
bCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNv
bHZlUmVzdWx0KFJlZ2lzdGVyLCBhdHRyaWJ1dGVzLCBsb2NhbCwgbWlzc2luZ1N5bWJvbE1hcmtl
cigpLCAwLCAwKTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBkeW5h
bWljUmVzb2x2ZShzaXplX3QgZGVwdGgpCisgICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGxl
eGljYWxSZXNvbHZlKGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChEeW5hbWljLCAw
LCBtaXNzaW5nU3ltYm9sTWFya2VyKCksIGRlcHRoLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0KExleGljYWwsIGF0dHJpYnV0ZXMsIDAsIGluZGV4LCBkZXB0aCwgMCk7CiAg
ICAgICAgIH0KLSAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgbGV4aWNhbFJlc29sdmUoaW50
IGluZGV4LCBzaXplX3QgZGVwdGgsIHVuc2lnbmVkIGZsYWdzKQorICAgICAgICBzdGF0aWMgUmVz
b2x2ZVJlc3VsdCBnbG9iYWxSZXNvbHZlKEpTT2JqZWN0ICpnbG9iYWxPYmplY3QpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSAoZmxhZ3MgJiBEeW5hbWljRmxhZykgPyBE
eW5hbWljTGV4aWNhbCA6IExleGljYWw7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3Vs
dCh0eXBlIHwgZmxhZ3MsIDAsIGluZGV4LCBkZXB0aCwgMCk7CisgICAgICAgICAgICByZXR1cm4g
UmVzb2x2ZVJlc3VsdChHbG9iYWwsIDAsIDAsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgMCwgZ2xv
YmFsT2JqZWN0KTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBpbmRl
eGVkR2xvYmFsUmVzb2x2ZShpbnQgaW5kZXgsIEpTT2JqZWN0ICpnbG9iYWxPYmplY3QsIHVuc2ln
bmVkIGZsYWdzKQorICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBpbmRleGVkR2xvYmFsUmVz
b2x2ZShpbnQgaW5kZXgsIEpTT2JqZWN0ICpnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KEluZGV4ZWRH
bG9iYWwgfCBmbGFncywgMCwgaW5kZXgsIDAsIGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBy
ZXR1cm4gUmVzb2x2ZVJlc3VsdChJbmRleGVkR2xvYmFsLCBhdHRyaWJ1dGVzLCAwLCBpbmRleCwg
MCwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3Vs
dCBkeW5hbWljSW5kZXhlZEdsb2JhbFJlc29sdmUoaW50IGluZGV4LCBzaXplX3QgZGVwdGgsIEpT
T2JqZWN0ICpnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGZsYWdzKQorICAgICAgICBzdGF0aWMgUmVz
b2x2ZVJlc3VsdCBkeW5hbWljUmVzb2x2ZShzaXplX3QgZGVwdGgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KER5bmFtaWNJbmRleGVkR2xvYmFsIHwgZmxhZ3Ms
IDAsIGluZGV4LCBkZXB0aCwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBSZXNv
bHZlUmVzdWx0KER5bmFtaWMsIDAsIDAsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgZGVwdGgsIDAp
OwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGdsb2JhbFJlc29sdmUo
SlNPYmplY3QgKmdsb2JhbE9iamVjdCkKKyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHlu
YW1pY0xleGljYWxSZXNvbHZlKGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChHbG9i
YWwsIDAsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgMCwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
ICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KER5bmFtaWNMZXhpY2FsLCBhdHRyaWJ1dGVzLCAwLCBp
bmRleCwgZGVwdGgsIDApOwogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0
IGR5bmFtaWNHbG9iYWxSZXNvbHZlKHNpemVfdCBkeW5hbWljRGVwdGgsIEpTT2JqZWN0ICpnbG9i
YWxPYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KER5
bmFtaWNHbG9iYWwsIDAsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgZHluYW1pY0RlcHRoLCBnbG9i
YWxPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQoRHluYW1pY0dsb2Jh
bCwgMCwgMCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCBkeW5hbWljRGVwdGgsIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHluYW1pY0luZGV4
ZWRHbG9iYWxSZXNvbHZlKGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCBKU09iamVjdCAqZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gUmVzb2x2ZVJlc3VsdChEeW5hbWljSW5kZXhlZEdsb2JhbCwgYXR0cmlidXRlcywgMCwgaW5k
ZXgsIGRlcHRoLCBnbG9iYWxPYmplY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICB1aW50OF90IHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAgICAgdWludDhfdCBhdHRyaWJ1dGVzKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lz
dGVyIGNvcnJlc3BvbmRpbmcgdG8gYSBsb2NhbCB2YXJpYWJsZSwgb3IgMCBpZiBubwogICAgICAg
ICAvLyBzdWNoIHJlZ2lzdGVyIGV4aXN0cy4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5IFJlc29sdmVS
ZXN1bHQ6OmxvY2FsKCkgZG8KICAgICAgICAgLy8gbm90IHJlcXVpcmUgZXhwbGljaXQgcmVmZXJl
bmNlIGNvdW50aW5nLgpAQCAtMTk4LDEyICsyMTEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBTdGF0aWNGbGFnOyB9
CiAgICAgICAgIGJvb2wgaXNJbmRleGVkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgSW5kZXhl
ZEZsYWc7IH0KICAgICAgICAgYm9vbCBpc1Njb3BlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAm
IFNjb3BlZEZsYWc7IH0KLSAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4g
KG1fdHlwZSAmIFJlYWRPbmx5RmxhZykgJiYgIWlzRHluYW1pYygpOyB9CiAgICAgICAgIGJvb2wg
aXNHbG9iYWwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBHbG9iYWxGbGFnOyB9CiAKKyAgICAg
ICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gKG1fYXR0cmlidXRlcyAmIFJlYWRP
bmx5QXR0cmlidXRlKSAmJiAhaXNEeW5hbWljKCk7IH0KKyAgICAgICAgYm9vbCBpc0FyZ3VtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcyAmIEFyZ3VtZW50c0F0dHJpYnV0ZTsgfQor
ICAgICAgICBib29sIG5lZWRzQmFycmllcigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcyAm
IEJhcnJpZXJBdHRyaWJ1dGU7IH0KKwogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlc29sdmVSZXN1
bHQodW5zaWduZWQgdHlwZSwgUmVnaXN0ZXJJRCogbG9jYWwsIGludCBpbmRleCwgc2l6ZV90IGRl
cHRoLCBKU09iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgICAgICBSZXNvbHZlUmVzdWx0KHVpbnQ4
X3QgdHlwZSwgdWludDhfdCBhdHRyaWJ1dGVzLCBSZWdpc3RlcklEKiBsb2NhbCwgaW50IGluZGV4
LCBzaXplX3QgZGVwdGgsIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgICAgICA6IG1f
dHlwZSh0eXBlKQorICAgICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICAg
ICAgICAgICwgbV9pbmRleChpbmRleCkKICAgICAgICAgICAgICwgbV9sb2NhbChsb2NhbCkKICAg
ICAgICAgICAgICwgbV9kZXB0aChkZXB0aCkKQEAgLTIxOCw3ICsyMzUsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBjaGVja1ZhbGlkaXR5KCk7CiAjZW5kaWYKIAotICAgICAgICB1
bnNpZ25lZCBtX3R5cGU7CisgICAgICAgIHVpbnQ4X3QgbV90eXBlOworICAgICAgICB1aW50OF90
IG1fYXR0cmlidXRlczsKICAgICAgICAgaW50IG1faW5kZXg7IC8vIEluZGV4IGluIHNjb3BlLCBp
ZiBJbmRleGVkRmxhZyBpcyBzZXQKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sb2NhbDsgLy8gTG9j
YWwgcmVnaXN0ZXIsIGlmIFJlZ2lzdGVyRmxhZyBpcyBzZXQKICAgICAgICAgc2l6ZV90IG1fZGVw
dGg7IC8vIERlcHRoIGluIHNjb3BlIGNoYWluLCBpZiBTY29wZWRGbGFnIGlzIHNldApAQCAtMjUx
LDExICsyNjksMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBzZXRJc051bWVy
aWNDb21wYXJlRnVuY3Rpb24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24pOwogCi0gICAg
ICAgIGJvb2wgd2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJik7Ci0gICAg
ICAgIFJlZ2lzdGVySUQqIHVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCk7CisgICAgICAg
IGVudW0gUmVzb2x2ZUZsYWdzIHsKKyAgICAgICAgICAgIERvbnRDcmVhdGVBcmd1bWVudHNGbGFn
ID0gMSA8PCAwCisgICAgICAgIH07CiAKICAgICAgICAgLy8gUmVzb2x2ZSBhbiBpZGVudGlmaWVy
LCBnaXZlbiB0aGUgY3VycmVudCBjb21waWxlLXRpbWUgc2NvcGUgY2hhaW4uCi0gICAgICAgIFJl
c29sdmVSZXN1bHQgcmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIFJlc29sdmVS
ZXN1bHQgcmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiwgdW5zaWduZWQgcmVzb2x2ZUZsYWdzID0g
MCk7CiAgICAgICAgIC8vIEJlaGF2ZXMgYXMgcmVzb2x2ZSBkb2VzLCBidXQgaWdub3JlcyBkeW5h
bWljIHNjb3BlIGFzCiAgICAgICAgIC8vIGR5bmFtaWMgc2NvcGUgc2hvdWxkIG5vdCBpbnRlcmZl
cmUgd2l0aCBjb25zdCBpbml0aWFsaXNhdGlvbgogICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29s
dmVDb25zdERlY2woY29uc3QgSWRlbnRpZmllciYpOwpAQCAtNDk0LDE0ICs1MTMsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25z
dCBVU3RyaW5nJiBtZXNzYWdlKTsKIAotICAgICAgICB2b2lkIGVtaXRQdXNoTmV3U2NvcGUoUmVn
aXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFs
dWUpOworICAgICAgICB2b2lkIHJlaWZ5U2NvcGVzKCk7CisgICAgICAgIHZvaWQgcHVzaEJsb2Nr
U2NvcGUoSlNTdGF0aWNTY29wZU9iamVjdCosIFNjb3BlQ29udGV4dDo6UmVpZnlNb2RlKTsKKyAg
ICAgICAgdm9pZCBwb3BCbG9ja1Njb3BlKCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1
c2hTY29wZShSZWdpc3RlcklEKiBzY29wZSk7CiAgICAgICAgIHZvaWQgZW1pdFBvcFNjb3BlKCk7
CiAKICAgICAgICAgdm9pZCBlbWl0RGVidWdIb29rKERlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5l
LCBpbnQgbGFzdExpbmUpOwogCi0gICAgICAgIGludCBzY29wZURlcHRoKCkgeyByZXR1cm4gbV9k
eW5hbWljU2NvcGVEZXB0aCArIG1fZmluYWxseURlcHRoOyB9CisgICAgICAgIGludCBzY29wZURl
cHRoKCkgeyByZXR1cm4gbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsg
bV9maW5hbGx5RGVwdGg7IH0KICAgICAgICAgYm9vbCBoYXNGaW5hbGlzZXIoKSB7IHJldHVybiBt
X2ZpbmFsbHlEZXB0aCAhPSAwOyB9CiAKICAgICAgICAgdm9pZCBwdXNoRmluYWxseUNvbnRleHQo
TGFiZWwqIHRhcmdldCwgUmVnaXN0ZXJJRCogcmV0dXJuQWRkckRzdCk7CkBAIC01NDIsOCArNTYz
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRC
aW5hcnlPcCgpOwogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3aW5kVW5hcnlPcCgpOwog
Ci0gICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbCog
dGFyZ2V0LCBDb250cm9sRmxvd0NvbnRleHQqIHRvcFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQq
IGJvdHRvbVNjb3BlKTsKLQogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91YmxlLCBKU1ZhbHVl
PiBOdW1iZXJNYXA7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgSlNTdHJp
bmcqLCBJZGVudGlmaWVyUmVwSGFzaD4gSWRlbnRpZmllclN0cmluZ01hcDsKICAgICAgICAgCkBA
IC02MTcsMzUgKzYzNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SW5zdHJ1
Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQogICAgICAg
ICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQog
Ci0gICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemVMb2NhbHMoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobV9keW5hbWljU2NvcGVEZXB0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5PcHRpbWl6ZU5vbkxvY2FscygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtX2R5bmFtaWNTY29wZURlcHRoKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1fY29kZVR5cGUgPT0gRXZhbENvZGUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAobV9jb2RlVHlw
ZSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0
aW9uKCk7CiAKLSAgICAgICAgdm9pZCBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwotICAg
ICAgICB2b2lkIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3Rl
cklEKiBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKik7CiAgICAgICAg
IAogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwpAQCAtNjc0LDYg
KzY2Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9s
YXN0VmFyOwogICAgICAgICBpbnQgbV9maW5hbGx5RGVwdGg7CiAgICAgICAgIGludCBtX2R5bmFt
aWNTY29wZURlcHRoOworICAgICAgICBpbnQgbV9ibG9ja1Njb3BlRGVwdGg7CiAgICAgICAgIGlu
dCBtX2Jhc2VTY29wZURlcHRoOwogICAgICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
aW5kZXggYmI5NWNhZmI2ODI2M2E5YmY1MTBhYTRlNDIyN2Y1ZWE0M2EzZWU5OC4uNTQyYjYyNzAy
YmVjYTJmZDczMDIzNDIzZDBkOTdkNTgyNTc2MTYyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMzE4LDEwICszMTgs
MTMgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKIAogUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vz
c29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKLSAgICBpZiAobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkgJiYgZ2VuZXJh
dG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jh
c2UpLT5pZGVudGlmaWVyKCkpKSB7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7ICAgIAotICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRBcmd1bWVudEJ5VmFsKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50
cygpLCBwcm9wZXJ0eSk7CisgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKSB7CisgICAg
ICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IGdlbmVyYXRvci5yZXNvbHZlKHN0YXRp
Y19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpLCBCeXRlY29kZUdlbmVy
YXRvcjo6RG9udENyZWF0ZUFyZ3VtZW50c0ZsYWcpOworICAgICAgICBpZiAocmVzb2x2ZVJlc3Vs
dC5pc0FyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50QnlWYWwoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3VsdC5sb2NhbCgpLCBwcm9wZXJ0eSk7
CisgICAgICAgIH0KICAgICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdu
bWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CkBAIC0zMzQsMTcgKzMzNywx
NCBAQCBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaQogCiBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7Ci0gICAgaWYgKG1faWRlbnQgPT0gZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpIHsKLSAgICAgICAgaWYgKCFtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSkKLSAgICAgICAg
ICAgIGdvdG8gbm9uQXJndW1lbnRzUGF0aDsKLSAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmVO
b2RlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpOwotICAgICAgICBpZiAoIWdl
bmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHJlc29sdmVOb2RlLT5pZGVudGlmaWVyKCkp
KQotICAgICAgICAgICAgZ290byBub25Bcmd1bWVudHNQYXRoOwotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsg
ICAgCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50c0xlbmd0aChnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBnZW5lcmF0b3IudW5jaGVja2VkUmVnaXN0ZXJG
b3JBcmd1bWVudHMoKSk7CisgICAgaWYgKG1faWRlbnQgPT0gZ2VuZXJhdG9yLnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGggJiYgbV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAgUmVzb2x2
ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCksIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250
Q3JlYXRlQXJndW1lbnRzRmxhZyk7CisgICAgICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzQXJndW1l
bnRzKCkpIHsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOyAgICAKKyAgICAgICAgICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50c0xlbmd0aChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCByZXNvbHZlUmVzdWx0LmxvY2FsKCkpOworICAgICAgICB9CiAgICAgfQogCi1ub25B
cmd1bWVudHNQYXRoOgogICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9iYXNlKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0
T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UsIG1faWRlbnQpOwpAQCAtNTY0
LDkgKzU2NCwxMyBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2FyZ3MtPm1f
bGlzdE5vZGUtPm1fZXhwcik7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYXJnc1Jl
Z2lzdGVyOwogICAgICAgICAgICAgQXJndW1lbnRMaXN0Tm9kZSogYXJncyA9IG1fYXJncy0+bV9s
aXN0Tm9kZS0+bV9uZXh0OwotICAgICAgICAgICAgaWYgKGFyZ3MtPm1fZXhwci0+aXNSZXNvbHZl
Tm9kZSgpICYmIGdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHN0YXRpY19jYXN0PFJl
c29sdmVOb2RlKj4oYXJncy0+bV9leHByKS0+aWRlbnRpZmllcigpKSkKLSAgICAgICAgICAgICAg
ICBhcmdzUmVnaXN0ZXIgPSBnZW5lcmF0b3IudW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMo
KTsKLSAgICAgICAgICAgIGVsc2UKKworICAgICAgICAgICAgaWYgKGFyZ3MtPm1fZXhwci0+aXNS
ZXNvbHZlTm9kZSgpKSB7CisgICAgICAgICAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVz
dWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihhcmdzLT5t
X2V4cHIpLT5pZGVudGlmaWVyKCksIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3JlYXRlQXJndW1l
bnRzRmxhZyk7CisgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNBcmd1bWVudHMo
KSkKKyAgICAgICAgICAgICAgICAgICAgYXJnc1JlZ2lzdGVyID0gcmVzb2x2ZVJlc3VsdC5sb2Nh
bCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFhcmdzUmVnaXN0ZXIuZ2V0KCkp
CiAgICAgICAgICAgICAgICAgYXJnc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3Mt
Pm1fZXhwcik7CiAKICAgICAgICAgICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSBpZ25v
cmVzIGV4dHJhIGFyZ3VtZW50cywgYnV0IHdlIHN0aWxsCkBAIC0xOTc3LDkgKzE5ODEsMTIgQEAg
UmVnaXN0ZXJJRCogVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBh
dGg6IHRoZSBjYXRjaCBibG9jay4KICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2VuZXJh
dG9yLmVtaXRMYWJlbChnZW5lcmF0b3IubmV3TGFiZWwoKS5nZXQoKSk7CiAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Q2F0Y2goZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB0cnlTdGFydExhYmVsLmdldCgpLCBoZXJlLmdldCgpKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXNoTmV3U2NvcGUoZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0
KCksIG1fZXhjZXB0aW9uSWRlbnQsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAg
SlNTdGF0aWNTY29wZU9iamVjdCogc2NvcGVUZW1wbGF0ZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6
OmNyZWF0ZSgqZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSk7CisgICAgICAgIHNjb3BlVGVtcGxhdGUt
PmFkZFZhcmlhYmxlKG1fZXhjZXB0aW9uSWRlbnQsIERvbnREZWxldGUsIFN5bWJvbFRhYmxlRW50
cnk6Ok5vVGVtcG9yYWxEZWFkWm9uZSk7CisgICAgICAgIGdlbmVyYXRvci5wdXNoQmxvY2tTY29w
ZShzY29wZVRlbXBsYXRlLCBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5KTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRTdGF0aWNWYXIoZ2VuZXJhdG9yLnJlc29sdmUobV9leGNlcHRpb25JZGVu
dCksIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2Rl
KGRzdCwgbV9jYXRjaEJsb2NrKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZSgpOwor
ICAgICAgICBnZW5lcmF0b3IucG9wQmxvY2tTY29wZSgpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGNhdGNoRW5kTGFiZWwuZ2V0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggOWZjOTY0YzczMzNjNzg2OTA0NjY3ZmZm
ZjcwNGJlYTU1NDA4MTY2NS4uYmQ2NWQ4NWFhMDhhZTQ1ODE2NDI2M2Y0YWEwYjI5NjZkNjg0YTM2
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0x
MDQyLDggKzEwNDIsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rp
b25FeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdQogICAgIEpTRnVuY3Rpb24g
KmZ1bmN0aW9uID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hh
aW4oKSk7CiAgICAgaWYgKCFmdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKS5pc051bGwoKSkgewog
ICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0KLSAgICAg
ICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBleGVj
LCBmdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSk7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBmdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSk7CiAgICAgICAgIGZ1bmN0aW9uLT5zZXRTY29wZShleGVjLT5nbG9iYWxE
YXRhKCksIGZ1bmN0aW9uLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmplY3QpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggY2M1YmIwMzkzYWQwOWVlZTk1YWFhYTRi
OTFkZDkxZTdmMWJlOWEzZC4uZDQ2YmU3M2E1NTcyOTAyMjM4OTZhYTkwNjIwZjVlNTg0MTgyMWEz
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCkBAIC0xNjI1LDE4ICsxNjI1LDYgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0
ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2sKIH0K
ICAgICAKICNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLU5FVkVSX0lOTElORSBTY29w
ZUNoYWluTm9kZSogSW50ZXJwcmV0ZXI6OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKQotewotICAgIGludCBkc3QgPSB2UENb
MV0udS5vcGVyYW5kOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKLSAgICBJZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cih2UENbMl0udS5vcGVyYW5kKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQ
Q1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRp
Y1Njb3BlT2JqZWN0OjpjcmVhdGUoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIERvbnREZWxl
dGUpOwotICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShzY29wZSk7Ci0K
LSAgICByZXR1cm4gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpOwotfQotCiBO
RVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBSZWN1
cnNpdmUgaW52b2NhdGlvbiBtYXkgYWxyZWFkeSBoYXZlIHNwZWNpYWxpemVkIHRoaXMgaW5zdHJ1
Y3Rpb24uCkBAIC00ODI3LDcgKzQ4MTUsOCBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAg
ICAgICAgIEluaXRpYWxpc2VzIGRzdChyKSB0byBKU1ZhbHVlKCkuCiAKLSAgICAgICAgICAgVGhp
cyBvcGNvZGUgYXBwZWFycyBvbmx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrLgor
ICAgICAgICAgICBUaGlzIG9wY29kZSBjYW4gYXBwZWFyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBj
b2RlIGJsb2NrIG9yIGF0IHRoZQorICAgICAgICAgICBiZWdpbm5pbmcgb2YgYSBibG9jayBzY29w
ZS4KICAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogCkBA
IC01MDQ5LDQzICs1MDM4LDY5IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIHZQQyAr
PSBPUENPREVfTEVOR1RIKG9wX25leHRfcG5hbWUpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7CiAgICAgfQotICAgIERFRklORV9PUENPREUob3Bfam1wX3Njb3BlcykgewotICAgICAgICAv
KiBqbXBfc2NvcGVzIGNvdW50KG4pIHRhcmdldChvZmZzZXQpCisgICAgREVGSU5FX09QQ09ERShv
cF9hc3NlcnRfbGF6eV9yZWdfaW5pdCkgeworICAgICAgICAvKiBhc3NlcnRfbGF6eV9yZWdfaW5p
dCBkc3QocikKIAotICAgICAgICAgICBSZW1vdmVzIHRoZSBhIG51bWJlciBvZiBpdGVtcyBmcm9t
IHRoZSBjdXJyZW50IHNjb3BlIGNoYWluCi0gICAgICAgICAgIHNwZWNpZmllZCBieSBpbW1lZGlh
dGUgbnVtYmVyIGNvdW50LCB0aGVuIGp1bXBzIHRvIG9mZnNldAotICAgICAgICAgICB0YXJnZXQu
CisgICAgICAgICAgIEFzc2VydCB0aGF0IGRzdCBoYXMgYmVlbiBpbml0aWFsaXplZCwgaS5lLiwg
aXMgbm90IGVtcHR5LgogICAgICAgICAqLwotICAgICAgICBpbnQgY291bnQgPSB2UENbMV0udS5v
cGVyYW5kOwotICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLQotICAgICAg
ICBTY29wZUNoYWluTm9kZSogdG1wID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgICAg
IHdoaWxlIChjb3VudC0tKQotICAgICAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICAgICAg
Y2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHRtcCk7Ci0KLSAgICAgICAgdlBDICs9IHRhcmdldDsK
KyAgICAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+dW5jaGVja2VkUih2UENbMV0udS5vcGVy
YW5kKS5pc0VtcHR5KCkpKSB7CisgICAgICAgICAgICBVU3RyaW5nIG1lc3NhZ2UoInVuaW5pdGlh
bGl6ZWQgdmFyaWFibGUiKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gSlNWYWx1ZShj
cmVhdGVSZWZlcmVuY2VFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGdv
dG8gdm1fdGhyb3c7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX2Fzc2VydF9sYXp5X3JlZ19pbml0KTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElP
TigpOwogICAgIH0KLSNpZiBFTkFCTEUoQ09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVS
KQotICAgIC8vIEFwcGVhc2UgR0NDCi0gICAgZ290byAqKCYmc2tpcF9uZXdfc2NvcGUpOwotI2Vu
ZGlmCi0gICAgREVGSU5FX09QQ09ERShvcF9wdXNoX25ld19zY29wZSkgewotICAgICAgICAvKiBu
ZXdfc2NvcGUgZHN0KHIpIHByb3BlcnR5KGlkKSB2YWx1ZShyKQorICAgIERFRklORV9PUENPREUo
b3BfcmVpZnlfc2NvcGUpIHsKKyAgICAgICAgLyogcmVpZnlfc2NvcGUgZHN0KHIpIHRlbXBsKHIp
IGJhc2UocikKICAgICAgICAgIAotICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IFN0YXRpY1Nj
b3BlT2JqZWN0IHdpdGggcHJvcGVydHkgc2V0IHRvIHZhbHVlLiAgVGhhdCBzY29wZQotICAgICAg
ICAgICBvYmplY3QgaXMgdGhlbiBwdXNoZWQgb250byB0aGUgU2NvcGVDaGFpbi4gIFRoZSBzY29w
ZSBvYmplY3QgaXMgdGhlbiBzdG9yZWQKLSAgICAgICAgICAgaW4gZHN0IGZvciBHQy4KKyAgICAg
ICAgICAgQ29uc3RydWN0cyBhIG5ldyBTdGF0aWNTY29wZU9iamVjdCwgdXNpbmcgdGVtcGwgYXMg
YSB0ZW1wbGF0ZS4gVGhhdAorICAgICAgICAgICBzY29wZSBvYmplY3QgaXMgdGhlbiBzdG9yZWQg
aW4gZHN0IGFuZCBwdXNoZWQgb250byB0aGUgU2NvcGVDaGFpbi4KKyAgICAgICAgICAgVGhlIHN0
b3JhZ2UgZm9yIHRoaXMgYmxvY2sgc2NvcGUgaXMgaW5pdGlhbGx5IGluIHRoZSByZWdpc3RlcnMK
KyAgICAgICAgICAgZm9sbG93aW5nIGJhc2UuIFdoZW4gY29udHJvbCBsZWF2ZXMgdGhpcyBzY29w
ZSwgdGhlc2UgdmFsdWVzIHdpbGwgYmUKKyAgICAgICAgICAgdG9ybiBvZmYuCiAgICAgICAgICAq
LwotICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY3JlYXRlRXhjZXB0aW9uU2NvcGUo
Y2FsbEZyYW1lLCB2UEMpKTsKKyAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisK
KyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KS5qc1ZhbHVlKCkpIHsKKyAg
ICAgICAgICAgIGludCB0ZW1wbCA9IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
YmFzZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5y
KHRlbXBsKS5qc1ZhbHVlKCkuaXNPYmplY3QoKSk7CisgICAgICAgICAgICBKU09iamVjdCogc2Nv
cGVUZW1wbGF0ZSA9IGFzT2JqZWN0KGNhbGxGcmFtZS0+cih0ZW1wbCkuanNWYWx1ZSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChzY29wZVRlbXBsYXRlLT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOwor
ICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogbmV3U2NvcGUgPSBzdGF0aWNfY2FzdDxK
U1N0YXRpY1Njb3BlT2JqZWN0Kj4oc2NvcGVUZW1wbGF0ZSk7CisgICAgICAgICAgICBuZXdTY29w
ZSA9IG5ld1Njb3BlLT5yZWlmeSgqZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAr
IGJhc2UpOworICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBuZXdTY29w
ZTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3Bl
Q2hhaW4oKS0+cHVzaChuZXdTY29wZSkpOworICAgICAgICB9CiAKLSAgICAgICAgdlBDICs9IE9Q
Q09ERV9MRU5HVEgob3BfcHVzaF9uZXdfc2NvcGUpOworICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9yZWlmeV9zY29wZSk7CisgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKKyAgICB9
CisgICAgREVGSU5FX09QQ09ERShvcF90ZWFyX29mZl9zY29wZSkgeworICAgICAgICAvKiB0ZWFy
X29mZl9zY29wZSBzcmMocikKKworICAgICAgICAgICBJZiB0aGUgc2NvcGUgc3RvcmVkIGluIFNS
QyB3YXMgcmVpZmllZCwgY29weSB0aGUgYmxvY2stc2NvcGVkIGxvY2FscworICAgICAgICAgICBp
biB0aGUgcmVnaXN0ZXJzIGZvbGxvd2luZyBTUkMgZnJvbSB0aGUgcmVnaXN0ZXIgZmlsZSB0byB0
aGUKKyAgICAgICAgICAgaGVhcC4gTXVuZ2UgdGhlIHNjb3BlIG9iamVjdCBzdG9yZWQgaW4gU1JD
IHRvIHBvaW50IHRvIHRoaXMgbmV3CisgICAgICAgICAgIGJhY2tpbmcgc3RvcmUsIGFuZCByZW1v
dmUgaXQgZnJvbSB0aGUgc2NvcGUgY2hhaW4uCisKKyAgICAgICAgICAgVGhpcyBvcGNvZGUgYXBw
ZWFycyB3aGVuIGxlYXZpbmcgYmxvY2sgc2NvcGVzLgorICAgICAgICAqLworCisgICAgICAgIGlu
dCBzcmMgPSB2UENbMV0udS5vcGVyYW5kOworCisgICAgICAgIGlmIChKU1ZhbHVlIHNjb3BlID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKHNyYykuanNWYWx1ZSgpKSB7CisgICAgICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3Qoc2NvcGUpOworICAgICAgICAgICAgQVNTRVJUKG9iamVj
dC0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTU3Rh
dGljU2NvcGVPYmplY3QqPihvYmplY3QpLT50ZWFyT2ZmKCpnbG9iYWxEYXRhKTsKKyAgICAgICAg
ICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9w
KCkpOworICAgICAgICB9CisKKyAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfdGVhcl9v
ZmZfc2NvcGUpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotI2lmIEVOQUJM
RShDT01QVVRFRF9HT1RPX0NMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgc2tpcF9uZXdfc2NvcGU6
Ci0jZW5kaWYKICAgICBERUZJTkVfT1BDT0RFKG9wX2NhdGNoKSB7CiAgICAgICAgIC8qIGNhdGNo
IGV4KHIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA1NDFjYzg5NmEzMjg5MGY2
YzVlZjYxYjRiNjViNzI0ZTY4ZWU2YjQxLi4yYTZjYzg5NGQ2MDQyMTY1MTA1NzM5MGFkNDI2YzU2
MGU1NzljNmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0yNzIsNyArMjcyLDYg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Ao
b3BfamVxX251bGwpCiAgICAgICAgIERFRklORV9PUChvcF9qZmFsc2UpCiAgICAgICAgIERFRklO
RV9PUChvcF9qbXApCi0gICAgICAgIERFRklORV9PUChvcF9qbXBfc2NvcGVzKQogICAgICAgICBE
RUZJTkVfT1Aob3Bfam5lcV9udWxsKQogICAgICAgICBERUZJTkVfT1Aob3Bfam5lcV9wdHIpCiAg
ICAgICAgIERFRklORV9PUChvcF9qbGVzcykKQEAgLTMxNyw3ICszMTYsOSBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9wcmVfaW5jKQog
ICAgICAgICBERUZJTkVfT1Aob3BfcHJvZmlsZV9kaWRfY2FsbCkKICAgICAgICAgREVGSU5FX09Q
KG9wX3Byb2ZpbGVfd2lsbF9jYWxsKQotICAgICAgICBERUZJTkVfT1Aob3BfcHVzaF9uZXdfc2Nv
cGUpCisgICAgICAgIERFRklORV9PUChvcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCkKKyAgICAgICAg
REVGSU5FX09QKG9wX3JlaWZ5X3Njb3BlKQorICAgICAgICBERUZJTkVfT1Aob3BfdGVhcl9vZmZf
c2NvcGUpCiAgICAgICAgIERFRklORV9PUChvcF9wdXNoX3Njb3BlKQogICAgICAgICBjYXNlIG9w
X3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRf
dHJhbnNpdGlvbl9ub3JtYWw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAyZDI4NDFiYWY1
NTQ4NmExZWJmNjlkMmU0YjViZDg1Y2VlMTE2YjBkLi5lOTRmZjRlYmMzZmMzZjFlYzI2NjM5YjY3
MTVhMjY2OTI4YjNjZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTgxOCw3ICs4MTgs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2plcV9udWxsKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2ptcChJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRf
b3Bfam1wX3Njb3BlcyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfam5lcV9u
dWxsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmVxX3B0cihJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qKTsKQEAgLTg2
NCw3ICs4NjMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3ByZV9p
bmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9wdXNoX25ld19zY29wZShJbnN0cnVj
dGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfYXNzZXJ0X2xhenlfcmVnX2luaXQoSW5zdHJ1
Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3JlaWZ5X3Njb3BlKEluc3RydWN0aW9uKik7
CisgICAgICAgIHZvaWQgZW1pdF9vcF90ZWFyX29mZl9zY29wZShJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHVzaF9zY29wZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9w
dXRfYnlfaW5kZXgoSW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCmluZGV4IDJkYjgyYmY0YWQyMGQ2MDNhZjAzNDlkZTRlZjUxNGNmM2QwMDI2YzYu
LmUyYTc2MzVjZDA3ZjhkZDlmZThhNzBjZWE1YzNlYzAzY2M4MWE3MmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTAxNiwxMiArMTAxNiwzNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19qc251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9hc3NlcnRfbGF6eV9yZWdf
aW5pdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNoX25ld19zY29wZSk7Ci0gICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgbm90RW1wdHkgPSBicmFuY2hU
ZXN0UHRyKE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfYXNzZXJ0X2xhenlfcmVn
X2luaXQpLmNhbGwoKTsKKyAgICBub3RFbXB0eS5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9yZWlmeV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
dW5zaWduZWQgdGVtcGwgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVu
c2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEp1bXAg
c2NvcGVSZWlmaWVkID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX3JlaWZ5X3Njb3BlKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudCh0
ZW1wbCwgcmVnVDEpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihiYXNl
KSk7CisgICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAgIHNjb3BlUmVpZmllZC5saW5rKHRoaXMp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9zY29wZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHNjb3BlID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICBKdW1wIHNjb3BlTm90UmVpZmllZCA9IGJyYW5jaFRlc3RQ
dHIoWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2NvcGUgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3RlYXJfb2ZmX3Nj
b3BlKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzY29wZSwgcmVnVDEpOworICAgIHN0dWJD
YWxsLmNhbGwoKTsKKyAgICBzY29wZU5vdFJlaWZpZWQubGluayh0aGlzKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
MzQsMTQgKzEwNTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2ptcF9zY29wZXMo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3Bfam1wX3Njb3Blcyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICBzdHVi
Q2FsbC5jYWxsKCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggYjY3Njk2ZjM1OTAzNzdmY2EwMDdhNDM4MWM1MTRj
MDVjMmRhMTBkZi4uZjEyMDJjNzIyNjI1NGM1ZTk5Y2NhMjUwZjNkMGIxZmM3N2ZiNzhlZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTMz
NiwxMiArMTMzNiwzNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fanNudW1iZXIoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYQogICAgIHN0dWJDYWxsLmNh
bGwoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHVzaF9uZXdfc2NvcGUoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2Fzc2VydF9sYXp5X3Jl
Z19pbml0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgIHN0dWJDYWxsLmNhbGwoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBKdW1wIG5vdEVtcHR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHRhZ0Zvcihkc3QpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
OworICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9hc3NlcnRfbGF6eV9yZWdfaW5pdCkuY2Fs
bCgpOworICAgIG5vdEVtcHR5LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3Jl
aWZ5X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWdu
ZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0
ZW1wbCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgYmFz
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgSnVtcCBzY29wZVJlaWZp
ZWQgPSBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKGRzdCksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSk7CisgICAgZW1pdExvYWRQYXlsb2FkKHRlbXBsLCByZWdUMCk7Cisg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3JlaWZ5X3Njb3BlKTsKKyAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1
c3RlZEltbTMyKGJhc2UpKTsKKyAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgc2NvcGVSZWlm
aWVkLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX3Njb3BlKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgc2NvcGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgc2NvcGVOb3RSZWlmaWVk
ID0gYnJhbmNoMzIoRXF1YWwsIHRhZ0ZvcihzY29wZSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSk7CisgICAgZW1pdExvYWRQYXlsb2FkKHNjb3BlLCByZWdUMCk7CisgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3RlYXJfb2ZmX3Njb3BlKTsKKyAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIHNj
b3BlTm90UmVpZmllZC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM2MSwxNCArMTM4Niw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2NhdGNoKSwgZXhjZXB0
aW9uLCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qbXBfc2NvcGVzKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2ptcF9zY29wZXMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNh
bGwuY2FsbCgpOwotICAgIGFkZEp1bXAoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAppbmRleCBlZWJlOTA0MjdhZWMxYzVkNTZhYmJjYjk2ZjYwMjU1YzllNzkyNTExLi5iMjZk
ZTFlYWRlYmQ5YmY2NmEzOWM2N2EwZmE0ZTFlOGQ0M2U5ZjlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzA4MCw3ICszMDgwLDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oSlNPYmplY3QqLCBvcF9uZXdfZnVuY19leHApCiAgICAgICAgIGRvZXMgbm90IGFmZmVj
dCB0aGUgc2NvcGUgZW5jbG9zaW5nIHRoZSBGdW5jdGlvbkV4cHJlc3Npb24uCiAgICAgICovCiAg
ICAgaWYgKCFmdW5jdGlvbi0+bmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIEpTU3RhdGljU2Nv
cGVPYmplY3QqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVh
dGUoY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxl
dGUpOworICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0g
SlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIGZ1bmN0
aW9uLT5uYW1lKCksIGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgIGZ1bmMt
PnNldFNjb3BlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jLT5zY29wZSgpLT5wdXNoKGZ1
bmN0aW9uU2NvcGVPYmplY3QpKTsKICAgICB9CiAKQEAgLTMzNzEsMjggKzMzNzEsNDcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2luKQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgcHJv
cGVydHkpKSk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHVzaF9u
ZXdfc2NvcGUpCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9hc3NlcnRfbGF6eV9yZWdf
aW5pdCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBK
U09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoc3RhY2tGcmFtZS5j
YWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIHN0YWNrRnJhbWUuYXJn
c1sxXS5qc1ZhbHVlKCksIERvbnREZWxldGUpOworICAgIFVTdHJpbmcgbWVzc2FnZSgidW5pbml0
aWFsaXplZCB2YXJpYWJsZSIpOworICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9u
ID0gY3JlYXRlUmVmZXJlbmNlRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsIG1lc3NhZ2UpOwor
ICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKK30KIAotICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgY2FsbEZyYW1lLT5zZXRTY29wZUNo
YWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKHNjb3BlKSk7Ci0gICAgcmV0dXJuIHNj
b3BlOworREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9yZWlmeV9zY29wZSkKK3sK
KyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICAvLyBBcmd1bWVu
dHM6IHNjb3BlIHRlbXBsYXRlIG9iamVjdCAoanN2YWx1ZSksIG9mZnNldCBvZiByZWdpc3RlcnMg
KGludDMyKS4KKyAgICBKU1ZhbHVlIHRlbXBsID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUo
KTsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKTsK
KworICAgIEFTU0VSVCh0ZW1wbC5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogc2NvcGVUZW1w
bGF0ZSA9IGFzT2JqZWN0KHRlbXBsKTsKKyAgICBBU1NFUlQoc2NvcGVUZW1wbGF0ZS0+aXNTdGF0
aWNTY29wZU9iamVjdCgpKTsKKyAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBuZXdTY29wZSA9IHN0
YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihzY29wZVRlbXBsYXRlKTsKKyAgICBuZXdT
Y29wZSA9IG5ld1Njb3BlLT5yZWlmeSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1l
LmNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7CisgICAgc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKS0+cHVzaChuZXdTY29wZSkpOworCisgICAgLy8gR2VuZXJhdGVkIGNvZGUgc3RvcmVzIGl0
IGluIGNhbGxGcmFtZS0+cihkc3QpLgorICAgIHJldHVybiBuZXdTY29wZTsKIH0KIAotREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bfam1wX3Njb3BlcykKK0RFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wX3RlYXJfb2ZmX3Njb3BlKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShz
dGFja0ZyYW1lKTsKIAotICAgIHVuc2lnbmVkIGNvdW50ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmlu
dDMyKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
KyAgICAvLyBBcmd1bWVudHM6IHNjb3BlIG9iamVjdCAoanN2YWx1ZSkuCisgICAgSlNWYWx1ZSBz
Y29wZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKHNjb3BlKTsK
IAotICAgIFNjb3BlQ2hhaW5Ob2RlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLSAg
ICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICBjYWxsRnJh
bWUtPnNldFNjb3BlQ2hhaW4odG1wKTsKKyAgICBBU1NFUlQoc2NvcGUuaXNPYmplY3QoKSk7Cisg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHNjb3BlKTsKKyAgICBBU1NFUlQob2JqZWN0
LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgIHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVP
YmplY3QqPihvYmplY3QpLT50ZWFyT2ZmKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEpOworICAgIHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCktPnBvcCgpKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bf
cHV0X2J5X2luZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCmluZGV4IDQ5ZjY2
NjQ2NTNjMzY3NWRlMzI4YWM5Y2E1YTAzZWY2MDA2NWRiMmYuLjVlYjhmMWRhYzc1ZmY0NjY1YzBm
OTQ2ZmE0YjYzMGFlYzgxZmFjMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgK
QEAgLTQxOCw3ICs0MTgsOSBAQCBleHRlcm4gIkMiIHsKICAgICBKU09iamVjdCogSklUX1NUVUIg
Y3RpX29wX25ld19vYmplY3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09iamVjdCog
SklUX1NUVUIgY3RpX29wX25ld19yZWdleHAoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBK
U09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfYWN0aXZhdGlvbihTVFVCX0FSR1NfREVDTEFS
QVRJT04pOwotICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9uZXdfc2NvcGUoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9hc3NlcnRfbGF6
eV9yZWdfaW5pdChTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAgIEpTT2JqZWN0KiBKSVRfU1RV
QiBjdGlfb3BfcmVpZnlfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF90ZWFyX29mZl9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAg
IEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJ
T04pOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
cmVhbGxvYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IqIEpJVF9TVFVCIGN0aV9vcF9nZXRfcG5hbWVzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CkBA
IC00MzUsNyArNDM3LDYgQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3Bf
Y2hlY2tfaGFzX2luc3RhbmNlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfZGVidWcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9T
VFVCIGN0aV9vcF9lbmQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICB2b2lkIEpJVF9TVFVC
IGN0aV9vcF9qbXBfc2NvcGVzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfcG9wX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBK
SVRfU1RVQiBjdGlfb3BfcHJvZmlsZV9kaWRfY2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwog
ICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3Byb2ZpbGVfd2lsbF9jYWxsKFNUVUJfQVJHU19ERUNM
QVJBVElPTik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAppbmRleCBiNmJiNjY0YmNmNzIwY2UyMGZhMGYwZmMzNzE0YjdiMTg4YTYzMjcyLi4wNTlj
MTU0MGQyZWY4MThlYmRmZjc4ZDY1MTZhMjNkNDliNjg2NmM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTExMjAsMTggKzExMjAsNiBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2dldHRlcl9zZXR0ZXIpCiAgICAg
TExJTlRfRU5EKCk7CiB9CiAKLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbXBfc2Nv
cGVzKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSBwY1sxXS51
Lm9wZXJhbmQ7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHRtcCA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsK
LSAgICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICBleGVj
LT5zZXRTY29wZUNoYWluKHRtcCk7Ci0gICAgcGMgKz0gcGNbMl0udS5vcGVyYW5kOwotICAgIExM
SU5UX0VORCgpOwotfQotCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfanRydWUpCiB7
CiAgICAgTExJTlRfQkVHSU4oKTsKQEAgLTEyNDMsNyArMTIzMSw3IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9uZXdfZnVuY19leHApCiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGZ1
bmN0aW9uLT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAgICAgCiAgICAgaWYgKCFm
dW5jdGlvbi0+bmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3Qq
IGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZXhlYywg
ZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAg
SlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpTU3RhdGljU2NvcGVP
YmplY3Q6OmNyZWF0ZShnbG9iYWxEYXRhLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25s
eSB8IERvbnREZWxldGUpOwogICAgICAgICBmdW5jLT5zZXRTY29wZShnbG9iYWxEYXRhLCBmdW5j
LT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmplY3QpKTsKICAgICB9CiAgICAgCkBAIC0x
NDUwLDYgKzE0MzgsNDIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJfb2Zm
X2FyZ3VtZW50cykKICAgICBMTElOVF9FTkQoKTsKIH0KIAorTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2Fzc2VydF9sYXp5X3JlZ19pbml0KQoreworICAgIExMSU5UX0JFR0lOKCk7Cisg
ICAgVVN0cmluZyBtZXNzYWdlKCJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIik7CisgICAgTExJTlRf
VEhST1coY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgbWVzc2FnZSkpOworfQorCitMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVpZnlfc2NvcGUpCit7CisgICAgTExJTlRfQkVHSU4o
KTsKKyAgICBpbnQgZHN0ID0gcGNbMV0udS5vcGVyYW5kOworICAgIGludCB0ZW1wbCA9IHBjWzJd
LnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IHBjWzNdLnUub3BlcmFuZDsKKyAgICBBU1NFUlQo
IWV4ZWMtPnVuY2hlY2tlZFIoZHN0KS5qc1ZhbHVlKCkpOworICAgIEFTU0VSVChleGVjLT5yKHRl
bXBsKS5qc1ZhbHVlKCkuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlVGVtcGxhdGUg
PSBhc09iamVjdChleGVjLT5yKHRlbXBsKS5qc1ZhbHVlKCkpOworICAgIEFTU0VSVChzY29wZVRl
bXBsYXRlLT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgIEpTU3RhdGljU2NvcGVPYmplY3Qq
IG5ld1Njb3BlID0gc3RhdGljX2Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KHNjb3BlVGVtcGxh
dGUpOworICAgIG5ld1Njb3BlID0gbmV3U2NvcGUtPnJlaWZ5KGdsb2JhbERhdGEsIGV4ZWMtPnJl
Z2lzdGVycygpICsgYmFzZSk7CisgICAgZXhlYy0+dW5jaGVja2VkUihkc3QpID0gbmV3U2NvcGU7
CisgICAgZXhlYy0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCktPnB1c2gobmV3U2Nv
cGUpKTsKKyAgICBMTElOVF9FTkQoKTsKK30KKworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3RlYXJfb2ZmX3Njb3BlKQoreworICAgIExMSU5UX0JFR0lOKCk7CisgICAgaW50IHNyYyA9
IHBjWzFdLnUub3BlcmFuZDsKKyAgICBBU1NFUlQoZXhlYy0+dW5jaGVja2VkUihkc3QpLmpzVmFs
dWUoKSk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tlZFIo
c3JjKS5qc1ZhbHVlKCkpOworICAgIEFTU0VSVChvYmplY3QtPmlzU3RhdGljU2NvcGVPYmplY3Qo
KSk7CisgICAgc3RhdGljX2Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KG9iamVjdCktPnRlYXJP
ZmYoZ2xvYmFsRGF0YSk7CisgICAgZXhlYy0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWlu
KCktPnBvcCgpKTsKKyAgICBMTElOVF9FTkQoKTsKK30KKwogTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3N0cmNhdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtMTUxOCwxNSArMTU0
Miw2IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wb3Bfc2NvcGUpCiAgICAgTExJ
TlRfRU5EKCk7CiB9CiAKLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXNoX25ld19z
Y29wZSkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9i
amVjdDo6Y3JlYXRlKGV4ZWMsIGNvZGVCbG9jay0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQp
LCBMTElOVF9PUCgzKS5qc1ZhbHVlKCksIERvbnREZWxldGUpOwotICAgIGV4ZWMtPnNldFNjb3Bl
Q2hhaW4oZXhlYy0+c2NvcGVDaGFpbigpLT5wdXNoKHNjb3BlKSk7Ci0gICAgTExJTlRfUkVUVVJO
KHNjb3BlKTsKLX0KLQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rocm93KQogewog
ICAgIExMSU5UX0JFR0lOKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oCmluZGV4IDdiM2I4YmRhNjU2ZWIxZjliN2YzMWYwNjJhYmYwOWY1NDUzNzBlODUu
LmQyMTFiY2Q5ZDhmMDNjZDY5MmNmZmZhNjhlN2Q2NzIzM2RjYjU5NGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0xNTksNyArMTU5LDYgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YWwpOwogTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YWwpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3B1dF9ieV9pbmRleCk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X2dldHRlcl9zZXR0ZXIpOwotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2ptcF9zY29w
ZXMpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2p0cnVlKTsKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9qZmFsc2UpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2psZXNzKTsKQEAgLTE4MSwxMyArMTgwLDE1IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9jYWxsX3ZhcmFyZ3MpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Nh
bGxfZXZhbCk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGVhcl9vZmZfYWN0aXZh
dGlvbik7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGVhcl9vZmZfYXJndW1lbnRz
KTsKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9hc3NlcnRfbGF6eV9yZWdfaW5pdCk7
CitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVpZnlfc2NvcGUpOworTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX3Njb3BlKTsKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rv
X3ByaW1pdGl2ZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X3BuYW1lcyk7
CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9wbmFtZSk7CiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF9zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcG9wX3Njb3BlKTsKLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXNo
X25ld19zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhyb3cpOwogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rocm93X3JlZmVyZW5jZV9lcnJvcik7CiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVidWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IDlhZjkxYmVmMmM0
ODE3NTQ4ODMzMWZkYjk0MjQxNTRhMDE4NWE3ZGYuLjM2Mzg3YmIxNWM1MTIzY2E2OTZhYTc0OGFm
ZTk4OTI1NzdjZWNmNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTUyNSwxMiArNTI1LDYgQEAgX2xsaW50X29wX3B1
dF9nZXR0ZXJfc2V0dGVyOgogICAgIGRpc3BhdGNoKDUpCiAKIAotX2xsaW50X29wX2ptcF9zY29w
ZXM6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19w
YXRoX2ptcF9zY29wZXMpCi0gICAgZGlzcGF0Y2goMCkKLQotCiBfbGxpbnRfb3BfbG9vcF9pZl90
cnVlOgogICAgIG5vcAogX2xsaW50X29wX2p0cnVlOgpAQCAtNzI3LDEyICs3MjEsNiBAQCBfbGxp
bnRfb3BfcG9wX3Njb3BlOgogICAgIGRpc3BhdGNoKDEpCiAKIAotX2xsaW50X29wX3B1c2hfbmV3
X3Njb3BlOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Ns
b3dfcGF0aF9wdXNoX25ld19zY29wZSkKLSAgICBkaXNwYXRjaCg0KQotCi0KIF9sbGludF9vcF90
aHJvdzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfdGhyb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDQ2YzYyMjZlNTQ0ZTgxNjVlY2ZlMmZh
NTUyNGY0MDU5NjQ3ZmMyNDkuLmNiYzVkNGFmODRiN2RhNjQxMjQ1NDg1ZjY1NDk2ZmFmYTcyMmRj
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xNDU4LDYgKzE0NTgsMzMgQEAgX2xsaW50X29wX3Rl
YXJfb2ZmX2FyZ3VtZW50czoKICAgICBkaXNwYXRjaCgyKQogCiAKK19sbGludF9vcF9hc3NlcnRf
bGF6eV9yZWdfaW5pdDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGkgNFtQQ10sIHQw
CisgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BBc3Nl
cnRMYXp5UmVnSW5pdERvbmUKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9hc3Nl
cnRfbGF6eV9yZWdfaW5pdCkKKy5vcEFzc2VydExhenlSZWdJbml0RG9uZToKKyAgICBkaXNwYXRj
aCgyKQorCisKK19sbGludF9vcF9yZWlmeV9zY29wZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisg
ICAgbG9hZGkgNFtQQ10sIHQwCisgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0
eVZhbHVlVGFnLCAub3BSZWlmeVNjb3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xv
d19wYXRoX3JlaWZ5X3Njb3BlKQorLm9wUmVpZnlTY29wZURvbmU6CisgICAgZGlzcGF0Y2goNCkK
KworCitfbGxpbnRfb3BfdGVhcl9vZmZfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAg
IGxvYWRpIDRbUENdLCB0MAorICAgIGJpZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZh
bHVlVGFnLCAub3BUZWFyT2ZmU2NvcGVEb25lCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfdGVhcl9vZmZfc2NvcGUpCisub3BUZWFyT2ZmU2NvcGVEb25lOgorICAgIGRpc3BhdGNo
KDIpCisKKwogX2xsaW50X29wX3JldDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2hlY2tT
d2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggZDhjOTMxZmEwYzg5YzdiYmRh
NzY1MTMyNzM0OWNmY2EyY2U0YWZjNC4uMTc0ZWRiZmNmYjliMTdiNzFlNTJlNDk3MTY3ZGIxZWIy
N2UyOGNmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTEzMTAsNiArMTMxMCwzMyBAQCBfbGxpbnRfb3BfdGVh
cl9vZmZfYXJndW1lbnRzOgogICAgIGRpc3BhdGNoKDIpCiAKIAorX2xsaW50X29wX2Fzc2VydF9s
YXp5X3JlZ19pbml0OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaXMgOFtQQiwgUEMs
IDhdLCB0MAorICAgIGJ0cG56IFtjZnIsIHQwLCA4XSwgLm9wQXNzZXJ0TGF6eVJlZ0luaXREb25l
CisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfYXNzZXJ0X2xhenlfcmVnX2luaXQp
Cisub3BBc3NlcnRMYXp5UmVnSW5pdERvbmU6CisgICAgZGlzcGF0Y2goMikKKworCitfbGxpbnRf
b3BfcmVpZnlfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpcyA4W1BCLCBQ
QywgOF0sIHQwCisgICAgYnRweiBbY2ZyLCB0MCwgOF0sIC5vcFJlaWZ5U2NvcGVEb25lCisgICAg
Y2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVpZnlfc2NvcGUpCisub3BSZWlmeVNjb3Bl
RG9uZToKKyAgICBkaXNwYXRjaCg0KQorCisKK19sbGludF9vcF90ZWFyX29mZl9zY29wZToKKyAg
ICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBidHB6
IFtjZnIsIHQwLCA4XSwgLm9wVGVhck9mZlNjb3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxp
bnRfc2xvd19wYXRoX3RlYXJfb2ZmX3Njb3BlKQorLm9wVGVhck9mZlNjb3BlRG9uZToKKyAgICBk
aXNwYXRjaCgyKQorCisKIF9sbGludF9vcF9yZXQ6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAg
IGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmgKaW5kZXggZjc1MmI5MWU5NWRkOTQxYjFjZjk4YjEyMDY1MzFlZGY5NGU4YzczNy4uYTQw
MTllZjQwMmI5NWQ2ZTEwY2Y4MTYxYjdjODhhNzNhZTUwYzExNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuaApAQCAtMTQyMiw3ICsxNDIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgc2V0VXNlc0FyZ3VtZW50cygpIHsgbV9zY29wZUZsYWdzIHw9IFVzZXNBcmd1
bWVudHNGbGFnOyB9CiAgICAgICAgIGJvb2wgdXNlc1RoaXMoKSBjb25zdCB7IHJldHVybiBtX3Nj
b3BlRmxhZ3MgJiBVc2VzVGhpc0ZsYWc7IH0KIAotICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlv
bkZvck1vcmVUaGFuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVz
ZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgICAgIGJv
b2wgbmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBt
X3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnKTsgfQogICAgICAgICBi
b29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGhhc0NhcHR1cmVkVmFyaWFibGVz
KCkgfHwgbmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKTsgfQogCiAgICAgICAg
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCA3NTEzZDFmMTFmZDQ4OTU4Mjhh
ZjhjYWViZTgwYWRhMTViNWY1N2Y5Li5lNDIwNjI4Zjk5NDU2NTAxNjI3OTU2OWI2OTc3ZGY0NDk1
ODhiOTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTE2Miw3ICsx
NjIsNyBAQCBzdHJ1Y3QgU2NvcGUgewogICAgIEFMV0FZU19JTkxJTkUgU2NvcGVGbGFncyB1c2Vz
RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBBbGxTY29wZVVzZXNGbGFnczsg
fQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGbGFncyhTY29wZUZsYWdzIHNjb3BlRmxhZ3Mp
IHsgbV9zY29wZUZsYWdzIHw9IHNjb3BlRmxhZ3M7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBuZWVkc0Z1bGxBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVz
ZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgQUxXQVlT
X0lOTElORSBib29sIG5lZWRzRnVsbEFjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njb3Bl
RmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnKTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBzdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU3RyaWN0
TW9kZUZsYWc7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hhZG93c0FyZ3VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFNoYWRvd3NBcmd1bWVudHNGbGFnOyB9CiAgICAg
QUxXQVlTX0lOTElORSBib29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxh
Z3MgJiBGdW5jdGlvbk1vZGVGbGFnOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgKaW5kZXggMDhiMzlmY2YwYjRjOTMwMjkwNDM3YmNhOTAxOTdjYzk1MzAwZWZl
Ny4uODAxNjkwMTgyOWViMDkxZjRlODczNjNjNjIyODFlYmNjZDY1YzIxMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtMjk0LDcgKzI5NCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBt
X3Njb3BlRmxhZ3MgJiBVc2VzRXZhbEZsYWc7IH0KICAgICAgICAgYm9vbCB1c2VzQXJndW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgVXNlc0FyZ3VtZW50c0ZsYWc7IH0KLSAg
ICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVk
VmFyaWFibGVzIHx8IG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcgfCBVc2VzV2l0aEZsYWcg
fCBVc2VzQ2F0Y2hGbGFnKTsgfQorICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgfHwgbV9zY29wZUZsYWdzICYgKFVzZXNF
dmFsRmxhZyB8IFVzZXNXaXRoRmxhZyk7IH0KICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBj
b25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTdHJpY3RNb2RlRmxhZzsgfQogCiAgICAgICAg
IHZvaWQgdW5saW5rQ2FsbHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKaW5kZXggZjg5NDJiNWY4NjVkYjU5ZTE1NDJk
YzRlM2I1YzdjZjI3OWMxNzE2My4uMGVlMDFkYzZlZWVjNDQ2ZjkzZmE0YmZiYTUxN2I4YzRlMGMx
NWM2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNT
Y29wZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0
aWNTY29wZU9iamVjdC5jcHAKQEAgLTQ2LDcgKzQ2LDggQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVu
LCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQo
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJl
bigpKTsKICAgICBKU1ZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyU3RvcmUp
OworICAgIGlmICh0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycykKKyAgICAgICAgdmlzaXRvci5hcHBl
bmRWYWx1ZXModGhpc09iamVjdC0+bV9yZWdpc3RlcnMsIHRoaXNPYmplY3QtPm1fc3ltYm9sVGFi
bGUtPnNpemUoKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1N0YXRpY1Njb3BlT2JqZWN0Ojp0b1RoaXNP
YmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCmluZGV4IGJiZjAzYTM0NzNhMjU3
NjlkMmI0MjU5Yjc1MGY2YmY3ZmZkNDBmODkuLjQzMjNiMTRmNTg5NTZiZmQ3YjUwZGI2N2Q3OWEx
YmE1NWRmZTE5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RhdGljU2NvcGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0YXRpY1Njb3BlT2JqZWN0LmgKQEAgLTM0LDEzICszNCw1MCBAQCBuYW1lc3BhY2UgSlNDewog
ICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJhc2U7CiAKLSAg
ICAgICAgc3RhdGljIEpTU3RhdGljU2NvcGVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCisgICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU1N0YXRpY1Nj
b3BlT2JqZWN0KiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3Rh
dGljU2NvcGVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGV4ZWMp
OwotICAgICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGlkZW50aWZp
ZXIsIHZhbHVlLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRTeW1ib2xU
YWJsZT4gdGFibGUgPSBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBK
U1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTU3RhdGljU2NvcGVPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEpTU3RhdGljU2NvcGVP
YmplY3QoZ2xvYmFsRGF0YSwgdGFibGUucmVsZWFzZSgpLCAwKTsKKyAgICAgICAgICAgIHNjb3Bl
T2JqZWN0LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIHJldHVybiBz
Y29wZU9iamVjdDsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2Jq
ZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBu
YW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgICAgICB7CisgICAg
ICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZU9iamVjdCA9IGNyZWF0ZShnbG9iYWxE
YXRhKTsKKyAgICAgICAgICAgIHNjb3BlT2JqZWN0LT5hZGRWYXJpYWJsZShuYW1lLCBhdHRyaWJ1
dGVzLCBTeW1ib2xUYWJsZUVudHJ5OjpOb1RlbXBvcmFsRGVhZFpvbmUpOworICAgICAgICAgICAg
T3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSA9IGFkb3B0
QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPlsxXSk7CisgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAg
ICAgICAgICByZWdpc3RlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHNjb3BlT2JqZWN0LCB2YWx1ZSk7
CisgICAgICAgICAgICBzY29wZU9iamVjdC0+c2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVnaXN0
ZXJBcnJheS5yZWxlYXNlKCkpOworICAgICAgICAgICAgcmV0dXJuIHNjb3BlT2JqZWN0OworICAg
ICAgICB9CisKKyAgICAgICAgaW50IGFkZFZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFN5bWJvbFRhYmxlRW50cnk6OlRlbXBvcmFsRGVhZFpvbmVL
aW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9yZWdpc3RlcnMpOwor
ICAgICAgICAgICAgaW50IGlkeCA9IHN5bWJvbFRhYmxlKCkuc2l6ZSgpOworICAgICAgICAgICAg
c3ltYm9sVGFibGUoKS5hZGQobmFtZS5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoaWR4LCBhdHRy
aWJ1dGVzLCBraW5kKSk7CisgICAgICAgICAgICBBU1NFUlQoc3ltYm9sVGFibGUoKS5zaXplKCkg
PT0gaWR4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gaWR4OworICAgICAgICB9CisKKyAgICAg
ICAgSlNTdGF0aWNTY29wZU9iamVjdCogcmVpZnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBS
ZWdpc3RlciogcmVnaXN0ZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBKU1N0YXRpY1Njb3Bl
T2JqZWN0ICpzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RhdGlj
U2NvcGVPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEpTU3RhdGljU2NvcGVPYmplY3QoZ2xvYmFs
RGF0YSwgbV9zeW1ib2xUYWJsZSwgcmVnaXN0ZXJzKTsKKyAgICAgICAgICAgIHNjb3BlT2JqZWN0
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBzY29wZU9i
amVjdDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdGVhck9mZihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmll
cjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJp
ZXI8VW5rbm93bj5bbV9zeW1ib2xUYWJsZS0+c2l6ZSgpXSk7CisgICAgICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fc3ltYm9sVGFibGUtPnNpemUoKTsgaSsrKQorICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9yZWdpc3Rl
cnNbaV0uZ2V0KCkpOworICAgICAgICAgICAgc2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVnaXN0
ZXJBcnJheS5yZWxlYXNlKCkpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgICAgICBib29sIGlzRHluYW1p
Y1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgICAgIHN0YXRp
YyBKU09iamVjdCogdG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSopOwpAQCAtNTQsMjQg
KzkxLDE4IEBAIG5hbWVzcGFjZSBKU0N7CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJT
dG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICBz
eW1ib2xUYWJsZSgpLmFkZChpZGVudGlmaWVyLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeSgtMSwg
YXR0cmlidXRlcykpOwotICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IEpTVmFyaWFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgICAg
ICA6IEpTVmFyaWFibGVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRh
KCkuc3RhdGljU2NvcGVTdHJ1Y3R1cmUuZ2V0KCksICZtX3N5bWJvbFRhYmxlLCByZWludGVycHJl
dF9jYXN0PFJlZ2lzdGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpKQorICAgICAgICBKU1N0YXRp
Y1Njb3BlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRT
eW1ib2xUYWJsZT4gdGFibGUsIFJlZ2lzdGVyKiByZWdpc3RlcnMpCisgICAgICAgICAgICA6IEpT
VmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdGF0aWNTY29wZVN0cnVjdHVy
ZS5nZXQoKSwgdGFibGUuZ2V0KCksIHJlZ2lzdGVycykKKyAgICAgICAgICAgICwgbV9zeW1ib2xU
YWJsZSh0YWJsZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKIAotICAgICAgICBTeW1ib2xUYWJsZSBtX3N5bWJvbFRhYmxlOwot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdpc3RlclN0b3JlOworICAgICAgICBS
ZWZQdHI8U2hhcmVkU3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CiAgICAgfTsKIAogICAgIGlu
bGluZSBib29sIEpTU3RhdGljU2NvcGVPYmplY3Q6OmlzRHluYW1pY1Njb3BlKGJvb2wmKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKaW5kZXggZjU0
MGExMmM3M2VmMTcyNmY2YzJmZGFlZmVkNTkxZTVjZWVhMzY5ZC4uOWYzZGFlYjI2MzEyZmU5YmFk
ODVlYTNhZmE0ZWQ5Y2FiOGM5NjczNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCkBAIC01MSwxMyArNTEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFN5bWJvbFRhYmxlRW50cnkoaW50IGluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQoaXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgICAgICAgICBwYWNrKGluZGV4LCBmYWxz
ZSwgZmFsc2UpOworICAgICAgICAgICAgcGFjayhpbmRleCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRl
eChpbmRleCkpOwotICAgICAgICAgICAgcGFjayhpbmRleCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5
LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICAgICAgcGFjayhpbmRleCwgYXR0cmli
dXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0sIGZhbHNlKTsKKyAgICAgICAg
fQorCisgICAgICAgIGVudW0gVGVtcG9yYWxEZWFkWm9uZUtpbmQgeyBIYXNUZW1wb3JhbERlYWRa
b25lLCBOb1RlbXBvcmFsRGVhZFpvbmUgfTsKKworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGlu
dCBpbmRleCwgdW5zaWduZWQgYXR0cmlidXRlcywgVGVtcG9yYWxEZWFkWm9uZUtpbmQga2luZCkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOworICAg
ICAgICAgICAgcGFjayhpbmRleCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYg
RG9udEVudW0sIGtpbmQgPT0gSGFzVGVtcG9yYWxEZWFkWm9uZSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QKQEAgLTgyLDcgKzkwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzKHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHBhY2soZ2V0SW5kZXgoKSwgYXR0cmlidXRlcyAm
IFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICAgICAgcGFjayhnZXRJ
bmRleCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSwgaGFz
VGVtcG9yYWxEZWFkWm9uZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgaXNSZWFkT25s
eSgpIGNvbnN0CkBAIC05MCwxOSArOTgsMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gbV9iaXRzICYgUmVhZE9ubHlGbGFnOwogICAgICAgICB9CiAKKyAgICAgICAgYm9v
bCBoYXNUZW1wb3JhbERlYWRab25lKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fYml0cyAmIEhhc1RlbXBvcmFsRGVhZFpvbmVGbGFnOworICAgICAgICB9CisKICAgICBw
cml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgUmVhZE9ubHlGbGFnID0gMHgx
OwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRG9udEVudW1GbGFnID0gMHgyOwogICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTm90TnVsbEZsYWcgPSAweDQ7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBGbGFnQml0cyA9IDM7CisgICAgICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBIYXNUZW1wb3JhbERlYWRab25lRmxhZyA9IDB4ODsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIEZsYWdCaXRzID0gNDsKIAotICAgICAgICB2b2lkIHBhY2soaW50IGluZGV4
LCBib29sIHJlYWRPbmx5LCBib29sIGRvbnRFbnVtKQorICAgICAgICB2b2lkIHBhY2soaW50IGlu
ZGV4LCBib29sIHJlYWRPbmx5LCBib29sIGRvbnRFbnVtLCBib29sIGhhc1RlbXBvcmFsRGVhZFpv
bmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fYml0cyA9IChpbmRleCA8PCBGbGFnQml0cykg
fCBOb3ROdWxsRmxhZzsKICAgICAgICAgICAgIGlmIChyZWFkT25seSkKICAgICAgICAgICAgICAg
ICBtX2JpdHMgfD0gUmVhZE9ubHlGbGFnOwogICAgICAgICAgICAgaWYgKGRvbnRFbnVtKQogICAg
ICAgICAgICAgICAgIG1fYml0cyB8PSBEb250RW51bUZsYWc7CisgICAgICAgICAgICBpZiAoaGFz
VGVtcG9yYWxEZWFkWm9uZSkKKyAgICAgICAgICAgICAgICBtX2JpdHMgfD0gSGFzVGVtcG9yYWxE
ZWFkWm9uZUZsYWc7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNWYWxpZElu
ZGV4KGludCBpbmRleCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133795</attachid>
            <date>2012-03-26 07:00:10 -0700</date>
            <delta_ts>2012-03-26 08:47:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20120326160008.patch</filename>
            <type>text/plain</type>
            <size>112756</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NGRlZWIzNzE0MWUxNWNiMWU1YzIyM2YyMGYxZjU0OTE3ZWE3NDg1Li4wMmU3ZWJkY2NkMjFmMzlk
NjAxMDI4N2I4ZmQ1NjBjZmYwNTIwZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDkgQEAKKzIwMTEtMDMtMjYgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIE9wdGltaXplIGFjY2VzcyB0byBibG9jay1zY29wZWQgbG9jYWwgdmFyaWFibGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcwOAor
CisgICAgICAgIFRoaXMgY29tbWl0IGNoYW5nZXMgdGhlIGJ5dGVjb21waWxlciB0byB0cmFjayBi
bG9jayBzY29wZSBvYmplY3RzLAorICAgICAgICBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUgcmVzb2x2ZWQKKyAgICAgICAgYXQgY29tcGls
ZS10aW1lIHRvIHJlZ2lzdGVycy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBpcyB0bwor
ICAgICAgICByZS11c2UgSlNTdGF0aWNTY29wZSwgYWRkaW5nIGxhenkgdGVhci1vZmYgYW5kIHRo
ZSBhYmlsaXR5IHRvIGJpbmQKKyAgICAgICAgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KKworICAg
ICAgICBDdXJyZW50bHksIGluIEVTNSwgb25seSBjYXRjaCBibG9ja3MgZnVuY3Rpb24gYXMgYmxv
Y2sgc2NvcGVzLCBmb3IKKyAgICAgICAgdGhlaXIgZXhjZXB0aW9uIGlkZW50aWZpZXIuICAoTmFt
ZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYWxzbworICAgICAgICBpbnRyb2R1Y2UgYSBraW5kIG9m
IGJsb2NrIHNjb3BlLCBidXQgc2luY2UgdGhleSBhcmUgZXhwcmVzc2lvbnMKKyAgICAgICAgYW5k
IG5vdCBzdGF0ZW1lbnRzIHRoZSBjb21waWxlciBpcyBub3QgYXMgaW52b2x2ZWQuKQorCisgICAg
ICAgIEdpdmVuIHRoYXQgY2F0Y2ggYmxvY2tzIGFyZSBub3QgdmVyeSBjb21tb24gaW4gSlMsIGFu
ZCB0aGV5IGNhbgorICAgICAgICBvbmx5IGJpbmQgb25lIHZhcmlhYmxlLCB0aGlzIHBhdGNoIGlz
IG1vcmUgYSBwcm9vZiBvZiBjb3JyZWN0bmVzcworICAgICAgICBhbmQgYSBiYXNlIGZvciBhIHN1
YnNlcXVlbnQgYmxvY2sgc2NvcGluZyBwYXRjaCB0aGFuIGEgZ2VuZXJhbAorICAgICAgICBvcHRp
bWl6YXRpb24uICBBcyBzdWNoLCBpbiBhbnRpY2lwYXRpb24gb2YgRVM2IGJsb2NrLXNjb3BlZAor
ICAgICAgICBsb2NhbHMsIHRoaXMgcGF0Y2ggYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHJlYWQgYmFy
cmllcnMgb24KKyAgICAgICAgYmxvY2stc2NvcGVkIGxvY2FscywgdG8gaW1wbGVtZW50IHRoZSB0
ZW1wb3JhbCBkZWFkIHpvbmUuCisKKyAgICAgICAgVGhlcmUgYXJlIHRocmVlIG5ldyBvcGNvZGVz
OiBvbmUgdG8gZW5zdXJlIHRoYXQgYSBibG9jay1zY29wZWQKKyAgICAgICAgbG9jYWwgaGFzIGJl
ZW4gaW5pdGlhbGl6ZWQsIGFuZCB0d28gZm9yIGRlYWxpbmcgd2l0aCBsYXppbHkKKyAgICAgICAg
cmVpZmllZCBhbmQgdG9ybi1vZmYgc2NvcGVzLiAgV2hpbGUgd2UncmUgYXQgaXQsIHdlIHJlbW92
ZQorICAgICAgICBqbXBfc2NvcGVzLCBhcyBpdCBjYW4ndCBiZSBpbXBsZW1lbnRlZCBjbGVhcmx5
IGluIHRoZSBwcmVzZW5jZSBvZgorICAgICAgICBsYXppbHktdG9ybi1vZmYgYmxvY2sgc2NvcGVz
LiAgSW5zdGVhZCB0aGUgY29tcGlsZXIgZW1pdHMgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIHVu
d2luZGluZ3MgZGlyZWN0bHkuICBXZSBhbHNvIHJlbW92ZSBwdXNoX25ld19zY29wZSBpbgorICAg
ICAgICBmYXZvciBvZiB0aGUgbW9yZSBnZW5lcmljIGFuZCBlZmZpY2llbnQgbGF6aWx5IHJlaWZp
ZWQgc3RhdGljCisgICAgICAgIHNjb3Blcy4KKworICAgICAgICBXaGVuIGVudGVyaW5nIGEgYmxv
Y2sgc2NvcGUsIHRoZSBjb21waWxlciBhbGxvY2F0ZXMgYSBjb250aWd1b3VzCisgICAgICAgIGJs
b2NrIG9mIHJlZ2lzdGVycyBmb3IgYmxvY2sgc2NvcGVzLiAgQmxvY2sgc2NvcGVzIHRoYXQgbWF5
IGJlCisgICAgICAgIHJlaWZpZWQgKGNhcHR1cmVkIGluIGEgc2NvcGUgY2hhaW4pIGFsc28gb2Nj
dXB5IGFuIGFkZGl0aW9uYWwKKyAgICAgICAgcmVnaXN0ZXIsIGZvciB0aGUgc2NvcGUgb2JqZWN0
IGl0c2VsZi4gIFRoZSBzeW1ib2wgdGFibGVzIGZvciB0aGUKKyAgICAgICAgYmxvY2sgc2NvcGVz
IGNvbWUgZnJvbSAic2NvcGUgdGVtcGxhdGVzIiwgd2hpY2ggbGl2ZSBpbiB0aGUKKyAgICAgICAg
Y29uc3RhbnRzIHNlY3Rpb24uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6Q29udHJvbEZsb3dDb250ZXh0KTogSW4gYWRkaXRpb24gdG8gZmluYWxseSBhbmQgd2l0
aCBibG9ja3MsCisgICAgICAgIHN1cHBvcnQgYmxvY2stc2NvcGUgY29udHJvbCBmbG93IGNvbnRl
eHRzLgorICAgICAgICAoSlNDOjpSZXNvbHZlUmVzdWx0KTogU2VwYXJhdGUgInR5cGUiIChlLmcu
IHJlZ2lzdGVyLCBsZXhpY2FsLAorICAgICAgICBldGMpIGZyb20gImF0dHJpYnV0ZXMiIChlLmcu
IHJlYWQtb25seSkuICBBZGQgdHdvIG5ldyBhdHRyaWJ1dGVzOgorICAgICAgICBCYXJyaWVyQXR0
cmlidXRlLCBpbmRpY2F0aW5nIHRoZSBuZWVkIGZvciBhIFREWiBjaGVjaywgYW5kCisgICAgICAg
IEFyZ3VtZW50c0F0dHJpYnV0ZSwgaW5kaWNhdGluZyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBhY3R1
YWxseSB0aGUKKyAgICAgICAgYXJndW1lbnRzIG9iamVjdC4gIFN0b3JlIHRoZSBpZGVudGlmaWVy
IGFzIGEgY29udmVuaWVuY2UgdG8KKyAgICAgICAgY2xpZW50cywgYW5kIHNvIHRoYXQgZXJyb3Jz
IChlLmcuIGFzc2lnbmluZyB0byBjb25zdGFudHMgb3IgVERaCisgICAgICAgIGZhaWx1cmVzKSBo
YXZlIG1vcmUgY29udGV4dC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNjb3Bl
RGVwdGgpOiBBZGQgbV9ibG9ja1Njb3BlRGVwdGguCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpjYW5PcHRpbWl6ZU5vbkxvY2Fscyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpzaG91bGRPcHRpbWl6ZUxvY2Fscyk6CisgICAgICAgIFJlbW92ZSBub3ctdW51c2Vk
IG1ldGhvZHMuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OndpbGxSZXNvbHZlVG9Bcmd1bWVudHMp
OiBSZW1vdmUuICBDYWxsZXJzCisgICAgICAgIHVzZSBSZXNvbHZlUmVzdWx0Ojppc0FyZ3VtZW50
cygpLCBwb3NzaWJseSB3aXRoIHRoZSBuZXcKKyAgICAgICAgRG9udENyZWF0ZUFyZ3VtZW50c0Zs
YWcuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWdpc3RlckZvcik6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKTogU2VhcmNoIGJsb2NrIHNjb3Bl
cyBiZWZvcmUKKyAgICAgICAgbG9va2luZyBpbiB0aGUgbG9jYWwgc3ltYm9sIHRhYmxlIGZvciBy
ZWdpc3RlcnMuICBIYW5kbGUgbGF6eQorICAgICAgICByZWlmaWNhdGlvbiBvZiAiYXJndW1lbnRz
IiBoZXJlLiAgSW5saW5lIGNhbk9wdGltaXplTm9uTG9jYWxzIGFuZAorICAgICAgICBzaG91bGRP
cHRpbWl6ZUxvY2FscywgYW5kIGZvbGQgc29tZSBjb25zdGFudHMuICBTZXQgdGhlCisgICAgICAg
IEJhcnJpZXJBdHRyaWJ1dGUgb24gcmVzdWx0cyB0aGF0IG5lZWQgYSB0ZW1wb3JhbCBkZWFkIHpv
bmUuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOiBTaW1w
bGlmeSBmb3IgdGhlCisgICAgICAgIHNlcGFyYXRpb24gb2YgUmVzb2x2ZVJlc3VsdDo6dHlwZSgp
IGFuZAorICAgICAgICBSZXNvbHZlUmVzdWx0OjphdHRyaWJ1dGVzKCkuICBBZGQgcmVhZCBiYXJy
aWVycyBpZiBuZWNlc3NhcnkuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVh
dGVBcmd1bWVudHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjpjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICBSZW1vdmUgbm93LXVudXNl
ZCBtZXRob2RzLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEJsb2NrU2Nv
cGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wQmxvY2tTY29wZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWlmeVNjb3Blcyk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaFNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6cG9wRmluYWxseUNvbnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEp1bXBTY29wZXMpOiBSZWZhY3RvciB0byBoYW5kbGUgYmxvY2sKKyAgICAgICAgc2Nv
cGVzIG9uIHRoZSBDb250cm9sRmxvd0NvbnRleHQgc3RhY2suICBXaGVuIHB1c2hpbmcgYSBzY29w
ZSB0aGF0CisgICAgICAgIHJlcXVpcmVzIGEgc2NvcGUgY2hhaW4sIHJlaWZ5U2NvcGVzIGlzIGNh
bGxlZCwgd2hpY2ggZW5zdXJlcyB0aGF0CisgICAgICAgIHRoZSBzY29wZSBjaGFpbiBoYXMgYmVl
biBjcmVhdGVkLiAgV2hlbiBjb250cm9sIGxlYXZlcyBhIGJsb2NrCisgICAgICAgIHNjb3BlIHdo
b3NlIHNjb3BlIG1heSBoYXZlIGJlZW4gcmVpZmllZCwgdGVhcl9vZmZfc2NvcGUgd2lsbCB0ZWFy
CisgICAgICAgIG9mZiB0aG9zZSBsb2NhbHMgZnJvbSB0aGUgc3RhY2sgdG8gdGhlIGhlYXAuCisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNz
aW9uKTogQ2FsbAorICAgICAgICByZWlmeVNjb3BlcyBpbnN0ZWFkIG9mIGNyZWF0ZUFjdGl2YXRp
b25JZk5lY2Vzc2FyeS4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
OgorICAgICAgICAoSlNDOjpCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6IEFkYXB0IHRvCisgICAg
ICAgIHdpbGxSZXNvbHZlVG9Bcmd1bWVudHMgY2hhbmdlLgorICAgICAgICAoSlNDOjpBcHBseUZ1
bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6IEFkYXB0IHRvCisgICAgICAgIEpTU3Rh
dGljU2NvcGUgdGFraW5nIGEgSlNHbG9iYWxEYXRhIGluc3RlYWQgb2YgYW4gRXhlY1N0YXRlLgor
ICAgICAgICAoSlNDOjpUcnlOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGFwdCB0byB1c2UgcHVzaEJs
b2NrU2NvcGUgYW5kCisgICAgICAgIHBvcEJsb2NrU2NvcGUuCisKKyAgICAgICAgKiBieXRlY29k
ZS9PcGNvZGUuaDogQWRkIG5ldyBlbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQsIHJlaWZ5X3Njb3Bl
LAorICAgICAgICBhbmQgdGVhcl9vZmZfc2NvcGUgb3Bjb2Rlcy4gUmVtb3ZlIHB1c2hfbmV3X3Nj
b3BlIGFuZCBqbXBfc2NvcGVzLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAgKEpT
Qzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3JlaWZ5X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RlYXJf
b2ZmX3Njb3BlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2Vuc3VyZV9sb2NhbF9pbml0aWFsaXplZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9yZWlmeV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90ZWFyX29mZl9zY29wZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOiBVcGRhdGUgd2l0aCBzdXBwb3J0IGZv
ciB0aGUgbmV3CisgICAgICAgIG9wY29kZXMuICBUaGUgTExJbnQgYml0cyBhcmUgdW50ZXN0ZWQu
CisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpu
ZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcyk6CisgICAgICAgICogcGFyc2VyL1Bh
cnNlci5oOgorICAgICAgICAoSlNDOjpTY29wZTo6bmVlZHNGdWxsQWN0aXZhdGlvbik6CisgICAg
ICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6Om5lZWRzQWN0aXZhdGlvbik6ICJDYXRjaCIgY2xhdXNlcyBubworICAgICAgICBsb25nZXIg
Zm9yY2UgdGhlaXIgZnVuY3Rpb25zIHRvIGhhdmUgYWN0aXZhdGlvbnMuCisKKyAgICAgICAgKiBy
dW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Nj
b3BlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2Nv
cGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKToK
KyAgICAgICAgKEpTU3RhdGljU2NvcGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Nj
b3BlT2JqZWN0OjphZGRWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmpl
Y3Q6OnJlaWZ5KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6dGVhck9mZik6
CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OkpTU3RhdGljU2NvcGVPYmplY3Qp
OiBBZGFwdCB0byBzdXBwb3J0CisgICAgICAgIGxhenkgdGVhci1vZmYsIGFuZCB0aGUgYWJpbGl0
eSB0byBiaW5kIG1vcmUgdGhhbiBvbmUgdmFyaWFibGUuCisKKyAgICAgICAgKiBydW50aW1lL1N5
bWJvbFRhYmxlLmg6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlKToKKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6Omhhc1RlbXBvcmFsRGVhZFpvbmUpOgorICAgICAgICAoSlNDOjpTeW1ib2xU
YWJsZTo6VGVtcG9yYWxEZWFkWm9uZUtpbmQpOiBTdGVhbCBhbm90aGVyIGJpdCBmcm9tCisgICAg
ICAgIHRoZSBlbnRyeSB0byBub3RlIHdoaWNoIHZhcmlhYmxlcyBuZWVkIGEgdGVtcG9yYWwgZGVh
ZCB6b25lLgorCiAyMDEyLTAzLTI1ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmll
cnMuY29tPgogCiAgICAgICAgIFt3eF0gVW5yZXZpZXdlZCBidWlsZCBmaXguIE1vdmUgV1RGIHRv
IGl0cyBvd24gc3RhdGljIGxpYiBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNmQ4ZDBjYjc4ODdiZTBkYmYxZGIzOWVkYTFjYzRjNDA1
MGZiZDczMy4uMmZkNzIwNTI3MDM3ODU1ZGJjYTdkZTU0YzQ1YmRiM2YzY2I0NDNhMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTEyMjAsMTcg
KzEyMjAsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBW
ZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGRhdGFMb2co
IlslNGRdIHBvcF9zY29wZVxuIiwgbG9jYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXNoX25ld19zY29wZTogeworICAgICAgICBjYXNlIG9w
X2Vuc3VyZV9sb2NhbF9pbml0aWFsaXplZDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFM
b2coIlslNGRdIHB1c2hfbmV3X3Njb3BlIFx0JXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lz
dGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0p
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCkpOworICAgICAgICAgICAgZGF0
YUxvZygiWyU0ZF0gZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkXHQgJXMsICVzXG4iLCBsb2NhdGlv
biwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSku
ZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
am1wX3Njb3BlczogewotICAgICAgICAgICAgaW50IHNjb3BlRGVsdGEgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGRhdGFMb2coIlslNGRdIGptcF9zY29wZXNcdF4lZCwgJWQoLT4lZClcbiIsIGxvY2F0
aW9uLCBzY29wZURlbHRhLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgY2Fz
ZSBvcF9yZWlmeV9zY29wZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0g
cmVpZnlfc2NvcGVcdCAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
ZXhlYywgcjIpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX3RlYXJfb2ZmX3Njb3BlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHRlYXJfb2ZmX3Njb3BlXHQg
JXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhdGNoOiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDU1OThmODk5NDgwZmQ1Mzg3ZGY5
NDVlYjA5ZDZjYzRkNjhjYjdjNi4uNWI5NDQzMWJmZjU0ZTIwNDE3NTE0MjUxM2RjZjRhOTlhM2Ni
ZWE5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMTQ5LDcg
KzE0OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9qbmxlc3NlcSwgNCkg
XAogICAgICAgICBtYWNybyhvcF9qbmdyZWF0ZXIsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfam5n
cmVhdGVyZXEsIDQpIFwKLSAgICAgICAgbWFjcm8ob3Bfam1wX3Njb3BlcywgMykgXAogICAgICAg
ICBtYWNybyhvcF9sb29wLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX2xvb3BfaWZfdHJ1ZSwgMykg
XAogICAgICAgICBtYWNybyhvcF9sb29wX2lmX2ZhbHNlLCAzKSBcCkBAIC0xODMsNyArMTgyLDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX3B1c2hfc2Nv
cGUsIDIpIFwKICAgICAgICAgbWFjcm8ob3BfcG9wX3Njb3BlLCAxKSBcCi0gICAgICAgIG1hY3Jv
KG9wX3B1c2hfbmV3X3Njb3BlLCA0KSBcCisgICAgICAgIFwKKyAgICAgICAgbWFjcm8ob3BfZW5z
dXJlX2xvY2FsX2luaXRpYWxpemVkLCAzKSBcCisgICAgICAgIFwKKyAgICAgICAgbWFjcm8ob3Bf
cmVpZnlfc2NvcGUsIDQpIFwKKyAgICAgICAgbWFjcm8ob3BfdGVhcl9vZmZfc2NvcGUsIDIpIFwK
ICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9jYXRjaCwgMikgXAogICAgICAgICBtYWNybyhv
cF90aHJvdywgMikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA0YTZmNDY1M2VhYjg5MmZjNmRhMGRi
OTNjYjQ5Y2IxNTcxYTZhZGZiLi5mMzIyNThiNmQ1ZTE4YTZkOWJmNjc2OTMzNTM3YjA2ODBjZTFi
YzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMzIsOSArMzIsMTAgQEAKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSAiQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIu
aCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1
ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIK
QEAgLTEzMywxMyArMTM0LDEwIEBAIHZvaWQgUmVzb2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgp
CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFJlZ2lzdGVyOgotICAgIGNhc2Ug
UmVhZE9ubHlSZWdpc3RlcjoKICAgICAgICAgQVNTRVJUKG1fbG9jYWwpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBMZXhpY2FsOgotICAgIGNhc2UgUmVhZE9ubHlMZXhpY2FsOgogICAgIGNh
c2UgRHluYW1pY0xleGljYWw6Ci0gICAgY2FzZSBEeW5hbWljUmVhZE9ubHlMZXhpY2FsOgogICAg
ICAgICBBU1NFUlQobV9pbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBHbG9iYWw6CkBAIC0xNDcsOSArMTQ1LDcgQEAgdm9pZCBSZXNvbHZl
UmVzdWx0OjpjaGVja1ZhbGlkaXR5KCkKICAgICAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW5kZXhlZEdsb2JhbDoKLSAgICBjYXNlIFJlYWRP
bmx5SW5kZXhlZEdsb2JhbDoKICAgICBjYXNlIER5bmFtaWNJbmRleGVkR2xvYmFsOgotICAgIGNh
c2UgRHluYW1pY1JlYWRPbmx5SW5kZXhlZEdsb2JhbDoKICAgICAgICAgQVNTRVJUKG1faW5kZXgg
IT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKICAgICAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4LDYgKzIzNCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5O
b2RlKiBzCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgo
MCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKDAp
CiAgICAgLCBtX2NvZGVUeXBlKEdsb2JhbENvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNl
dCgwKQpAQCAtMzA5LDYgKzMwNiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIFNjb3BlQ2hhaW5OCiAgICAgLCBt
X2FjdGl2YXRpb25SZWdpc3RlcigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1f
ZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRoKDApCiAgICAgLCBt
X2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkKICAgICAs
IG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCkBAIC00NzAsNiArNDY4LDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2gKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCkpCiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVE
ZXB0aCgwKQorICAgICwgbV9ibG9ja1Njb3BlRGVwdGgoMCkKICAgICAsIG1fYmFzZVNjb3BlRGVw
dGgoY29kZUJsb2NrLT5iYXNlU2NvcGVEZXB0aCgpKQogICAgICwgbV9jb2RlVHlwZShFdmFsQ29k
ZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCkBAIC01MzYsMzMgKzUzNSw2IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgaW50IHBhcmFtZXRlckluZGV4CiAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwog
fQogCi1ib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjp3aWxsUmVzb2x2ZVRvQXJndW1lbnRzKGNvbnN0
IElkZW50aWZpZXImIGlkZW50KQotewotICAgIGlmIChpZGVudCAhPSBwcm9wZXJ0eU5hbWVzKCku
YXJndW1lbnRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFzaG91bGRP
cHRpbWl6ZUxvY2FscygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3ltYm9s
VGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KGlkZW50LmltcGwoKSk7Ci0gICAg
aWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYg
KG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgbV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNv
ZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1l
bnRzKCkKLXsKLSAgICBBU1NFUlQod2lsbFJlc29sdmVUb0FyZ3VtZW50cyhwcm9wZXJ0eU5hbWVz
KCkuYXJndW1lbnRzKSk7Ci0KLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFi
bGUoKS5nZXQocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy5pbXBsKCkpOwotICAgIEFTU0VSVCgh
ZW50cnkuaXNOdWxsKCkpOwotICAgIHJldHVybiAmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgo
KSk7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVMYXp5UmVnaXN0
ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKiByZWcpCiB7CiAgICAgaWYgKG1fbGFzdExhenlGdW5j
dGlvbiA8PSByZWctPmluZGV4KCkgfHwgcmVnLT5pbmRleCgpIDwgbV9maXJzdExhenlGdW5jdGlv
bikKQEAgLTExNTQsNzIgKzExMjYsMTIyIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdikKICAgICByZXR1cm4gY29uc3Rh
bnRJRDsKIH0KIAotUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKK1Jlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6
OnJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIHVuc2lnbmVkIHJlc29sdmVGbGFn
cykKIHsKICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVy
KQotICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKHRoaXNSZWdp
c3RlcigpLCBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcpOworICAgICAgICByZXR1cm4gUmVz
b2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKHByb3BlcnR5LCB0aGlzUmVnaXN0ZXIoKSwgUmVz
b2x2ZVJlc3VsdDo6UmVhZE9ubHlBdHRyaWJ1dGUpOworCisgICAgU2NvcGVDaGFpbkl0ZXJhdG9y
IGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVu
ZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7CisKKyAgICBpbnQgZGVwdGggPSAwOworICAgIGJvb2wg
ZHluYW1pYyA9IGZhbHNlOworICAgIHVpbnQ4X3QgYXR0cmlidXRlcyA9IDA7CisgICAgZm9yIChp
bnQgaSA9IHNjb3BlRGVwdGgoKS0xOyBpID49IDA7IC0taSkgeworICAgICAgICBzd2l0Y2ggKG1f
c2NvcGVDb250ZXh0U3RhY2tbaV0uYmxvY2tUeXBlKSB7CisgICAgICAgIGNhc2UgV2l0aEJsb2Nr
OgorICAgICAgICAgICAgLy8gSW4gdGhlb3J5IHdlIHNob3VsZCBiZSBhYmxlIHRvIHNraXAgaW50
ZXJ2ZW5pbmcgYmxvY2sgc2NvcGUKKyAgICAgICAgICAgIC8vIG9iamVjdHMsIGJ1dCB3ZSBkb24n
dCBrbm93IHdoaWNoIG9mIHRoZSBMYXppbHlSZWlmeSBvbmVzIGhhdmUKKyAgICAgICAgICAgIC8v
IGFjdHVhbGx5IGJlZW4gcmVpZmllZC4gSW5zdGVhZCBvZiBmb3JjaW5nIGVhZ2VyIHJlaWZpY2F0
aW9uLAorICAgICAgICAgICAgLy8gd2UnbGwgcGVzc2ltaXplICJ3aXRoIiByZXNvbHV0aW9uLCBm
b3JjaW5nIGl0IHRvIHN0YXJ0IGZyb20gdGhlCisgICAgICAgICAgICAvLyB0b3Agb2YgdGhlIHNj
b3BlIGNoYWluLgorICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNv
bHZlKHByb3BlcnR5LCAwKTsKKyAgICAgICAgY2FzZSBGaW5hbGx5QmxvY2s6CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBTY29wZUJsb2NrOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQoKTsK
KyAgICAgICAgQVNTRVJUKGN1cnJlbnRTY29wZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAg
ICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogY3VycmVudFN0YXRpY1Njb3BlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CisgICAgICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBjdXJyZW50U3RhdGljU2NvcGVPYmplY3QtPnN5bWJvbFRh
YmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CisKKyAgICAgICAgLy8gQmxvY2stc2NvcGVkIHBy
b3BlcnR5LgorICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBSZWdp
c3RlcklEKiBsb2NhbCA9IG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0LmJhc2VS
ZWdpc3RlciArIGVudHJ5LmdldEluZGV4KCk7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFk
T25seSgpKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6UmVh
ZE9ubHlBdHRyaWJ1dGU7CisgICAgICAgICAgICBpZiAoZW50cnkuaGFzVGVtcG9yYWxEZWFkWm9u
ZSgpKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6QmFycmll
ckF0dHJpYnV0ZTsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclJl
c29sdmUocHJvcGVydHksIGxvY2FsLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgfQorICAgICAgICAr
K2RlcHRoOworICAgICAgICArK2l0ZXI7CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHBy
b3BlcnR5IHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gYSByZWdpc3Rlci4KLSAgICBpZiAobV9jb2Rl
VHlwZSAhPSBHbG9iYWxDb2RlICYmIHNob3VsZE9wdGltaXplTG9jYWxzKCkpIHsKKyAgICBpZiAo
bV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBl
bnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlmICgh
ZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5h
bWVzKCkuYXJndW1lbnRzKQotICAgICAgICAgICAgICAgIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNz
YXJ5KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBmbGFncyA9IGVudHJ5LmlzUmVhZE9ubHkoKSA/
IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZyA6IDA7CiAgICAgICAgICAgICBSZWdpc3RlcklE
KiBsb2NhbCA9IGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KCZyZWdpc3RlckZvcihlbnRy
eS5nZXRJbmRleCgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0
ZXJSZXNvbHZlKGxvY2FsLCBmbGFncyk7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25s
eSgpKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6UmVhZE9u
bHlBdHRyaWJ1dGU7CisgICAgICAgICAgICBpZiAoZW50cnkuaGFzVGVtcG9yYWxEZWFkWm9uZSgp
KQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6QmFycmllckF0
dHJpYnV0ZTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJn
dW1lbnRzICYmIG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKQorICAgICAgICAgICAgICAgICAgICAm
JiAhKHJlc29sdmVGbGFncyAmIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3JlYXRlQXJndW1lbnRz
RmxhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfYXJndW1l
bnRzKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJs
b2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYXR0cmlidXRlcyB8PSBSZXNvbHZlUmVzdWx0OjpBcmd1bWVudHNBdHRyaWJ1dGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJS
ZXNvbHZlKHByb3BlcnR5LCBsb2NhbCwgYXR0cmlidXRlcyk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICAvLyBDYXNlcyB3aGVyZSB3ZSBjYW5ub3Qgc3RhdGljYWxseSBvcHRpbWl6ZSB0aGUgbG9v
a3VwLgotICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzIHx8ICFj
YW5PcHRpbWl6ZU5vbkxvY2FscygpKQotICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHlu
YW1pY1Jlc29sdmUoMCk7CisgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1
bWVudHMKKyAgICAgICAgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZQorICAgICAgICB8fCAobV9j
b2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIW1f
Y29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkpCisgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0
OjpkeW5hbWljUmVzb2x2ZShwcm9wZXJ0eSwgZGVwdGgpOwogCi0gICAgU2NvcGVDaGFpbkl0ZXJh
dG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9y
IGVuZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsKLSAgICB1
bnNpZ25lZCBmbGFncyA9IDA7CisgICAgZGVwdGggKz0gbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNj
b3BlQ2hhaW4oKTsKICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytkZXB0aCkgewog
ICAgICAgICBKU09iamVjdCogY3VycmVudFNjb3BlID0gaXRlci0+Z2V0KCk7Ci0gICAgICAgIGlm
ICghY3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGZsYWdz
IHw9IFJlc29sdmVSZXN1bHQ6OkR5bmFtaWNGbGFnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0gICAgICAgIAorICAgICAgICBpZiAoIWN1cnJlbnRTY29wZS0+aXNWYXJpYWJsZU9iamVj
dCgpKQorICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKHBy
b3BlcnR5LCBkZXB0aCk7CisKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogY3VycmVudFZhcmlh
YmxlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7
CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBjdXJyZW50VmFyaWFibGVPYmplY3Qt
PnN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAKICAgICAgICAgLy8gRm91bmQg
dGhlIHByb3BlcnR5CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKICAgICAgICAgICAg
IGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2
ZVJlc3VsdDo6UmVhZE9ubHlGbGFnOwotICAgICAgICAgICAgZGVwdGggKz0gbV9jb2RlQmxvY2st
Pm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJl
c29sdmVSZXN1bHQ6OlJlYWRPbmx5QXR0cmlidXRlOworICAgICAgICAgICAgaWYgKGVudHJ5Lmhh
c1RlbXBvcmFsRGVhZFpvbmUoKSkKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJlc29s
dmVSZXN1bHQ6OkJhcnJpZXJBdHRyaWJ1dGU7CiAgICAgICAgICAgICBpZiAoKytpdGVyID09IGVu
ZCkgewotICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFJlc29sdmVSZXN1bHQ6OkR5bmFtaWNG
bGFnKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY0lu
ZGV4ZWRHbG9iYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGRlcHRoLCBjdXJyZW50U2NvcGUs
IGZsYWdzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6aW5kZXhlZEds
b2JhbFJlc29sdmUoZW50cnkuZ2V0SW5kZXgoKSwgY3VycmVudFNjb3BlLCBmbGFncyk7CisgICAg
ICAgICAgICAgICAgaWYgKGR5bmFtaWMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNv
bHZlUmVzdWx0OjpkeW5hbWljSW5kZXhlZEdsb2JhbFJlc29sdmUocHJvcGVydHksIGVudHJ5Lmdl
dEluZGV4KCksIGRlcHRoLCBjdXJyZW50U2NvcGUsIGF0dHJpYnV0ZXMpOworICAgICAgICAgICAg
ICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjppbmRleGVkR2xvYmFsUmVzb2x2ZShwcm9wZXJ0eSwg
ZW50cnkuZ2V0SW5kZXgoKSwgY3VycmVudFNjb3BlLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAg
IH0KICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgICAgICBpZiAoSlNBY3RpdmF0aW9uKiBh
Y3RpdmF0aW9uID0ganNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24qPihjdXJyZW50VmFyaWFibGVP
YmplY3QpKQogICAgICAgICAgICAgICAgIEFTU0VSVChhY3RpdmF0aW9uLT5pc1ZhbGlkU2NvcGVk
TG9va3VwKGVudHJ5LmdldEluZGV4KCkpKTsKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIFJl
c29sdmVSZXN1bHQ6OmxleGljYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGRlcHRoLCBmbGFn
cyk7CisgICAgICAgICAgICByZXR1cm4gZHluYW1pYworICAgICAgICAgICAgICAgID8gUmVzb2x2
ZVJlc3VsdDo6ZHluYW1pY0xleGljYWxSZXNvbHZlKHByb3BlcnR5LCBlbnRyeS5nZXRJbmRleCgp
LCBkZXB0aCwgYXR0cmlidXRlcykKKyAgICAgICAgICAgICAgICA6IFJlc29sdmVSZXN1bHQ6Omxl
eGljYWxSZXNvbHZlKHByb3BlcnR5LCBlbnRyeS5nZXRJbmRleCgpLCBkZXB0aCwgYXR0cmlidXRl
cyk7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBzY29wZVJlcXVpcmVzRHluYW1pY0NoZWNrcyA9
IGZhbHNlOwogICAgICAgICBpZiAoY3VycmVudFZhcmlhYmxlT2JqZWN0LT5pc0R5bmFtaWNTY29w
ZShzY29wZVJlcXVpcmVzRHluYW1pY0NoZWNrcykpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgaWYgKHNjb3BlUmVxdWlyZXNEeW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgZmxhZ3MgfD0g
UmVzb2x2ZVJlc3VsdDo6RHluYW1pY0ZsYWc7CisgICAgICAgICAgICBkeW5hbWljID0gdHJ1ZTsK
ICAgICB9CiAKICAgICAvLyBDYW4ndCBsb2NhdGUgdGhlIHByb3BlcnR5IGJ1dCB3ZSdyZSBhYmxl
IHRvIGF2b2lkIGEgZmV3IGxvb2t1cHMuCiAgICAgSlNPYmplY3QqIHNjb3BlID0gaXRlci0+Z2V0
KCk7Ci0gICAgZGVwdGggKz0gbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKICAg
ICBpZiAoKytpdGVyID09IGVuZCkgewotICAgICAgICBpZiAoKGZsYWdzICYgUmVzb2x2ZVJlc3Vs
dDo6RHluYW1pY0ZsYWcpICYmIGRlcHRoKQotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1
bHQ6OmR5bmFtaWNHbG9iYWxSZXNvbHZlKGRlcHRoLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0OjpnbG9iYWxSZXNvbHZlKHNjb3BlKTsKKyAgICAgICAgaWYgKGR5bmFtaWMg
JiYgZGVwdGgpCisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY0dsb2Jh
bFJlc29sdmUocHJvcGVydHksIGRlcHRoLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXNvbHZl
UmVzdWx0OjpnbG9iYWxSZXNvbHZlKHByb3BlcnR5LCBzY29wZSk7CiAgICAgfQotICAgIHJldHVy
biBSZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZShkZXB0aCk7CisgICAgcmV0dXJuIFJlc29s
dmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKHByb3BlcnR5LCBkZXB0aCk7CiB9CiAKIFJlc29sdmVS
ZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDb25zdERlY2woY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHkpCkBAIC0xMjI4LDkgKzEyNTAsOSBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2Rl
R2VuZXJhdG9yOjpyZXNvbHZlQ29uc3REZWNsKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQog
ICAgIGlmIChtX2NvZGVUeXBlICE9IEV2YWxDb2RlICYmIG1fY29kZVR5cGUgIT0gR2xvYmFsQ29k
ZSkgewogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQo
cHJvcGVydHkuaW1wbCgpKTsKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAg
ICAgICAgdW5zaWduZWQgZmxhZ3MgPSBlbnRyeS5pc1JlYWRPbmx5KCkgPyBSZXNvbHZlUmVzdWx0
OjpSZWFkT25seUZsYWcgOiAwOworICAgICAgICAgICAgdWludDhfdCBhdHRyaWJ1dGVzID0gZW50
cnkuaXNSZWFkT25seSgpID8gUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlBdHRyaWJ1dGUgOiAwOwog
ICAgICAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vz
c2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgICAgICAgICAgcmV0dXJu
IFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZShsb2NhbCwgZmxhZ3MpOworICAgICAgICAg
ICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZShwcm9wZXJ0eSwgbG9jYWws
IGF0dHJpYnV0ZXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjQ3LDEzICsxMjY5LDEzIEBA
IFJlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDb25zdERlY2woY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHkpCiAgICAgICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoKytpdGVyID09IGVuZCkKLSAgICAgICAgICAg
IHJldHVybiBSZXNvbHZlUmVzdWx0OjppbmRleGVkR2xvYmFsUmVzb2x2ZShlbnRyeS5nZXRJbmRl
eCgpLCBjdXJyZW50VmFyaWFibGVPYmplY3QsIDApOwotICAgICAgICByZXR1cm4gUmVzb2x2ZVJl
c3VsdDo6bGV4aWNhbFJlc29sdmUoZW50cnkuZ2V0SW5kZXgoKSwgZGVwdGggKyBzY29wZURlcHRo
KCksIDApOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmluZGV4ZWRHbG9iYWxS
ZXNvbHZlKHByb3BlcnR5LCBlbnRyeS5nZXRJbmRleCgpLCBjdXJyZW50VmFyaWFibGVPYmplY3Qs
IDApOworICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6bGV4aWNhbFJlc29sdmUocHJvcGVy
dHksIGVudHJ5LmdldEluZGV4KCksIGRlcHRoICsgc2NvcGVEZXB0aCgpLCAwKTsKICAgICB9CiAK
ICAgICAvLyBGSVhNRTogV2hpbGUgdGhpcyBjb2RlIHNob3VsZCBvbmx5IGJlIGhpdCBpbiBhbiBl
dmFsIGJsb2NrLCBpdCB3aWxsIGFzc2lnbgogICAgIC8vIHRvIHRoZSB3cm9uZyBiYXNlIGlmIHBy
b3BlcnR5IGV4aXN0cyBpbiBhbiBpbnRlcnZlbmluZyB3aXRoIHNjb3BlLgotICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZShzY29wZURlcHRoKCkpOworICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZShwcm9wZXJ0eSwgc2NvcGVEZXB0aCgpKTsKIH0K
IAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENoZWNrSGFzSW5zdGFuY2UoUmVnaXN0ZXJJ
RCogYmFzZSkKQEAgLTEyNzksNyArMTMwMSw3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OnNo
b3VsZEF2b2lkUmVzb2x2ZUdsb2JhbCgpCiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nbG9iYWxS
ZXNvbHZlSW5mb0NvdW50KCkgPiBtYXhHbG9iYWxSZXNvbHZlcyAmJiAhbV9sYWJlbFNjb3Blcy5z
aXplKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZShS
ZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRSZXNvbHZlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJl
c3VsdCkKIHsKICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc1N0YXRpYygpKQogICAgICAgICByZXR1
cm4gZW1pdEdldFN0YXRpY1Zhcihkc3QsIHJlc29sdmVSZXN1bHQpOwpAQCAtMTI5Miw3ICsxMzE0
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYKICAgICAgICAgYm9vbCBkeW5hbWljID0gcmVz
b2x2ZVJlc3VsdC5pc0R5bmFtaWMoKSAmJiByZXNvbHZlUmVzdWx0LmRlcHRoKCk7CiAgICAgICAg
IFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShkeW5hbWljID8gb3Bf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYyA6IG9wX3Jlc29sdmVfZ2xvYmFsKTsKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYWRkQ29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDAp
OwogICAgICAgICBpZiAoZHluYW1pYykKQEAgLTEzMDYsNyArMTMyOCw3IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJl
c29sdmVSZXN1bHQmCiAgICAgICAgIC8vIGxvb2t1cCBjaGFpbiwgYWx0aG91Z2ggd2Ugc3RpbGwg
bmVlZCB0byBoYXNoIGZyb20gdGhlbiBvbi4KICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfc2tpcCk7CiAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFkZENvbnN0YW50KHJlc29sdmVSZXN1bHQucHJvcGVydHkoKSkpOwogICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5kZXB0aCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICByZXR1cm4gZHN0OwpAQCAtMTMxNCwxMiAr
MTMzNiwxMiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmUoUmVn
aXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JgogCiAgICAgVmFsdWVQcm9maWxlKiBw
cm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmUpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRD
b25zdGFudChwcm9wZXJ0eSkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFu
dChyZXNvbHZlUmVzdWx0LnByb3BlcnR5KCkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvZmlsZSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlQmFzZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1
bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZShSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQpCiB7CiAgICAgaWYgKHJlc29sdmVSZXN1
bHQuaXNHbG9iYWwoKSAmJiAhcmVzb2x2ZVJlc3VsdC5pc0R5bmFtaWMoKSkKICAgICAgICAgLy8g
R2xvYmFsIG9iamVjdCBpcyB0aGUgYmFzZQpAQCAtMTMyOCwzNiArMTM1MCwzNiBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNlKFJlZ2lzdGVySUQqIGRzdCwg
Y29uc3QgUmVzb2x2ZVJlcwogICAgIC8vIFdlIGNhbid0IG9wdGltaXNlIGF0IGFsbCA6LSgKICAg
ICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV9i
YXNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvZmlsZSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29s
dmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3Rl
cklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQpCiB7CiAgICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHJldHVybiBlbWl0UmVzb2x2
ZUJhc2UoZHN0LCByZXNvbHZlUmVzdWx0LCBwcm9wZXJ0eSk7CisgICAgICAgIHJldHVybiBlbWl0
UmVzb2x2ZUJhc2UoZHN0LCByZXNvbHZlUmVzdWx0KTsKIAogICAgIGlmIChyZXNvbHZlUmVzdWx0
LmlzR2xvYmFsKCkgJiYgIXJlc29sdmVSZXN1bHQuaXNEeW5hbWljKCkpIHsKICAgICAgICAgLy8g
R2xvYmFsIG9iamVjdCBpcyB0aGUgYmFzZQogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVz
dWx0ID0gZW1pdExvYWQoZHN0LCBKU1ZhbHVlKHJlc29sdmVSZXN1bHQuZ2xvYmFsT2JqZWN0KCkp
KTsKICAgICAgICAgZW1pdE9wY29kZShvcF9lbnN1cmVfcHJvcGVydHlfZXhpc3RzKTsKICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiAgICAgfQogCiAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1p
c2UgYXQgYWxsIDotKAogICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9w
Y29kZShvcF9yZXNvbHZlX2Jhc2UpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmlu
ZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkp
OworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChyZXNvbHZlUmVzdWx0LnBy
b3BlcnR5KCkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodHJ1ZSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlKFJlZ2lzdGVySUQqIGJh
c2VEc3QsIFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVS
ZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2UoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0
ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCkKIHsKICAg
ICBpZiAocmVzb2x2ZVJlc3VsdC5pc0dsb2JhbCgpICYmICFyZXNvbHZlUmVzdWx0LmlzRHluYW1p
YygpKSB7CiAgICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaXMgdGhlIGJhc2UKQEAgLTEzNzIsNyAr
MTM5NCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhC
YXNlKFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVyCiAgICAgICAgIGlmIChzaG91bGRBdm9p
ZFJlc29sdmVHbG9iYWwoKSkgewogICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0g
ZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHByb3BEc3QtPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYWRkQ29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgICAgICAgICByZXR1cm4g
YmFzZURzdDsKICAgICAgICAgfQpAQCAtMTM4NSw3ICsxNDA3LDcgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2UoUmVnaXN0ZXJJRCogYmFzZURzdCwg
UmVnaXN0ZXIKICNlbmRpZgogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJv
ZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV9nbG9iYWwpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocHJvcERzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
ZGRDb25zdGFudChwcm9wZXJ0eSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRk
Q29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CkBAIC0xMzk1LDEyICsxNDE3LDEyIEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlKFJlZ2lz
dGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVyCiAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1p
dFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfd2l0aF9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYmFzZURzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHBy
b3BEc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChw
cm9wZXJ0eSkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChyZXNvbHZl
UmVzdWx0LnByb3BlcnR5KCkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7
CiAgICAgcmV0dXJuIGJhc2VEc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVzb2x2ZVdpdGhUaGlzKFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVySUQqIHBy
b3BEc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZl
V2l0aFRoaXMoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3Qg
UmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCkKIHsKICAgICBpZiAocmVzb2x2ZVJlc3VsdC5p
c1N0YXRpYygpKSB7CiAgICAgICAgIGVtaXRMb2FkKGJhc2VEc3QsIGpzVW5kZWZpbmVkKCkpOwpA
QCAtMTQxMywxMyArMTQzNSwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFJlc29sdmVXaXRoVGhpcyhSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcgogICAgICAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRo
X3RoaXMpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZURzdC0+aW5kZXgoKSk7
CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wRHN0LT5pbmRleCgpKTsKLSAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChyZXNvbHZlUmVzdWx0LnByb3BlcnR5
KCkpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICBy
ZXR1cm4gYmFzZURzdDsKICAgICB9CiAKICAgICBlbWl0TG9hZChiYXNlRHN0LCBqc1VuZGVmaW5l
ZCgpKTsKLSAgICByZXR1cm4gZW1pdFJlc29sdmUocHJvcERzdCwgcmVzb2x2ZVJlc3VsdCwgcHJv
cGVydHkpOworICAgIHJldHVybiBlbWl0UmVzb2x2ZShwcm9wRHN0LCByZXNvbHZlUmVzdWx0KTsK
IH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdGF0aWNWYXIoUmVn
aXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVzdWx0KQpAQCAtMTQy
OCwyMiArMTQ1MCwzMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFN0
YXRpY1ZhcihSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZQogCiAgICAgc3dpdGNoIChy
ZXNvbHZlUmVzdWx0LnR5cGUoKSkgewogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVnaXN0ZXI6
Ci0gICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seVJlZ2lzdGVyOgorICAgICAgICBpZiAo
cmVzb2x2ZVJlc3VsdC5uZWVkc0JhcnJpZXIoKSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCog
cHJvcGVydHkgPSBlbWl0TG9hZCgwLCByZXNvbHZlUmVzdWx0LnByb3BlcnR5KCkpOworICAgICAg
ICAgICAgZW1pdE9wY29kZShvcF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQpOworICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQubG9jYWwoKS0+aW5kZXgoKSk7
CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChkc3QgPT0gaWdub3JlZFJlc3VsdCgpKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgcmVzb2x2ZVJlc3VsdC5sb2NhbCgpKTsKIAogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6TGV4
aWNhbDoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5TGV4aWNhbDoKICAgICAgICAg
cHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfc2NvcGVkX3Zhcik7CiAgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHJlc29sdmVSZXN1bHQuZGVwdGgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChwcm9maWxlKTsKKyAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQubmVlZHNCYXJyaWVy
KCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZW1pdExvYWQoMCwgcmVz
b2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfZW5zdXJl
X2xvY2FsX2luaXRpYWxpemVkKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5
LT5pbmRleCgpKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gZHN0OwogCiAgICAgY2FzZSBS
ZXNvbHZlUmVzdWx0OjpJbmRleGVkR2xvYmFsOgotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVh
ZE9ubHlJbmRleGVkR2xvYmFsOgogICAgICAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfcHV0
X2dsb2JhbF92YXIpIHsKICAgICAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgICAgIGlu
dCBzcmNJbmRleDsKQEAgLTE0NjgsMTEgKzE0OTksOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFB1dFN0YXRpY1Zhcihjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVz
dQogewogICAgIHN3aXRjaCAocmVzb2x2ZVJlc3VsdC50eXBlKCkpIHsKICAgICBjYXNlIFJlc29s
dmVSZXN1bHQ6OlJlZ2lzdGVyOgotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlSZWdp
c3RlcjoKICAgICAgICAgcmV0dXJuIG1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQocmVzb2x2ZVJl
c3VsdC5sb2NhbCgpLCB2YWx1ZSk7CiAKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkxleGljYWw6
Ci0gICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUxleGljYWw6CiAgICAgICAgIGVtaXRP
cGNvZGUob3BfcHV0X3Njb3BlZF92YXIpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJl
c29sdmVSZXN1bHQuZGVwdGgoKSk7CkBAIC0xNDgwLDcgKzE1MDksNiBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFN0YXRpY1Zhcihjb25zdCBSZXNvbHZlUmVzdWx0JiBy
ZXNvbHZlUmVzdQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKICAgICBjYXNlIFJlc29sdmVSZXN1
bHQ6OkluZGV4ZWRHbG9iYWw6Ci0gICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUluZGV4
ZWRHbG9iYWw6CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X2dsb2JhbF92YXIpOwogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKQEAgLTE3MjYsNyArMTc1NCw3
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJl
Z2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIHVuc2lnbmVkIGlu
ZGV4LCBib29sIGRvTnVsbENoZWNrKQogewotICAgIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2Fy
eSgpOworICAgIHJlaWZ5U2NvcGVzKCk7CiAgICAgZW1pdE9wY29kZShvcF9uZXdfZnVuYyk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGluZGV4KTsKQEAgLTE3NDcsNyArMTc3NSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJlZ2lzdGVySUQqIHIwLCBG
dW5jRXhwCiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBuLT5ib2R5KCk7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHByKG1ha2VGdW5jdGlv
bihtX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7CiAgICAgCi0gICAgY3JlYXRlQWN0aXZhdGlvbklm
TmVjZXNzYXJ5KCk7CisgICAgcmVpZnlTY29wZXMoKTsKICAgICBlbWl0T3Bjb2RlKG9wX25ld19m
dW5jX2V4cCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIwLT5pbmRleCgpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwpAQCAtMTc1OSwzNCArMTc4Nyw2IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGZ1bmMsIENhbGxBCiAgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGwsIGRzdCwgZnVu
YywgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogfQogCi12
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpCi17Ci0g
ICAgaWYgKG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBJZiB3ZSdyZSBpbiBzdHJpY3QgbW9kZSB3ZSB0ZWFyIG9mZiB0aGUgYXJndW1l
bnRzIG9uIGZ1bmN0aW9uCi0gICAgLy8gZW50cnksIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVj
ayBpZiB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGVtCi0gICAgLy8gbm93Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW1pdE9wY29kZShv
cF9jcmVhdGVfYXJndW1lbnRzKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxv
Y2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOwotfQotCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpj
cmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX2hhc0NyZWF0ZWRBY3Rp
dmF0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpKQotICAgICAgICByZXR1cm47Ci0gICAgZW1pdE9wY29kZShvcF9jcmVhdGVf
YWN0aXZhdGlvbik7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lz
dGVyLT5pbmRleCgpKTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVudHMm
IGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KQogewogICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsX2V2YWwsIGRz
dCwgZnVuYywgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwpA
QCAtMTk2OSw5ICsxOTY5LDEwIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb1ByaW1p
dGl2ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUpCiB7CisgICAg
cmVpZnlTY29wZXMoKTsKICAgICBBU1NFUlQoc2NvcGUtPmlzVGVtcG9yYXJ5KCkpOwogICAgIENv
bnRyb2xGbG93Q29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQuaXNGaW5hbGx5QmxvY2sgPSBm
YWxzZTsKKyAgICBjb250ZXh0LmJsb2NrVHlwZSA9IFdpdGhCbG9jazsKICAgICBtX3Njb3BlQ29u
dGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKICAgICBtX2R5bmFtaWNTY29wZURlcHRoKys7CiAK
QEAgLTE5ODEsNyArMTk4Miw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKQogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFBvcFNjb3BlKCkKIHsKICAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOwot
ICAgIEFTU0VSVCghbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkuaXNGaW5hbGx5QmxvY2spOwor
ICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5ibG9ja1R5cGUgPT0gV2l0aEJs
b2NrKTsKIAogICAgIGVtaXRPcGNvZGUob3BfcG9wX3Njb3BlKTsKIApAQCAtMjAwNyw3ICsyMDA4
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayhEZWJ1Z0hvb2tJRCBk
ZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW4KIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1
c2hGaW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0LCBSZWdpc3RlcklEKiByZXRBZGRyRHN0KQog
ewogICAgIENvbnRyb2xGbG93Q29udGV4dCBzY29wZTsKLSAgICBzY29wZS5pc0ZpbmFsbHlCbG9j
ayA9IHRydWU7CisgICAgc2NvcGUuYmxvY2tUeXBlID0gRmluYWxseUJsb2NrOwogICAgIEZpbmFs
bHlDb250ZXh0IGNvbnRleHQgPSB7IHRhcmdldCwgcmV0QWRkckRzdCB9OwogICAgIHNjb3BlLmZp
bmFsbHlDb250ZXh0ID0gY29udGV4dDsKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLmFwcGVuZChz
Y29wZSk7CkBAIC0yMDE3LDcgKzIwMTgsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNo
RmluYWxseUNvbnRleHQoTGFiZWwqIHRhcmdldCwgUmVnaXN0ZXJJRCogcmV0QWRkckRzdAogdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNvbnRleHQoKQogewogICAgIEFTU0VSVCht
X3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7Ci0gICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3Rh
Y2subGFzdCgpLmlzRmluYWxseUJsb2NrKTsKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFj
ay5sYXN0KCkuYmxvY2tUeXBlID09IEZpbmFsbHlCbG9jayk7CiAgICAgQVNTRVJUKG1fZmluYWxs
eURlcHRoID4gMCk7CiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAg
bV9maW5hbGx5RGVwdGgtLTsKQEAgLTIxMDAsNzAgKzIxMDEsNiBAQCBMYWJlbFNjb3BlKiBCeXRl
Y29kZUdlbmVyYXRvcjo6Y29udGludWVUYXJnZXQoY29uc3QgSWRlbnRpZmllciYgbmFtZSkKICAg
ICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBDb250cm9sRmxvd0NvbnRleHQqIHRv
cFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQqIGJvdHRvbVNjb3BlKQotewotICAgIHdoaWxlICh0
b3BTY29wZSA+IGJvdHRvbVNjb3BlKSB7Ci0gICAgICAgIC8vIEZpcnN0IHdlIGNvdW50IHRoZSBu
dW1iZXIgb2YgZHluYW1pYyBzY29wZXMgd2UgbmVlZCB0byByZW1vdmUgdG8gZ2V0Ci0gICAgICAg
IC8vIHRvIGEgZmluYWxseSBibG9jay4KLSAgICAgICAgaW50IG5Ob3JtYWxTY29wZXMgPSAwOwot
ICAgICAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21TY29wZSkgewotICAgICAgICAgICAgaWYg
KHRvcFNjb3BlLT5pc0ZpbmFsbHlCbG9jaykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICsrbk5vcm1hbFNjb3BlczsKLSAgICAgICAgICAgIC0tdG9wU2NvcGU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobk5vcm1hbFNjb3BlcykgewotICAgICAgICAgICAgc2l6ZV90IGJl
Z2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotCi0gICAgICAgICAgICAvLyBXZSBuZWVkIHRv
IHJlbW92ZSBhIG51bWJlciBvZiBkeW5hbWljIHNjb3BlcyB0byBnZXQgdG8gdGhlIG5leHQKLSAg
ICAgICAgICAgIC8vIGZpbmFsbHkgYmxvY2sKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3Bfam1w
X3Njb3Blcyk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobk5vcm1hbFNjb3Bl
cyk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRvcFNjb3BlID09IGJvdHRvbVNjb3BlIHRoZW4gdGhl
cmUgaXNuJ3QgYWN0dWFsbHkgYSBmaW5hbGx5IGJsb2NrCi0gICAgICAgICAgICAvLyBsZWZ0IHRv
IGVtaXQsIHNvIG1ha2UgdGhlIGptcF9zY29wZXMganVtcCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0
IGxhYmVsCi0gICAgICAgICAgICBpZiAodG9wU2NvcGUgPT0gYm90dG9tU2NvcGUpIHsKLSAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0
cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UganVzdCB1c2Ugam1wX3Nj
b3BlcyB0byBwb3AgYSBncm91cCBvZiBzY29wZXMgYW5kIGdvCi0gICAgICAgICAgICAvLyB0byB0
aGUgbmV4dCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBuZXh0SW5zbiA9
IG5ld0xhYmVsKCk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobmV4dEluc24t
PmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAgICAgICAgICAgZW1pdExh
YmVsKG5leHRJbnNuLmdldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlICh0b3BTY29w
ZSA+IGJvdHRvbVNjb3BlICYmIHRvcFNjb3BlLT5pc0ZpbmFsbHlCbG9jaykgewotICAgICAgICAg
ICAgZW1pdEp1bXBTdWJyb3V0aW5lKHRvcFNjb3BlLT5maW5hbGx5Q29udGV4dC5yZXRBZGRyRHN0
LCB0b3BTY29wZS0+ZmluYWxseUNvbnRleHQuZmluYWxseUFkZHIpOwotICAgICAgICAgICAgLS10
b3BTY29wZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZW1pdEp1bXAodGFyZ2V0KTsK
LX0KLQotUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wU2NvcGVz
KExhYmVsKiB0YXJnZXQsIGludCB0YXJnZXRTY29wZURlcHRoKQotewotICAgIEFTU0VSVChzY29w
ZURlcHRoKCkgLSB0YXJnZXRTY29wZURlcHRoID49IDApOwotICAgIEFTU0VSVCh0YXJnZXQtPmlz
Rm9yd2FyZCgpKTsKLQotICAgIHNpemVfdCBzY29wZURlbHRhID0gc2NvcGVEZXB0aCgpIC0gdGFy
Z2V0U2NvcGVEZXB0aDsKLSAgICBBU1NFUlQoc2NvcGVEZWx0YSA8PSBtX3Njb3BlQ29udGV4dFN0
YWNrLnNpemUoKSk7Ci0gICAgaWYgKCFzY29wZURlbHRhKQotICAgICAgICByZXR1cm4gZW1pdEp1
bXAodGFyZ2V0KTsKLQotICAgIGlmIChtX2ZpbmFsbHlEZXB0aCkKLSAgICAgICAgcmV0dXJuIGVt
aXRDb21wbGV4SnVtcFNjb3Blcyh0YXJnZXQsICZtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKSwg
Jm1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpIC0gc2NvcGVEZWx0YSk7Ci0KLSAgICBzaXplX3Qg
YmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0KLSAgICBlbWl0T3Bjb2RlKG9wX2ptcF9z
Y29wZXMpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZURlbHRhKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpKTsKLSAgICByZXR1cm4gdGFyZ2V0OwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEdldFByb3BlcnR5TmFtZXMoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBi
YXNlLCBSZWdpc3RlcklEKiBpLCBSZWdpc3RlcklEKiBzaXplLCBMYWJlbCogYnJlYWtUYXJnZXQp
CiB7CiAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwpAQCAtMjE5Niwx
MiArMjEzMywxMiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKFJl
Z2lzdGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogc3RhcgogICAgIG1fdXNlc0V4Y2VwdGlv
bnMgPSB0cnVlOwogI2lmIEVOQUJMRShKSVQpCiAjaWYgRU5BQkxFKExMSU5UKQotICAgIEhhbmRs
ZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3Ry
dWN0aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGgs
IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmxsaW50X29wX2NhdGNoKSkpIH07Cisg
ICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAw
KSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9ibG9ja1Nj
b3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KCZsbGludF9vcF9jYXRjaCkpKSB9OwogI2Vsc2UKLSAgICBIYW5kbGVySW5mbyBpbmZvID0g
eyBzdGFydC0+YmluZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXpl
KCksIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRpb25M
YWJlbCgpIH07CisgICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVu
ZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRo
ICsgbV9ibG9ja1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRpb25MYWJl
bCgpIH07CiAjZW5kaWYKICNlbHNlCi0gICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJp
bmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFt
aWNTY29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCB9OworICAgIEhhbmRsZXJJbmZvIGluZm8g
PSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNp
emUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsgbV9iYXNlU2Nv
cGVEZXB0aCB9OwogI2VuZGlmCiAKICAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0aW9uSGFuZGxl
cihpbmZvKTsKQEAgLTIyMzMsMTcgKzIxNzAsMjAyIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRTdWJyb3V0aW5lUmV0dXJuKFJlZ2lzdGVySUQqIHJldEFkZHJTcmMpCiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHJldEFkZHJTcmMtPmluZGV4KCkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UHVzaE5ld1Njb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQorc3RydWN0IFJlaWZpY2F0aW9uV29y
a2xpc3RJdGVtIHsKKyAgICBSZWdpc3RlcklEKiByZWlmaWVkU2NvcGVSZWdpc3RlcjsKKyAgICBK
U09iamVjdCogc2NvcGVUZW1wbGF0ZTsKKyAgICBSZWdpc3RlcklEKiBiYXNlUmVnaXN0ZXI7Cit9
OworCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWlmeVNjb3BlcygpCit7CisgICAgVmVjdG9y
PFJlaWZpY2F0aW9uV29ya2xpc3RJdGVtPiB3b3JrbGlzdDsKKyAgICBTY29wZUNoYWluSXRlcmF0
b3IgaXRlciA9IG1fc2NvcGVDaGFpbi0+YmVnaW4oKTsKKyAgICBpbnQgaTsKKworICAgIC8vIEZp
cnN0LCB3YWxrIHRoZSBzY29wZSBjaGFpbiB0byBzZWUgd2hhdCBtaWdodCBuZWVkIHJlaWZpY2F0
aW9uLgorICAgIGZvciAoaSA9IHNjb3BlRGVwdGgoKS0xOyBpID49IDA7IC0taSkgeworICAgICAg
ICBzd2l0Y2ggKG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uYmxvY2tUeXBlKSB7CisgICAgICAgIGNh
c2UgV2l0aEJsb2NrOgorICAgICAgICAgICAgLy8gUHVzaGluZyBhIGB3aXRoJyBibG9jayBmb3Jj
ZXMgb3V0ZXIgc2NvcGVzIHRvIGJlIHJlaWZpZWQsIHNvIHdlCisgICAgICAgICAgICAvLyBkb24n
dCBuZWVkIHRvIGRvIHNvIGhlcmUuCisgICAgICAgICAgICBnb3RvIHJlaWZ5OworICAgICAgICBj
YXNlIEZpbmFsbHlCbG9jazoKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIFNj
b3BlQmxvY2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgSlNPYmplY3Qq
IGN1cnJlbnRTY29wZSA9IGl0ZXItPmdldCgpOworICAgICAgICBBU1NFUlQoY3VycmVudFNjb3Bl
LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgICAgICArK2l0ZXI7CisKKyAgICAgICAgc3dp
dGNoIChtX3Njb3BlQ29udGV4dFN0YWNrW2ldLnNjb3BlQ29udGV4dC5yZWlmeU1vZGUpIHsKKyAg
ICAgICAgY2FzZSBTY29wZUNvbnRleHQ6OkVhZ2VybHlSZWlmeToKKyAgICAgICAgICAgIC8vIExp
a2UgYSBgd2l0aCcgYmxvY2ssIGVudGVyaW5nIGFuIEVhZ2VybHlSZWlmeSBibG9jayBmb3JjZXMK
KyAgICAgICAgICAgIC8vIHJlaWZpY2F0aW9uLCBzbyB3ZSBuZWVkIGxvb2sgbm8gZmFydGhlci4K
KyAgICAgICAgICAgIGdvdG8gcmVpZnk7CisgICAgICAgIGNhc2UgU2NvcGVDb250ZXh0OjpMYXpp
bHlSZWlmeTogeworICAgICAgICAgICAgUmVpZmljYXRpb25Xb3JrbGlzdEl0ZW0gaXRlbTsKKyAg
ICAgICAgICAgIGl0ZW0ucmVpZmllZFNjb3BlUmVnaXN0ZXIgPSBtX3Njb3BlQ29udGV4dFN0YWNr
W2ldLnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXI7CisgICAgICAgICAgICBpdGVtLnNjb3BlVGVt
cGxhdGUgPSBjdXJyZW50U2NvcGU7CisgICAgICAgICAgICBpdGVtLmJhc2VSZWdpc3RlciA9IG1f
c2NvcGVDb250ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0LmJhc2VSZWdpc3RlcjsKKyAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZChpdGVtKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9IGNhc2UgU2NvcGVDb250ZXh0OjpOZXZlclJlaWZ5OgorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworcmVpZnk6CisgICAgLy8gSWYg
d2UgdHJhdmVyc2VkIHRocm91Z2ggdGhlIHdob2xlIGJsb2NrIHNjb3BlIGNoYWluLCBwZXJoYXBz
IHdlIG5lZWQgdG8KKyAgICAvLyByZWlmeSB0aGUgYWN0aXZhdGlvbiBmb3IgdGhlIGZ1bmN0aW9u
LgorICAgIGlmIChpIDwgMCAmJiAhbV9oYXNDcmVhdGVkQWN0aXZhdGlvbiAmJiBtX2NvZGVCbG9j
ay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKSB7CisgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRl
X2FjdGl2YXRpb24pOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9u
UmVnaXN0ZXItPmluZGV4KCkpOworICAgIH0KKworICAgIHdoaWxlICh3b3JrbGlzdC5zaXplKCkp
IHsKKyAgICAgICAgUmVpZmljYXRpb25Xb3JrbGlzdEl0ZW0gaXRlbSA9IHdvcmtsaXN0Lmxhc3Qo
KTsKKyAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOworICAgICAgICBSZWdpc3RlcklEKiB0
ZW1wbCA9IGVtaXRMb2FkKDAsIEpTVmFsdWUoaXRlbS5zY29wZVRlbXBsYXRlKSk7CisgICAgICAg
IGVtaXRPcGNvZGUob3BfcmVpZnlfc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoaXRlbS5yZWlmaWVkU2NvcGVSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCh0ZW1wbC0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChpdGVtLmJhc2VSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQorfQorCitQYXNzUmVmUHRy
PExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBTY29wZXMoTGFiZWwqIHRhcmdldCwg
aW50IHRhcmdldFNjb3BlRGVwdGgpCiB7CisgICAgQVNTRVJUKHNjb3BlRGVwdGgoKSAtIHRhcmdl
dFNjb3BlRGVwdGggPj0gMCk7CisgICAgQVNTRVJUKHRhcmdldC0+aXNGb3J3YXJkKCkpOworCisg
ICAgc2l6ZV90IHNjb3BlRGVsdGEgPSBzY29wZURlcHRoKCkgLSB0YXJnZXRTY29wZURlcHRoOwor
ICAgIEFTU0VSVChzY29wZURlbHRhIDw9IG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKKwor
ICAgIHdoaWxlIChzY29wZURlbHRhLS0pIHsKKyAgICAgICAgQ29udHJvbEZsb3dDb250ZXh0KiBj
b250ZXh0ID0gJm1fc2NvcGVDb250ZXh0U3RhY2tbdGFyZ2V0U2NvcGVEZXB0aCArIHNjb3BlRGVs
dGFdOworICAgICAgICBzd2l0Y2ggKGNvbnRleHQtPmJsb2NrVHlwZSkgeworICAgICAgICBjYXNl
IFdpdGhCbG9jazoKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfcG9wX3Njb3BlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpbmFsbHlCbG9jazoKKyAgICAgICAgICAgIGVt
aXRKdW1wU3Vicm91dGluZShjb250ZXh0LT5maW5hbGx5Q29udGV4dC5yZXRBZGRyRHN0LCBjb250
ZXh0LT5maW5hbGx5Q29udGV4dC5maW5hbGx5QWRkcik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTY29wZUJsb2NrOgorICAgICAgICAgICAgc3dpdGNoIChjb250ZXh0LT5zY29w
ZUNvbnRleHQucmVpZnlNb2RlKSB7CisgICAgICAgICAgICBjYXNlIFNjb3BlQ29udGV4dDo6RWFn
ZXJseVJlaWZ5OgorICAgICAgICAgICAgY2FzZSBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5Ogor
ICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfdGVhcl9vZmZfc2NvcGUpOworICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LT5zY29wZUNvbnRleHQubGFzdFJl
Z2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgU2NvcGVDb250ZXh0OjpOZXZlclJlaWZ5OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY29udGV4dC0tOworICAgIH0KKworICAgIHJldHVybiBlbWl0SnVt
cCh0YXJnZXQpOworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoQmxvY2tTY29wZShK
U1N0YXRpY1Njb3BlT2JqZWN0ICpzY29wZVRlbXBsYXRlLCBTY29wZUNvbnRleHQ6OlJlaWZ5TW9k
ZSByZWlmeU1vZGUpCit7CisgICAgLy8gUmVzZXJ2ZSBhIGJsb2NrIG9mIGNvbnRpZ3VvdXMgcmVn
aXN0ZXJzIGZvciB0aGUgdmFyaWFibGVzLiBXZSBob2xkIGEKKyAgICAvLyByZWZlcmVuY2Ugb24g
dGhlIGxhc3QgcmVnaXN0ZXIsIHByZXZlbnRpbmcgcmVjbGFtYXRpb24gb2YgYW55IHByZXZpb3Vz
CisgICAgLy8gcmVnaXN0ZXIuCisgICAgLy8KKyAgICAvLyBJbiB0aGUgZnV0dXJlIHdlJ2xsIHNo
dWZmbGUgYXJvdW5kIHRoZSBzeW1ib2wgdGFibGUgdG8gcHV0IHRoZSBjYXB0dXJlZAorICAgIC8v
IHZhcmlhYmxlcyBmaXJzdCwgYW5kIHBvcEJsb2NrU2NvcGUgd2lsbCByZW1vdmUgc3ltYm9sIHRh
YmxlIGVudHJpZXMgZm9yCisgICAgLy8gdW5jYXB0dXJlZCB2YXJpYWJsZXMuCisgICAgUmVnaXN0
ZXJJRCogYmFzZSA9IDA7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxhc3QgPSAwOworICAgIHNp
emVfdCBuID0gc2NvcGVUZW1wbGF0ZS0+c3ltYm9sVGFibGUoKS5zaXplKCk7CisgICAgQVNTRVJU
KG4pOworICAgIHdoaWxlIChuLS0pIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbmV4dCA9IG5ld1Jl
Z2lzdGVyKCk7CisgICAgICAgIEFTU0VSVCghbGFzdCB8fCAobmV4dCA9PSBsYXN0LmdldCgpICsg
MSkpOworCisgICAgICAgIC8vIFNldCB0aGUgcmVnaXN0ZXIncyB2YWx1ZSB0byBKU1ZhbHVlKCks
IHRoZSBlbXB0eSB2YWx1ZS4gUGVyaGFwcyB3ZQorICAgICAgICAvLyBzaG91bGQgZG8gdGhpcyBv
bmx5IGZvciBCYXJyaWVyUmVnaXN0ZXJzLgorICAgICAgICBlbWl0T3Bjb2RlKG9wX2luaXRfbGF6
eV9yZWcpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobmV4dC0+aW5kZXgoKSk7CisK
KyAgICAgICAgaWYgKCFsYXN0KQorICAgICAgICAgICAgYmFzZSA9IG5leHQ7CisgICAgICAgIGxh
c3QgPSBuZXh0OworICAgIH0KKyAgICBBU1NFUlQobGFzdCk7CisgICAgCisgICAgLy8gTm93IGFs
bG9jYXRlIGEgcmVnaXN0ZXIgZm9yIHRoZSBibG9jayBzY29wZSBvYmplY3QgaXRzZWxmLCBpZiBu
ZWNlc3NhcnkuCisgICAgaWYgKHJlaWZ5TW9kZSAhPSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnkp
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbmV4dCA9IG5ld1JlZ2lzdGVyKCk7CisgICAgICAgIEFT
U0VSVChuZXh0ID09IGxhc3QuZ2V0KCkgKyAxKTsKKyAgICAgICAgbGFzdCA9IG5leHQ7CisgICAg
fQorCisgICAgLy8gRmluYWxseSB1cGRhdGUgdGhlIGNvbnRyb2wgZmxvdyBzdGFjaywgcHVzaCB0
aGUgdGVtcGxhdGUgb250byB0aGUgc2NvcGUKKyAgICAvLyBjaGFpbiwgYW5kIHJlaWZ5IHRoZSBz
Y29wZSBpZiBuZWVkZWQuCiAgICAgQ29udHJvbEZsb3dDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29u
dGV4dC5pc0ZpbmFsbHlCbG9jayA9IGZhbHNlOworICAgIGNvbnRleHQuYmxvY2tUeXBlID0gU2Nv
cGVCbG9jazsKKyAgICBjb250ZXh0LnNjb3BlQ29udGV4dC5yZWlmeU1vZGUgPSByZWlmeU1vZGU7
CisgICAgY29udGV4dC5zY29wZUNvbnRleHQuYmFzZVJlZ2lzdGVyID0gYmFzZTsKKyAgICBjb250
ZXh0LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXIgPSBsYXN0LnJlbGVhc2UoKS5sZWFrUmVmKCk7
CisKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKLSAgICBtX2R5bmFt
aWNTY29wZURlcHRoKys7CisgICAgbV9zY29wZUNoYWluLnNldCgqbV9zY29wZUNoYWluLT5nbG9i
YWxEYXRhLCBtX3Njb3BlQ2hhaW4tPnB1c2goc2NvcGVUZW1wbGF0ZSkpOworICAgIG1fYmxvY2tT
Y29wZURlcHRoKys7CisKKyAgICAvLyBXZSByZWlmeSBpdCBsYXppbHkgaWYgcG9zc2libGUuCisg
ICAgc3dpdGNoIChyZWlmeU1vZGUpIHsKKyAgICBjYXNlIFNjb3BlQ29udGV4dDo6RWFnZXJseVJl
aWZ5OgorICAgICAgICAvLyBSZWlmeSB0aGUgc2NvcGUgbm93LgorICAgICAgICByZWlmeVNjb3Bl
cygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjb3BlQ29udGV4dDo6TGF6aWx5UmVpZnk6
CisgICAgICAgIC8vIE1hcmsgdGhlIHNjb3BlIHJlZ2lzdGVyIGFzIHVuc2V0LCBzbyBsYXRlciBj
b2RlIGNhbiBkZXRlY3QgaWYgaXQgd2FzCisgICAgICAgIC8vIG5ldmVyIHJlaWZpZWQuCisgICAg
ICAgIGVtaXRPcGNvZGUob3BfaW5pdF9sYXp5X3JlZyk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChjb250ZXh0LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXItPmluZGV4KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNjb3BlQ29udGV4dDo6TmV2ZXJSZWlmeToKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KIAotICAgIGVtaXRPcGNvZGUob3BfcHVzaF9uZXdfc2NvcGUp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BCbG9j
a1Njb3BlKCkKK3sKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOworICAg
IENvbnRyb2xGbG93Q29udGV4dCBjb250ZXh0ID0gbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCk7
CisgICAgQVNTRVJUKGNvbnRleHQuYmxvY2tUeXBlID09IFNjb3BlQmxvY2spOworCisgICAgQVNT
RVJUKG1fc2NvcGVDaGFpbi0+YmVnaW4oKS0+Z2V0KCktPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7
CisKKyAgICBpZiAoY29udGV4dC5zY29wZUNvbnRleHQucmVpZnlNb2RlICE9IFNjb3BlQ29udGV4
dDo6TmV2ZXJSZWlmeSkgeworICAgICAgICBlbWl0T3Bjb2RlKG9wX3RlYXJfb2ZmX3Njb3BlKTsK
KyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuc2NvcGVDb250ZXh0Lmxhc3RS
ZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQorCisgICAgY29udGV4dC5zY29wZUNvbnRleHQubGFz
dFJlZ2lzdGVyLT5kZXJlZigpOworICAgIGNvbnRleHQuc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rl
ciA9IDA7CisgICAgCisgICAgbV9ibG9ja1Njb3BlRGVwdGgtLTsKKyAgICBtX3Njb3BlQ2hhaW4u
c2V0KCptX3Njb3BlQ2hhaW4tPmdsb2JhbERhdGEsIG1fc2NvcGVDaGFpbi0+cG9wKCkpOworICAg
IG1fc2NvcGVDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpiZWdpblN3aXRjaChSZWdpc3RlcklEKiBzY3J1dGluZWVSZWdpc3RlciwgU3dpdGNo
SW5mbzo6U3dpdGNoVHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU3ZmUyMzZlNWJhZjBmMGZi
N2U5MmU0Njk4YzU2ZTg0Y2NlZjg3YzUuLmQzNjQwZDYwZTNjMTJkYjRmYzk5MzRkZGE2NGQ4NDNj
ZWE1ODA1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgSWRlbnRpZmllcjsKICAgICBjbGFzcyBMYWJlbDsKICAgICBjbGFzcyBTY29w
ZUNoYWluTm9kZTsKKyAgICBjbGFzcyBKU1N0YXRpY1Njb3BlT2JqZWN0OwogCiAgICAgY2xhc3Mg
Q2FsbEFyZ3VtZW50cyB7CiAgICAgcHVibGljOgpAQCAtNzUsOSArNzYsMjEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIHJldEFkZHJEc3Q7CiAgICAgfTsKIAorICAgIHN0
cnVjdCBTY29wZUNvbnRleHQgeworICAgICAgICBlbnVtIFJlaWZ5TW9kZSB7IEVhZ2VybHlSZWlm
eSwgTGF6aWx5UmVpZnksIE5ldmVyUmVpZnkgfTsKKyAgICAgICAgUmVpZnlNb2RlIHJlaWZ5TW9k
ZTsKKyAgICAgICAgUmVnaXN0ZXJJRCogYmFzZVJlZ2lzdGVyOworICAgICAgICBSZWdpc3RlcklE
KiBsYXN0UmVnaXN0ZXI7CisgICAgfTsKKworICAgIGVudW0gQmxvY2tUeXBlIHsgV2l0aEJsb2Nr
LCBGaW5hbGx5QmxvY2ssIFNjb3BlQmxvY2sgfTsKKwogICAgIHN0cnVjdCBDb250cm9sRmxvd0Nv
bnRleHQgewotICAgICAgICBib29sIGlzRmluYWxseUJsb2NrOwotICAgICAgICBGaW5hbGx5Q29u
dGV4dCBmaW5hbGx5Q29udGV4dDsKKyAgICAgICAgZW51bSBCbG9ja1R5cGUgYmxvY2tUeXBlOwor
ICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4
dDsKKyAgICAgICAgICAgIFNjb3BlQ29udGV4dCBzY29wZUNvbnRleHQ7CisgICAgICAgIH07CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBGb3JJbkNvbnRleHQgewpAQCAtODksNyArMTAyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZXNvbHZlUmVzdWx0IHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIGVudW0gRmxhZ3MgeworICAgICAgICBlbnVtIFR5cGVGbGFncyB7CiAgICAgICAgICAg
ICAvLyBUaGUgcHJvcGVydHkgaXMgbG9jYWxseSBib3VuZCwgaW4gYSByZWdpc3Rlci4KICAgICAg
ICAgICAgIFJlZ2lzdGVyRmxhZyA9IDB4MSwKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gdHJh
dmVyc2UgdGhlIHNjb3BlIGNoYWluIGF0IHJ1bnRpbWUsIGNoZWNraW5nIGZvcgpAQCAtMTAzLDIx
ICsxMTYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBJbmRleGVkRmxhZyA9IDB4
OCwKICAgICAgICAgICAgIC8vIFNraXAgc29tZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2Nv
cGUgY2hhaW4sIGdpdmVuIGJ5ICJkZXB0aCIuCiAgICAgICAgICAgICBTY29wZWRGbGFnID0gMHgx
MCwKLSAgICAgICAgICAgIC8vIFRoZSByZXNvbHZlZCBiaW5kaW5nIGlzIGltbXV0YWJsZS4KLSAg
ICAgICAgICAgIFJlYWRPbmx5RmxhZyA9IDB4MjAsCiAgICAgICAgICAgICAvLyBUaGUgYmFzZSBv
YmplY3QgaXMgdGhlIGdsb2JhbCBvYmplY3QuCi0gICAgICAgICAgICBHbG9iYWxGbGFnID0gMHg0
MAorICAgICAgICAgICAgR2xvYmFsRmxhZyA9IDB4MjAKICAgICAgICAgfTsKKwogICAgICAgICBl
bnVtIFR5cGUgewogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IGlzIGxvY2FsLCBhbmQgc3Rv
cmVkIGluIGEgcmVnaXN0ZXIuCiAgICAgICAgICAgICBSZWdpc3RlciA9IFJlZ2lzdGVyRmxhZyB8
IFN0YXRpY0ZsYWcsCi0gICAgICAgICAgICAvLyBBIHJlYWQtb25seSBsb2NhbCwgY3JlYXRlZCBi
eSAiY29uc3QiLgotICAgICAgICAgICAgUmVhZE9ubHlSZWdpc3RlciA9IFJlZ2lzdGVyRmxhZyB8
IFJlYWRPbmx5RmxhZyB8IFN0YXRpY0ZsYWcsCiAgICAgICAgICAgICAvLyBUaGUgcHJvcGVydHkg
aXMgc3RhdGljYWxseSBzY29wZWQgZnJlZSB2YXJpYWJsZS4gSXRzIGNvb3JkaW5hdGVzCiAgICAg
ICAgICAgICAvLyBhcmUgaW4gImluZGV4IiBhbmQgImRlcHRoIi4KICAgICAgICAgICAgIExleGlj
YWwgPSBJbmRleGVkRmxhZyB8IFNjb3BlZEZsYWcgfCBTdGF0aWNGbGFnLAotICAgICAgICAgICAg
Ly8gQSByZWFkLW9ubHkgTGV4aWNhbCwgY3JlYXRlZCBieSAiY29uc3QiLgotICAgICAgICAgICAg
UmVhZE9ubHlMZXhpY2FsID0gSW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnIHwgUmVhZE9ubHlGbGFn
IHwgU3RhdGljRmxhZywKICAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSB3YXMgbm90IGJvdW5k
IGxleGljYWxseSwgc28gYXQgcnVudGltZSB3ZSBzaG91bGQKICAgICAgICAgICAgIC8vIGxvb2sg
ZGlyZWN0bHkgaW4gdGhlIGdsb2JhbCBvYmplY3QuCiAgICAgICAgICAgICBHbG9iYWwgPSBHbG9i
YWxGbGFnLApAQCAtMTI2LDkgKzEzNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
Ly8gYmluZGluZyBjcmVhdGVkIHdpdGggInZhciIgYXQgdGhlIHRvcCBsZXZlbC4gQXQgcnVudGlt
ZSB3ZSdsbAogICAgICAgICAgICAgLy8ganVzdCBpbmRleCBpbnRvIHRoZSBnbG9iYWwgb2JqZWN0
LgogICAgICAgICAgICAgSW5kZXhlZEdsb2JhbCA9IEluZGV4ZWRGbGFnIHwgR2xvYmFsRmxhZyB8
IFN0YXRpY0ZsYWcsCi0gICAgICAgICAgICAvLyBMaWtlIEluZGV4ZWRHbG9iYWwsIGJ1dCB0aGUg
cHJvcGVydHkgaXMgYWxzbyByZWFkLW9ubHksIGxpa2UgTmFOLAotICAgICAgICAgICAgLy8gSW5m
aW5pdHksIG9yIHVuZGVmaW5lZC4KLSAgICAgICAgICAgIFJlYWRPbmx5SW5kZXhlZEdsb2JhbCA9
IEluZGV4ZWRGbGFnIHwgUmVhZE9ubHlGbGFnIHwgR2xvYmFsRmxhZyB8IFN0YXRpY0ZsYWcsCiAg
ICAgICAgICAgICAvLyBUaGUgcHJvcGVydHkgY291bGQgbm90IGJlIHJlc29sdmVkIHN0YXRpY2Fs
bHksIGR1ZSB0byB0aGUKICAgICAgICAgICAgIC8vIHByZXNlbmNlIG9mIGB3aXRoJyBibG9ja3Mu
IEF0IHJ1bnRpbWUgd2UnbGwgaGF2ZSB0byB3YWxrIHRoZQogICAgICAgICAgICAgLy8gc2NvcGUg
Y2hhaW4uIFNjb3BlZEZsYWcgaXMgc2V0IHRvIGluZGljYXRlIHRoYXQgImRlcHRoIiB3aWxsCkBA
IC0xNDEsNTAgKzE0Niw1OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIC8vIGNoZWNr
IGZvciB0aGUgYWJzZW5jZSBvZiB0aGlzIHByb3BlcnR5IGluIHRob3NlIGludGVydmVuaW5nCiAg
ICAgICAgICAgICAvLyBzY29wZXMuCiAgICAgICAgICAgICBEeW5hbWljTGV4aWNhbCA9IER5bmFt
aWNGbGFnIHwgSW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnLAotICAgICAgICAgICAgLy8gTGlrZSBS
ZWFkT25seUxleGljYWwsIGJ1dCB3aXRoIGludGVydmVuaW5nIG5vbi1zdHJpY3QgYGV2YWwnLgot
ICAgICAgICAgICAgRHluYW1pY1JlYWRPbmx5TGV4aWNhbCA9IER5bmFtaWNGbGFnIHwgSW5kZXhl
ZEZsYWcgfCBTY29wZWRGbGFnIHwgUmVhZE9ubHlGbGFnLAogICAgICAgICAgICAgLy8gTGlrZSBH
bG9iYWwsIGJ1dCB3aXRoIGludGVydmVuaW5nIG5vbi1zdHJpY3QgYGV2YWwnLiBBcyB3aXRoIAog
ICAgICAgICAgICAgLy8gRHluYW1pYywgU2NvcGVGbGFnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0
ICJkZXB0aCIgZG9lcyBpbmRlZWQKICAgICAgICAgICAgIC8vIHN0b3JlIGEgbnVtYmVyIG9mIGZy
YW1lcyB0byBza2lwIGJlZm9yZSBkb2luZyB0aGUgZHluYW1pYyBjaGVja3MuCiAgICAgICAgICAg
ICBEeW5hbWljR2xvYmFsID0gRHluYW1pY0ZsYWcgfCBHbG9iYWxGbGFnIHwgU2NvcGVkRmxhZywK
ICAgICAgICAgICAgIC8vIExpa2UgSW5kZXhlZEdsb2JhbCwgYnV0IHdpdGggaW50ZXJ2ZW5pbmcg
bm9uLXN0cmljdCBgZXZhbCcuCiAgICAgICAgICAgICBEeW5hbWljSW5kZXhlZEdsb2JhbCA9IER5
bmFtaWNGbGFnIHwgSW5kZXhlZEZsYWcgfCBHbG9iYWxGbGFnIHwgU2NvcGVkRmxhZywKLSAgICAg
ICAgICAgIC8vIExpa2UgUmVhZE9ubHlJbmRleGVkR2xvYmFsLCBidXQgd2l0aCBpbnRlcnZlbmlu
ZyBub24tc3RyaWN0Ci0gICAgICAgICAgICAvLyBgZXZhbCcuCi0gICAgICAgICAgICBEeW5hbWlj
UmVhZE9ubHlJbmRleGVkR2xvYmFsID0gRHluYW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IFJlYWRP
bmx5RmxhZyB8IEdsb2JhbEZsYWcgfCBTY29wZWRGbGFnLAogICAgICAgICB9OwogCi0gICAgICAg
IHN0YXRpYyBSZXNvbHZlUmVzdWx0IHJlZ2lzdGVyUmVzb2x2ZShSZWdpc3RlcklEICpsb2NhbCwg
dW5zaWduZWQgZmxhZ3MpCisgICAgICAgIGVudW0gQXR0cmlidXRlcyB7CisgICAgICAgICAgICAv
LyBUaGUgcmVzb2x2ZWQgYmluZGluZyBpcyBpbW11dGFibGUuCisgICAgICAgICAgICBSZWFkT25s
eUF0dHJpYnV0ZSA9IDB4MSwKKyAgICAgICAgICAgIC8vIFRoZSByZXNvbHZlIGJpbmRpbmcgaXMg
YWN0dWFsbHkgdGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAgICAgICAgICBBcmd1bWVudHNBdHRy
aWJ1dGUgPSAweDIsCisgICAgICAgICAgICAvLyBSZWFkcyBvZiB0aGlzIHZhcmlhYmxlIG5lZWQg
ZHluYW1pYyBjaGVja3MgdG8gZW5zdXJlIGl0IGlzIHNldC4KKyAgICAgICAgICAgIEJhcnJpZXJB
dHRyaWJ1dGUgPSAweDQKKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3Vs
dCByZWdpc3RlclJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQg
KmxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gUmVzb2x2ZVJlc3VsdChwcm9wZXJ0eSwgUmVnaXN0ZXIsIGF0dHJpYnV0ZXMsIGxvY2FsLCBt
aXNzaW5nU3ltYm9sTWFya2VyKCksIDAsIDApOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBS
ZXNvbHZlUmVzdWx0IGxleGljYWxSZXNvbHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBp
bnQgaW5kZXgsIHNpemVfdCBkZXB0aCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQoUmVnaXN0ZXIgfCBmbGFncywgbG9jYWws
IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgMCwgMCk7CisgICAgICAgICAgICByZXR1cm4gUmVzb2x2
ZVJlc3VsdChwcm9wZXJ0eSwgTGV4aWNhbCwgYXR0cmlidXRlcywgMCwgaW5kZXgsIGRlcHRoLCAw
KTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBkeW5hbWljUmVzb2x2
ZShzaXplX3QgZGVwdGgpCisgICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGdsb2JhbFJlc29s
dmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIEpTT2JqZWN0ICpnbG9iYWxPYmplY3QpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KER5bmFtaWMsIDAsIG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSwgZGVwdGgsIDApOworICAgICAgICAgICAgcmV0dXJuIFJlc29s
dmVSZXN1bHQocHJvcGVydHksIEdsb2JhbCwgMCwgMCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCAw
LCBnbG9iYWxPYmplY3QpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0
IGxleGljYWxSZXNvbHZlKGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCB1bnNpZ25lZCBmbGFncykK
KyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgaW5kZXhlZEdsb2JhbFJlc29sdmUoY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHksIGludCBpbmRleCwgSlNPYmplY3QgKmdsb2JhbE9iamVjdCwg
dW5zaWduZWQgYXR0cmlidXRlcykKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgdHlw
ZSA9IChmbGFncyAmIER5bmFtaWNGbGFnKSA/IER5bmFtaWNMZXhpY2FsIDogTGV4aWNhbDsKLSAg
ICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KHR5cGUgfCBmbGFncywgMCwgaW5kZXgsIGRl
cHRoLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KHByb3BlcnR5LCBJbmRl
eGVkR2xvYmFsLCBhdHRyaWJ1dGVzLCAwLCBpbmRleCwgMCwgZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBpbmRleGVkR2xvYmFsUmVzb2x2ZShp
bnQgaW5kZXgsIEpTT2JqZWN0ICpnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGZsYWdzKQorICAgICAg
ICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBkeW5hbWljUmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eSwgc2l6ZV90IGRlcHRoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVz
b2x2ZVJlc3VsdChJbmRleGVkR2xvYmFsIHwgZmxhZ3MsIDAsIGluZGV4LCAwLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQocHJvcGVydHksIER5bmFtaWMs
IDAsIDAsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgZGVwdGgsIDApOwogICAgICAgICB9Ci0gICAg
ICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFtaWNJbmRleGVkR2xvYmFsUmVzb2x2ZShpbnQg
aW5kZXgsIHNpemVfdCBkZXB0aCwgSlNPYmplY3QgKmdsb2JhbE9iamVjdCwgdW5zaWduZWQgZmxh
Z3MpCisgICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFtaWNMZXhpY2FsUmVzb2x2ZShj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgaW50IGluZGV4LCBzaXplX3QgZGVwdGgsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVz
dWx0KER5bmFtaWNJbmRleGVkR2xvYmFsIHwgZmxhZ3MsIDAsIGluZGV4LCBkZXB0aCwgZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KHByb3BlcnR5LCBEeW5h
bWljTGV4aWNhbCwgYXR0cmlidXRlcywgMCwgaW5kZXgsIGRlcHRoLCAwKTsKICAgICAgICAgfQot
ICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBnbG9iYWxSZXNvbHZlKEpTT2JqZWN0ICpnbG9i
YWxPYmplY3QpCisgICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFtaWNHbG9iYWxSZXNv
bHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBzaXplX3QgZHluYW1pY0RlcHRoLCBKU09i
amVjdCAqZ2xvYmFsT2JqZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2
ZVJlc3VsdChHbG9iYWwsIDAsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgMCwgZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KHByb3BlcnR5LCBEeW5hbWljR2xv
YmFsLCAwLCAwLCBtaXNzaW5nU3ltYm9sTWFya2VyKCksIGR5bmFtaWNEZXB0aCwgZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBkeW5hbWljR2xv
YmFsUmVzb2x2ZShzaXplX3QgZHluYW1pY0RlcHRoLCBKU09iamVjdCAqZ2xvYmFsT2JqZWN0KQor
ICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBkeW5hbWljSW5kZXhlZEdsb2JhbFJlc29sdmUo
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCBKU09i
amVjdCAqZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChEeW5hbWljR2xvYmFsLCAwLCBtaXNzaW5nU3lt
Ym9sTWFya2VyKCksIGR5bmFtaWNEZXB0aCwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIHJl
dHVybiBSZXNvbHZlUmVzdWx0KHByb3BlcnR5LCBEeW5hbWljSW5kZXhlZEdsb2JhbCwgYXR0cmli
dXRlcywgMCwgaW5kZXgsIGRlcHRoLCBnbG9iYWxPYmplY3QpOwogICAgICAgICB9CiAKLSAgICAg
ICAgdW5zaWduZWQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KKyAg
ICAgICAgdWludDhfdCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIHVp
bnQ4X3QgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgICAg
ICAvLyBSZXR1cm5zIHRoZSByZWdpc3RlciBjb3JyZXNwb25kaW5nIHRvIGEgbG9jYWwgdmFyaWFi
bGUsIG9yIDAgaWYgbm8KICAgICAgICAgLy8gc3VjaCByZWdpc3RlciBleGlzdHMuIFJlZ2lzdGVy
cyByZXR1cm5lZCBieSBSZXNvbHZlUmVzdWx0Ojpsb2NhbCgpIGRvCiAgICAgICAgIC8vIG5vdCBy
ZXF1aXJlIGV4cGxpY2l0IHJlZmVyZW5jZSBjb3VudGluZy4KQEAgLTE5OCwxMiArMjEyLDE3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlICYgU3RhdGljRmxhZzsgfQogICAgICAgICBib29sIGlzSW5kZXhlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSAmIEluZGV4ZWRGbGFnOyB9CiAgICAgICAgIGJvb2wgaXNTY29wZWQoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgJiBTY29wZWRGbGFnOyB9Ci0gICAgICAgIGJvb2wgaXNSZWFk
T25seSgpIGNvbnN0IHsgcmV0dXJuIChtX3R5cGUgJiBSZWFkT25seUZsYWcpICYmICFpc0R5bmFt
aWMoKTsgfQogICAgICAgICBib29sIGlzR2xvYmFsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYg
R2xvYmFsRmxhZzsgfQogCisgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJu
IChtX2F0dHJpYnV0ZXMgJiBSZWFkT25seUF0dHJpYnV0ZSkgJiYgIWlzRHluYW1pYygpOyB9Cisg
ICAgICAgIGJvb2wgaXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMgJiBB
cmd1bWVudHNBdHRyaWJ1dGU7IH0KKyAgICAgICAgYm9vbCBuZWVkc0JhcnJpZXIoKSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZXMgJiBCYXJyaWVyQXR0cmlidXRlOyB9CisKICAgICBwcml2YXRl
OgotICAgICAgICBSZXNvbHZlUmVzdWx0KHVuc2lnbmVkIHR5cGUsIFJlZ2lzdGVySUQqIGxvY2Fs
LCBpbnQgaW5kZXgsIHNpemVfdCBkZXB0aCwgSlNPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICAg
ICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgIFJlc29sdmVSZXN1bHQoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHksIHVpbnQ4X3QgdHlwZSwgdWludDhfdCBhdHRyaWJ1dGVzLCBSZWdpc3Rl
cklEKiBsb2NhbCwgaW50IGluZGV4LCBzaXplX3QgZGVwdGgsIEpTT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCisgICAgICAgICAgICA6IG1fcHJvcGVydHkocHJvcGVydHkpCisgICAgICAgICAgICAsIG1f
dHlwZSh0eXBlKQorICAgICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICAg
ICAgICAgICwgbV9pbmRleChpbmRleCkKICAgICAgICAgICAgICwgbV9sb2NhbChsb2NhbCkKICAg
ICAgICAgICAgICwgbV9kZXB0aChkZXB0aCkKQEAgLTIxOCw3ICsyMzcsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBjaGVja1ZhbGlkaXR5KCk7CiAjZW5kaWYKIAotICAgICAgICB1
bnNpZ25lZCBtX3R5cGU7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1fcHJvcGVydHk7Cisg
ICAgICAgIHVpbnQ4X3QgbV90eXBlOworICAgICAgICB1aW50OF90IG1fYXR0cmlidXRlczsKICAg
ICAgICAgaW50IG1faW5kZXg7IC8vIEluZGV4IGluIHNjb3BlLCBpZiBJbmRleGVkRmxhZyBpcyBz
ZXQKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sb2NhbDsgLy8gTG9jYWwgcmVnaXN0ZXIsIGlmIFJl
Z2lzdGVyRmxhZyBpcyBzZXQKICAgICAgICAgc2l6ZV90IG1fZGVwdGg7IC8vIERlcHRoIGluIHNj
b3BlIGNoYWluLCBpZiBTY29wZWRGbGFnIGlzIHNldApAQCAtMjUxLDExICsyNzIsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBzZXRJc051bWVyaWNDb21wYXJlRnVuY3Rpb24o
Ym9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24pOwogCi0gICAgICAgIGJvb2wgd2lsbFJlc29s
dmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHVu
Y2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCk7CisgICAgICAgIGVudW0gUmVzb2x2ZUZsYWdz
IHsKKyAgICAgICAgICAgIERvbnRDcmVhdGVBcmd1bWVudHNGbGFnID0gMSA8PCAwCisgICAgICAg
IH07CiAKICAgICAgICAgLy8gUmVzb2x2ZSBhbiBpZGVudGlmaWVyLCBnaXZlbiB0aGUgY3VycmVu
dCBjb21waWxlLXRpbWUgc2NvcGUgY2hhaW4uCi0gICAgICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2
ZShjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZShjb25z
dCBJZGVudGlmaWVyJiwgdW5zaWduZWQgcmVzb2x2ZUZsYWdzID0gMCk7CiAgICAgICAgIC8vIEJl
aGF2ZXMgYXMgcmVzb2x2ZSBkb2VzLCBidXQgaWdub3JlcyBkeW5hbWljIHNjb3BlIGFzCiAgICAg
ICAgIC8vIGR5bmFtaWMgc2NvcGUgc2hvdWxkIG5vdCBpbnRlcmZlcmUgd2l0aCBjb25zdCBpbml0
aWFsaXNhdGlvbgogICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29sdmVDb25zdERlY2woY29uc3Qg
SWRlbnRpZmllciYpOwpAQCAtNDM4LDExICs0NjAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdGF0aWNWYXIoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBS
ZXNvbHZlUmVzdWx0Jik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRTdGF0aWNWYXIoY29u
c3QgUmVzb2x2ZVJlc3VsdCYsIFJlZ2lzdGVySUQqIHZhbHVlKTsKIAotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0UmVzb2x2ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNv
bHZlQmFzZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlQmFzZUZv
clB1dChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlV2l0aEJhc2Uo
UmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJl
c3VsdCYsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KTsKLSAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdFJlc29sdmVXaXRoVGhpcyhSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcklEKiBwcm9w
RHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpOwor
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJl
c29sdmVSZXN1bHQmKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVCYXNlKFJlZ2lz
dGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYpOworICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UmVzb2x2ZUJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0
Jik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlV2l0aEJhc2UoUmVnaXN0ZXJJRCog
YmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYpOworICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVdpdGhUaGlzKFJlZ2lzdGVySUQqIGJhc2VEc3Qs
IFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmKTsKIAogICAgICAgICB2
b2lkIGVtaXRNZXRob2RDaGVjaygpOwogCkBAIC00OTQsMTQgKzUxNiwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFVTdHJp
bmcmIG1lc3NhZ2UpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgcmVpZnlTY29wZXMoKTsKKyAgICAgICAgdm9pZCBwdXNoQmxvY2tTY29wZShK
U1N0YXRpY1Njb3BlT2JqZWN0KiwgU2NvcGVDb250ZXh0OjpSZWlmeU1vZGUpOworICAgICAgICB2
b2lkIHBvcEJsb2NrU2NvcGUoKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHVzaFNjb3Bl
KFJlZ2lzdGVySUQqIHNjb3BlKTsKICAgICAgICAgdm9pZCBlbWl0UG9wU2NvcGUoKTsKIAogICAg
ICAgICB2b2lkIGVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBs
YXN0TGluZSk7CiAKLSAgICAgICAgaW50IHNjb3BlRGVwdGgoKSB7IHJldHVybiBtX2R5bmFtaWNT
Y29wZURlcHRoICsgbV9maW5hbGx5RGVwdGg7IH0KKyAgICAgICAgaW50IHNjb3BlRGVwdGgoKSB7
IHJldHVybiBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9ibG9ja1Njb3BlRGVwdGggKyBtX2ZpbmFs
bHlEZXB0aDsgfQogICAgICAgICBib29sIGhhc0ZpbmFsaXNlcigpIHsgcmV0dXJuIG1fZmluYWxs
eURlcHRoICE9IDA7IH0KIAogICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29udGV4dChMYWJlbCog
dGFyZ2V0LCBSZWdpc3RlcklEKiByZXR1cm5BZGRyRHN0KTsKQEAgLTU0Miw4ICs1NjYsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJld2luZEJpbmFyeU9w
KCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRVbmFyeU9wKCk7CiAKLSAgICAg
ICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1pdENvbXBsZXhKdW1wU2NvcGVzKExhYmVsKiB0YXJnZXQs
IENvbnRyb2xGbG93Q29udGV4dCogdG9wU2NvcGUsIENvbnRyb2xGbG93Q29udGV4dCogYm90dG9t
U2NvcGUpOwotCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxkb3VibGUsIEpTVmFsdWU+IE51bWJl
ck1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBKU1N0cmluZyosIElk
ZW50aWZpZXJSZXBIYXNoPiBJZGVudGlmaWVyU3RyaW5nTWFwOwogICAgICAgICAKQEAgLTYxNywz
NSArNjM5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4m
IGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CiAgICAgICAgIFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJuICptX3N5bWJvbFRhYmxlOyB9CiAKLSAgICAg
ICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX2R5bmFtaWNTY29wZURlcHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAgICAgaWYgKG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGNhbk9wdGltaXplTm9uTG9jYWxzKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgICAgICBpZiAobV9jb2RlVHlwZSA9PSBFdmFsQ29kZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChtX2NvZGVUeXBlID09IEZ1
bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+dXNlc0V2YWwoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsK
IAotICAgICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHZv
aWQgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGNy
ZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqKTsKICAgICAgICAgCiAgICAg
ICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CkBAIC02NzQsNiArNjY5LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2xhc3RWYXI7
CiAgICAgICAgIGludCBtX2ZpbmFsbHlEZXB0aDsKICAgICAgICAgaW50IG1fZHluYW1pY1Njb3Bl
RGVwdGg7CisgICAgICAgIGludCBtX2Jsb2NrU2NvcGVEZXB0aDsKICAgICAgICAgaW50IG1fYmFz
ZVNjb3BlRGVwdGg7CiAgICAgICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCBi
Yjk1Y2FmYjY4MjYzYTliZjUxMGFhNGU0MjI3ZjVlYTQzYTNlZTk4Li44Y2JmMGJjNzdlMzZmZmVk
NzBhYTQ0Nzc3ZGFiZTdhYmU3MGZjZjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgUmVn
aXN0ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKgogICAgIH0KICAgICAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKG1fc3RhcnRPZmZzZXQgKyBtX2lkZW50Lmxlbmd0aCgpLCBtX2lkZW50Lmxlbmd0
aCgpLCAwKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQpOworICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdFJlc29sdmUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcmVz
b2x2ZVJlc3VsdCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBcnJh
eU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMTgsMTAgKzMx
OCwxMyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogCiBSZWdpc3RlcklEKiBCcmFja2V0QWNj
ZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSAmJiBnZW5l
cmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50cyhzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1f
YmFzZSktPmlkZW50aWZpZXIoKSkpIHsKLSAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsgICAgCi0g
ICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50QnlWYWwoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KSwgZ2VuZXJhdG9yLnVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1l
bnRzKCksIHByb3BlcnR5KTsKKyAgICBpZiAobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAg
ICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUoc3Rh
dGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCksIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpEb250Q3JlYXRlQXJndW1lbnRzRmxhZyk7CisgICAgICAgIGlmIChyZXNvbHZlUmVz
dWx0LmlzQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRCeVZhbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVzdWx0LmxvY2FsKCksIHByb3BlcnR5
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9zdWJzY3JpcHRIYXNBc3Np
Z25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKQEAgLTMzNCwxNyArMzM3
LDE0IEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAKIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29y
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKLSAgICBpZiAobV9pZGVudCA9PSBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygp
Lmxlbmd0aCkgewotICAgICAgICBpZiAoIW1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAg
ICAgICAgZ290byBub25Bcmd1bWVudHNQYXRoOwotICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2
ZU5vZGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSk7Ci0gICAgICAgIGlmICgh
Z2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMocmVzb2x2ZU5vZGUtPmlkZW50aWZpZXIo
KSkpCi0gICAgICAgICAgICBnb3RvIG5vbkFyZ3VtZW50c1BhdGg7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkp
OyAgICAKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3Rl
ckZvckFyZ3VtZW50cygpKTsKKyAgICBpZiAobV9pZGVudCA9PSBnZW5lcmF0b3IucHJvcGVydHlO
YW1lcygpLmxlbmd0aCAmJiBtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSkgeworICAgICAgICBSZXNv
bHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSwgQnl0ZWNvZGVHZW5lcmF0b3I6OkRv
bnRDcmVhdGVBcmd1bWVudHNGbGFnKTsKKyAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNBcmd1
bWVudHMoKSkgeworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7ICAgIAorICAgICAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIHJlc29sdmVSZXN1bHQubG9jYWwoKSk7CisgICAgICAgIH0KICAgICB9CiAKLW5v
bkFyZ3VtZW50c1BhdGg6CiAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2Jhc2UpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3Rh
cnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5
SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9pZGVudCk7CkBAIC00
MDAsNyArNDAwLDcgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWcKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBDYWxsQXJn
dW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSAtIHN0YXJ0T2Zmc2V0KCkgKyA0LCA0LCAwKTsKLSAg
ICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBmdW5jLmdldCgpLCBnZW5lcmF0b3IucmVzb2x2ZShnZW5lcmF0b3IucHJvcGVydHlOYW1l
cygpLmV2YWwpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpOworICAgIGdlbmVyYXRv
ci5lbWl0UmVzb2x2ZVdpdGhUaGlzKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGZ1bmMu
Z2V0KCksIGdlbmVyYXRvci5yZXNvbHZlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuZXZhbCkp
OwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKIH0KIApAQCAtNDQwLDcgKzQ0MCw3IEBA
IFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICBpbnQgaWRlbnRpZmllclN0YXJ0ID0gZGl2b3Qo
KSAtIHN0YXJ0T2Zmc2V0KCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGlk
ZW50aWZpZXJTdGFydCArIG1faWRlbnQubGVuZ3RoKCksIG1faWRlbnQubGVuZ3RoKCksIDApOwot
ICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhUaGlzKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIGZ1bmMuZ2V0KCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQpOworICAgIGdlbmVyYXRv
ci5lbWl0UmVzb2x2ZVdpdGhUaGlzKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGZ1bmMu
Z2V0KCksIHJlc29sdmVSZXN1bHQpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5n
ZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkp
OwogfQogCkBAIC01NjQsOSArNTY0LDEzIEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsCiAgICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBhcmdzUmVnaXN0ZXI7CiAgICAgICAgICAgICBBcmd1bWVudExpc3ROb2RlKiBhcmdz
ID0gbV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQ7Ci0gICAgICAgICAgICBpZiAoYXJncy0+bV9l
eHByLT5pc1Jlc29sdmVOb2RlKCkgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMo
c3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihhcmdzLT5tX2V4cHIpLT5pZGVudGlmaWVyKCkpKQot
ICAgICAgICAgICAgICAgIGFyZ3NSZWdpc3RlciA9IGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3Rl
ckZvckFyZ3VtZW50cygpOwotICAgICAgICAgICAgZWxzZQorCisgICAgICAgICAgICBpZiAoYXJn
cy0+bV9leHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBSZXNvbHZlUmVz
dWx0IHJlc29sdmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShzdGF0aWNfY2FzdDxSZXNvbHZl
Tm9kZSo+KGFyZ3MtPm1fZXhwciktPmlkZW50aWZpZXIoKSwgQnl0ZWNvZGVHZW5lcmF0b3I6OkRv
bnRDcmVhdGVBcmd1bWVudHNGbGFnKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVJlc3Vs
dC5pc0FyZ3VtZW50cygpKQorICAgICAgICAgICAgICAgICAgICBhcmdzUmVnaXN0ZXIgPSByZXNv
bHZlUmVzdWx0LmxvY2FsKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWFyZ3NS
ZWdpc3Rlci5nZXQoKSkKICAgICAgICAgICAgICAgICBhcmdzUmVnaXN0ZXIgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUoYXJncy0+bV9leHByKTsKIAogICAgICAgICAgICAgLy8gRnVuY3Rpb24ucHJvdG90
eXBlLmFwcGx5IGlnbm9yZXMgZXh0cmEgYXJndW1lbnRzLCBidXQgd2Ugc3RpbGwKQEAgLTYzMiw3
ICs2MzYsNyBAQCBSZWdpc3RlcklEKiBQb3N0Zml4UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpcwogICAgIAogICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
LSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhC
YXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCksIHJlc29sdmVSZXN1bHQs
IG1faWRlbnQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRS
ZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgcmVz
b2x2ZVJlc3VsdCk7CiAgICAgUmVnaXN0ZXJJRCogb2xkVmFsdWU7CiAgICAgaWYgKGRzdCA9PSBn
ZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKSB7CiAgICAgICAgIG9sZFZhbHVlID0gMDsKQEAgLTcw
OSw3ICs3MTMsNyBAQCBSZWdpc3RlcklEKiBEZWxldGVSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGZhbHNlKTsK
IAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQo
KSwgZW5kT2Zmc2V0KCkpOwotICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJl
c29sdmVCYXNlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3VsdCwg
bV9pZGVudCk7CisgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJh
c2UoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVzdWx0KTsKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCwgYmFzZSksIGJhc2UsIG1faWRlbnQpOwogfQogCkBAIC03NjcsNyArNzcxLDcgQEAgUmVn
aXN0ZXJJRCogVHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3QKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9m
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKICAgICB9CiAKLSAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc2NyYXRjaCA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2UoZ2Vu
ZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NyYXRjaCA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2Uo
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVzdWx0KTsKICAgICBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoc2NyYXRjaC5nZXQoKSwgc2NyYXRjaC5nZXQoKSwgbV9pZGVudCk7
CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTgxMSw3ICs4MTUsNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhSZXNvbHZlTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogCiAgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRP
ZmZzZXQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BEc3Qu
Z2V0KCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBi
YXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBwcm9wRHN0LmdldCgpLCByZXNvbHZlUmVzdWx0KTsKICAgICBlbWl0UHJlSW5jT3JEZWMo
Z2VuZXJhdG9yLCBwcm9wRHN0LmdldCgpLCBtX29wZXJhdG9yKTsKICAgICBnZW5lcmF0b3IuZW1p
dFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgcHJvcERzdC5nZXQoKSk7CiAgICAgcmV0dXJu
IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7
CkBAIC0xMjM0LDcgKzEyMzgsNyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZQogCiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpIC0gc3RhcnRPZmZzZXQoKSAr
IG1faWRlbnQubGVuZ3RoKCksIG1faWRlbnQubGVuZ3RoKCksIDApOwotICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCBzcmMxLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc3JjMS5nZXQoKSwgcmVzb2x2ZVJlc3VsdCk7CiAgICAg
UmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwg
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwg
bV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBl
KCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSksIHRoaXMpOwogICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0KTsKIH0KQEAgLTEy
NjAsNyArMTI2NCw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0CiAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICB9CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5l
bWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCByZXNvbHZlUmVz
dWx0LCBtX2lkZW50KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5l
bWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCByZXNvbHZlUmVz
dWx0KTsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAg
IGRzdCA9IDA7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0
LCBtX3JpZ2h0KTsKQEAgLTEzNjgsNyArMTM3Miw3IEBAIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5v
ZGU6OmVtaXRDb2RlU2luZ2xlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiAKICAgICAv
LyBGSVhNRTogV2hpbGUgdGhpcyBjb2RlIHNob3VsZCBvbmx5IGJlIGhpdCBpbiBhbiBldmFsIGJs
b2NrLCBpdCB3aWxsIGFzc2lnbgogICAgIC8vIHRvIHRoZSB3cm9uZyBiYXNlIGlmIG1faWRlbnQg
ZXhpc3RzIGluIGFuIGludGVydmVuaW5nIHdpdGggc2NvcGUuCi0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJh
c2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
cmVzb2x2ZVJlc3VsdCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdl
dCgpLCBtX2lkZW50LCB2YWx1ZS5nZXQoKSk7CiB9CiAKQEAgLTE2NDQsNyArMTY0OCw3IEBAIFJl
Z2lzdGVySUQqIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzCiAgICAgICAgIGlmICghcHJvcGVydHlOYW1lKSB7CiAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdGVjdCA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAg
ICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlRm9yUHV0KGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcmVzb2x2ZVJlc3VsdCwgaWRlbnQpOworICAgICAgICAg
ICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0KTsKIAogICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHBy
b3BlcnR5TmFtZSk7CkBAIC0xOTc3LDkgKzE5ODEsMTIgQEAgUmVnaXN0ZXJJRCogVHJ5Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBhdGg6IHRoZSBjYXRjaCBibG9jay4K
ICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2VuZXJhdG9yLmVtaXRMYWJlbChnZW5lcmF0
b3IubmV3TGFiZWwoKS5nZXQoKSk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRp
b25SZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Q2F0Y2goZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCB0cnlTdGFydExhYmVsLmdldCgpLCBoZXJlLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQdXNoTmV3U2NvcGUoZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIG1fZXhjZXB0aW9uSWRlbnQs
IGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCog
c2NvcGVUZW1wbGF0ZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSgqZ2VuZXJhdG9yLmds
b2JhbERhdGEoKSk7CisgICAgICAgIHNjb3BlVGVtcGxhdGUtPmFkZFZhcmlhYmxlKG1fZXhjZXB0
aW9uSWRlbnQsIERvbnREZWxldGUsIFN5bWJvbFRhYmxlRW50cnk6Ok5vVGVtcG9yYWxEZWFkWm9u
ZSk7CisgICAgICAgIGdlbmVyYXRvci5wdXNoQmxvY2tTY29wZShzY29wZVRlbXBsYXRlLCBTY29w
ZUNvbnRleHQ6OkxhemlseVJlaWZ5KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTdGF0aWNW
YXIoZ2VuZXJhdG9yLnJlc29sdmUobV9leGNlcHRpb25JZGVudCksIGV4Y2VwdGlvblJlZ2lzdGVy
LmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9jYXRjaEJsb2NrKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZSgpOworICAgICAgICBnZW5lcmF0b3IucG9w
QmxvY2tTY29wZSgpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNhdGNoRW5kTGFiZWwu
Z2V0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKaW5kZXggNTc2NmQzMTYzMzhlMDNkY2I1YWEzM2ExMGVlMzI2Mzg4N2IwNmI1MC4uNDA3
NWEyODdiYzdkYmZkM2E5N2U0ZjYwN2M3ZTlhZjY0NjMxNTE1MCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0xMDQyLDggKzEwNDIsNyBAQCBKU0Nl
bGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBmdQogICAgIEpTRnVuY3Rpb24gKmZ1bmN0aW9uID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAgICAgaWYgKCFmdW5j
dGlvbkV4ZWN1dGFibGUtPm5hbWUoKS5pc051bGwoKSkgewogICAgICAgICBKU1N0YXRpY1Njb3Bl
T2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0KLSAgICAgICAgICAgIEpTU3RhdGljU2NvcGVP
YmplY3Q6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBleGVjLCBmdW5jdGlvbkV4ZWN1dGFibGUt
Pm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgICAgICBK
U1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkV4
ZWN1dGFibGUtPm5hbWUoKSwgZnVuY3Rpb24sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAg
ICAgIGZ1bmN0aW9uLT5zZXRTY29wZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uLT5zY29w
ZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmplY3QpKTsKICAgICB9CiAgICAgcmV0dXJuIGZ1bmN0
aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKaW5kZXggOTExZmRkZmUzY2UxYTgxYjY0YWI5YzljOWUxNjI5YTMwNDEwMTQ2Zi4uODQz
OTliNTczOGE1MzBiZmYwYmZlZjY1NWRkOWFjMjE5NjVhMTM1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNjI1LDE4ICsx
NjI1LDYgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2sKIH0KICAgICAKICNpZiBFTkFCTEUoQ0xB
U1NJQ19JTlRFUlBSRVRFUikKLU5FVkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogSW50ZXJwcmV0
ZXI6OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0
cnVjdGlvbiogdlBDKQotewotICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJZGVudGlm
aWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVyYW5kKTsK
LSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFs
dWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUo
Y2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIERvbnREZWxldGUpOwotICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShzY29wZSk7Ci0KLSAgICByZXR1cm4gY2FsbEZyYW1l
LT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpOwotfQotCiBORVZFUl9JTkxJTkUgdm9pZCBJbnRl
cnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBSZWN1cnNpdmUgaW52b2NhdGlvbiBtYXkg
YWxyZWFkeSBoYXZlIHNwZWNpYWxpemVkIHRoaXMgaW5zdHJ1Y3Rpb24uCkBAIC00ODI3LDcgKzQ4
MTUsOCBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgICAgIEluaXRpYWxpc2VzIGRz
dChyKSB0byBKU1ZhbHVlKCkuCiAKLSAgICAgICAgICAgVGhpcyBvcGNvZGUgYXBwZWFycyBvbmx5
IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrLgorICAgICAgICAgICBUaGlzIG9wY29k
ZSBjYW4gYXBwZWFyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrIG9yIGF0IHRoZQor
ICAgICAgICAgICBiZWdpbm5pbmcgb2YgYSBibG9jayBzY29wZS4KICAgICAgICAgICovCiAgICAg
ICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogCkBAIC01MDQ5LDQzICs1MDM4LDY4IEBA
IHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25l
eHRfcG5hbWUpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotICAgIERFRklO
RV9PUENPREUob3Bfam1wX3Njb3BlcykgewotICAgICAgICAvKiBqbXBfc2NvcGVzIGNvdW50KG4p
IHRhcmdldChvZmZzZXQpCisgICAgREVGSU5FX09QQ09ERShvcF9lbnN1cmVfbG9jYWxfaW5pdGlh
bGl6ZWQpIHsKKyAgICAgICAgLyogZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkIGRzdChyKQogCi0g
ICAgICAgICAgIFJlbW92ZXMgdGhlIGEgbnVtYmVyIG9mIGl0ZW1zIGZyb20gdGhlIGN1cnJlbnQg
c2NvcGUgY2hhaW4KLSAgICAgICAgICAgc3BlY2lmaWVkIGJ5IGltbWVkaWF0ZSBudW1iZXIgY291
bnQsIHRoZW4ganVtcHMgdG8gb2Zmc2V0Ci0gICAgICAgICAgIHRhcmdldC4KKyAgICAgICAgICAg
QXNzZXJ0IHRoYXQgZHN0IGhhcyBiZWVuIGluaXRpYWxpemVkLCBpLmUuLCBpcyBub3QgZW1wdHku
CiAgICAgICAgICovCi0gICAgICAgIGludCBjb3VudCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotCi0gICAgICAgIFNjb3BlQ2hhaW5O
b2RlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLSAgICAgICAgd2hpbGUgKGNvdW50
LS0pCi0gICAgICAgICAgICB0bXAgPSB0bXAtPnBvcCgpOwotICAgICAgICBjYWxsRnJhbWUtPnNl
dFNjb3BlQ2hhaW4odG1wKTsKLQotICAgICAgICB2UEMgKz0gdGFyZ2V0OworICAgICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHZQQ1sxXS51Lm9wZXJhbmQpLmlzRW1wdHko
KSkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gSlNWYWx1ZShjcmVhdGVVbmluaXRp
YWxpemVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlk
ZW50aWZpZXIodlBDWzJdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2Vu
c3VyZV9sb2NhbF9pbml0aWFsaXplZCk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAg
ICB9Ci0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRFUikKLSAgICAv
LyBBcHBlYXNlIEdDQwotICAgIGdvdG8gKigmJnNraXBfbmV3X3Njb3BlKTsKLSNlbmRpZgotICAg
IERFRklORV9PUENPREUob3BfcHVzaF9uZXdfc2NvcGUpIHsKLSAgICAgICAgLyogbmV3X3Njb3Bl
IGRzdChyKSBwcm9wZXJ0eShpZCkgdmFsdWUocikKKyAgICBERUZJTkVfT1BDT0RFKG9wX3JlaWZ5
X3Njb3BlKSB7CisgICAgICAgIC8qIHJlaWZ5X3Njb3BlIGRzdChyKSB0ZW1wbChyKSBiYXNlKHIp
CiAgICAgICAgICAKLSAgICAgICAgICAgQ29uc3RydWN0cyBhIG5ldyBTdGF0aWNTY29wZU9iamVj
dCB3aXRoIHByb3BlcnR5IHNldCB0byB2YWx1ZS4gIFRoYXQgc2NvcGUKLSAgICAgICAgICAgb2Jq
ZWN0IGlzIHRoZW4gcHVzaGVkIG9udG8gdGhlIFNjb3BlQ2hhaW4uICBUaGUgc2NvcGUgb2JqZWN0
IGlzIHRoZW4gc3RvcmVkCi0gICAgICAgICAgIGluIGRzdCBmb3IgR0MuCisgICAgICAgICAgIENv
bnN0cnVjdHMgYSBuZXcgU3RhdGljU2NvcGVPYmplY3QsIHVzaW5nIHRlbXBsIGFzIGEgdGVtcGxh
dGUuIFRoYXQKKyAgICAgICAgICAgc2NvcGUgb2JqZWN0IGlzIHRoZW4gc3RvcmVkIGluIGRzdCBh
bmQgcHVzaGVkIG9udG8gdGhlIFNjb3BlQ2hhaW4uCisgICAgICAgICAgIFRoZSBzdG9yYWdlIGZv
ciB0aGlzIGJsb2NrIHNjb3BlIGlzIGluaXRpYWxseSBpbiB0aGUgcmVnaXN0ZXJzCisgICAgICAg
ICAgIGZvbGxvd2luZyBiYXNlLiBXaGVuIGNvbnRyb2wgbGVhdmVzIHRoaXMgc2NvcGUsIHRoZXNl
IHZhbHVlcyB3aWxsIGJlCisgICAgICAgICAgIHRvcm4gb2ZmLgogICAgICAgICAgKi8KLSAgICAg
ICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNyZWF0ZUV4Y2VwdGlvblNjb3BlKGNhbGxGcmFt
ZSwgdlBDKSk7CisgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOworCisgICAgICAg
IGlmICghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkuanNWYWx1ZSgpKSB7CisgICAgICAgICAg
ICBpbnQgdGVtcGwgPSB2UENbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSB2
UENbM10udS5vcGVyYW5kOworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+cih0ZW1wbCku
anNWYWx1ZSgpLmlzT2JqZWN0KCkpOworICAgICAgICAgICAgSlNPYmplY3QqIHNjb3BlVGVtcGxh
dGUgPSBhc09iamVjdChjYWxsRnJhbWUtPnIodGVtcGwpLmpzVmFsdWUoKSk7CisgICAgICAgICAg
ICBBU1NFUlQoc2NvcGVUZW1wbGF0ZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAgICAgICAg
ICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIG5ld1Njb3BlID0gc3RhdGljX2Nhc3Q8SlNTdGF0aWNT
Y29wZU9iamVjdCo+KHNjb3BlVGVtcGxhdGUpOworICAgICAgICAgICAgbmV3U2NvcGUgPSBuZXdT
Y29wZS0+cmVpZnkoKmdsb2JhbERhdGEsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBiYXNlKTsK
KyAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gbmV3U2NvcGU7CisgICAg
ICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCkt
PnB1c2gobmV3U2NvcGUpKTsKKyAgICAgICAgfQogCi0gICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX3B1c2hfbmV3X3Njb3BlKTsKKyAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
cmVpZnlfc2NvcGUpOworICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CisgICAgfQorICAgIERF
RklORV9PUENPREUob3BfdGVhcl9vZmZfc2NvcGUpIHsKKyAgICAgICAgLyogdGVhcl9vZmZfc2Nv
cGUgc3JjKHIpCisKKyAgICAgICAgICAgSWYgdGhlIHNjb3BlIHN0b3JlZCBpbiBTUkMgd2FzIHJl
aWZpZWQsIGNvcHkgdGhlIGJsb2NrLXNjb3BlZCBsb2NhbHMKKyAgICAgICAgICAgaW4gdGhlIHJl
Z2lzdGVycyBmb2xsb3dpbmcgU1JDIGZyb20gdGhlIHJlZ2lzdGVyIGZpbGUgdG8gdGhlCisgICAg
ICAgICAgIGhlYXAuIE11bmdlIHRoZSBzY29wZSBvYmplY3Qgc3RvcmVkIGluIFNSQyB0byBwb2lu
dCB0byB0aGlzIG5ldworICAgICAgICAgICBiYWNraW5nIHN0b3JlLCBhbmQgcmVtb3ZlIGl0IGZy
b20gdGhlIHNjb3BlIGNoYWluLgorCisgICAgICAgICAgIFRoaXMgb3Bjb2RlIGFwcGVhcnMgd2hl
biBsZWF2aW5nIGJsb2NrIHNjb3Blcy4KKyAgICAgICAgKi8KKworICAgICAgICBpbnQgc3JjID0g
dlBDWzFdLnUub3BlcmFuZDsKKworICAgICAgICBpZiAoSlNWYWx1ZSBzY29wZSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihzcmMpLmpzVmFsdWUoKSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KHNjb3BlKTsKKyAgICAgICAgICAgIEFTU0VSVChvYmplY3QtPmlzU3Rh
dGljU2NvcGVPYmplY3QoKSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxKU1N0YXRpY1Njb3Bl
T2JqZWN0Kj4ob2JqZWN0KS0+dGVhck9mZigqZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBjYWxs
RnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnBvcCgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3RlYXJfb2ZmX3Njb3Bl
KTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KLSNpZiBFTkFCTEUoQ09NUFVU
RURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIHNraXBfbmV3X3Njb3BlOgotI2VuZGlm
CiAgICAgREVGSU5FX09QQ09ERShvcF9jYXRjaCkgewogICAgICAgICAvKiBjYXRjaCBleChyKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNTQxY2M4OTZhMzI4OTBmNmM1ZWY2MWI0
YjY1YjcyNGU2OGVlNmI0MS4uNmQ5NjUwMGJhYzdiNjdiZDI5MmVkYjY4YzE0ODk0ODg2NWQyOTFj
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMjcyLDcgKzI3Miw2IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2plcV9u
dWxsKQogICAgICAgICBERUZJTkVfT1Aob3BfamZhbHNlKQogICAgICAgICBERUZJTkVfT1Aob3Bf
am1wKQotICAgICAgICBERUZJTkVfT1Aob3Bfam1wX3Njb3BlcykKICAgICAgICAgREVGSU5FX09Q
KG9wX2puZXFfbnVsbCkKICAgICAgICAgREVGSU5FX09QKG9wX2puZXFfcHRyKQogICAgICAgICBE
RUZJTkVfT1Aob3Bfamxlc3MpCkBAIC0zMTcsNyArMzE2LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfcHJlX2luYykKICAgICAgICAg
REVGSU5FX09QKG9wX3Byb2ZpbGVfZGlkX2NhbGwpCiAgICAgICAgIERFRklORV9PUChvcF9wcm9m
aWxlX3dpbGxfY2FsbCkKLSAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfbmV3X3Njb3BlKQorICAg
ICAgICBERUZJTkVfT1Aob3BfZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkKQorICAgICAgICBERUZJ
TkVfT1Aob3BfcmVpZnlfc2NvcGUpCisgICAgICAgIERFRklORV9PUChvcF90ZWFyX29mZl9zY29w
ZSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfc2NvcGUpCiAgICAgICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFu
c2l0aW9uX25vcm1hbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDgwZTUyNjc3NTk5NGZl
Yzk0NjY1MmM1YWZhMTNkODk1ZjJlNzFlZGIuLjk4NDY1NTg3NjJkZDgyNDg3N2E2N2Q3MWNjYjZm
NDA3MDkyYjQ5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtODE4LDcgKzgxOCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3Bfam1wKEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9q
bXBfc2NvcGVzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmVxX251bGwo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2puZXFfcHRyKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbGVzcyhJbnN0cnVjdGlvbiopOwpAQCAtODY0LDcg
Kzg2Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfcHJlX2luYyhJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV9kaWRfY2FsbChJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV93aWxsX2NhbGwoSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQoSW5zdHJ1
Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3JlaWZ5X3Njb3BlKEluc3RydWN0aW9uKik7
CisgICAgICAgIHZvaWQgZW1pdF9vcF90ZWFyX29mZl9zY29wZShJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHVzaF9zY29wZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9w
dXRfYnlfaW5kZXgoSW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCmluZGV4IDJkYjgyYmY0YWQyMGQ2MDNhZjAzNDlkZTRlZjUxNGNmM2QwMDI2YzYu
LjcxOTU4YjE0OGRiM2VkMWJiMTdmMjI1YjBiM2E4NDUwOTlmNDRlZTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTAxNiwxMiArMTAxNiwzNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19qc251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnN1cmVfbG9jYWxfaW5p
dGlhbGl6ZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF9uZXdfc2NvcGUpOworICAgIHVuc2lnbmVk
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSnVtcCBub3RFbXB0
eSA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIG5vdEVt
cHR5LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3JlaWZ5X3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0ZW1wbCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgSnVtcCBzY29wZVJlaWZpZWQgPSBicmFuY2hUZXN0
UHRyKE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdp
c3RlcikpKTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVpZnlfc2Nv
cGUpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHRlbXBsLCByZWdUMSk7CisgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGJhc2UpKTsKKyAgICBzdHViQ2FsbC5jYWxsKGRz
dCk7CisgICAgc2NvcGVSZWlmaWVkLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X3RlYXJfb2ZmX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
dW5zaWduZWQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEp1
bXAgc2NvcGVOb3RSZWlmaWVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCBBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzY29wZSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9vZmZfc2NvcGUpOworICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KHNjb3BlLCByZWdUMSk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIHNjb3BlTm90
UmVpZmllZC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzNCwxNCArMTA1OSw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wX3Njb3BlcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbXBfc2Nv
cGVzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICBhZGRKdW1w
KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRl
eCBkNGM3OTZjMmZkZjYwODNjYTdhN2YwZjQ5NWJiMzgwYzc1NWRlMDA1Li40NDZkODk2YzQwODg3
OTIxODdmMDRiODQxOTliMmM2NjRmODIyMzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xMzI4LDEyICsxMzI4LDM5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF90b19qc251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0NhCiAgICAgc3R1YkNhbGwuY2FsbChkc3QpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9wdXNoX25ld19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X29wX3B1c2hfbmV3X3Njb3BlKTsKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgbm90RW1wdHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
dGFnRm9yKGRzdCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2Vuc3VyZV9sb2NhbF9pbml0aWFsaXpl
ZCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICBz
dHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIHN0dWJD
YWxsLmNhbGwoKTsKKyAgICBub3RFbXB0eS5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9yZWlmeV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5z
aWduZWQgdGVtcGwgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2ln
bmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEp1bXAgc2Nv
cGVSZWlmaWVkID0gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcihkc3QpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIGVtaXRMb2FkUGF5bG9hZCh0ZW1wbCwgcmVn
VDApOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZWlmeV9zY29wZSk7
CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOworICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW0zMihiYXNlKSk7CisgICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAgIHNj
b3BlUmVpZmllZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9z
Y29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHNj
b3BlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBKdW1wIHNjb3BlTm90
UmVpZmllZCA9IGJyYW5jaDMyKEVxdWFsLCB0YWdGb3Ioc2NvcGUpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIGVtaXRMb2FkUGF5bG9hZChzY29wZSwgcmVnVDAp
OworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9zY29wZSk7
CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOworICAgIHN0dWJDYWxsLmNhbGwoKTsK
KyAgICBzY29wZU5vdFJlaWZpZWQubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNTMsMTQgKzEzODAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9jYXRjaCks
IGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wX3Nj
b3BlcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbXBfc2NvcGVzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAg
IHN0dWJDYWxsLmNhbGwoKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAKaW5kZXggOWFlMzJjNGIwZGUyYjY5ZTMzMWE1OGFkZmM0MGU0MTUxY2EyZmE5
MC4uYTcxZDJhYWY3Y2Q3YWVhYjlhNjM4ZDEwOWI0MmUyNjAxMzg3ZGZkNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTMwODAsNyArMzA4MCw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2Z1bmNfZXhwKQogICAgICAgICBkb2VzIG5v
dCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0aGUgRnVuY3Rpb25FeHByZXNzaW9uLgogICAg
ICAqLwogICAgIGlmICghZnVuY3Rpb24tPm5hbWUoKS5pc051bGwoKSkgewotICAgICAgICBKU1N0
YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0gSlNTdGF0aWNTY29wZU9iamVj
dDo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBE
b250RGVsZXRlKTsKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9i
amVjdCA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRh
LCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgICAg
ICBmdW5jLT5zZXRTY29wZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuYy0+c2NvcGUoKS0+
cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7CiAgICAgfQogCkBAIC0zMzcxLDI4ICszMzcxLDQ1
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9pbikKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJh
bWUsIHByb3BlcnR5KSkpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9w
X3B1c2hfbmV3X3Njb3BlKQorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfZW5zdXJlX2xv
Y2FsX2luaXRpYWxpemVkKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKKyAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWRWYXJpYWJsZUVycm9yKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3Nb
MF0uaWRlbnRpZmllcigpKTsKKyAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5EKCk7Cit9CiAK
LSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoc3RhY2tG
cmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIHN0YWNrRnJh
bWUuYXJnc1sxXS5qc1ZhbHVlKCksIERvbnREZWxldGUpOworREVGSU5FX1NUVUJfRlVOQ1RJT04o
SlNPYmplY3QqLCBvcF9yZWlmeV9zY29wZSkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUo
c3RhY2tGcmFtZSk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2Fs
bEZyYW1lOwotICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKS0+cHVzaChzY29wZSkpOwotICAgIHJldHVybiBzY29wZTsKKyAgICAvLyBBcmd1bWVudHM6
IHNjb3BlIHRlbXBsYXRlIG9iamVjdCAoanN2YWx1ZSksIG9mZnNldCBvZiByZWdpc3RlcnMgKGlu
dDMyKS4KKyAgICBKU1ZhbHVlIHRlbXBsID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsK
KyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKTsKKwor
ICAgIEFTU0VSVCh0ZW1wbC5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogc2NvcGVUZW1wbGF0
ZSA9IGFzT2JqZWN0KHRlbXBsKTsKKyAgICBBU1NFUlQoc2NvcGVUZW1wbGF0ZS0+aXNTdGF0aWNT
Y29wZU9iamVjdCgpKTsKKyAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBuZXdTY29wZSA9IHN0YXRp
Y19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihzY29wZVRlbXBsYXRlKTsKKyAgICBuZXdTY29w
ZSA9IG5ld1Njb3BlLT5yZWlmeSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7CisgICAgc3RhY2tGcmFtZS5j
YWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KS0+cHVzaChuZXdTY29wZSkpOworCisgICAgLy8gR2VuZXJhdGVkIGNvZGUgc3RvcmVzIGl0IGlu
IGNhbGxGcmFtZS0+cihkc3QpLgorICAgIHJldHVybiBuZXdTY29wZTsKIH0KIAotREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3Bfam1wX3Njb3BlcykKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3RlYXJfb2ZmX3Njb3BlKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKIAotICAgIHVuc2lnbmVkIGNvdW50ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmludDMy
KCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAg
ICAvLyBBcmd1bWVudHM6IHNjb3BlIG9iamVjdCAoanN2YWx1ZSkuCisgICAgSlNWYWx1ZSBzY29w
ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKHNjb3BlKTsKIAot
ICAgIFNjb3BlQ2hhaW5Ob2RlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLSAgICB3
aGlsZSAoY291bnQtLSkKLSAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICBjYWxsRnJhbWUt
PnNldFNjb3BlQ2hhaW4odG1wKTsKKyAgICBBU1NFUlQoc2NvcGUuaXNPYmplY3QoKSk7CisgICAg
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHNjb3BlKTsKKyAgICBBU1NFUlQob2JqZWN0LT5p
c1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgIHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmpl
Y3QqPihvYmplY3QpLT50ZWFyT2ZmKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEpOworICAgIHN0YWNr
RnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zY29w
ZUNoYWluKCktPnBvcCgpKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0
X2J5X2luZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCmluZGV4IDYwZGM4YTI3
MGQ4ZWJlZTY0YTEzOWE4NzBmYmJkNDZjMjAyZDMxZjYuLjEzZGNkNTRlYTkzZTg1NWE0OWY2NTRl
MmJlYTliNzRiNGFjNmVlN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKQEAg
LTQxNiw3ICs0MTYsOSBAQCBleHRlcm4gIkMiIHsKICAgICBKU09iamVjdCogSklUX1NUVUIgY3Rp
X29wX25ld19vYmplY3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09iamVjdCogSklU
X1NUVUIgY3RpX29wX25ld19yZWdleHAoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09i
amVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfYWN0aXZhdGlvbihTVFVCX0FSR1NfREVDTEFSQVRJ
T04pOwotICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9uZXdfc2NvcGUoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9lbnN1cmVfbG9jYWxf
aW5pdGlhbGl6ZWQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICBKU09iamVjdCogSklUX1NU
VUIgY3RpX29wX3JlaWZ5X3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9pZCBK
SVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAg
ICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKTsKICAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9u
X3JlYWxsb2MoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X3BuYW1lcyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpA
QCAtNDMzLDcgKzQzNSw2IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X2NoZWNrX2hhc19pbnN0YW5jZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklU
X1NUVUIgY3RpX29wX2RlYnVnKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfZW5kKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgdm9pZCBKSVRfU1RV
QiBjdGlfb3Bfam1wX3Njb3BlcyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklU
X1NUVUIgY3RpX29wX3BvcF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQg
SklUX1NUVUIgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsK
ICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAKaW5kZXggZGFjNzJjOWRiN2NkMzc5ZDczYjQ3YWY4MzVkNzQ1MWNiZDIzOTRlZS4uOGI1
MDAzOTdjOGU4NDk0OWE2OTVkZGMzOGIyNzc3NDdmOTZkZjVhMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0xMTIwLDE4ICsxMTIwLDYg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZXJfc2V0dGVyKQogICAg
IExMSU5UX0VORCgpOwogfQogCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfam1wX3Nj
b3BlcykKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gcGNbMV0u
dS5vcGVyYW5kOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiB0bXAgPSBleGVjLT5zY29wZUNoYWluKCk7
Ci0gICAgd2hpbGUgKGNvdW50LS0pCi0gICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0gICAgZXhl
Yy0+c2V0U2NvcGVDaGFpbih0bXApOwotICAgIHBjICs9IHBjWzJdLnUub3BlcmFuZDsKLSAgICBM
TElOVF9FTkQoKTsKLX0KLQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2p0cnVlKQog
ewogICAgIExMSU5UX0JFR0lOKCk7CkBAIC0xMjQzLDcgKzEyMzEsNyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfbmV3X2Z1bmNfZXhwKQogICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBm
dW5jdGlvbi0+bWFrZShleGVjLCBleGVjLT5zY29wZUNoYWluKCkpOwogICAgIAogICAgIGlmICgh
ZnVuY3Rpb24tPm5hbWUoKS5pc051bGwoKSkgewotICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0
KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGV4ZWMs
IGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAg
IEpTU3RhdGljU2NvcGVPYmplY3QqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBKU1N0YXRpY1Njb3Bl
T2JqZWN0OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9u
bHkgfCBEb250RGVsZXRlKTsKICAgICAgICAgZnVuYy0+c2V0U2NvcGUoZ2xvYmFsRGF0YSwgZnVu
Yy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7CiAgICAgfQogICAgIApAQCAt
MTQ1MCw2ICsxNDM4LDQxIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90ZWFyX29m
Zl9hcmd1bWVudHMpCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKK0xMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQpCit7CisgICAgTExJTlRfQkVHSU4o
KTsKKyAgICBMTElOVF9USFJPVyhjcmVhdGVVbmluaXRpYWxpemVkVmFyaWFibGVFcnJvcihleGVj
LCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpKSk7Cit9CisK
K0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZWlmeV9zY29wZSkKK3sKKyAgICBMTElO
VF9CRUdJTigpOworICAgIGludCBkc3QgPSBwY1sxXS51Lm9wZXJhbmQ7CisgICAgaW50IHRlbXBs
ID0gcGNbMl0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gcGNbM10udS5vcGVyYW5kOworICAg
IEFTU0VSVCghZXhlYy0+dW5jaGVja2VkUihkc3QpLmpzVmFsdWUoKSk7CisgICAgQVNTRVJUKGV4
ZWMtPnIodGVtcGwpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogc2NvcGVU
ZW1wbGF0ZSA9IGFzT2JqZWN0KGV4ZWMtPnIodGVtcGwpLmpzVmFsdWUoKSk7CisgICAgQVNTRVJU
KHNjb3BlVGVtcGxhdGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgSlNTdGF0aWNTY29w
ZU9iamVjdCogbmV3U2NvcGUgPSBzdGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oc2Nv
cGVUZW1wbGF0ZSk7CisgICAgbmV3U2NvcGUgPSBuZXdTY29wZS0+cmVpZnkoZ2xvYmFsRGF0YSwg
ZXhlYy0+cmVnaXN0ZXJzKCkgKyBiYXNlKTsKKyAgICBleGVjLT51bmNoZWNrZWRSKGRzdCkgPSBu
ZXdTY29wZTsKKyAgICBleGVjLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKS0+cHVz
aChuZXdTY29wZSkpOworICAgIExMSU5UX0VORCgpOworfQorCitMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfdGVhcl9vZmZfc2NvcGUpCit7CisgICAgTExJTlRfQkVHSU4oKTsKKyAgICBp
bnQgc3JjID0gcGNbMV0udS5vcGVyYW5kOworICAgIEFTU0VSVChleGVjLT51bmNoZWNrZWRSKGRz
dCkuanNWYWx1ZSgpKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZXhlYy0+dW5j
aGVja2VkUihzcmMpLmpzVmFsdWUoKSk7CisgICAgQVNTRVJUKG9iamVjdC0+aXNTdGF0aWNTY29w
ZU9iamVjdCgpKTsKKyAgICBzdGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4ob2JqZWN0
KS0+dGVhck9mZihnbG9iYWxEYXRhKTsKKyAgICBleGVjLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNj
b3BlQ2hhaW4oKS0+cG9wKCkpOworICAgIExMSU5UX0VORCgpOworfQorCiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfc3RyY2F0KQogewogICAgIExMSU5UX0JFR0lOKCk7CkBAIC0xNTE4
LDE1ICsxNTQxLDYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3BvcF9zY29wZSkK
ICAgICBMTElOVF9FTkQoKTsKIH0KIAotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1
c2hfbmV3X3Njb3BlKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRp
Y1Njb3BlT2JqZWN0OjpjcmVhdGUoZXhlYywgY29kZUJsb2NrLT5pZGVudGlmaWVyKHBjWzJdLnUu
b3BlcmFuZCksIExMSU5UX09QKDMpLmpzVmFsdWUoKSwgRG9udERlbGV0ZSk7Ci0gICAgZXhlYy0+
c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpKTsKLSAgICBMTElO
VF9SRVRVUk4oc2NvcGUpOwotfQotCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhy
b3cpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmgKaW5kZXggN2IzYjhiZGE2NTZlYjFmOWI3ZjMxZjA2MmFiZjA5ZjU0
NTM3MGU4NS4uMjhmY2FmN2Q2ZjM3MWZiNmFkMjA2ODJlMWE0ODY4ODJkNmE1ZjRiOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKQEAgLTE1OSw3ICsx
NTksNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbCk7CiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcHV0X2J5X2luZGV4KTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9wdXRfZ2V0dGVyX3NldHRlcik7Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
am1wX3Njb3Blcyk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfanRydWUpOwogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pmYWxzZSk7CiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfamxlc3MpOwpAQCAtMTgxLDEzICsxODAsMTUgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYXJncyk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfY2FsbF9ldmFsKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90ZWFyX29m
Zl9hY3RpdmF0aW9uKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90ZWFyX29mZl9h
cmd1bWVudHMpOworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Vuc3VyZV9sb2NhbF9p
bml0aWFsaXplZCk7CitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVpZnlfc2NvcGUp
OworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX3Njb3BlKTsKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Z2V0X3BuYW1lcyk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9wbmFtZSk7
CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF9zY29wZSk7CiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcG9wX3Njb3BlKTsKLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9wdXNoX25ld19zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dGhyb3cpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rocm93X3JlZmVyZW5jZV9l
cnJvcik7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVidWcpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4
IDlhZjkxYmVmMmM0ODE3NTQ4ODMzMWZkYjk0MjQxNTRhMDE4NWE3ZGYuLjM2Mzg3YmIxNWM1MTIz
Y2E2OTZhYTc0OGFmZTk4OTI1NzdjZWNmNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTUyNSwxMiArNTI1LDYgQEAg
X2xsaW50X29wX3B1dF9nZXR0ZXJfc2V0dGVyOgogICAgIGRpc3BhdGNoKDUpCiAKIAotX2xsaW50
X29wX2ptcF9zY29wZXM6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX2ptcF9zY29wZXMpCi0gICAgZGlzcGF0Y2goMCkKLQotCiBfbGxpbnRf
b3BfbG9vcF9pZl90cnVlOgogICAgIG5vcAogX2xsaW50X29wX2p0cnVlOgpAQCAtNzI3LDEyICs3
MjEsNiBAQCBfbGxpbnRfb3BfcG9wX3Njb3BlOgogICAgIGRpc3BhdGNoKDEpCiAKIAotX2xsaW50
X29wX3B1c2hfbmV3X3Njb3BlOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBjYWxsU2xvd1Bh
dGgoX2xsaW50X3Nsb3dfcGF0aF9wdXNoX25ld19zY29wZSkKLSAgICBkaXNwYXRjaCg0KQotCi0K
IF9sbGludF9vcF90aHJvdzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfdGhyb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDQ2YzYyMjZlNTQ0
ZTgxNjVlY2ZlMmZhNTUyNGY0MDU5NjQ3ZmMyNDkuLjhjYjQ1ZThlMDFhYzU2ZWEwZmYwNGU2NjA1
MWVhYWVjZTI2YjJmYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xNDU4LDYgKzE0NTgsMzMgQEAg
X2xsaW50X29wX3RlYXJfb2ZmX2FyZ3VtZW50czoKICAgICBkaXNwYXRjaCgyKQogCiAKK19sbGlu
dF9vcF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQ6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAg
IGxvYWRpIDRbUENdLCB0MAorICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgRW1wdHlW
YWx1ZVRhZywgLm9wRW5zdXJlTG9jYWxJbml0aWFsaXplZERvbmUKKyAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQpCisub3BFbnN1cmVMb2Nh
bEluaXRpYWxpemVkRG9uZToKKyAgICBkaXNwYXRjaCgzKQorCisKK19sbGludF9vcF9yZWlmeV9z
Y29wZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGkgNFtQQ10sIHQwCisgICAgYmlu
ZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BSZWlmeVNjb3BlRG9u
ZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3JlaWZ5X3Njb3BlKQorLm9wUmVp
ZnlTY29wZURvbmU6CisgICAgZGlzcGF0Y2goNCkKKworCitfbGxpbnRfb3BfdGVhcl9vZmZfc2Nv
cGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpIDRbUENdLCB0MAorICAgIGJpZXEg
VGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BUZWFyT2ZmU2NvcGVEb25l
CisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfdGVhcl9vZmZfc2NvcGUpCisub3BU
ZWFyT2ZmU2NvcGVEb25lOgorICAgIGRpc3BhdGNoKDIpCisKKwogX2xsaW50X29wX3JldDoKICAg
ICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KaW5kZXggZGRmNTFmNTk0ZmI2Y2NmYzQyNGExNmQ5ZmI4Y2U2OWJiYzRkMzExOC4uYTA3
YWE4Zjg2NTEzY2RhNzU1YjEyZmE1ZGZkMGJmNGNlZDlkZjZjMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTEz
MTQsNiArMTMxNCwzMyBAQCBfbGxpbnRfb3BfdGVhcl9vZmZfYXJndW1lbnRzOgogICAgIGRpc3Bh
dGNoKDIpCiAKIAorX2xsaW50X29wX2Vuc3VyZV9sb2NhbF9pbml0aWFsaXplZDoKKyAgICB0cmFj
ZUV4ZWN1dGlvbigpCisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBidHBueiBbY2Zy
LCB0MCwgOF0sIC5vcEVuc3VyZUxvY2FsSW5pdGlhbGl6ZWREb25lCisgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkKQorLm9wRW5zdXJlTG9j
YWxJbml0aWFsaXplZERvbmU6CisgICAgZGlzcGF0Y2goMykKKworCitfbGxpbnRfb3BfcmVpZnlf
c2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQw
CisgICAgYnRweiBbY2ZyLCB0MCwgOF0sIC5vcFJlaWZ5U2NvcGVEb25lCisgICAgY2FsbFNsb3dQ
YXRoKF9sbGludF9zbG93X3BhdGhfcmVpZnlfc2NvcGUpCisub3BSZWlmeVNjb3BlRG9uZToKKyAg
ICBkaXNwYXRjaCg0KQorCisKK19sbGludF9vcF90ZWFyX29mZl9zY29wZToKKyAgICB0cmFjZUV4
ZWN1dGlvbigpCisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBidHB6IFtjZnIsIHQw
LCA4XSwgLm9wVGVhck9mZlNjb3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19w
YXRoX3RlYXJfb2ZmX3Njb3BlKQorLm9wVGVhck9mZlNjb3BlRG9uZToKKyAgICBkaXNwYXRjaCgy
KQorCisKIF9sbGludF9vcF9yZXQ6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNoZWNrU3dp
dGNoVG9KSVRGb3JFcGlsb2d1ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5k
ZXggZjc1MmI5MWU5NWRkOTQxYjFjZjk4YjEyMDY1MzFlZGY5NGU4YzczNy4uYTQwMTllZjQwMmI5
NWQ2ZTEwY2Y4MTYxYjdjODhhNzNhZTUwYzExNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaApAQCAtMTQyMiw3ICsxNDIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgc2V0VXNlc0FyZ3VtZW50cygpIHsgbV9zY29wZUZsYWdzIHw9IFVzZXNBcmd1bWVudHNGbGFn
OyB9CiAgICAgICAgIGJvb2wgdXNlc1RoaXMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3Mg
JiBVc2VzVGhpc0ZsYWc7IH0KIAotICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbkZvck1vcmVU
aGFuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVzZXNFdmFsRmxh
ZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgICAgIGJvb2wgbmVlZHNB
Y3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxh
Z3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnKTsgfQogICAgICAgICBib29sIG5lZWRz
QWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgfHwgbmVl
ZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKTsgfQogCiAgICAgICAgIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCA3NTEzZDFmMTFmZDQ4OTU4MjhhZjhjYWViZTgw
YWRhMTViNWY1N2Y5Li5lNDIwNjI4Zjk5NDU2NTAxNjI3OTU2OWI2OTc3ZGY0NDk1ODhiOTdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTE2Miw3ICsxNjIsNyBAQCBz
dHJ1Y3QgU2NvcGUgewogICAgIEFMV0FZU19JTkxJTkUgU2NvcGVGbGFncyB1c2VzRmxhZ3MoKSBj
b25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBBbGxTY29wZVVzZXNGbGFnczsgfQogICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXRGbGFncyhTY29wZUZsYWdzIHNjb3BlRmxhZ3MpIHsgbV9zY29w
ZUZsYWdzIHw9IHNjb3BlRmxhZ3M7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBuZWVkc0Z1
bGxBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVzZXNFdmFsRmxh
ZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgQUxXQVlTX0lOTElORSBi
b29sIG5lZWRzRnVsbEFjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiAo
VXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBz
dHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU3RyaWN0TW9kZUZsYWc7
IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hhZG93c0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fc2NvcGVGbGFncyAmIFNoYWRvd3NBcmd1bWVudHNGbGFnOyB9CiAgICAgQUxXQVlTX0lO
TElORSBib29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBGdW5j
dGlvbk1vZGVGbGFnOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwCmluZGV4IGNlNjNhZTlhZjRlZjQ2NDdjNWMxNzY2MzdjYzQzY2Zk
ZDg3ZjhiOTQuLmZjNGEwMjZiZTYyODdkMjBiOTdmMWEzNzU4MDYxYTBiMjI5Y2RmY2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CkBAIC0xMTEsNiArMTExLDEyIEBAIEpTT2JqZWN0KiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiAgICAgcmV0dXJu
IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOwogfQogICAgIAorSlNPYmplY3Qq
IGNyZWF0ZVVuaW5pdGlhbGl6ZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQpCit7CisgICAgVVN0cmluZyBtZXNzYWdlKG1ha2VVU3RyaW5nKCJV
bmluaXRpYWxpemVkIHZhcmlhYmxlOiAiLCBpZGVudC51c3RyaW5nKCkpKTsKKyAgICByZXR1cm4g
Y3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgbWVzc2FnZSk7Cit9CisgICAgCiBKU09iamVjdCog
Y3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBvcCwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VVU3RyaW5n
KCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiJyBpcyBub3QgYSB2YWxp
ZCBhcmd1bWVudCBmb3IgJyIsIG9wLCAiJyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCmluZGV4IDdiZmZkMjk0YjM1Njg3NGZhYzE0YmQ5
NDRjYzRjOTJiYjJjN2I3MjguLjI1ZmUyMzIxY2VjZTg5M2NmODE4MDlhN2I3MmQwYzYzNzI0OWM5
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhl
bHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqKTsKIEpTT2JqZWN0KiBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoSlNHbG9iYWxPYmplY3QqKTsKIEpTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKEpTR2xvYmFsT2JqZWN0Kik7CiBKU09iamVjdCogY3JlYXRlVW5kZWZpbmVkVmFyaWFi
bGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CitKU09iamVjdCogY3JlYXRl
VW5pbml0aWFsaXplZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYp
OwogSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7
CiBKU09iamVjdCogY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgY2hh
ciogb3AsIEpTVmFsdWUpOwogSlNPYmplY3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4
ZWNTdGF0ZSosIEpTVmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oCmluZGV4IDFhZTQ0YjdlYWZiZWU4Y2ViOTUyYjhhOTBmNzViZTMxMmQ5ZjgwYzQuLjZh
OGIxYTRlYWNiNGYwZTg3NDE3OTJiZTg2YTI2MzEzNzU5N2NjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTI5NCw3ICsyOTQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9zY29w
ZUZsYWdzICYgVXNlc0V2YWxGbGFnOyB9CiAgICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNBcmd1bWVudHNGbGFnOyB9Ci0gICAgICAg
IGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlh
YmxlcyB8fCBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNl
c0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIHx8IG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZs
YWcgfCBVc2VzV2l0aEZsYWcpOyB9CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9zY29wZUZsYWdzICYgU3RyaWN0TW9kZUZsYWc7IH0KIAogICAgICAgICB2b2lk
IHVubGlua0NhbGxzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCmluZGV4IGY4OTQyYjVmODY1ZGI1OWUxNTQyZGM0ZTNi
NWM3Y2YyNzljMTcxNjMuLjBlZTAxZGM2ZWVlYzQ0NmY5M2ZhNGJmYmE1MTdiOGM0ZTBjMTVjNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2Nv
cGVPYmplY3QuY3BwCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIENP
TVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJUKHRoaXNP
YmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7
CiAgICAgSlNWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdpc3RlclN0b3JlKTsKKyAg
ICBpZiAodGhpc09iamVjdC0+bV9yZWdpc3RlcnMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzLCB0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlLT5z
aXplKCkpOwogfQogCiBKU09iamVjdCogSlNTdGF0aWNTY29wZU9iamVjdDo6dG9UaGlzT2JqZWN0
KEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaAppbmRleCBiYmYwM2EzNDczYTI1NzY5ZDJi
NDI1OWI3NTBmNmJmN2ZmZDQwZjg5Li40MzIzYjE0ZjU4OTU2YmZkN2I1MGRiNjdkNzlhMWJhNTVk
ZmUxOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRp
Y1Njb3BlT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0
aWNTY29wZU9iamVjdC5oCkBAIC0zNCwxMyArMzQsNTAgQEAgbmFtZXNwYWNlIEpTQ3sKICAgICBw
dWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBCYXNlOwogCi0gICAgICAg
IHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKQorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVjdCogY3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9i
amVjdCogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0YXRpY1Nj
b3BlT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNTdGF0aWNTY29wZU9iamVjdChleGVjKTsKLSAg
ICAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCBpZGVudGlmaWVyLCB2
YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkU3ltYm9sVGFibGU+
IHRhYmxlID0gU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpOworICAgICAgICAgICAgSlNTdGF0
aWNTY29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U1N0YXRpY1Njb3BlT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0YXRpY1Njb3BlT2JqZWN0
KGdsb2JhbERhdGEsIHRhYmxlLnJlbGVhc2UoKSwgMCk7CisgICAgICAgICAgICBzY29wZU9iamVj
dC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICByZXR1cm4gc2NvcGVP
YmplY3Q7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVjdCog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgeworICAgICAgICAg
ICAgSlNTdGF0aWNTY29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBjcmVhdGUoZ2xvYmFsRGF0YSk7
CisgICAgICAgICAgICBzY29wZU9iamVjdC0+YWRkVmFyaWFibGUobmFtZSwgYXR0cmlidXRlcywg
U3ltYm9sVGFibGVFbnRyeTo6Tm9UZW1wb3JhbERlYWRab25lKTsKKyAgICAgICAgICAgIE93bkFy
cmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5
UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5bMV0pOworICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiByZWdpc3RlcnMgPSByZWdpc3RlckFycmF5LmdldCgpOworICAgICAgICAg
ICAgcmVnaXN0ZXJzWzBdLnNldChnbG9iYWxEYXRhLCBzY29wZU9iamVjdCwgdmFsdWUpOworICAg
ICAgICAgICAgc2NvcGVPYmplY3QtPnNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJy
YXkucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKKyAgICAgICAg
fQorCisgICAgICAgIGludCBhZGRWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBTeW1ib2xUYWJsZUVudHJ5OjpUZW1wb3JhbERlYWRab25lS2luZCBr
aW5kKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcmVnaXN0ZXJzKTsKKyAgICAg
ICAgICAgIGludCBpZHggPSBzeW1ib2xUYWJsZSgpLnNpemUoKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlKCkuYWRkKG5hbWUuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KGlkeCwgYXR0cmlidXRl
cywga2luZCkpOworICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlKCkuc2l6ZSgpID09IGlk
eCArIDEpOworICAgICAgICAgICAgcmV0dXJuIGlkeDsKKyAgICAgICAgfQorCisgICAgICAgIEpT
U3RhdGljU2NvcGVPYmplY3QqIHJlaWZ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVnaXN0
ZXIqIHJlZ2lzdGVycykKKyAgICAgICAgeworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVj
dCAqc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0YXRpY1Njb3Bl
T2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGdsb2JhbERhdGEs
IG1fc3ltYm9sVGFibGUsIHJlZ2lzdGVycyk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHRlYXJPZmYoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorICAgICAgICB7CisgICAgICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVu
a25vd24+W21fc3ltYm9sVGFibGUtPnNpemUoKV0pOworICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiByZWdpc3RlcnMgPSByZWdpc3RlckFycmF5LmdldCgpOworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtX3N5bWJvbFRhYmxlLT5zaXplKCk7IGkrKykKKyAgICAgICAg
ICAgICAgICByZWdpc3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ld
LmdldCgpKTsKKyAgICAgICAgICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJy
YXkucmVsZWFzZSgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgYm9vbCBpc0R5bmFtaWNTY29w
ZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogICAgICAgICBzdGF0aWMgSlNP
YmplY3QqIHRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqKTsKQEAgLTU0LDI0ICs5MSwx
OCBAQCBuYW1lc3BhY2UgSlNDewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyU3RvcmUu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgc3ltYm9s
VGFibGUoKS5hZGQoaWRlbnRpZmllci5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJp
YnV0ZXMpKTsKLSAgICAgICAgfQogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBKU1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAgICAgOiBK
U1ZhcmlhYmxlT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0
YXRpY1Njb3BlU3RydWN0dXJlLmdldCgpLCAmbV9zeW1ib2xUYWJsZSwgcmVpbnRlcnByZXRfY2Fz
dDxSZWdpc3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSkKKyAgICAgICAgSlNTdGF0aWNTY29w
ZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U2hhcmVkU3ltYm9s
VGFibGU+IHRhYmxlLCBSZWdpc3RlciogcmVnaXN0ZXJzKQorICAgICAgICAgICAgOiBKU1Zhcmlh
YmxlT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RhdGljU2NvcGVTdHJ1Y3R1cmUuZ2V0
KCksIHRhYmxlLmdldCgpLCByZWdpc3RlcnMpCisgICAgICAgICAgICAsIG1fc3ltYm9sVGFibGUo
dGFibGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAKLSAgICAgICAgU3ltYm9sVGFibGUgbV9zeW1ib2xUYWJsZTsKLSAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVnaXN0ZXJTdG9yZTsKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOwogICAgIH07CiAKICAgICBpbmxpbmUg
Ym9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0Ojppc0R5bmFtaWNTY29wZShib29sJikgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCmluZGV4IGY1NDBhMTJj
NzNlZjE3MjZmNmMyZmRhZWZlZDU5MWU1Y2VlYTM2OWQuLjlmM2RhZWIyNjMxMmZlOWJhZDg1ZWEz
YWZhNGVkOWNhYjhjOTY3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuaApAQCAtNTEsMTMgKzUxLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBT
eW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJU
KGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAgICAgICAgcGFjayhpbmRleCwgZmFsc2UsIGZh
bHNlKTsKKyAgICAgICAgICAgIHBhY2soaW5kZXgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogICAg
ICAgICB9CiAKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5k
ZXgpKTsKLSAgICAgICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0
cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMg
JiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtLCBmYWxzZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBlbnVtIFRlbXBvcmFsRGVhZFpvbmVLaW5kIHsgSGFzVGVtcG9yYWxEZWFkWm9uZSwg
Tm9UZW1wb3JhbERlYWRab25lIH07CisKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5k
ZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFRlbXBvcmFsRGVhZFpvbmVLaW5kIGtpbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKKyAgICAgICAg
ICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRF
bnVtLCBraW5kID09IEhhc1RlbXBvcmFsRGVhZFpvbmUpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0CkBAIC04Miw3ICs5MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlcyh1bnNpZ25lZCBhdHRyaWJ1dGVzKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBwYWNrKGdldEluZGV4KCksIGF0dHJpYnV0ZXMgJiBSZWFk
T25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgICAgIHBhY2soZ2V0SW5kZXgo
KSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0sIGhhc1RlbXBv
cmFsRGVhZFpvbmUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzUmVhZE9ubHkoKSBj
b25zdApAQCAtOTAsMTkgKzk4LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIG1fYml0cyAmIFJlYWRPbmx5RmxhZzsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgaGFz
VGVtcG9yYWxEZWFkWm9uZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2JpdHMgJiBIYXNUZW1wb3JhbERlYWRab25lRmxhZzsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0
ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFJlYWRPbmx5RmxhZyA9IDB4MTsKICAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRFbnVtRmxhZyA9IDB4MjsKICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIE5vdE51bGxGbGFnID0gMHg0OwotICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgRmxhZ0JpdHMgPSAzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgSGFzVGVtcG9yYWxEZWFkWm9uZUZsYWcgPSAweDg7CisgICAgICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBGbGFnQml0cyA9IDQ7CiAKLSAgICAgICAgdm9pZCBwYWNrKGludCBpbmRleCwgYm9v
bCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICAgICAgdm9pZCBwYWNrKGludCBpbmRleCwg
Ym9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSwgYm9vbCBoYXNUZW1wb3JhbERlYWRab25lKQog
ICAgICAgICB7CiAgICAgICAgICAgICBtX2JpdHMgPSAoaW5kZXggPDwgRmxhZ0JpdHMpIHwgTm90
TnVsbEZsYWc7CiAgICAgICAgICAgICBpZiAocmVhZE9ubHkpCiAgICAgICAgICAgICAgICAgbV9i
aXRzIHw9IFJlYWRPbmx5RmxhZzsKICAgICAgICAgICAgIGlmIChkb250RW51bSkKICAgICAgICAg
ICAgICAgICBtX2JpdHMgfD0gRG9udEVudW1GbGFnOworICAgICAgICAgICAgaWYgKGhhc1RlbXBv
cmFsRGVhZFpvbmUpCisgICAgICAgICAgICAgICAgbV9iaXRzIHw9IEhhc1RlbXBvcmFsRGVhZFpv
bmVGbGFnOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGlzVmFsaWRJbmRleChp
bnQgaW5kZXgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133822</attachid>
            <date>2012-03-26 08:47:37 -0700</date>
            <delta_ts>2013-10-31 11:37:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74708-20120326174734.patch</filename>
            <type>text/plain</type>
            <size>115897</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NGRlZWIzNzE0MWUxNWNiMWU1YzIyM2YyMGYxZjU0OTE3ZWE3NDg1Li4wMmU3ZWJkY2NkMjFmMzlk
NjAxMDI4N2I4ZmQ1NjBjZmYwNTIwZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDkgQEAKKzIwMTEtMDMtMjYgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIE9wdGltaXplIGFjY2VzcyB0byBibG9jay1zY29wZWQgbG9jYWwgdmFyaWFibGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcwOAor
CisgICAgICAgIFRoaXMgY29tbWl0IGNoYW5nZXMgdGhlIGJ5dGVjb21waWxlciB0byB0cmFjayBi
bG9jayBzY29wZSBvYmplY3RzLAorICAgICAgICBhbGxvd2luZyBzdGF0aWNhbGx5IHNjb3BlZCAo
YmxvY2stc2NvcGVkKSB2YXJpYWJsZXMgdG8gYmUgcmVzb2x2ZWQKKyAgICAgICAgYXQgY29tcGls
ZS10aW1lIHRvIHJlZ2lzdGVycy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBpcyB0bwor
ICAgICAgICByZS11c2UgSlNTdGF0aWNTY29wZSwgYWRkaW5nIGxhenkgdGVhci1vZmYgYW5kIHRo
ZSBhYmlsaXR5IHRvIGJpbmQKKyAgICAgICAgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KKworICAg
ICAgICBDdXJyZW50bHksIGluIEVTNSwgb25seSBjYXRjaCBibG9ja3MgZnVuY3Rpb24gYXMgYmxv
Y2sgc2NvcGVzLCBmb3IKKyAgICAgICAgdGhlaXIgZXhjZXB0aW9uIGlkZW50aWZpZXIuICAoTmFt
ZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYWxzbworICAgICAgICBpbnRyb2R1Y2UgYSBraW5kIG9m
IGJsb2NrIHNjb3BlLCBidXQgc2luY2UgdGhleSBhcmUgZXhwcmVzc2lvbnMKKyAgICAgICAgYW5k
IG5vdCBzdGF0ZW1lbnRzIHRoZSBjb21waWxlciBpcyBub3QgYXMgaW52b2x2ZWQuKQorCisgICAg
ICAgIEdpdmVuIHRoYXQgY2F0Y2ggYmxvY2tzIGFyZSBub3QgdmVyeSBjb21tb24gaW4gSlMsIGFu
ZCB0aGV5IGNhbgorICAgICAgICBvbmx5IGJpbmQgb25lIHZhcmlhYmxlLCB0aGlzIHBhdGNoIGlz
IG1vcmUgYSBwcm9vZiBvZiBjb3JyZWN0bmVzcworICAgICAgICBhbmQgYSBiYXNlIGZvciBhIHN1
YnNlcXVlbnQgYmxvY2sgc2NvcGluZyBwYXRjaCB0aGFuIGEgZ2VuZXJhbAorICAgICAgICBvcHRp
bWl6YXRpb24uICBBcyBzdWNoLCBpbiBhbnRpY2lwYXRpb24gb2YgRVM2IGJsb2NrLXNjb3BlZAor
ICAgICAgICBsb2NhbHMsIHRoaXMgcGF0Y2ggYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHJlYWQgYmFy
cmllcnMgb24KKyAgICAgICAgYmxvY2stc2NvcGVkIGxvY2FscywgdG8gaW1wbGVtZW50IHRoZSB0
ZW1wb3JhbCBkZWFkIHpvbmUuCisKKyAgICAgICAgVGhlcmUgYXJlIHRocmVlIG5ldyBvcGNvZGVz
OiBvbmUgdG8gZW5zdXJlIHRoYXQgYSBibG9jay1zY29wZWQKKyAgICAgICAgbG9jYWwgaGFzIGJl
ZW4gaW5pdGlhbGl6ZWQsIGFuZCB0d28gZm9yIGRlYWxpbmcgd2l0aCBsYXppbHkKKyAgICAgICAg
cmVpZmllZCBhbmQgdG9ybi1vZmYgc2NvcGVzLiAgV2hpbGUgd2UncmUgYXQgaXQsIHdlIHJlbW92
ZQorICAgICAgICBqbXBfc2NvcGVzLCBhcyBpdCBjYW4ndCBiZSBpbXBsZW1lbnRlZCBjbGVhcmx5
IGluIHRoZSBwcmVzZW5jZSBvZgorICAgICAgICBsYXppbHktdG9ybi1vZmYgYmxvY2sgc2NvcGVz
LiAgSW5zdGVhZCB0aGUgY29tcGlsZXIgZW1pdHMgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIHVu
d2luZGluZ3MgZGlyZWN0bHkuICBXZSBhbHNvIHJlbW92ZSBwdXNoX25ld19zY29wZSBpbgorICAg
ICAgICBmYXZvciBvZiB0aGUgbW9yZSBnZW5lcmljIGFuZCBlZmZpY2llbnQgbGF6aWx5IHJlaWZp
ZWQgc3RhdGljCisgICAgICAgIHNjb3Blcy4KKworICAgICAgICBXaGVuIGVudGVyaW5nIGEgYmxv
Y2sgc2NvcGUsIHRoZSBjb21waWxlciBhbGxvY2F0ZXMgYSBjb250aWd1b3VzCisgICAgICAgIGJs
b2NrIG9mIHJlZ2lzdGVycyBmb3IgYmxvY2sgc2NvcGVzLiAgQmxvY2sgc2NvcGVzIHRoYXQgbWF5
IGJlCisgICAgICAgIHJlaWZpZWQgKGNhcHR1cmVkIGluIGEgc2NvcGUgY2hhaW4pIGFsc28gb2Nj
dXB5IGFuIGFkZGl0aW9uYWwKKyAgICAgICAgcmVnaXN0ZXIsIGZvciB0aGUgc2NvcGUgb2JqZWN0
IGl0c2VsZi4gIFRoZSBzeW1ib2wgdGFibGVzIGZvciB0aGUKKyAgICAgICAgYmxvY2sgc2NvcGVz
IGNvbWUgZnJvbSAic2NvcGUgdGVtcGxhdGVzIiwgd2hpY2ggbGl2ZSBpbiB0aGUKKyAgICAgICAg
Y29uc3RhbnRzIHNlY3Rpb24uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6Q29udHJvbEZsb3dDb250ZXh0KTogSW4gYWRkaXRpb24gdG8gZmluYWxseSBhbmQgd2l0
aCBibG9ja3MsCisgICAgICAgIHN1cHBvcnQgYmxvY2stc2NvcGUgY29udHJvbCBmbG93IGNvbnRl
eHRzLgorICAgICAgICAoSlNDOjpSZXNvbHZlUmVzdWx0KTogU2VwYXJhdGUgInR5cGUiIChlLmcu
IHJlZ2lzdGVyLCBsZXhpY2FsLAorICAgICAgICBldGMpIGZyb20gImF0dHJpYnV0ZXMiIChlLmcu
IHJlYWQtb25seSkuICBBZGQgdHdvIG5ldyBhdHRyaWJ1dGVzOgorICAgICAgICBCYXJyaWVyQXR0
cmlidXRlLCBpbmRpY2F0aW5nIHRoZSBuZWVkIGZvciBhIFREWiBjaGVjaywgYW5kCisgICAgICAg
IEFyZ3VtZW50c0F0dHJpYnV0ZSwgaW5kaWNhdGluZyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBhY3R1
YWxseSB0aGUKKyAgICAgICAgYXJndW1lbnRzIG9iamVjdC4gIFN0b3JlIHRoZSBpZGVudGlmaWVy
IGFzIGEgY29udmVuaWVuY2UgdG8KKyAgICAgICAgY2xpZW50cywgYW5kIHNvIHRoYXQgZXJyb3Jz
IChlLmcuIGFzc2lnbmluZyB0byBjb25zdGFudHMgb3IgVERaCisgICAgICAgIGZhaWx1cmVzKSBo
YXZlIG1vcmUgY29udGV4dC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNjb3Bl
RGVwdGgpOiBBZGQgbV9ibG9ja1Njb3BlRGVwdGguCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpjYW5PcHRpbWl6ZU5vbkxvY2Fscyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpzaG91bGRPcHRpbWl6ZUxvY2Fscyk6CisgICAgICAgIFJlbW92ZSBub3ctdW51c2Vk
IG1ldGhvZHMuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OndpbGxSZXNvbHZlVG9Bcmd1bWVudHMp
OiBSZW1vdmUuICBDYWxsZXJzCisgICAgICAgIHVzZSBSZXNvbHZlUmVzdWx0Ojppc0FyZ3VtZW50
cygpLCBwb3NzaWJseSB3aXRoIHRoZSBuZXcKKyAgICAgICAgRG9udENyZWF0ZUFyZ3VtZW50c0Zs
YWcuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWdpc3RlckZvcik6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKTogU2VhcmNoIGJsb2NrIHNjb3Bl
cyBiZWZvcmUKKyAgICAgICAgbG9va2luZyBpbiB0aGUgbG9jYWwgc3ltYm9sIHRhYmxlIGZvciBy
ZWdpc3RlcnMuICBIYW5kbGUgbGF6eQorICAgICAgICByZWlmaWNhdGlvbiBvZiAiYXJndW1lbnRz
IiBoZXJlLiAgSW5saW5lIGNhbk9wdGltaXplTm9uTG9jYWxzIGFuZAorICAgICAgICBzaG91bGRP
cHRpbWl6ZUxvY2FscywgYW5kIGZvbGQgc29tZSBjb25zdGFudHMuICBTZXQgdGhlCisgICAgICAg
IEJhcnJpZXJBdHRyaWJ1dGUgb24gcmVzdWx0cyB0aGF0IG5lZWQgYSB0ZW1wb3JhbCBkZWFkIHpv
bmUuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOiBTaW1w
bGlmeSBmb3IgdGhlCisgICAgICAgIHNlcGFyYXRpb24gb2YgUmVzb2x2ZVJlc3VsdDo6dHlwZSgp
IGFuZAorICAgICAgICBSZXNvbHZlUmVzdWx0OjphdHRyaWJ1dGVzKCkuICBBZGQgcmVhZCBiYXJy
aWVycyBpZiBuZWNlc3NhcnkuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVh
dGVBcmd1bWVudHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjpjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICBSZW1vdmUgbm93LXVudXNl
ZCBtZXRob2RzLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEJsb2NrU2Nv
cGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wQmxvY2tTY29wZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWlmeVNjb3Blcyk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaFNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6cG9wRmluYWxseUNvbnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEp1bXBTY29wZXMpOiBSZWZhY3RvciB0byBoYW5kbGUgYmxvY2sKKyAgICAgICAgc2Nv
cGVzIG9uIHRoZSBDb250cm9sRmxvd0NvbnRleHQgc3RhY2suICBXaGVuIHB1c2hpbmcgYSBzY29w
ZSB0aGF0CisgICAgICAgIHJlcXVpcmVzIGEgc2NvcGUgY2hhaW4sIHJlaWZ5U2NvcGVzIGlzIGNh
bGxlZCwgd2hpY2ggZW5zdXJlcyB0aGF0CisgICAgICAgIHRoZSBzY29wZSBjaGFpbiBoYXMgYmVl
biBjcmVhdGVkLiAgV2hlbiBjb250cm9sIGxlYXZlcyBhIGJsb2NrCisgICAgICAgIHNjb3BlIHdo
b3NlIHNjb3BlIG1heSBoYXZlIGJlZW4gcmVpZmllZCwgdGVhcl9vZmZfc2NvcGUgd2lsbCB0ZWFy
CisgICAgICAgIG9mZiB0aG9zZSBsb2NhbHMgZnJvbSB0aGUgc3RhY2sgdG8gdGhlIGhlYXAuCisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNz
aW9uKTogQ2FsbAorICAgICAgICByZWlmeVNjb3BlcyBpbnN0ZWFkIG9mIGNyZWF0ZUFjdGl2YXRp
b25JZk5lY2Vzc2FyeS4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
OgorICAgICAgICAoSlNDOjpCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6IEFkYXB0IHRvCisgICAg
ICAgIHdpbGxSZXNvbHZlVG9Bcmd1bWVudHMgY2hhbmdlLgorICAgICAgICAoSlNDOjpBcHBseUZ1
bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6IEFkYXB0IHRvCisgICAgICAgIEpTU3Rh
dGljU2NvcGUgdGFraW5nIGEgSlNHbG9iYWxEYXRhIGluc3RlYWQgb2YgYW4gRXhlY1N0YXRlLgor
ICAgICAgICAoSlNDOjpUcnlOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGFwdCB0byB1c2UgcHVzaEJs
b2NrU2NvcGUgYW5kCisgICAgICAgIHBvcEJsb2NrU2NvcGUuCisKKyAgICAgICAgKiBieXRlY29k
ZS9PcGNvZGUuaDogQWRkIG5ldyBlbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQsIHJlaWZ5X3Njb3Bl
LAorICAgICAgICBhbmQgdGVhcl9vZmZfc2NvcGUgb3Bjb2Rlcy4gUmVtb3ZlIHB1c2hfbmV3X3Nj
b3BlIGFuZCBqbXBfc2NvcGVzLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAgKEpT
Qzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3JlaWZ5X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RlYXJf
b2ZmX3Njb3BlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2Vuc3VyZV9sb2NhbF9pbml0aWFsaXplZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9yZWlmeV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90ZWFyX29mZl9zY29wZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOiBVcGRhdGUgd2l0aCBzdXBwb3J0IGZv
ciB0aGUgbmV3CisgICAgICAgIG9wY29kZXMuICBUaGUgTExJbnQgYml0cyBhcmUgdW50ZXN0ZWQu
CisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpu
ZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcyk6CisgICAgICAgICogcGFyc2VyL1Bh
cnNlci5oOgorICAgICAgICAoSlNDOjpTY29wZTo6bmVlZHNGdWxsQWN0aXZhdGlvbik6CisgICAg
ICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6Om5lZWRzQWN0aXZhdGlvbik6ICJDYXRjaCIgY2xhdXNlcyBubworICAgICAgICBsb25nZXIg
Zm9yY2UgdGhlaXIgZnVuY3Rpb25zIHRvIGhhdmUgYWN0aXZhdGlvbnMuCisKKyAgICAgICAgKiBy
dW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Nj
b3BlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2Nv
cGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKToK
KyAgICAgICAgKEpTU3RhdGljU2NvcGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Nj
b3BlT2JqZWN0OjphZGRWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmpl
Y3Q6OnJlaWZ5KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6dGVhck9mZik6
CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OkpTU3RhdGljU2NvcGVPYmplY3Qp
OiBBZGFwdCB0byBzdXBwb3J0CisgICAgICAgIGxhenkgdGVhci1vZmYsIGFuZCB0aGUgYWJpbGl0
eSB0byBiaW5kIG1vcmUgdGhhbiBvbmUgdmFyaWFibGUuCisKKyAgICAgICAgKiBydW50aW1lL1N5
bWJvbFRhYmxlLmg6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlKToKKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6Omhhc1RlbXBvcmFsRGVhZFpvbmUpOgorICAgICAgICAoSlNDOjpTeW1ib2xU
YWJsZTo6VGVtcG9yYWxEZWFkWm9uZUtpbmQpOiBTdGVhbCBhbm90aGVyIGJpdCBmcm9tCisgICAg
ICAgIHRoZSBlbnRyeSB0byBub3RlIHdoaWNoIHZhcmlhYmxlcyBuZWVkIGEgdGVtcG9yYWwgZGVh
ZCB6b25lLgorCiAyMDEyLTAzLTI1ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmll
cnMuY29tPgogCiAgICAgICAgIFt3eF0gVW5yZXZpZXdlZCBidWlsZCBmaXguIE1vdmUgV1RGIHRv
IGl0cyBvd24gc3RhdGljIGxpYiBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNmQ4ZDBjYjc4ODdiZTBkYmYxZGIzOWVkYTFjYzRjNDA1
MGZiZDczMy4uMmZkNzIwNTI3MDM3ODU1ZGJjYTdkZTU0YzQ1YmRiM2YzY2I0NDNhMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTEyMjAsMTcg
KzEyMjAsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBW
ZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGRhdGFMb2co
IlslNGRdIHBvcF9zY29wZVxuIiwgbG9jYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXNoX25ld19zY29wZTogeworICAgICAgICBjYXNlIG9w
X2Vuc3VyZV9sb2NhbF9pbml0aWFsaXplZDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFM
b2coIlslNGRdIHB1c2hfbmV3X3Njb3BlIFx0JXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lz
dGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0p
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCkpOworICAgICAgICAgICAgZGF0
YUxvZygiWyU0ZF0gZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkXHQgJXMsICVzXG4iLCBsb2NhdGlv
biwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSku
ZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
am1wX3Njb3BlczogewotICAgICAgICAgICAgaW50IHNjb3BlRGVsdGEgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGRhdGFMb2coIlslNGRdIGptcF9zY29wZXNcdF4lZCwgJWQoLT4lZClcbiIsIGxvY2F0
aW9uLCBzY29wZURlbHRhLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgY2Fz
ZSBvcF9yZWlmeV9zY29wZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0g
cmVpZnlfc2NvcGVcdCAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
ZXhlYywgcjIpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX3RlYXJfb2ZmX3Njb3BlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHRlYXJfb2ZmX3Njb3BlXHQg
JXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhdGNoOiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDU1OThmODk5NDgwZmQ1Mzg3ZGY5
NDVlYjA5ZDZjYzRkNjhjYjdjNi4uNWI5NDQzMWJmZjU0ZTIwNDE3NTE0MjUxM2RjZjRhOTlhM2Ni
ZWE5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMTQ5LDcg
KzE0OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9qbmxlc3NlcSwgNCkg
XAogICAgICAgICBtYWNybyhvcF9qbmdyZWF0ZXIsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfam5n
cmVhdGVyZXEsIDQpIFwKLSAgICAgICAgbWFjcm8ob3Bfam1wX3Njb3BlcywgMykgXAogICAgICAg
ICBtYWNybyhvcF9sb29wLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX2xvb3BfaWZfdHJ1ZSwgMykg
XAogICAgICAgICBtYWNybyhvcF9sb29wX2lmX2ZhbHNlLCAzKSBcCkBAIC0xODMsNyArMTgyLDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX3B1c2hfc2Nv
cGUsIDIpIFwKICAgICAgICAgbWFjcm8ob3BfcG9wX3Njb3BlLCAxKSBcCi0gICAgICAgIG1hY3Jv
KG9wX3B1c2hfbmV3X3Njb3BlLCA0KSBcCisgICAgICAgIFwKKyAgICAgICAgbWFjcm8ob3BfZW5z
dXJlX2xvY2FsX2luaXRpYWxpemVkLCAzKSBcCisgICAgICAgIFwKKyAgICAgICAgbWFjcm8ob3Bf
cmVpZnlfc2NvcGUsIDQpIFwKKyAgICAgICAgbWFjcm8ob3BfdGVhcl9vZmZfc2NvcGUsIDIpIFwK
ICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9jYXRjaCwgMikgXAogICAgICAgICBtYWNybyhv
cF90aHJvdywgMikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA0YTZmNDY1M2VhYjg5MmZjNmRhMGRi
OTNjYjQ5Y2IxNTcxYTZhZGZiLi4wNzYwMzU5MWM4NGYxYTAyMDcxODAxYzIwMGY2MDA0YWVkZTMz
YWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMzIsOSArMzIsMTAgQEAKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSAiQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIu
aCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1
ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIK
QEAgLTEzMywxMyArMTM0LDEwIEBAIHZvaWQgUmVzb2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgp
CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFJlZ2lzdGVyOgotICAgIGNhc2Ug
UmVhZE9ubHlSZWdpc3RlcjoKICAgICAgICAgQVNTRVJUKG1fbG9jYWwpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBMZXhpY2FsOgotICAgIGNhc2UgUmVhZE9ubHlMZXhpY2FsOgogICAgIGNh
c2UgRHluYW1pY0xleGljYWw6Ci0gICAgY2FzZSBEeW5hbWljUmVhZE9ubHlMZXhpY2FsOgogICAg
ICAgICBBU1NFUlQobV9pbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBHbG9iYWw6CkBAIC0xNDcsOSArMTQ1LDcgQEAgdm9pZCBSZXNvbHZl
UmVzdWx0OjpjaGVja1ZhbGlkaXR5KCkKICAgICAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW5kZXhlZEdsb2JhbDoKLSAgICBjYXNlIFJlYWRP
bmx5SW5kZXhlZEdsb2JhbDoKICAgICBjYXNlIER5bmFtaWNJbmRleGVkR2xvYmFsOgotICAgIGNh
c2UgRHluYW1pY1JlYWRPbmx5SW5kZXhlZEdsb2JhbDoKICAgICAgICAgQVNTRVJUKG1faW5kZXgg
IT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKICAgICAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4LDYgKzIzNCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5O
b2RlKiBzCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgo
MCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRoKDApCiAgICAgLCBtX2Jhc2VTY29wZURlcHRoKDAp
CiAgICAgLCBtX2NvZGVUeXBlKEdsb2JhbENvZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNl
dCgwKQpAQCAtMzA5LDYgKzMwNiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIFNjb3BlQ2hhaW5OCiAgICAgLCBt
X2FjdGl2YXRpb25SZWdpc3RlcigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1f
ZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fYmxvY2tTY29wZURlcHRoKDApCiAgICAgLCBt
X2Jhc2VTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkKICAgICAs
IG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCkBAIC00NzAsNiArNDY4LDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2gKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCkpCiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQogICAgICwgbV9keW5hbWljU2NvcGVE
ZXB0aCgwKQorICAgICwgbV9ibG9ja1Njb3BlRGVwdGgoMCkKICAgICAsIG1fYmFzZVNjb3BlRGVw
dGgoY29kZUJsb2NrLT5iYXNlU2NvcGVEZXB0aCgpKQogICAgICwgbV9jb2RlVHlwZShFdmFsQ29k
ZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDApCkBAIC01MzYsMzMgKzUzNSw2IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgaW50IHBhcmFtZXRlckluZGV4CiAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwog
fQogCi1ib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjp3aWxsUmVzb2x2ZVRvQXJndW1lbnRzKGNvbnN0
IElkZW50aWZpZXImIGlkZW50KQotewotICAgIGlmIChpZGVudCAhPSBwcm9wZXJ0eU5hbWVzKCku
YXJndW1lbnRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFzaG91bGRP
cHRpbWl6ZUxvY2FscygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3ltYm9s
VGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KGlkZW50LmltcGwoKSk7Ci0gICAg
aWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYg
KG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgbV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNv
ZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1l
bnRzKCkKLXsKLSAgICBBU1NFUlQod2lsbFJlc29sdmVUb0FyZ3VtZW50cyhwcm9wZXJ0eU5hbWVz
KCkuYXJndW1lbnRzKSk7Ci0KLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFi
bGUoKS5nZXQocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy5pbXBsKCkpOwotICAgIEFTU0VSVCgh
ZW50cnkuaXNOdWxsKCkpOwotICAgIHJldHVybiAmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgo
KSk7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVMYXp5UmVnaXN0
ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKiByZWcpCiB7CiAgICAgaWYgKG1fbGFzdExhenlGdW5j
dGlvbiA8PSByZWctPmluZGV4KCkgfHwgcmVnLT5pbmRleCgpIDwgbV9maXJzdExhenlGdW5jdGlv
bikKQEAgLTExNTQsNzIgKzExMjYsMTIyIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdikKICAgICByZXR1cm4gY29uc3Rh
bnRJRDsKIH0KIAotUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKK1Jlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6
OnJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIHVuc2lnbmVkIHJlc29sdmVGbGFn
cykKIHsKICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVy
KQotICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKHRoaXNSZWdp
c3RlcigpLCBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZsYWcpOworICAgICAgICByZXR1cm4gUmVz
b2x2ZVJlc3VsdDo6cmVnaXN0ZXJSZXNvbHZlKHByb3BlcnR5LCB0aGlzUmVnaXN0ZXIoKSwgUmVz
b2x2ZVJlc3VsdDo6UmVhZE9ubHlBdHRyaWJ1dGUpOworCisgICAgU2NvcGVDaGFpbkl0ZXJhdG9y
IGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVu
ZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7CisKKyAgICBpbnQgZGVwdGggPSAwOworICAgIGJvb2wg
ZHluYW1pYyA9IGZhbHNlOworICAgIHVpbnQ4X3QgYXR0cmlidXRlcyA9IDA7CisgICAgZm9yIChp
bnQgaSA9IHNjb3BlRGVwdGgoKS0xOyBpID49IDA7IC0taSkgeworICAgICAgICBzd2l0Y2ggKG1f
c2NvcGVDb250ZXh0U3RhY2tbaV0uYmxvY2tUeXBlKSB7CisgICAgICAgIGNhc2UgV2l0aEJsb2Nr
OgorICAgICAgICAgICAgLy8gSW4gdGhlb3J5IHdlIHNob3VsZCBiZSBhYmxlIHRvIHNraXAgaW50
ZXJ2ZW5pbmcgYmxvY2sgc2NvcGUKKyAgICAgICAgICAgIC8vIG9iamVjdHMsIGJ1dCB3ZSBkb24n
dCBrbm93IHdoaWNoIG9mIHRoZSBMYXppbHlSZWlmeSBvbmVzIGhhdmUKKyAgICAgICAgICAgIC8v
IGFjdHVhbGx5IGJlZW4gcmVpZmllZC4gSW5zdGVhZCBvZiBmb3JjaW5nIGVhZ2VyIHJlaWZpY2F0
aW9uLAorICAgICAgICAgICAgLy8gd2UnbGwgcGVzc2ltaXplICJ3aXRoIiByZXNvbHV0aW9uLCBm
b3JjaW5nIGl0IHRvIHN0YXJ0IGZyb20gdGhlCisgICAgICAgICAgICAvLyB0b3Agb2YgdGhlIHNj
b3BlIGNoYWluLgorICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNv
bHZlKHByb3BlcnR5LCAwKTsKKyAgICAgICAgY2FzZSBGaW5hbGx5QmxvY2s6CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBTY29wZUJsb2NrOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQoKTsK
KyAgICAgICAgQVNTRVJUKGN1cnJlbnRTY29wZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAg
ICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogY3VycmVudFN0YXRpY1Njb3BlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CisgICAgICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBjdXJyZW50U3RhdGljU2NvcGVPYmplY3QtPnN5bWJvbFRh
YmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CisKKyAgICAgICAgLy8gQmxvY2stc2NvcGVkIHBy
b3BlcnR5LgorICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBSZWdp
c3RlcklEKiBsb2NhbCA9IG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0LmJhc2VS
ZWdpc3RlciArIGVudHJ5LmdldEluZGV4KCk7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFk
T25seSgpKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6UmVh
ZE9ubHlBdHRyaWJ1dGU7CisgICAgICAgICAgICBpZiAoZW50cnkuaGFzVGVtcG9yYWxEZWFkWm9u
ZSgpKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6QmFycmll
ckF0dHJpYnV0ZTsKKyAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclJl
c29sdmUocHJvcGVydHksIGxvY2FsLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgfQorICAgICAgICAr
K2RlcHRoOworICAgICAgICArK2l0ZXI7CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHBy
b3BlcnR5IHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gYSByZWdpc3Rlci4KLSAgICBpZiAobV9jb2Rl
VHlwZSAhPSBHbG9iYWxDb2RlICYmIHNob3VsZE9wdGltaXplTG9jYWxzKCkpIHsKKyAgICBpZiAo
bV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBl
bnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlmICgh
ZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5h
bWVzKCkuYXJndW1lbnRzKQotICAgICAgICAgICAgICAgIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNz
YXJ5KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBmbGFncyA9IGVudHJ5LmlzUmVhZE9ubHkoKSA/
IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZyA6IDA7CiAgICAgICAgICAgICBSZWdpc3RlcklE
KiBsb2NhbCA9IGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KCZyZWdpc3RlckZvcihlbnRy
eS5nZXRJbmRleCgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0
ZXJSZXNvbHZlKGxvY2FsLCBmbGFncyk7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25s
eSgpKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6UmVhZE9u
bHlBdHRyaWJ1dGU7CisgICAgICAgICAgICBpZiAoZW50cnkuaGFzVGVtcG9yYWxEZWFkWm9uZSgp
KQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVzb2x2ZVJlc3VsdDo6QmFycmllckF0
dHJpYnV0ZTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJn
dW1lbnRzICYmIG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKQorICAgICAgICAgICAgICAgICAgICAm
JiAhKHJlc29sdmVGbGFncyAmIEJ5dGVjb2RlR2VuZXJhdG9yOjpEb250Q3JlYXRlQXJndW1lbnRz
RmxhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfYXJndW1l
bnRzKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJs
b2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYXR0cmlidXRlcyB8PSBSZXNvbHZlUmVzdWx0OjpBcmd1bWVudHNBdHRyaWJ1dGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJS
ZXNvbHZlKHByb3BlcnR5LCBsb2NhbCwgYXR0cmlidXRlcyk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICAvLyBDYXNlcyB3aGVyZSB3ZSBjYW5ub3Qgc3RhdGljYWxseSBvcHRpbWl6ZSB0aGUgbG9v
a3VwLgotICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzIHx8ICFj
YW5PcHRpbWl6ZU5vbkxvY2FscygpKQotICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHlu
YW1pY1Jlc29sdmUoMCk7CisgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1
bWVudHMKKyAgICAgICAgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZQorICAgICAgICB8fCAobV9j
b2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIW1f
Y29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkpCisgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0
OjpkeW5hbWljUmVzb2x2ZShwcm9wZXJ0eSwgZGVwdGgpOwogCi0gICAgU2NvcGVDaGFpbkl0ZXJh
dG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9y
IGVuZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsKLSAgICB1
bnNpZ25lZCBmbGFncyA9IDA7CisgICAgZGVwdGggKz0gbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNj
b3BlQ2hhaW4oKTsKICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytkZXB0aCkgewog
ICAgICAgICBKU09iamVjdCogY3VycmVudFNjb3BlID0gaXRlci0+Z2V0KCk7Ci0gICAgICAgIGlm
ICghY3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGZsYWdz
IHw9IFJlc29sdmVSZXN1bHQ6OkR5bmFtaWNGbGFnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0gICAgICAgIAorICAgICAgICBpZiAoIWN1cnJlbnRTY29wZS0+aXNWYXJpYWJsZU9iamVj
dCgpKQorICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKHBy
b3BlcnR5LCBkZXB0aCk7CisKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogY3VycmVudFZhcmlh
YmxlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7
CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBjdXJyZW50VmFyaWFibGVPYmplY3Qt
PnN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAKICAgICAgICAgLy8gRm91bmQg
dGhlIHByb3BlcnR5CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKICAgICAgICAgICAg
IGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2
ZVJlc3VsdDo6UmVhZE9ubHlGbGFnOwotICAgICAgICAgICAgZGVwdGggKz0gbV9jb2RlQmxvY2st
Pm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJl
c29sdmVSZXN1bHQ6OlJlYWRPbmx5QXR0cmlidXRlOworICAgICAgICAgICAgaWYgKGVudHJ5Lmhh
c1RlbXBvcmFsRGVhZFpvbmUoKSkKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJlc29s
dmVSZXN1bHQ6OkJhcnJpZXJBdHRyaWJ1dGU7CiAgICAgICAgICAgICBpZiAoKytpdGVyID09IGVu
ZCkgewotICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFJlc29sdmVSZXN1bHQ6OkR5bmFtaWNG
bGFnKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY0lu
ZGV4ZWRHbG9iYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGRlcHRoLCBjdXJyZW50U2NvcGUs
IGZsYWdzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6aW5kZXhlZEds
b2JhbFJlc29sdmUoZW50cnkuZ2V0SW5kZXgoKSwgY3VycmVudFNjb3BlLCBmbGFncyk7CisgICAg
ICAgICAgICAgICAgaWYgKGR5bmFtaWMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNv
bHZlUmVzdWx0OjpkeW5hbWljSW5kZXhlZEdsb2JhbFJlc29sdmUocHJvcGVydHksIGVudHJ5Lmdl
dEluZGV4KCksIGRlcHRoLCBjdXJyZW50U2NvcGUsIGF0dHJpYnV0ZXMpOworICAgICAgICAgICAg
ICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjppbmRleGVkR2xvYmFsUmVzb2x2ZShwcm9wZXJ0eSwg
ZW50cnkuZ2V0SW5kZXgoKSwgY3VycmVudFNjb3BlLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAg
IH0KICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgICAgICBpZiAoSlNBY3RpdmF0aW9uKiBh
Y3RpdmF0aW9uID0ganNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24qPihjdXJyZW50VmFyaWFibGVP
YmplY3QpKQogICAgICAgICAgICAgICAgIEFTU0VSVChhY3RpdmF0aW9uLT5pc1ZhbGlkU2NvcGVk
TG9va3VwKGVudHJ5LmdldEluZGV4KCkpKTsKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIFJl
c29sdmVSZXN1bHQ6OmxleGljYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGRlcHRoLCBmbGFn
cyk7CisgICAgICAgICAgICByZXR1cm4gZHluYW1pYworICAgICAgICAgICAgICAgID8gUmVzb2x2
ZVJlc3VsdDo6ZHluYW1pY0xleGljYWxSZXNvbHZlKHByb3BlcnR5LCBlbnRyeS5nZXRJbmRleCgp
LCBkZXB0aCwgYXR0cmlidXRlcykKKyAgICAgICAgICAgICAgICA6IFJlc29sdmVSZXN1bHQ6Omxl
eGljYWxSZXNvbHZlKHByb3BlcnR5LCBlbnRyeS5nZXRJbmRleCgpLCBkZXB0aCwgYXR0cmlidXRl
cyk7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBzY29wZVJlcXVpcmVzRHluYW1pY0NoZWNrcyA9
IGZhbHNlOwogICAgICAgICBpZiAoY3VycmVudFZhcmlhYmxlT2JqZWN0LT5pc0R5bmFtaWNTY29w
ZShzY29wZVJlcXVpcmVzRHluYW1pY0NoZWNrcykpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgaWYgKHNjb3BlUmVxdWlyZXNEeW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgZmxhZ3MgfD0g
UmVzb2x2ZVJlc3VsdDo6RHluYW1pY0ZsYWc7CisgICAgICAgICAgICBkeW5hbWljID0gdHJ1ZTsK
ICAgICB9CiAKICAgICAvLyBDYW4ndCBsb2NhdGUgdGhlIHByb3BlcnR5IGJ1dCB3ZSdyZSBhYmxl
IHRvIGF2b2lkIGEgZmV3IGxvb2t1cHMuCiAgICAgSlNPYmplY3QqIHNjb3BlID0gaXRlci0+Z2V0
KCk7Ci0gICAgZGVwdGggKz0gbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKICAg
ICBpZiAoKytpdGVyID09IGVuZCkgewotICAgICAgICBpZiAoKGZsYWdzICYgUmVzb2x2ZVJlc3Vs
dDo6RHluYW1pY0ZsYWcpICYmIGRlcHRoKQotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1
bHQ6OmR5bmFtaWNHbG9iYWxSZXNvbHZlKGRlcHRoLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0OjpnbG9iYWxSZXNvbHZlKHNjb3BlKTsKKyAgICAgICAgaWYgKGR5bmFtaWMg
JiYgZGVwdGgpCisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY0dsb2Jh
bFJlc29sdmUocHJvcGVydHksIGRlcHRoLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXNvbHZl
UmVzdWx0OjpnbG9iYWxSZXNvbHZlKHByb3BlcnR5LCBzY29wZSk7CiAgICAgfQotICAgIHJldHVy
biBSZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZShkZXB0aCk7CisgICAgcmV0dXJuIFJlc29s
dmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKHByb3BlcnR5LCBkZXB0aCk7CiB9CiAKIFJlc29sdmVS
ZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDb25zdERlY2woY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHkpCkBAIC0xMjI4LDkgKzEyNTAsOSBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2Rl
R2VuZXJhdG9yOjpyZXNvbHZlQ29uc3REZWNsKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQog
ICAgIGlmIChtX2NvZGVUeXBlICE9IEV2YWxDb2RlICYmIG1fY29kZVR5cGUgIT0gR2xvYmFsQ29k
ZSkgewogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQo
cHJvcGVydHkuaW1wbCgpKTsKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAg
ICAgICAgdW5zaWduZWQgZmxhZ3MgPSBlbnRyeS5pc1JlYWRPbmx5KCkgPyBSZXNvbHZlUmVzdWx0
OjpSZWFkT25seUZsYWcgOiAwOworICAgICAgICAgICAgdWludDhfdCBhdHRyaWJ1dGVzID0gZW50
cnkuaXNSZWFkT25seSgpID8gUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlBdHRyaWJ1dGUgOiAwOwog
ICAgICAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vz
c2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgICAgICAgICAgcmV0dXJu
IFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZShsb2NhbCwgZmxhZ3MpOworICAgICAgICAg
ICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZShwcm9wZXJ0eSwgbG9jYWws
IGF0dHJpYnV0ZXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjQ3LDEzICsxMjY5LDEzIEBA
IFJlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDb25zdERlY2woY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHkpCiAgICAgICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoKytpdGVyID09IGVuZCkKLSAgICAgICAgICAg
IHJldHVybiBSZXNvbHZlUmVzdWx0OjppbmRleGVkR2xvYmFsUmVzb2x2ZShlbnRyeS5nZXRJbmRl
eCgpLCBjdXJyZW50VmFyaWFibGVPYmplY3QsIDApOwotICAgICAgICByZXR1cm4gUmVzb2x2ZVJl
c3VsdDo6bGV4aWNhbFJlc29sdmUoZW50cnkuZ2V0SW5kZXgoKSwgZGVwdGggKyBzY29wZURlcHRo
KCksIDApOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmluZGV4ZWRHbG9iYWxS
ZXNvbHZlKHByb3BlcnR5LCBlbnRyeS5nZXRJbmRleCgpLCBjdXJyZW50VmFyaWFibGVPYmplY3Qs
IDApOworICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6bGV4aWNhbFJlc29sdmUocHJvcGVy
dHksIGVudHJ5LmdldEluZGV4KCksIGRlcHRoICsgc2NvcGVEZXB0aCgpLCAwKTsKICAgICB9CiAK
ICAgICAvLyBGSVhNRTogV2hpbGUgdGhpcyBjb2RlIHNob3VsZCBvbmx5IGJlIGhpdCBpbiBhbiBl
dmFsIGJsb2NrLCBpdCB3aWxsIGFzc2lnbgogICAgIC8vIHRvIHRoZSB3cm9uZyBiYXNlIGlmIHBy
b3BlcnR5IGV4aXN0cyBpbiBhbiBpbnRlcnZlbmluZyB3aXRoIHNjb3BlLgotICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZShzY29wZURlcHRoKCkpOworICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZShwcm9wZXJ0eSwgc2NvcGVEZXB0aCgpKTsKIH0K
IAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENoZWNrSGFzSW5zdGFuY2UoUmVnaXN0ZXJJ
RCogYmFzZSkKQEAgLTEyNzksNyArMTMwMSw3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OnNo
b3VsZEF2b2lkUmVzb2x2ZUdsb2JhbCgpCiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nbG9iYWxS
ZXNvbHZlSW5mb0NvdW50KCkgPiBtYXhHbG9iYWxSZXNvbHZlcyAmJiAhbV9sYWJlbFNjb3Blcy5z
aXplKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZShS
ZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRSZXNvbHZlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJl
c3VsdCkKIHsKICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc1N0YXRpYygpKQogICAgICAgICByZXR1
cm4gZW1pdEdldFN0YXRpY1Zhcihkc3QsIHJlc29sdmVSZXN1bHQpOwpAQCAtMTI5Miw3ICsxMzE0
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYKICAgICAgICAgYm9vbCBkeW5hbWljID0gcmVz
b2x2ZVJlc3VsdC5pc0R5bmFtaWMoKSAmJiByZXNvbHZlUmVzdWx0LmRlcHRoKCk7CiAgICAgICAg
IFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShkeW5hbWljID8gb3Bf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYyA6IG9wX3Jlc29sdmVfZ2xvYmFsKTsKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYWRkQ29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDAp
OwogICAgICAgICBpZiAoZHluYW1pYykKQEAgLTEzMDYsNyArMTMyOCw3IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJl
c29sdmVSZXN1bHQmCiAgICAgICAgIC8vIGxvb2t1cCBjaGFpbiwgYWx0aG91Z2ggd2Ugc3RpbGwg
bmVlZCB0byBoYXNoIGZyb20gdGhlbiBvbi4KICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfc2tpcCk7CiAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFkZENvbnN0YW50KHJlc29sdmVSZXN1bHQucHJvcGVydHkoKSkpOwogICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5kZXB0aCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICByZXR1cm4gZHN0OwpAQCAtMTMxNCwxMiAr
MTMzNiwxMiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmUoUmVn
aXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JgogCiAgICAgVmFsdWVQcm9maWxlKiBw
cm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmUpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRD
b25zdGFudChwcm9wZXJ0eSkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFu
dChyZXNvbHZlUmVzdWx0LnByb3BlcnR5KCkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvZmlsZSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlQmFzZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1
bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZShSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQpCiB7CiAgICAgaWYgKHJlc29sdmVSZXN1
bHQuaXNHbG9iYWwoKSAmJiAhcmVzb2x2ZVJlc3VsdC5pc0R5bmFtaWMoKSkKICAgICAgICAgLy8g
R2xvYmFsIG9iamVjdCBpcyB0aGUgYmFzZQpAQCAtMTMyOCwzNiArMTM1MCwzNiBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNlKFJlZ2lzdGVySUQqIGRzdCwg
Y29uc3QgUmVzb2x2ZVJlcwogICAgIC8vIFdlIGNhbid0IG9wdGltaXNlIGF0IGFsbCA6LSgKICAg
ICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV9i
YXNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvZmlsZSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29s
dmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3Rl
cklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQpCiB7CiAgICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHJldHVybiBlbWl0UmVzb2x2
ZUJhc2UoZHN0LCByZXNvbHZlUmVzdWx0LCBwcm9wZXJ0eSk7CisgICAgICAgIHJldHVybiBlbWl0
UmVzb2x2ZUJhc2UoZHN0LCByZXNvbHZlUmVzdWx0KTsKIAogICAgIGlmIChyZXNvbHZlUmVzdWx0
LmlzR2xvYmFsKCkgJiYgIXJlc29sdmVSZXN1bHQuaXNEeW5hbWljKCkpIHsKICAgICAgICAgLy8g
R2xvYmFsIG9iamVjdCBpcyB0aGUgYmFzZQogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVz
dWx0ID0gZW1pdExvYWQoZHN0LCBKU1ZhbHVlKHJlc29sdmVSZXN1bHQuZ2xvYmFsT2JqZWN0KCkp
KTsKICAgICAgICAgZW1pdE9wY29kZShvcF9lbnN1cmVfcHJvcGVydHlfZXhpc3RzKTsKICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiAgICAgfQogCiAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1p
c2UgYXQgYWxsIDotKAogICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9w
Y29kZShvcF9yZXNvbHZlX2Jhc2UpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmlu
ZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkp
OworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChyZXNvbHZlUmVzdWx0LnBy
b3BlcnR5KCkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodHJ1ZSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlKFJlZ2lzdGVySUQqIGJh
c2VEc3QsIFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVS
ZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2UoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0
ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCkKIHsKICAg
ICBpZiAocmVzb2x2ZVJlc3VsdC5pc0dsb2JhbCgpICYmICFyZXNvbHZlUmVzdWx0LmlzRHluYW1p
YygpKSB7CiAgICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaXMgdGhlIGJhc2UKQEAgLTEzNzIsNyAr
MTM5NCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhC
YXNlKFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVyCiAgICAgICAgIGlmIChzaG91bGRBdm9p
ZFJlc29sdmVHbG9iYWwoKSkgewogICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0g
ZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHByb3BEc3QtPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYWRkQ29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgICAgICAgICByZXR1cm4g
YmFzZURzdDsKICAgICAgICAgfQpAQCAtMTM4NSw3ICsxNDA3LDcgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2UoUmVnaXN0ZXJJRCogYmFzZURzdCwg
UmVnaXN0ZXIKICNlbmRpZgogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJv
ZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV9nbG9iYWwpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocHJvcERzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
ZGRDb25zdGFudChwcm9wZXJ0eSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRk
Q29uc3RhbnQocmVzb2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKSk7CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CkBAIC0xMzk1LDEyICsxNDE3LDEyIEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlKFJlZ2lz
dGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVyCiAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1p
dFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfd2l0aF9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYmFzZURzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHBy
b3BEc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChw
cm9wZXJ0eSkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChyZXNvbHZl
UmVzdWx0LnByb3BlcnR5KCkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7
CiAgICAgcmV0dXJuIGJhc2VEc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVzb2x2ZVdpdGhUaGlzKFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVySUQqIHBy
b3BEc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZl
V2l0aFRoaXMoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3Qg
UmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCkKIHsKICAgICBpZiAocmVzb2x2ZVJlc3VsdC5p
c1N0YXRpYygpKSB7CiAgICAgICAgIGVtaXRMb2FkKGJhc2VEc3QsIGpzVW5kZWZpbmVkKCkpOwpA
QCAtMTQxMywxMyArMTQzNSwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFJlc29sdmVXaXRoVGhpcyhSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcgogICAgICAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRo
X3RoaXMpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZURzdC0+aW5kZXgoKSk7
CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wRHN0LT5pbmRleCgpKTsKLSAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChyZXNvbHZlUmVzdWx0LnByb3BlcnR5
KCkpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICBy
ZXR1cm4gYmFzZURzdDsKICAgICB9CiAKICAgICBlbWl0TG9hZChiYXNlRHN0LCBqc1VuZGVmaW5l
ZCgpKTsKLSAgICByZXR1cm4gZW1pdFJlc29sdmUocHJvcERzdCwgcmVzb2x2ZVJlc3VsdCwgcHJv
cGVydHkpOworICAgIHJldHVybiBlbWl0UmVzb2x2ZShwcm9wRHN0LCByZXNvbHZlUmVzdWx0KTsK
IH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdGF0aWNWYXIoUmVn
aXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVzdWx0KQpAQCAtMTQy
OCwyMiArMTQ1MCwzMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFN0
YXRpY1ZhcihSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZQogCiAgICAgc3dpdGNoIChy
ZXNvbHZlUmVzdWx0LnR5cGUoKSkgewogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVnaXN0ZXI6
Ci0gICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seVJlZ2lzdGVyOgorICAgICAgICBpZiAo
cmVzb2x2ZVJlc3VsdC5uZWVkc0JhcnJpZXIoKSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCog
cHJvcGVydHkgPSBlbWl0TG9hZCgwLCByZXNvbHZlUmVzdWx0LnByb3BlcnR5KCkpOworICAgICAg
ICAgICAgZW1pdE9wY29kZShvcF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQpOworICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQubG9jYWwoKS0+aW5kZXgoKSk7
CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChkc3QgPT0gaWdub3JlZFJlc3VsdCgpKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgcmVzb2x2ZVJlc3VsdC5sb2NhbCgpKTsKIAogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6TGV4
aWNhbDoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5TGV4aWNhbDoKICAgICAgICAg
cHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfc2NvcGVkX3Zhcik7CiAgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHJlc29sdmVSZXN1bHQuZGVwdGgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChwcm9maWxlKTsKKyAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQubmVlZHNCYXJyaWVy
KCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZW1pdExvYWQoMCwgcmVz
b2x2ZVJlc3VsdC5wcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfZW5zdXJl
X2xvY2FsX2luaXRpYWxpemVkKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5
LT5pbmRleCgpKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gZHN0OwogCiAgICAgY2FzZSBS
ZXNvbHZlUmVzdWx0OjpJbmRleGVkR2xvYmFsOgotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVh
ZE9ubHlJbmRleGVkR2xvYmFsOgogICAgICAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfcHV0
X2dsb2JhbF92YXIpIHsKICAgICAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgICAgIGlu
dCBzcmNJbmRleDsKQEAgLTE0NjgsMTEgKzE0OTksOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFB1dFN0YXRpY1Zhcihjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVz
dQogewogICAgIHN3aXRjaCAocmVzb2x2ZVJlc3VsdC50eXBlKCkpIHsKICAgICBjYXNlIFJlc29s
dmVSZXN1bHQ6OlJlZ2lzdGVyOgotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlSZWdp
c3RlcjoKICAgICAgICAgcmV0dXJuIG1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQocmVzb2x2ZVJl
c3VsdC5sb2NhbCgpLCB2YWx1ZSk7CiAKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkxleGljYWw6
Ci0gICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUxleGljYWw6CiAgICAgICAgIGVtaXRP
cGNvZGUob3BfcHV0X3Njb3BlZF92YXIpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJl
c29sdmVSZXN1bHQuZGVwdGgoKSk7CkBAIC0xNDgwLDcgKzE1MDksNiBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFN0YXRpY1Zhcihjb25zdCBSZXNvbHZlUmVzdWx0JiBy
ZXNvbHZlUmVzdQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKICAgICBjYXNlIFJlc29sdmVSZXN1
bHQ6OkluZGV4ZWRHbG9iYWw6Ci0gICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUluZGV4
ZWRHbG9iYWw6CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X2dsb2JhbF92YXIpOwogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKQEAgLTE3MjYsNyArMTc1NCw3
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJl
Z2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIHVuc2lnbmVkIGlu
ZGV4LCBib29sIGRvTnVsbENoZWNrKQogewotICAgIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2Fy
eSgpOworICAgIHJlaWZ5U2NvcGVzKCk7CiAgICAgZW1pdE9wY29kZShvcF9uZXdfZnVuYyk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGluZGV4KTsKQEAgLTE3NDcsNyArMTc3NSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJlZ2lzdGVySUQqIHIwLCBG
dW5jRXhwCiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBuLT5ib2R5KCk7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHByKG1ha2VGdW5jdGlv
bihtX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7CiAgICAgCi0gICAgY3JlYXRlQWN0aXZhdGlvbklm
TmVjZXNzYXJ5KCk7CisgICAgcmVpZnlTY29wZXMoKTsKICAgICBlbWl0T3Bjb2RlKG9wX25ld19m
dW5jX2V4cCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIwLT5pbmRleCgpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwpAQCAtMTc1OSwzNCArMTc4Nyw2IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGZ1bmMsIENhbGxBCiAgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGwsIGRzdCwgZnVu
YywgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogfQogCi12
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpCi17Ci0g
ICAgaWYgKG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBJZiB3ZSdyZSBpbiBzdHJpY3QgbW9kZSB3ZSB0ZWFyIG9mZiB0aGUgYXJndW1l
bnRzIG9uIGZ1bmN0aW9uCi0gICAgLy8gZW50cnksIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVj
ayBpZiB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGVtCi0gICAgLy8gbm93Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW1pdE9wY29kZShv
cF9jcmVhdGVfYXJndW1lbnRzKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxv
Y2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOwotfQotCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpj
cmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX2hhc0NyZWF0ZWRBY3Rp
dmF0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpKQotICAgICAgICByZXR1cm47Ci0gICAgZW1pdE9wY29kZShvcF9jcmVhdGVf
YWN0aXZhdGlvbik7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lz
dGVyLT5pbmRleCgpKTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVudHMm
IGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KQogewogICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsX2V2YWwsIGRz
dCwgZnVuYywgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwpA
QCAtMTk2OSw5ICsxOTY5LDEwIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb1ByaW1p
dGl2ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUpCiB7CisgICAg
cmVpZnlTY29wZXMoKTsKICAgICBBU1NFUlQoc2NvcGUtPmlzVGVtcG9yYXJ5KCkpOwogICAgIENv
bnRyb2xGbG93Q29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQuaXNGaW5hbGx5QmxvY2sgPSBm
YWxzZTsKKyAgICBjb250ZXh0LmJsb2NrVHlwZSA9IFdpdGhCbG9jazsKICAgICBtX3Njb3BlQ29u
dGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKICAgICBtX2R5bmFtaWNTY29wZURlcHRoKys7CiAK
QEAgLTE5ODEsNyArMTk4Miw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKQogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFBvcFNjb3BlKCkKIHsKICAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOwot
ICAgIEFTU0VSVCghbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkuaXNGaW5hbGx5QmxvY2spOwor
ICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5ibG9ja1R5cGUgPT0gV2l0aEJs
b2NrKTsKIAogICAgIGVtaXRPcGNvZGUob3BfcG9wX3Njb3BlKTsKIApAQCAtMjAwNyw3ICsyMDA4
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayhEZWJ1Z0hvb2tJRCBk
ZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW4KIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1
c2hGaW5hbGx5Q29udGV4dChMYWJlbCogdGFyZ2V0LCBSZWdpc3RlcklEKiByZXRBZGRyRHN0KQog
ewogICAgIENvbnRyb2xGbG93Q29udGV4dCBzY29wZTsKLSAgICBzY29wZS5pc0ZpbmFsbHlCbG9j
ayA9IHRydWU7CisgICAgc2NvcGUuYmxvY2tUeXBlID0gRmluYWxseUJsb2NrOwogICAgIEZpbmFs
bHlDb250ZXh0IGNvbnRleHQgPSB7IHRhcmdldCwgcmV0QWRkckRzdCB9OwogICAgIHNjb3BlLmZp
bmFsbHlDb250ZXh0ID0gY29udGV4dDsKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLmFwcGVuZChz
Y29wZSk7CkBAIC0yMDE3LDcgKzIwMTgsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNo
RmluYWxseUNvbnRleHQoTGFiZWwqIHRhcmdldCwgUmVnaXN0ZXJJRCogcmV0QWRkckRzdAogdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNvbnRleHQoKQogewogICAgIEFTU0VSVCht
X3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7Ci0gICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3Rh
Y2subGFzdCgpLmlzRmluYWxseUJsb2NrKTsKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFj
ay5sYXN0KCkuYmxvY2tUeXBlID09IEZpbmFsbHlCbG9jayk7CiAgICAgQVNTRVJUKG1fZmluYWxs
eURlcHRoID4gMCk7CiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAg
bV9maW5hbGx5RGVwdGgtLTsKQEAgLTIxMDAsNzAgKzIxMDEsNiBAQCBMYWJlbFNjb3BlKiBCeXRl
Y29kZUdlbmVyYXRvcjo6Y29udGludWVUYXJnZXQoY29uc3QgSWRlbnRpZmllciYgbmFtZSkKICAg
ICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBDb250cm9sRmxvd0NvbnRleHQqIHRv
cFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQqIGJvdHRvbVNjb3BlKQotewotICAgIHdoaWxlICh0
b3BTY29wZSA+IGJvdHRvbVNjb3BlKSB7Ci0gICAgICAgIC8vIEZpcnN0IHdlIGNvdW50IHRoZSBu
dW1iZXIgb2YgZHluYW1pYyBzY29wZXMgd2UgbmVlZCB0byByZW1vdmUgdG8gZ2V0Ci0gICAgICAg
IC8vIHRvIGEgZmluYWxseSBibG9jay4KLSAgICAgICAgaW50IG5Ob3JtYWxTY29wZXMgPSAwOwot
ICAgICAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21TY29wZSkgewotICAgICAgICAgICAgaWYg
KHRvcFNjb3BlLT5pc0ZpbmFsbHlCbG9jaykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICsrbk5vcm1hbFNjb3BlczsKLSAgICAgICAgICAgIC0tdG9wU2NvcGU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobk5vcm1hbFNjb3BlcykgewotICAgICAgICAgICAgc2l6ZV90IGJl
Z2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotCi0gICAgICAgICAgICAvLyBXZSBuZWVkIHRv
IHJlbW92ZSBhIG51bWJlciBvZiBkeW5hbWljIHNjb3BlcyB0byBnZXQgdG8gdGhlIG5leHQKLSAg
ICAgICAgICAgIC8vIGZpbmFsbHkgYmxvY2sKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3Bfam1w
X3Njb3Blcyk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobk5vcm1hbFNjb3Bl
cyk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRvcFNjb3BlID09IGJvdHRvbVNjb3BlIHRoZW4gdGhl
cmUgaXNuJ3QgYWN0dWFsbHkgYSBmaW5hbGx5IGJsb2NrCi0gICAgICAgICAgICAvLyBsZWZ0IHRv
IGVtaXQsIHNvIG1ha2UgdGhlIGptcF9zY29wZXMganVtcCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0
IGxhYmVsCi0gICAgICAgICAgICBpZiAodG9wU2NvcGUgPT0gYm90dG9tU2NvcGUpIHsKLSAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0
cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UganVzdCB1c2Ugam1wX3Nj
b3BlcyB0byBwb3AgYSBncm91cCBvZiBzY29wZXMgYW5kIGdvCi0gICAgICAgICAgICAvLyB0byB0
aGUgbmV4dCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBuZXh0SW5zbiA9
IG5ld0xhYmVsKCk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobmV4dEluc24t
PmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAgICAgICAgICAgZW1pdExh
YmVsKG5leHRJbnNuLmdldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlICh0b3BTY29w
ZSA+IGJvdHRvbVNjb3BlICYmIHRvcFNjb3BlLT5pc0ZpbmFsbHlCbG9jaykgewotICAgICAgICAg
ICAgZW1pdEp1bXBTdWJyb3V0aW5lKHRvcFNjb3BlLT5maW5hbGx5Q29udGV4dC5yZXRBZGRyRHN0
LCB0b3BTY29wZS0+ZmluYWxseUNvbnRleHQuZmluYWxseUFkZHIpOwotICAgICAgICAgICAgLS10
b3BTY29wZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZW1pdEp1bXAodGFyZ2V0KTsK
LX0KLQotUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wU2NvcGVz
KExhYmVsKiB0YXJnZXQsIGludCB0YXJnZXRTY29wZURlcHRoKQotewotICAgIEFTU0VSVChzY29w
ZURlcHRoKCkgLSB0YXJnZXRTY29wZURlcHRoID49IDApOwotICAgIEFTU0VSVCh0YXJnZXQtPmlz
Rm9yd2FyZCgpKTsKLQotICAgIHNpemVfdCBzY29wZURlbHRhID0gc2NvcGVEZXB0aCgpIC0gdGFy
Z2V0U2NvcGVEZXB0aDsKLSAgICBBU1NFUlQoc2NvcGVEZWx0YSA8PSBtX3Njb3BlQ29udGV4dFN0
YWNrLnNpemUoKSk7Ci0gICAgaWYgKCFzY29wZURlbHRhKQotICAgICAgICByZXR1cm4gZW1pdEp1
bXAodGFyZ2V0KTsKLQotICAgIGlmIChtX2ZpbmFsbHlEZXB0aCkKLSAgICAgICAgcmV0dXJuIGVt
aXRDb21wbGV4SnVtcFNjb3Blcyh0YXJnZXQsICZtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKSwg
Jm1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpIC0gc2NvcGVEZWx0YSk7Ci0KLSAgICBzaXplX3Qg
YmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0KLSAgICBlbWl0T3Bjb2RlKG9wX2ptcF9z
Y29wZXMpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZURlbHRhKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpKTsKLSAgICByZXR1cm4gdGFyZ2V0OwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEdldFByb3BlcnR5TmFtZXMoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBi
YXNlLCBSZWdpc3RlcklEKiBpLCBSZWdpc3RlcklEKiBzaXplLCBMYWJlbCogYnJlYWtUYXJnZXQp
CiB7CiAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwpAQCAtMjE5Niwx
MiArMjEzMywxMiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKFJl
Z2lzdGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogc3RhcgogICAgIG1fdXNlc0V4Y2VwdGlv
bnMgPSB0cnVlOwogI2lmIEVOQUJMRShKSVQpCiAjaWYgRU5BQkxFKExMSU5UKQotICAgIEhhbmRs
ZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3Ry
dWN0aW9ucygpLnNpemUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmFzZVNjb3BlRGVwdGgs
IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmxsaW50X29wX2NhdGNoKSkpIH07Cisg
ICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVuZC0+YmluZCgwLCAw
KSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9ibG9ja1Nj
b3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KCZsbGludF9vcF9jYXRjaCkpKSB9OwogI2Vsc2UKLSAgICBIYW5kbGVySW5mbyBpbmZvID0g
eyBzdGFydC0+YmluZCgwLCAwKSwgZW5kLT5iaW5kKDAsIDApLCBpbnN0cnVjdGlvbnMoKS5zaXpl
KCksIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRpb25M
YWJlbCgpIH07CisgICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJpbmQoMCwgMCksIGVu
ZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRo
ICsgbV9ibG9ja1Njb3BlRGVwdGggKyBtX2Jhc2VTY29wZURlcHRoLCBDb2RlTG9jYXRpb25MYWJl
bCgpIH07CiAjZW5kaWYKICNlbHNlCi0gICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPmJp
bmQoMCwgMCksIGVuZC0+YmluZCgwLCAwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFt
aWNTY29wZURlcHRoICsgbV9iYXNlU2NvcGVEZXB0aCB9OworICAgIEhhbmRsZXJJbmZvIGluZm8g
PSB7IHN0YXJ0LT5iaW5kKDAsIDApLCBlbmQtPmJpbmQoMCwgMCksIGluc3RydWN0aW9ucygpLnNp
emUoKSwgbV9keW5hbWljU2NvcGVEZXB0aCArIG1fYmxvY2tTY29wZURlcHRoICsgbV9iYXNlU2Nv
cGVEZXB0aCB9OwogI2VuZGlmCiAKICAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0aW9uSGFuZGxl
cihpbmZvKTsKQEAgLTIyMzMsMTcgKzIxNzAsMjA5IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRTdWJyb3V0aW5lUmV0dXJuKFJlZ2lzdGVySUQqIHJldEFkZHJTcmMpCiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHJldEFkZHJTcmMtPmluZGV4KCkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UHVzaE5ld1Njb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQorc3RydWN0IFJlaWZpY2F0aW9uV29y
a2xpc3RJdGVtIHsKKyAgICBSZWdpc3RlcklEKiByZWlmaWVkU2NvcGVSZWdpc3RlcjsKKyAgICBK
U09iamVjdCogc2NvcGVUZW1wbGF0ZTsKKyAgICBSZWdpc3RlcklEKiBiYXNlUmVnaXN0ZXI7Cit9
OworCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWlmeVNjb3BlcygpCit7CisgICAgVmVjdG9y
PFJlaWZpY2F0aW9uV29ya2xpc3RJdGVtPiB3b3JrbGlzdDsKKyAgICBTY29wZUNoYWluSXRlcmF0
b3IgaXRlciA9IG1fc2NvcGVDaGFpbi0+YmVnaW4oKTsKKyAgICBpbnQgaTsKKworICAgIC8vIEZp
cnN0LCB3YWxrIHRoZSBzY29wZSBjaGFpbiB0byBzZWUgd2hhdCBtaWdodCBuZWVkIHJlaWZpY2F0
aW9uLgorICAgIGZvciAoaSA9IHNjb3BlRGVwdGgoKS0xOyBpID49IDA7IC0taSkgeworICAgICAg
ICBzd2l0Y2ggKG1fc2NvcGVDb250ZXh0U3RhY2tbaV0uYmxvY2tUeXBlKSB7CisgICAgICAgIGNh
c2UgV2l0aEJsb2NrOgorICAgICAgICAgICAgLy8gUHVzaGluZyBhIGB3aXRoJyBibG9jayBmb3Jj
ZXMgb3V0ZXIgc2NvcGVzIHRvIGJlIHJlaWZpZWQsIHNvIHdlCisgICAgICAgICAgICAvLyBkb24n
dCBuZWVkIHRvIGRvIHNvIGhlcmUuCisgICAgICAgICAgICBnb3RvIHJlaWZ5OworICAgICAgICBj
YXNlIEZpbmFsbHlCbG9jazoKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIFNj
b3BlQmxvY2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgSlNPYmplY3Qq
IGN1cnJlbnRTY29wZSA9IGl0ZXItPmdldCgpOworICAgICAgICBBU1NFUlQoY3VycmVudFNjb3Bl
LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgICAgICArK2l0ZXI7CisKKyAgICAgICAgc3dp
dGNoIChtX3Njb3BlQ29udGV4dFN0YWNrW2ldLnNjb3BlQ29udGV4dC5yZWlmeU1vZGUpIHsKKyAg
ICAgICAgY2FzZSBTY29wZUNvbnRleHQ6OkVhZ2VybHlSZWlmeToKKyAgICAgICAgICAgIC8vIExp
a2UgYSBgd2l0aCcgYmxvY2ssIGVudGVyaW5nIGFuIEVhZ2VybHlSZWlmeSBibG9jayBmb3JjZXMK
KyAgICAgICAgICAgIC8vIHJlaWZpY2F0aW9uLCBzbyB3ZSBuZWVkIGxvb2sgbm8gZmFydGhlci4K
KyAgICAgICAgICAgIGdvdG8gcmVpZnk7CisgICAgICAgIGNhc2UgU2NvcGVDb250ZXh0OjpMYXpp
bHlSZWlmeTogeworICAgICAgICAgICAgUmVpZmljYXRpb25Xb3JrbGlzdEl0ZW0gaXRlbTsKKyAg
ICAgICAgICAgIGl0ZW0ucmVpZmllZFNjb3BlUmVnaXN0ZXIgPSBtX3Njb3BlQ29udGV4dFN0YWNr
W2ldLnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXI7CisgICAgICAgICAgICBpdGVtLnNjb3BlVGVt
cGxhdGUgPSBjdXJyZW50U2NvcGU7CisgICAgICAgICAgICBpdGVtLmJhc2VSZWdpc3RlciA9IG1f
c2NvcGVDb250ZXh0U3RhY2tbaV0uc2NvcGVDb250ZXh0LmJhc2VSZWdpc3RlcjsKKyAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZChpdGVtKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9IGNhc2UgU2NvcGVDb250ZXh0OjpOZXZlclJlaWZ5OgorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworcmVpZnk6CisgICAgLy8gSWYg
d2UgdHJhdmVyc2VkIHRocm91Z2ggdGhlIHdob2xlIGJsb2NrIHNjb3BlIGNoYWluLCBwZXJoYXBz
IHdlIG5lZWQgdG8KKyAgICAvLyByZWlmeSB0aGUgYWN0aXZhdGlvbiBmb3IgdGhlIGZ1bmN0aW9u
LgorICAgIGlmIChpIDwgMCAmJiAhbV9oYXNDcmVhdGVkQWN0aXZhdGlvbiAmJiBtX2NvZGVCbG9j
ay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKSB7CisgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRl
X2FjdGl2YXRpb24pOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9u
UmVnaXN0ZXItPmluZGV4KCkpOworICAgIH0KKworICAgIHdoaWxlICh3b3JrbGlzdC5zaXplKCkp
IHsKKyAgICAgICAgUmVpZmljYXRpb25Xb3JrbGlzdEl0ZW0gaXRlbSA9IHdvcmtsaXN0Lmxhc3Qo
KTsKKyAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOworICAgICAgICBSZWdpc3RlcklEKiB0
ZW1wbCA9IGVtaXRMb2FkKDAsIEpTVmFsdWUoaXRlbS5zY29wZVRlbXBsYXRlKSk7CisgICAgICAg
IGVtaXRPcGNvZGUob3BfcmVpZnlfc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoaXRlbS5yZWlmaWVkU2NvcGVSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCh0ZW1wbC0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChpdGVtLmJhc2VSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQorfQorCitQYXNzUmVmUHRy
PExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBTY29wZXMoTGFiZWwqIHRhcmdldCwg
aW50IHRhcmdldFNjb3BlRGVwdGgpCit7CisgICAgQVNTRVJUKHNjb3BlRGVwdGgoKSAtIHRhcmdl
dFNjb3BlRGVwdGggPj0gMCk7CisgICAgQVNTRVJUKHRhcmdldC0+aXNGb3J3YXJkKCkpOworCisg
ICAgc2l6ZV90IHNjb3BlRGVsdGEgPSBzY29wZURlcHRoKCkgLSB0YXJnZXRTY29wZURlcHRoOwor
ICAgIEFTU0VSVChzY29wZURlbHRhIDw9IG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKKwor
ICAgIHdoaWxlIChzY29wZURlbHRhLS0pIHsKKyAgICAgICAgQ29udHJvbEZsb3dDb250ZXh0KiBj
b250ZXh0ID0gJm1fc2NvcGVDb250ZXh0U3RhY2tbdGFyZ2V0U2NvcGVEZXB0aCArIHNjb3BlRGVs
dGFdOworICAgICAgICBzd2l0Y2ggKGNvbnRleHQtPmJsb2NrVHlwZSkgeworICAgICAgICBjYXNl
IFdpdGhCbG9jazoKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfcG9wX3Njb3BlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpbmFsbHlCbG9jazoKKyAgICAgICAgICAgIGVt
aXRKdW1wU3Vicm91dGluZShjb250ZXh0LT5maW5hbGx5Q29udGV4dC5yZXRBZGRyRHN0LCBjb250
ZXh0LT5maW5hbGx5Q29udGV4dC5maW5hbGx5QWRkcik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTY29wZUJsb2NrOgorICAgICAgICAgICAgc3dpdGNoIChjb250ZXh0LT5zY29w
ZUNvbnRleHQucmVpZnlNb2RlKSB7CisgICAgICAgICAgICBjYXNlIFNjb3BlQ29udGV4dDo6RWFn
ZXJseVJlaWZ5OgorICAgICAgICAgICAgY2FzZSBTY29wZUNvbnRleHQ6OkxhemlseVJlaWZ5Ogor
ICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfdGVhcl9vZmZfc2NvcGUpOworICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LT5zY29wZUNvbnRleHQubGFzdFJl
Z2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgU2NvcGVDb250ZXh0OjpOZXZlclJlaWZ5OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY29udGV4dC0tOworICAgIH0KKworICAgIHJldHVybiBlbWl0SnVt
cCh0YXJnZXQpOworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoQmxvY2tTY29wZShK
U1N0YXRpY1Njb3BlT2JqZWN0ICpzY29wZVRlbXBsYXRlLCBTY29wZUNvbnRleHQ6OlJlaWZ5TW9k
ZSByZWlmeU1vZGUpCiB7CisgICAgLy8gUmVzZXJ2ZSBhIGJsb2NrIG9mIGNvbnRpZ3VvdXMgcmVn
aXN0ZXJzIGZvciB0aGUgdmFyaWFibGVzLiBXZSBob2xkIGEKKyAgICAvLyByZWZlcmVuY2Ugb24g
dGhlIGxhc3QgcmVnaXN0ZXIsIHByZXZlbnRpbmcgcmVjbGFtYXRpb24gb2YgYW55IHByZXZpb3Vz
CisgICAgLy8gcmVnaXN0ZXIuCisgICAgLy8KKyAgICAvLyBJbiB0aGUgZnV0dXJlIHdlJ2xsIHNo
dWZmbGUgYXJvdW5kIHRoZSBzeW1ib2wgdGFibGUgdG8gcHV0IHRoZSBjYXB0dXJlZAorICAgIC8v
IHZhcmlhYmxlcyBmaXJzdCwgYW5kIHBvcEJsb2NrU2NvcGUgd2lsbCByZW1vdmUgc3ltYm9sIHRh
YmxlIGVudHJpZXMgZm9yCisgICAgLy8gdW5jYXB0dXJlZCB2YXJpYWJsZXMuCisgICAgUmVnaXN0
ZXJJRCogYmFzZSA9IDA7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxhc3QgPSAwOworICAgIHNp
emVfdCBuID0gc2NvcGVUZW1wbGF0ZS0+c3ltYm9sVGFibGUoKS5zaXplKCk7CisgICAgQVNTRVJU
KG4pOworICAgIHdoaWxlIChuLS0pIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbmV4dCA9IG5ld1Jl
Z2lzdGVyKCk7CisgICAgICAgIEFTU0VSVCghbGFzdCB8fCAobmV4dCA9PSBsYXN0LmdldCgpICsg
MSkpOworICAgICAgICBpZiAoIWxhc3QpCisgICAgICAgICAgICBiYXNlID0gbmV4dDsKKyAgICAg
ICAgbGFzdCA9IG5leHQ7CisgICAgfQorICAgIEFTU0VSVChsYXN0KTsKKyAgICAKKyAgICAvLyBQ
cmVwYXJlIHRoZSB0ZW1wb3JhbCBkZWFkIHpvbmUgZm9yIHRob3NlIGxvY2FscyB0aGF0IG5lZWQg
aXQsIGJ5CisgICAgLy8gaW5pdGlhbGl6aW5nIHRob3NlIHZhbHVlcyB0byBKU1ZhbHVlKCksIHRo
ZSBlbXB0eSB2YWx1ZS4KKyAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNj
b3BlVGVtcGxhdGUtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsKKyAgICBTeW1ib2xUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gc2NvcGVUZW1wbGF0ZS0+c3ltYm9sVGFibGUoKS5lbmQoKTsKKyAg
ICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYg
ZW50cnkgPSBpdGVyLmdldCgpLT5zZWNvbmQ7CisgICAgICAgIGlmIChlbnRyeS5oYXNUZW1wb3Jh
bERlYWRab25lKCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gYmFzZSArIGVu
dHJ5LmdldEluZGV4KCk7CisgICAgICAgICAgICBBU1NFUlQobG9jYWwgPj0gYmFzZSAmJiBsb2Nh
bCA8PSBsYXN0LmdldCgpKTsKKyAgICAgICAgICAgIGVtaXRJbml0TGF6eVJlZ2lzdGVyKGxvY2Fs
KTsKKyAgICAgICAgfQorICAgICAgICArK2l0ZXI7CisgICAgfQorCisgICAgLy8gTm93IGFsbG9j
YXRlIGEgcmVnaXN0ZXIgZm9yIHRoZSBibG9jayBzY29wZSBvYmplY3QgaXRzZWxmLCBpZiBuZWNl
c3NhcnkuCisgICAgaWYgKHJlaWZ5TW9kZSAhPSBTY29wZUNvbnRleHQ6Ok5ldmVyUmVpZnkpIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCogbmV4dCA9IG5ld1JlZ2lzdGVyKCk7CisgICAgICAgIEFTU0VS
VChuZXh0ID09IGxhc3QuZ2V0KCkgKyAxKTsKKyAgICAgICAgbGFzdCA9IG5leHQ7CisgICAgfQor
CisgICAgLy8gRmluYWxseSB1cGRhdGUgdGhlIGNvbnRyb2wgZmxvdyBzdGFjaywgcHVzaCB0aGUg
dGVtcGxhdGUgb250byB0aGUgc2NvcGUKKyAgICAvLyBjaGFpbiwgYW5kIHJlaWZ5IHRoZSBzY29w
ZSBpZiBuZWVkZWQuCiAgICAgQ29udHJvbEZsb3dDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4
dC5pc0ZpbmFsbHlCbG9jayA9IGZhbHNlOworICAgIGNvbnRleHQuYmxvY2tUeXBlID0gU2NvcGVC
bG9jazsKKyAgICBjb250ZXh0LnNjb3BlQ29udGV4dC5yZWlmeU1vZGUgPSByZWlmeU1vZGU7Cisg
ICAgY29udGV4dC5zY29wZUNvbnRleHQuYmFzZVJlZ2lzdGVyID0gYmFzZTsKKyAgICBjb250ZXh0
LnNjb3BlQ29udGV4dC5sYXN0UmVnaXN0ZXIgPSBsYXN0LnJlbGVhc2UoKS5sZWFrUmVmKCk7CisK
ICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKLSAgICBtX2R5bmFtaWNT
Y29wZURlcHRoKys7CisgICAgbV9zY29wZUNoYWluLnNldCgqbV9zY29wZUNoYWluLT5nbG9iYWxE
YXRhLCBtX3Njb3BlQ2hhaW4tPnB1c2goc2NvcGVUZW1wbGF0ZSkpOworICAgIG1fYmxvY2tTY29w
ZURlcHRoKys7CisKKyAgICAvLyBXZSByZWlmeSBpdCBsYXppbHkgaWYgcG9zc2libGUuCisgICAg
c3dpdGNoIChyZWlmeU1vZGUpIHsKKyAgICBjYXNlIFNjb3BlQ29udGV4dDo6RWFnZXJseVJlaWZ5
OgorICAgICAgICAvLyBSZWlmeSB0aGUgc2NvcGUgbm93LgorICAgICAgICByZWlmeVNjb3Blcygp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjb3BlQ29udGV4dDo6TGF6aWx5UmVpZnk6Cisg
ICAgICAgIC8vIE1hcmsgdGhlIHNjb3BlIHJlZ2lzdGVyIGFzIHVuc2V0LCBzbyBsYXRlciBjb2Rl
IGNhbiBkZXRlY3QgaWYgaXQgd2FzCisgICAgICAgIC8vIG5ldmVyIHJlaWZpZWQuCisgICAgICAg
IGVtaXRJbml0TGF6eVJlZ2lzdGVyKGNvbnRleHQuc2NvcGVDb250ZXh0Lmxhc3RSZWdpc3Rlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2NvcGVDb250ZXh0OjpOZXZlclJlaWZ5OgorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQogCi0gICAgZW1pdE9wY29kZShvcF9wdXNoX25ld19z
Y29wZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cEJsb2NrU2NvcGUoKQoreworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7
CisgICAgQ29udHJvbEZsb3dDb250ZXh0IGNvbnRleHQgPSBtX3Njb3BlQ29udGV4dFN0YWNrLmxh
c3QoKTsKKyAgICBBU1NFUlQoY29udGV4dC5ibG9ja1R5cGUgPT0gU2NvcGVCbG9jayk7CisKKyAg
ICBBU1NFUlQobV9zY29wZUNoYWluLT5iZWdpbigpLT5nZXQoKS0+aXNTdGF0aWNTY29wZU9iamVj
dCgpKTsKKworICAgIGlmIChjb250ZXh0LnNjb3BlQ29udGV4dC5yZWlmeU1vZGUgIT0gU2NvcGVD
b250ZXh0OjpOZXZlclJlaWZ5KSB7CisgICAgICAgIGVtaXRPcGNvZGUob3BfdGVhcl9vZmZfc2Nv
cGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC5zY29wZUNvbnRleHQu
bGFzdFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICBjb250ZXh0LnNjb3BlQ29udGV4
dC5sYXN0UmVnaXN0ZXItPmRlcmVmKCk7CisgICAgY29udGV4dC5zY29wZUNvbnRleHQubGFzdFJl
Z2lzdGVyID0gMDsKKyAgICAKKyAgICBtX2Jsb2NrU2NvcGVEZXB0aC0tOworICAgIG1fc2NvcGVD
aGFpbi5zZXQoKm1fc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgbV9zY29wZUNoYWluLT5wb3AoKSk7
CisgICAgbV9zY29wZUNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKIHZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmJlZ2luU3dpdGNoKFJlZ2lzdGVySUQqIHNjcnV0aW5lZVJlZ2lzdGVyLCBT
d2l0Y2hJbmZvOjpTd2l0Y2hUeXBlIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggZTdmZTIzNmU1YmFm
MGYwZmI3ZTkyZTQ2OThjNTZlODRjY2VmODdjNS4uZDM2NDBkNjBlM2MxMmRiNGZjOTkzNGRkYTY0
ZDg0M2NlYTU4MDU0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNTAsNiArNTAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNsYXNzIExhYmVsOwogICAgIGNsYXNz
IFNjb3BlQ2hhaW5Ob2RlOworICAgIGNsYXNzIEpTU3RhdGljU2NvcGVPYmplY3Q7CiAKICAgICBj
bGFzcyBDYWxsQXJndW1lbnRzIHsKICAgICBwdWJsaWM6CkBAIC03NSw5ICs3NiwyMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcmV0QWRkckRzdDsKICAgICB9OwogCisg
ICAgc3RydWN0IFNjb3BlQ29udGV4dCB7CisgICAgICAgIGVudW0gUmVpZnlNb2RlIHsgRWFnZXJs
eVJlaWZ5LCBMYXppbHlSZWlmeSwgTmV2ZXJSZWlmeSB9OworICAgICAgICBSZWlmeU1vZGUgcmVp
ZnlNb2RlOworICAgICAgICBSZWdpc3RlcklEKiBiYXNlUmVnaXN0ZXI7CisgICAgICAgIFJlZ2lz
dGVySUQqIGxhc3RSZWdpc3RlcjsKKyAgICB9OworCisgICAgZW51bSBCbG9ja1R5cGUgeyBXaXRo
QmxvY2ssIEZpbmFsbHlCbG9jaywgU2NvcGVCbG9jayB9OworCiAgICAgc3RydWN0IENvbnRyb2xG
bG93Q29udGV4dCB7Ci0gICAgICAgIGJvb2wgaXNGaW5hbGx5QmxvY2s7Ci0gICAgICAgIEZpbmFs
bHlDb250ZXh0IGZpbmFsbHlDb250ZXh0OworICAgICAgICBlbnVtIEJsb2NrVHlwZSBibG9ja1R5
cGU7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIEZpbmFsbHlDb250ZXh0IGZpbmFsbHlD
b250ZXh0OworICAgICAgICAgICAgU2NvcGVDb250ZXh0IHNjb3BlQ29udGV4dDsKKyAgICAgICAg
fTsKICAgICB9OwogCiAgICAgc3RydWN0IEZvckluQ29udGV4dCB7CkBAIC04OSw3ICsxMDIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlc29sdmVSZXN1bHQgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgZW51bSBGbGFncyB7CisgICAgICAgIGVudW0gVHlwZUZsYWdzIHsKICAgICAg
ICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBpcyBsb2NhbGx5IGJvdW5kLCBpbiBhIHJlZ2lzdGVyLgog
ICAgICAgICAgICAgUmVnaXN0ZXJGbGFnID0gMHgxLAogICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byB0cmF2ZXJzZSB0aGUgc2NvcGUgY2hhaW4gYXQgcnVudGltZSwgY2hlY2tpbmcgZm9yCkBAIC0x
MDMsMjEgKzExNiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEluZGV4ZWRGbGFn
ID0gMHg4LAogICAgICAgICAgICAgLy8gU2tpcCBzb21lIG51bWJlciBvZiBvYmplY3RzIGluIHRo
ZSBzY29wZSBjaGFpbiwgZ2l2ZW4gYnkgImRlcHRoIi4KICAgICAgICAgICAgIFNjb3BlZEZsYWcg
PSAweDEwLAotICAgICAgICAgICAgLy8gVGhlIHJlc29sdmVkIGJpbmRpbmcgaXMgaW1tdXRhYmxl
LgotICAgICAgICAgICAgUmVhZE9ubHlGbGFnID0gMHgyMCwKICAgICAgICAgICAgIC8vIFRoZSBi
YXNlIG9iamVjdCBpcyB0aGUgZ2xvYmFsIG9iamVjdC4KLSAgICAgICAgICAgIEdsb2JhbEZsYWcg
PSAweDQwCisgICAgICAgICAgICBHbG9iYWxGbGFnID0gMHgyMAogICAgICAgICB9OworCiAgICAg
ICAgIGVudW0gVHlwZSB7CiAgICAgICAgICAgICAvLyBUaGUgcHJvcGVydHkgaXMgbG9jYWwsIGFu
ZCBzdG9yZWQgaW4gYSByZWdpc3Rlci4KICAgICAgICAgICAgIFJlZ2lzdGVyID0gUmVnaXN0ZXJG
bGFnIHwgU3RhdGljRmxhZywKLSAgICAgICAgICAgIC8vIEEgcmVhZC1vbmx5IGxvY2FsLCBjcmVh
dGVkIGJ5ICJjb25zdCIuCi0gICAgICAgICAgICBSZWFkT25seVJlZ2lzdGVyID0gUmVnaXN0ZXJG
bGFnIHwgUmVhZE9ubHlGbGFnIHwgU3RhdGljRmxhZywKICAgICAgICAgICAgIC8vIFRoZSBwcm9w
ZXJ0eSBpcyBzdGF0aWNhbGx5IHNjb3BlZCBmcmVlIHZhcmlhYmxlLiBJdHMgY29vcmRpbmF0ZXMK
ICAgICAgICAgICAgIC8vIGFyZSBpbiAiaW5kZXgiIGFuZCAiZGVwdGgiLgogICAgICAgICAgICAg
TGV4aWNhbCA9IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFN0YXRpY0ZsYWcsCi0gICAgICAg
ICAgICAvLyBBIHJlYWQtb25seSBMZXhpY2FsLCBjcmVhdGVkIGJ5ICJjb25zdCIuCi0gICAgICAg
ICAgICBSZWFkT25seUxleGljYWwgPSBJbmRleGVkRmxhZyB8IFNjb3BlZEZsYWcgfCBSZWFkT25s
eUZsYWcgfCBTdGF0aWNGbGFnLAogICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHdhcyBub3Qg
Ym91bmQgbGV4aWNhbGx5LCBzbyBhdCBydW50aW1lIHdlIHNob3VsZAogICAgICAgICAgICAgLy8g
bG9vayBkaXJlY3RseSBpbiB0aGUgZ2xvYmFsIG9iamVjdC4KICAgICAgICAgICAgIEdsb2JhbCA9
IEdsb2JhbEZsYWcsCkBAIC0xMjYsOSArMTM0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICAvLyBiaW5kaW5nIGNyZWF0ZWQgd2l0aCAidmFyIiBhdCB0aGUgdG9wIGxldmVsLiBBdCBy
dW50aW1lIHdlJ2xsCiAgICAgICAgICAgICAvLyBqdXN0IGluZGV4IGludG8gdGhlIGdsb2JhbCBv
YmplY3QuCiAgICAgICAgICAgICBJbmRleGVkR2xvYmFsID0gSW5kZXhlZEZsYWcgfCBHbG9iYWxG
bGFnIHwgU3RhdGljRmxhZywKLSAgICAgICAgICAgIC8vIExpa2UgSW5kZXhlZEdsb2JhbCwgYnV0
IHRoZSBwcm9wZXJ0eSBpcyBhbHNvIHJlYWQtb25seSwgbGlrZSBOYU4sCi0gICAgICAgICAgICAv
LyBJbmZpbml0eSwgb3IgdW5kZWZpbmVkLgotICAgICAgICAgICAgUmVhZE9ubHlJbmRleGVkR2xv
YmFsID0gSW5kZXhlZEZsYWcgfCBSZWFkT25seUZsYWcgfCBHbG9iYWxGbGFnIHwgU3RhdGljRmxh
ZywKICAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgc3Rh
dGljYWxseSwgZHVlIHRvIHRoZQogICAgICAgICAgICAgLy8gcHJlc2VuY2Ugb2YgYHdpdGgnIGJs
b2Nrcy4gQXQgcnVudGltZSB3ZSdsbCBoYXZlIHRvIHdhbGsgdGhlCiAgICAgICAgICAgICAvLyBz
Y29wZSBjaGFpbi4gU2NvcGVkRmxhZyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCAiZGVwdGgiIHdp
bGwKQEAgLTE0MSw1MCArMTQ2LDU5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLy8g
Y2hlY2sgZm9yIHRoZSBhYnNlbmNlIG9mIHRoaXMgcHJvcGVydHkgaW4gdGhvc2UgaW50ZXJ2ZW5p
bmcKICAgICAgICAgICAgIC8vIHNjb3Blcy4KICAgICAgICAgICAgIER5bmFtaWNMZXhpY2FsID0g
RHluYW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IFNjb3BlZEZsYWcsCi0gICAgICAgICAgICAvLyBM
aWtlIFJlYWRPbmx5TGV4aWNhbCwgYnV0IHdpdGggaW50ZXJ2ZW5pbmcgbm9uLXN0cmljdCBgZXZh
bCcuCi0gICAgICAgICAgICBEeW5hbWljUmVhZE9ubHlMZXhpY2FsID0gRHluYW1pY0ZsYWcgfCBJ
bmRleGVkRmxhZyB8IFNjb3BlZEZsYWcgfCBSZWFkT25seUZsYWcsCiAgICAgICAgICAgICAvLyBM
aWtlIEdsb2JhbCwgYnV0IHdpdGggaW50ZXJ2ZW5pbmcgbm9uLXN0cmljdCBgZXZhbCcuIEFzIHdp
dGggCiAgICAgICAgICAgICAvLyBEeW5hbWljLCBTY29wZUZsYWcgaXMgc2V0IHRvIGluZGljYXRl
IHRoYXQgImRlcHRoIiBkb2VzIGluZGVlZAogICAgICAgICAgICAgLy8gc3RvcmUgYSBudW1iZXIg
b2YgZnJhbWVzIHRvIHNraXAgYmVmb3JlIGRvaW5nIHRoZSBkeW5hbWljIGNoZWNrcy4KICAgICAg
ICAgICAgIER5bmFtaWNHbG9iYWwgPSBEeW5hbWljRmxhZyB8IEdsb2JhbEZsYWcgfCBTY29wZWRG
bGFnLAogICAgICAgICAgICAgLy8gTGlrZSBJbmRleGVkR2xvYmFsLCBidXQgd2l0aCBpbnRlcnZl
bmluZyBub24tc3RyaWN0IGBldmFsJy4KICAgICAgICAgICAgIER5bmFtaWNJbmRleGVkR2xvYmFs
ID0gRHluYW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IEdsb2JhbEZsYWcgfCBTY29wZWRGbGFnLAot
ICAgICAgICAgICAgLy8gTGlrZSBSZWFkT25seUluZGV4ZWRHbG9iYWwsIGJ1dCB3aXRoIGludGVy
dmVuaW5nIG5vbi1zdHJpY3QKLSAgICAgICAgICAgIC8vIGBldmFsJy4KLSAgICAgICAgICAgIER5
bmFtaWNSZWFkT25seUluZGV4ZWRHbG9iYWwgPSBEeW5hbWljRmxhZyB8IEluZGV4ZWRGbGFnIHwg
UmVhZE9ubHlGbGFnIHwgR2xvYmFsRmxhZyB8IFNjb3BlZEZsYWcsCiAgICAgICAgIH07CiAKLSAg
ICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgcmVnaXN0ZXJSZXNvbHZlKFJlZ2lzdGVySUQgKmxv
Y2FsLCB1bnNpZ25lZCBmbGFncykKKyAgICAgICAgZW51bSBBdHRyaWJ1dGVzIHsKKyAgICAgICAg
ICAgIC8vIFRoZSByZXNvbHZlZCBiaW5kaW5nIGlzIGltbXV0YWJsZS4KKyAgICAgICAgICAgIFJl
YWRPbmx5QXR0cmlidXRlID0gMHgxLAorICAgICAgICAgICAgLy8gVGhlIHJlc29sdmUgYmluZGlu
ZyBpcyBhY3R1YWxseSB0aGUgYXJndW1lbnRzIG9iamVjdC4KKyAgICAgICAgICAgIEFyZ3VtZW50
c0F0dHJpYnV0ZSA9IDB4MiwKKyAgICAgICAgICAgIC8vIFJlYWRzIG9mIHRoaXMgdmFyaWFibGUg
bmVlZCBkeW5hbWljIGNoZWNrcyB0byBlbnN1cmUgaXQgaXMgc2V0LgorICAgICAgICAgICAgQmFy
cmllckF0dHJpYnV0ZSA9IDB4NAorICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyBSZXNvbHZl
UmVzdWx0IHJlZ2lzdGVyUmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0
ZXJJRCAqbG9jYWwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBSZXNvbHZlUmVzdWx0KHByb3BlcnR5LCBSZWdpc3RlciwgYXR0cmlidXRlcywgbG9j
YWwsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGljIFJlc29sdmVSZXN1bHQgbGV4aWNhbFJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHksIGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChSZWdpc3RlciB8IGZsYWdzLCBs
b2NhbCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0KHByb3BlcnR5LCBMZXhpY2FsLCBhdHRyaWJ1dGVzLCAwLCBpbmRleCwgZGVw
dGgsIDApOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFtaWNS
ZXNvbHZlKHNpemVfdCBkZXB0aCkKKyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZ2xvYmFs
UmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgSlNPYmplY3QgKmdsb2JhbE9iamVj
dCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQoRHluYW1pYywg
MCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCBkZXB0aCwgMCk7CisgICAgICAgICAgICByZXR1cm4g
UmVzb2x2ZVJlc3VsdChwcm9wZXJ0eSwgR2xvYmFsLCAwLCAwLCBtaXNzaW5nU3ltYm9sTWFya2Vy
KCksIDAsIGdsb2JhbE9iamVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIFJlc29sdmVS
ZXN1bHQgbGV4aWNhbFJlc29sdmUoaW50IGluZGV4LCBzaXplX3QgZGVwdGgsIHVuc2lnbmVkIGZs
YWdzKQorICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBpbmRleGVkR2xvYmFsUmVzb2x2ZShj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgaW50IGluZGV4LCBKU09iamVjdCAqZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCB0eXBlID0gKGZsYWdzICYgRHluYW1pY0ZsYWcpID8gRHluYW1pY0xleGljYWwgOiBMZXhpY2Fs
OwotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQodHlwZSB8IGZsYWdzLCAwLCBpbmRl
eCwgZGVwdGgsIDApOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQocHJvcGVydHks
IEluZGV4ZWRHbG9iYWwsIGF0dHJpYnV0ZXMsIDAsIGluZGV4LCAwLCBnbG9iYWxPYmplY3QpOwog
ICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGluZGV4ZWRHbG9iYWxSZXNv
bHZlKGludCBpbmRleCwgSlNPYmplY3QgKmdsb2JhbE9iamVjdCwgdW5zaWduZWQgZmxhZ3MpCisg
ICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFtaWNSZXNvbHZlKGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5LCBzaXplX3QgZGVwdGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBSZXNvbHZlUmVzdWx0KEluZGV4ZWRHbG9iYWwgfCBmbGFncywgMCwgaW5kZXgsIDAsIGdsb2Jh
bE9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChwcm9wZXJ0eSwgRHlu
YW1pYywgMCwgMCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCBkZXB0aCwgMCk7CiAgICAgICAgIH0K
LSAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHluYW1pY0luZGV4ZWRHbG9iYWxSZXNvbHZl
KGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCBKU09iamVjdCAqZ2xvYmFsT2JqZWN0LCB1bnNpZ25l
ZCBmbGFncykKKyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHluYW1pY0xleGljYWxSZXNv
bHZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBpbnQgaW5kZXgsIHNpemVfdCBkZXB0aCwg
dW5zaWduZWQgYXR0cmlidXRlcykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlc29s
dmVSZXN1bHQoRHluYW1pY0luZGV4ZWRHbG9iYWwgfCBmbGFncywgMCwgaW5kZXgsIGRlcHRoLCBn
bG9iYWxPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQocHJvcGVydHks
IER5bmFtaWNMZXhpY2FsLCBhdHRyaWJ1dGVzLCAwLCBpbmRleCwgZGVwdGgsIDApOwogICAgICAg
ICB9Ci0gICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGdsb2JhbFJlc29sdmUoSlNPYmplY3Qg
Kmdsb2JhbE9iamVjdCkKKyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHluYW1pY0dsb2Jh
bFJlc29sdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIHNpemVfdCBkeW5hbWljRGVwdGgs
IEpTT2JqZWN0ICpnbG9iYWxPYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBS
ZXNvbHZlUmVzdWx0KEdsb2JhbCwgMCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCAwLCBnbG9iYWxP
YmplY3QpOworICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQocHJvcGVydHksIER5bmFt
aWNHbG9iYWwsIDAsIDAsIG1pc3NpbmdTeW1ib2xNYXJrZXIoKSwgZHluYW1pY0RlcHRoLCBnbG9i
YWxPYmplY3QpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFt
aWNHbG9iYWxSZXNvbHZlKHNpemVfdCBkeW5hbWljRGVwdGgsIEpTT2JqZWN0ICpnbG9iYWxPYmpl
Y3QpCisgICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFtaWNJbmRleGVkR2xvYmFsUmVz
b2x2ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgaW50IGluZGV4LCBzaXplX3QgZGVwdGgs
IEpTT2JqZWN0ICpnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KER5bmFtaWNHbG9iYWwsIDAsIG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSwgZHluYW1pY0RlcHRoLCBnbG9iYWxPYmplY3QpOworICAgICAgICAg
ICAgcmV0dXJuIFJlc29sdmVSZXN1bHQocHJvcGVydHksIER5bmFtaWNJbmRleGVkR2xvYmFsLCBh
dHRyaWJ1dGVzLCAwLCBpbmRleCwgZGVwdGgsIGdsb2JhbE9iamVjdCk7CiAgICAgICAgIH0KIAot
ICAgICAgICB1bnNpZ25lZCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAg
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsg
fQorICAgICAgICB1aW50OF90IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAg
ICAgdWludDhfdCBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CiAg
ICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIGNvcnJlc3BvbmRpbmcgdG8gYSBsb2NhbCB2
YXJpYWJsZSwgb3IgMCBpZiBubwogICAgICAgICAvLyBzdWNoIHJlZ2lzdGVyIGV4aXN0cy4gUmVn
aXN0ZXJzIHJldHVybmVkIGJ5IFJlc29sdmVSZXN1bHQ6OmxvY2FsKCkgZG8KICAgICAgICAgLy8g
bm90IHJlcXVpcmUgZXhwbGljaXQgcmVmZXJlbmNlIGNvdW50aW5nLgpAQCAtMTk4LDEyICsyMTIs
MTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgJiBTdGF0aWNGbGFnOyB9CiAgICAgICAgIGJvb2wgaXNJbmRleGVkKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlICYgSW5kZXhlZEZsYWc7IH0KICAgICAgICAgYm9vbCBpc1Njb3Bl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIFNjb3BlZEZsYWc7IH0KLSAgICAgICAgYm9vbCBp
c1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gKG1fdHlwZSAmIFJlYWRPbmx5RmxhZykgJiYgIWlz
RHluYW1pYygpOyB9CiAgICAgICAgIGJvb2wgaXNHbG9iYWwoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgJiBHbG9iYWxGbGFnOyB9CiAKKyAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyBy
ZXR1cm4gKG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5QXR0cmlidXRlKSAmJiAhaXNEeW5hbWljKCk7
IH0KKyAgICAgICAgYm9vbCBpc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
cyAmIEFyZ3VtZW50c0F0dHJpYnV0ZTsgfQorICAgICAgICBib29sIG5lZWRzQmFycmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcyAmIEJhcnJpZXJBdHRyaWJ1dGU7IH0KKwogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFJlc29sdmVSZXN1bHQodW5zaWduZWQgdHlwZSwgUmVnaXN0ZXJJRCog
bG9jYWwsIGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCBKU09iamVjdCogZ2xvYmFsT2JqZWN0KQot
ICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgUmVzb2x2ZVJlc3VsdChjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eSwgdWludDhfdCB0eXBlLCB1aW50OF90IGF0dHJpYnV0ZXMsIFJl
Z2lzdGVySUQqIGxvY2FsLCBpbnQgaW5kZXgsIHNpemVfdCBkZXB0aCwgSlNPYmplY3QqIGdsb2Jh
bE9iamVjdCkKKyAgICAgICAgICAgIDogbV9wcm9wZXJ0eShwcm9wZXJ0eSkKKyAgICAgICAgICAg
ICwgbV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQog
ICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQogICAgICAgICAgICAgLCBtX2xvY2FsKGxvY2Fs
KQogICAgICAgICAgICAgLCBtX2RlcHRoKGRlcHRoKQpAQCAtMjE4LDcgKzIzNyw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGNoZWNrVmFsaWRpdHkoKTsKICNlbmRpZgogCi0gICAg
ICAgIHVuc2lnbmVkIG1fdHlwZTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbV9wcm9wZXJ0
eTsKKyAgICAgICAgdWludDhfdCBtX3R5cGU7CisgICAgICAgIHVpbnQ4X3QgbV9hdHRyaWJ1dGVz
OwogICAgICAgICBpbnQgbV9pbmRleDsgLy8gSW5kZXggaW4gc2NvcGUsIGlmIEluZGV4ZWRGbGFn
IGlzIHNldAogICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2FsOyAvLyBMb2NhbCByZWdpc3Rlciwg
aWYgUmVnaXN0ZXJGbGFnIGlzIHNldAogICAgICAgICBzaXplX3QgbV9kZXB0aDsgLy8gRGVwdGgg
aW4gc2NvcGUgY2hhaW4sIGlmIFNjb3BlZEZsYWcgaXMgc2V0CkBAIC0yNTEsMTEgKzI3MiwxMiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHNldElzTnVtZXJpY0NvbXBhcmVGdW5j
dGlvbihib29sIGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbik7CiAKLSAgICAgICAgYm9vbCB3aWxs
UmVzb2x2ZVRvQXJndW1lbnRzKGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJ
RCogdW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKTsKKyAgICAgICAgZW51bSBSZXNvbHZl
RmxhZ3MgeworICAgICAgICAgICAgRG9udENyZWF0ZUFyZ3VtZW50c0ZsYWcgPSAxIDw8IDAKKyAg
ICAgICAgfTsKIAogICAgICAgICAvLyBSZXNvbHZlIGFuIGlkZW50aWZpZXIsIGdpdmVuIHRoZSBj
dXJyZW50IGNvbXBpbGUtdGltZSBzY29wZSBjaGFpbi4KLSAgICAgICAgUmVzb2x2ZVJlc3VsdCBy
ZXNvbHZlKGNvbnN0IElkZW50aWZpZXImKTsKKyAgICAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZl
KGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCByZXNvbHZlRmxhZ3MgPSAwKTsKICAgICAgICAg
Ly8gQmVoYXZlcyBhcyByZXNvbHZlIGRvZXMsIGJ1dCBpZ25vcmVzIGR5bmFtaWMgc2NvcGUgYXMK
ICAgICAgICAgLy8gZHluYW1pYyBzY29wZSBzaG91bGQgbm90IGludGVyZmVyZSB3aXRoIGNvbnN0
IGluaXRpYWxpc2F0aW9uCiAgICAgICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZUNvbnN0RGVjbChj
b25zdCBJZGVudGlmaWVyJik7CkBAIC00MzgsMTEgKzQ2MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFN0YXRpY1ZhcihSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IFJlc29sdmVSZXN1bHQmKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFN0YXRpY1Zh
cihjb25zdCBSZXNvbHZlUmVzdWx0JiwgUmVnaXN0ZXJJRCogdmFsdWUpOwogCi0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRSZXNvbHZlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3Vs
dCYsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dFJlc29sdmVCYXNlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVC
YXNlRm9yUHV0KFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVXaXRo
QmFzZShSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcklEKiBwcm9wRHN0LCBjb25zdCBSZXNv
bHZlUmVzdWx0JiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0UmVzb2x2ZVdpdGhUaGlzKFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVySUQq
IHByb3BEc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlKFJlZ2lzdGVySUQqIGRzdCwgY29u
c3QgUmVzb2x2ZVJlc3VsdCYpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZUJhc2Uo
UmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0Jik7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVS
ZXN1bHQmKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVXaXRoQmFzZShSZWdpc3Rl
cklEKiBiYXNlRHN0LCBSZWdpc3RlcklEKiBwcm9wRHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0Jik7
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlV2l0aFRoaXMoUmVnaXN0ZXJJRCogYmFz
ZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYpOwogCiAgICAg
ICAgIHZvaWQgZW1pdE1ldGhvZENoZWNrKCk7CiAKQEAgLTQ5NCwxNCArNTE2LDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3Qg
VVN0cmluZyYgbWVzc2FnZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0UHVzaE5ld1Njb3BlKFJlZ2lz
dGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVl
KTsKKyAgICAgICAgdm9pZCByZWlmeVNjb3BlcygpOworICAgICAgICB2b2lkIHB1c2hCbG9ja1Nj
b3BlKEpTU3RhdGljU2NvcGVPYmplY3QqLCBTY29wZUNvbnRleHQ6OlJlaWZ5TW9kZSk7CisgICAg
ICAgIHZvaWQgcG9wQmxvY2tTY29wZSgpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXNo
U2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUpOwogICAgICAgICB2b2lkIGVtaXRQb3BTY29wZSgpOwog
CiAgICAgICAgIHZvaWQgZW1pdERlYnVnSG9vayhEZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwg
aW50IGxhc3RMaW5lKTsKIAotICAgICAgICBpbnQgc2NvcGVEZXB0aCgpIHsgcmV0dXJuIG1fZHlu
YW1pY1Njb3BlRGVwdGggKyBtX2ZpbmFsbHlEZXB0aDsgfQorICAgICAgICBpbnQgc2NvcGVEZXB0
aCgpIHsgcmV0dXJuIG1fZHluYW1pY1Njb3BlRGVwdGggKyBtX2Jsb2NrU2NvcGVEZXB0aCArIG1f
ZmluYWxseURlcHRoOyB9CiAgICAgICAgIGJvb2wgaGFzRmluYWxpc2VyKCkgeyByZXR1cm4gbV9m
aW5hbGx5RGVwdGggIT0gMDsgfQogCiAgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250ZXh0KExh
YmVsKiB0YXJnZXQsIFJlZ2lzdGVySUQqIHJldHVybkFkZHJEc3QpOwpAQCAtNTQyLDggKzU2Niw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3aW5kQmlu
YXJ5T3AoKTsKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJld2luZFVuYXJ5T3AoKTsKIAot
ICAgICAgICBQYXNzUmVmUHRyPExhYmVsPiBlbWl0Q29tcGxleEp1bXBTY29wZXMoTGFiZWwqIHRh
cmdldCwgQ29udHJvbEZsb3dDb250ZXh0KiB0b3BTY29wZSwgQ29udHJvbEZsb3dDb250ZXh0KiBi
b3R0b21TY29wZSk7Ci0KICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGRvdWJsZSwgSlNWYWx1ZT4g
TnVtYmVyTWFwOwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIEpTU3RyaW5n
KiwgSWRlbnRpZmllclJlcEhhc2g+IElkZW50aWZpZXJTdHJpbmdNYXA7CiAgICAgICAgIApAQCAt
NjE3LDM1ICs2MzksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEluc3RydWN0
aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAg
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KIAot
ICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgICAgICBpZiAobV9jb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgY2FuT3B0aW1pemVOb25Mb2NhbHMoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobV9keW5hbWljU2NvcGVEZXB0aCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChtX2NvZGVUeXBlID09IEV2YWxDb2RlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1fY29kZVR5cGUg
PT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJsb2NrLT51c2VzRXZhbCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlv
bigpOwogCi0gICAgICAgIHZvaWQgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgdm9pZCBjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKTsKICAgICAgICAgUmVnaXN0ZXJJ
RCogY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCopOwogICAgICAgICAK
ICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKQEAgLTY3NCw2ICs2
NjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbGFz
dFZhcjsKICAgICAgICAgaW50IG1fZmluYWxseURlcHRoOwogICAgICAgICBpbnQgbV9keW5hbWlj
U2NvcGVEZXB0aDsKKyAgICAgICAgaW50IG1fYmxvY2tTY29wZURlcHRoOwogICAgICAgICBpbnQg
bV9iYXNlU2NvcGVEZXB0aDsKICAgICAgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmlu
ZGV4IGJiOTVjYWZiNjgyNjNhOWJmNTEwYWE0ZTQyMjdmNWVhNDNhM2VlOTguLjhjYmYwYmM3N2Uz
NmZmZWQ3MGFhNDQ3NzdkYWJlN2FiZTcwZmNmODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTE1NSw3ICsxNTUsNyBA
QCBSZWdpc3RlcklEKiBSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqCiAgICAgfQogICAgIAogICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8obV9zdGFydE9mZnNldCArIG1faWRlbnQubGVuZ3RoKCksIG1faWRlbnQu
bGVuZ3RoKCksIDApOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFJlc29sdmUoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CisgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0UmVzb2x2ZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCByZXNvbHZlUmVzdWx0KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEFycmF5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMxOCwx
MCArMzE4LDEzIEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAKIFJlZ2lzdGVySUQqIEJyYWNr
ZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpICYm
IGdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHN0YXRpY19jYXN0PFJlc29sdmVOb2Rl
Kj4obV9iYXNlKS0+aWRlbnRpZmllcigpKSkgewotICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOyAg
ICAKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRCeVZhbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBnZW5lcmF0b3IudW5jaGVja2VkUmVnaXN0ZXJGb3JB
cmd1bWVudHMoKSwgcHJvcGVydHkpOworICAgIGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSkg
eworICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2
ZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSwgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkRvbnRDcmVhdGVBcmd1bWVudHNGbGFnKTsKKyAgICAgICAgaWYgKHJlc29s
dmVSZXN1bHQuaXNBcmd1bWVudHMoKSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVy
dHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOworICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQo
KSk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRBcmd1bWVudEJ5VmFsKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1bHQubG9jYWwoKSwgcHJv
cGVydHkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhh
c0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikpOwpAQCAtMzM0LDE3
ICszMzcsMTQgQEAgUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kKIAogUmVnaXN0ZXJJRCogRG90QWNj
ZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIGlmIChtX2lkZW50ID09IGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIGlmICghbV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkpCi0g
ICAgICAgICAgICBnb3RvIG5vbkFyZ3VtZW50c1BhdGg7Ci0gICAgICAgIFJlc29sdmVOb2RlKiBy
ZXNvbHZlTm9kZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKTsKLSAgICAgICAg
aWYgKCFnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50cyhyZXNvbHZlTm9kZS0+aWRlbnRp
ZmllcigpKSkKLSAgICAgICAgICAgIGdvdG8gbm9uQXJndW1lbnRzUGF0aDsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQoKSk7ICAgIAotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRBcmd1bWVudHNMZW5n
dGgoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZ2VuZXJhdG9yLnVuY2hlY2tlZFJl
Z2lzdGVyRm9yQXJndW1lbnRzKCkpOworICAgIGlmIChtX2lkZW50ID09IGdlbmVyYXRvci5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoICYmIG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKSB7CisgICAgICAg
IFJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IGdlbmVyYXRvci5yZXNvbHZlKHN0YXRpY19j
YXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpLCBCeXRlY29kZUdlbmVyYXRv
cjo6RG9udENyZWF0ZUFyZ3VtZW50c0ZsYWcpOworICAgICAgICBpZiAocmVzb2x2ZVJlc3VsdC5p
c0FyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsgICAgCisgICAgICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRBcmd1bWVudHNMZW5ndGgoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3VsdC5sb2NhbCgpKTsKKyAgICAgICAgfQogICAgIH0K
IAotbm9uQXJndW1lbnRzUGF0aDoKICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
LCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
R2V0QnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLCBtX2lkZW50KTsK
QEAgLTQwMCw3ICs0MDAsNyBAQCBSZWdpc3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZwogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwogICAgIENh
bGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpIC0gc3RhcnRPZmZzZXQoKSArIDQsIDQsIDAp
OwotICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhUaGlzKGNhbGxBcmd1bWVudHMudGhpc1Jl
Z2lzdGVyKCksIGZ1bmMuZ2V0KCksIGdlbmVyYXRvci5yZXNvbHZlKGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuZXZhbCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuZXZhbCk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRSZXNvbHZlV2l0aFRoaXMoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
ZnVuYy5nZXQoKSwgZ2VuZXJhdG9yLnJlc29sdmUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5l
dmFsKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCkBAIC00NDAsNyArNDQw
LDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIGludCBpZGVudGlmaWVyU3RhcnQgPSBk
aXZvdCgpIC0gc3RhcnRPZmZzZXQoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oaWRlbnRpZmllclN0YXJ0ICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwg
MCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aFRoaXMoY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRSZXNvbHZlV2l0aFRoaXMoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
ZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBm
dW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQoKSk7CiB9CiAKQEAgLTU2NCw5ICs1NjQsMTMgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlv
bkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwK
ICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9hcmdzLT5tX2xpc3ROb2RlLT5tX2V4cHIpOwogICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGFyZ3NSZWdpc3RlcjsKICAgICAgICAgICAgIEFyZ3VtZW50TGlzdE5vZGUq
IGFyZ3MgPSBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dDsKLSAgICAgICAgICAgIGlmIChhcmdz
LT5tX2V4cHItPmlzUmVzb2x2ZU5vZGUoKSAmJiBnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3Vt
ZW50cyhzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGFyZ3MtPm1fZXhwciktPmlkZW50aWZpZXIo
KSkpCi0gICAgICAgICAgICAgICAgYXJnc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLnVuY2hlY2tlZFJl
Z2lzdGVyRm9yQXJndW1lbnRzKCk7Ci0gICAgICAgICAgICBlbHNlCisKKyAgICAgICAgICAgIGlm
IChhcmdzLT5tX2V4cHItPmlzUmVzb2x2ZU5vZGUoKSkgeworICAgICAgICAgICAgICAgIFJlc29s
dmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IGdlbmVyYXRvci5yZXNvbHZlKHN0YXRpY19jYXN0PFJl
c29sdmVOb2RlKj4oYXJncy0+bV9leHByKS0+aWRlbnRpZmllcigpLCBCeXRlY29kZUdlbmVyYXRv
cjo6RG9udENyZWF0ZUFyZ3VtZW50c0ZsYWcpOworICAgICAgICAgICAgICAgIGlmIChyZXNvbHZl
UmVzdWx0LmlzQXJndW1lbnRzKCkpCisgICAgICAgICAgICAgICAgICAgIGFyZ3NSZWdpc3RlciA9
IHJlc29sdmVSZXN1bHQubG9jYWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh
YXJnc1JlZ2lzdGVyLmdldCgpKQogICAgICAgICAgICAgICAgIGFyZ3NSZWdpc3RlciA9IGdlbmVy
YXRvci5lbWl0Tm9kZShhcmdzLT5tX2V4cHIpOwogCiAgICAgICAgICAgICAvLyBGdW5jdGlvbi5w
cm90b3R5cGUuYXBwbHkgaWdub3JlcyBleHRyYSBhcmd1bWVudHMsIGJ1dCB3ZSBzdGlsbApAQCAt
NjMyLDcgKzYzNiw3IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzCiAgICAgCiAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQo
KSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZl
V2l0aEJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgcmVzb2x2ZVJl
c3VsdCwgbV9pZGVudCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgp
LCByZXNvbHZlUmVzdWx0KTsKICAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZTsKICAgICBpZiAoZHN0
ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpIHsKICAgICAgICAgb2xkVmFsdWUgPSAwOwpA
QCAtNzA5LDcgKzcxMyw3IEBAIFJlZ2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0CiAgICAgICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZmFs
c2UpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9m
ZnNldCgpLCBlbmRPZmZzZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5l
bWl0UmVzb2x2ZUJhc2UoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVz
dWx0LCBtX2lkZW50KTsKKyAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNv
bHZlQmFzZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1bHQpOwog
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0LCBiYXNlKSwgYmFzZSwgbV9pZGVudCk7CiB9CiAKQEAgLTc2Nyw3ICs3NzEsNyBA
QCBSZWdpc3RlcklEKiBUeXBlT2ZSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRU
eXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwogICAgIH0KIAot
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY3JhdGNoID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFz
ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQp
OworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY3JhdGNoID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZl
QmFzZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1bHQpOwogICAg
IGdlbmVyYXRvci5lbWl0R2V0QnlJZChzY3JhdGNoLmdldCgpLCBzY3JhdGNoLmdldCgpLCBtX2lk
ZW50KTsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtODExLDcgKzgxNSw3IEBAIFJlZ2lzdGVySUQqIFByZWZpeFJlc29sdmVO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0CiAK
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCks
IGVuZE9mZnNldCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRv
ci50ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJv
cERzdC5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIHByb3BEc3QuZ2V0KCksIHJlc29sdmVSZXN1bHQpOwogICAgIGVtaXRQcmVJbmNP
ckRlYyhnZW5lcmF0b3IsIHByb3BEc3QuZ2V0KCksIG1fb3BlcmF0b3IpOwogICAgIGdlbmVyYXRv
ci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCBwcm9wRHN0LmdldCgpKTsKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0Lmdl
dCgpKTsKQEAgLTEyMzQsNyArMTIzOCw3IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZl
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlCiAKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBzdGFydE9mZnNl
dCgpICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCk7Ci0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHNyYzEuZ2V0KCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQpOwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJh
c2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzcmMxLmdldCgpLCByZXNvbHZlUmVzdWx0KTsK
ICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJh
dG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdl
dCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93
blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSwgdGhpcyk7CiAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCByZXN1bHQpOwogfQpA
QCAtMTI2MCw3ICsxMjY0LDcgQEAgUmVnaXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3QKICAgICAgICAgcmV0
dXJuIHZhbHVlOwogICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLmVtaXRSZXNvbHZlQmFzZUZvclB1dChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHJlc29s
dmVSZXN1bHQsIG1faWRlbnQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLmVtaXRSZXNvbHZlQmFzZUZvclB1dChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHJlc29s
dmVSZXN1bHQpOwogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAg
ICAgICAgZHN0ID0gMDsKICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShkc3QsIG1fcmlnaHQpOwpAQCAtMTM2OCw3ICsxMzcyLDcgQEAgUmVnaXN0ZXJJRCogQ29uc3RE
ZWNsTm9kZTo6ZW1pdENvZGVTaW5nbGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIAog
ICAgIC8vIEZJWE1FOiBXaGlsZSB0aGlzIGNvZGUgc2hvdWxkIG9ubHkgYmUgaGl0IGluIGFuIGV2
YWwgYmxvY2ssIGl0IHdpbGwgYXNzaWduCiAgICAgLy8gdG8gdGhlIHdyb25nIGJhc2UgaWYgbV9p
ZGVudCBleGlzdHMgaW4gYW4gaW50ZXJ2ZW5pbmcgd2l0aCBzY29wZS4KLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2UoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCByZXNvbHZlUmVzdWx0KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJh
c2UuZ2V0KCksIG1faWRlbnQsIHZhbHVlLmdldCgpKTsKIH0KIApAQCAtMTY0NCw3ICsxNjQ4LDcg
QEAgUmVnaXN0ZXJJRCogRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHMKICAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUpIHsK
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAg
ICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwotICAg
ICAgICAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQ
dXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCk7CisgICAg
ICAgICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFzZUZvclB1
dChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHJlc29sdmVSZXN1bHQpOwogCiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVu
ZE9mZnNldCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLCBpZGVu
dCwgcHJvcGVydHlOYW1lKTsKQEAgLTE5NzcsOSArMTk4MSwxMiBAQCBSZWdpc3RlcklEKiBUcnlO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogICAgICAgICAvLyBVbmNhdWdodCBleGNlcHRpb24gcGF0aDogdGhlIGNhdGNoIGJs
b2NrLgogICAgICAgICBSZWZQdHI8TGFiZWw+IGhlcmUgPSBnZW5lcmF0b3IuZW1pdExhYmVsKGdl
bmVyYXRvci5uZXdMYWJlbCgpLmdldCgpKTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4
Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRDYXRjaChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHRyeVN0YXJ0TGFiZWwuZ2V0KCksIGhlcmUuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1c2hOZXdTY29wZShleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgbV9leGNlcHRpb25J
ZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICBKU1N0YXRpY1Njb3BlT2Jq
ZWN0KiBzY29wZVRlbXBsYXRlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKCpnZW5lcmF0
b3IuZ2xvYmFsRGF0YSgpKTsKKyAgICAgICAgc2NvcGVUZW1wbGF0ZS0+YWRkVmFyaWFibGUobV9l
eGNlcHRpb25JZGVudCwgRG9udERlbGV0ZSwgU3ltYm9sVGFibGVFbnRyeTo6Tm9UZW1wb3JhbERl
YWRab25lKTsKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hCbG9ja1Njb3BlKHNjb3BlVGVtcGxhdGUs
IFNjb3BlQ29udGV4dDo6TGF6aWx5UmVpZnkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFN0
YXRpY1ZhcihnZW5lcmF0b3IucmVzb2x2ZShtX2V4Y2VwdGlvbklkZW50KSwgZXhjZXB0aW9uUmVn
aXN0ZXIuZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2NhdGNoQmxv
Y2spOwotICAgICAgICBnZW5lcmF0b3IuZW1pdFBvcFNjb3BlKCk7CisgICAgICAgIGdlbmVyYXRv
ci5wb3BCbG9ja1Njb3BlKCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoY2F0Y2hFbmRM
YWJlbC5nZXQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAppbmRleCA1NzY2ZDMxNjMzOGUwM2RjYjVhYTMzYTEwZWUzMjYzODg3YjA2YjUw
Li40MDc1YTI4N2JjN2RiZmQzYTk3ZTRmNjA3YzdlOWFmNjQ2MzE1MTUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTEwNDIsOCArMTA0Miw3IEBA
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1CiAgICAgSlNGdW5jdGlvbiAqZnVuY3Rpb24gPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPm1ha2UoZXhlYywgZXhlYy0+c2NvcGVDaGFpbigpKTsKICAgICBpZiAo
IWZ1bmN0aW9uRXhlY3V0YWJsZS0+bmFtZSgpLmlzTnVsbCgpKSB7CiAgICAgICAgIEpTU3RhdGlj
U2NvcGVPYmplY3QqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPQotICAgICAgICAgICAgSlNTdGF0aWNT
Y29wZU9iamVjdDo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIGV4ZWMsIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+bmFtZSgpLCBmdW5jdGlvbiwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAg
ICAgIEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0
aW9uRXhlY3V0YWJsZS0+bmFtZSgpLCBmdW5jdGlvbiwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsK
ICAgICAgICAgZnVuY3Rpb24tPnNldFNjb3BlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb24t
PnNjb3BlKCktPnB1c2goZnVuY3Rpb25TY29wZU9iamVjdCkpOwogICAgIH0KICAgICByZXR1cm4g
ZnVuY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAppbmRleCA5MTFmZGRmZTNjZTFhODFiNjRhYjljOWM5ZTE2MjlhMzA0MTAxNDZm
Li42NDgyYjQ2ZTZjZjE4NGI0YjM2MjA2NjIwYjU1MGJhYjdkMzFmYWE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTE2MjUs
MTggKzE2MjUsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIERlYnVnSG9va0lEIGRlYnVnSG9vawogfQogICAgIAogI2lmIEVOQUJM
RShDTEFTU0lDX0lOVEVSUFJFVEVSKQotTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBJbnRl
cnByZXRlcjo6Y3JlYXRlRXhjZXB0aW9uU2NvcGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0
IEluc3RydWN0aW9uKiB2UEMpCi17Ci0gICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIElk
ZW50aWZpZXImIHByb3BlcnR5ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHZQQ1syXS51Lm9wZXJh
bmQpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCku
anNWYWx1ZSgpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNy
ZWF0ZShjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7Ci0gICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKHNjb3BlKTsKLQotICAgIHJldHVybiBjYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChzY29wZSk7Ci19Ci0KIE5FVkVSX0lOTElORSB2b2lk
IEludGVycHJldGVyOjp0cnlDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVC
bG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIC8vIFJlY3Vyc2l2ZSBpbnZvY2F0aW9u
IG1heSBhbHJlYWR5IGhhdmUgc3BlY2lhbGl6ZWQgdGhpcyBpbnN0cnVjdGlvbi4KQEAgLTI3ODUs
OSArMjc3Myw5IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlv
bkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpCiAgICAgREVGSU5FX09QQ09ERShv
cF9yZXNvbHZlX3NraXApIHsKICAgICAgICAgLyogcmVzb2x2ZV9za2lwIGRzdChyKSBwcm9wZXJ0
eShpZCkgc2tpcChuKQogCi0gICAgICAgICBMb29rcyB1cCB0aGUgcHJvcGVydHkgbmFtZWQgYnkg
aWRlbnRpZmllciBwcm9wZXJ0eSBpbiB0aGUKLSAgICAgICAgIHNjb3BlIGNoYWluIHNraXBwaW5n
IHRoZSB0b3AgJ3NraXAnIGxldmVscywgYW5kIHdyaXRlcyB0aGUgcmVzdWx0aW5nCi0gICAgICAg
ICB2YWx1ZSB0byByZWdpc3RlciBkc3QuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHJh
aXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgICAgIExvb2tzIHVwIHRoZSBwcm9wZXJ0eSBuYW1l
ZCBieSBpZGVudGlmaWVyIHByb3BlcnR5IGluIHRoZSBzY29wZSBjaGFpbgorICAgICAgICAgICBz
a2lwcGluZyB0aGUgdG9wICdza2lwJyBsZXZlbHMsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdGluZyB2
YWx1ZSB0bworICAgICAgICAgICByZWdpc3RlciBkc3QuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3Qg
Zm91bmQsIHJhaXNlcyBhbiBleGNlcHRpb24uCiAgICAgICAgICAqLwogICAgICAgICBpZiAoVU5M
SUtFTFkoIXJlc29sdmVTa2lwKGNhbGxGcmFtZSwgdlBDLCBleGNlcHRpb25WYWx1ZSkpKQogICAg
ICAgICAgICAgZ290byB2bV90aHJvdzsKQEAgLTI3OTcsNyArMjc4NSw3IEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxl
KiByZWdpc3RlckZpCiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CiAgICAgREVG
SU5FX09QQ09ERShvcF9yZXNvbHZlX2dsb2JhbCkgewotICAgICAgICAvKiByZXNvbHZlX3NraXAg
ZHN0KHIpIGdsb2JhbE9iamVjdChjKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgb2Zmc2V0
KG4pCisgICAgICAgIC8qIHJlc29sdmVfZ2xvYmFsIGRzdChyKSBnbG9iYWxPYmplY3QoYykgcHJv
cGVydHkoaWQpIHN0cnVjdHVyZShzSUQpIG9mZnNldChuKQogICAgICAgICAgCiAgICAgICAgICAg
IFBlcmZvcm1zIGEgZHluYW1pYyBwcm9wZXJ0eSBsb29rdXAgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0
eSwgb24gdGhlIHByb3ZpZGVkCiAgICAgICAgICAgIGdsb2JhbCBvYmplY3QuICBJZiBzdHJ1Y3R1
cmUgbWF0Y2hlcyB0aGUgU3RydWN0dXJlIG9mIHRoZSBnbG9iYWwgdGhlbiBwZXJmb3JtCkBAIC0y
ODEyLDE1ICsyODAwLDE1IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4
ZWN1dGlvbkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpCiAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKICAgICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9yZXNvbHZlX2dsb2Jh
bF9keW5hbWljKSB7Ci0gICAgICAgIC8qIHJlc29sdmVfc2tpcCBkc3QocikgZ2xvYmFsT2JqZWN0
KGMpIHByb3BlcnR5KGlkKSBzdHJ1Y3R1cmUoc0lEKSBvZmZzZXQobiksIGRlcHRoKG4pCisgICAg
ICAgIC8qIHJlc29sdmVfZ2xvYmFsX2R5bmFtaWMgZHN0KHIpIGdsb2JhbE9iamVjdChjKSBwcm9w
ZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgb2Zmc2V0KG4pIGRlcHRoKG4pCiAgICAgICAgICAKLSAg
ICAgICAgIFBlcmZvcm1zIGEgZHluYW1pYyBwcm9wZXJ0eSBsb29rdXAgZm9yIHRoZSBnaXZlbiBw
cm9wZXJ0eSwgb24gdGhlIHByb3ZpZGVkCi0gICAgICAgICBnbG9iYWwgb2JqZWN0LiAgSWYgc3Ry
dWN0dXJlIG1hdGNoZXMgdGhlIFN0cnVjdHVyZSBvZiB0aGUgZ2xvYmFsIHRoZW4gcGVyZm9ybQot
ICAgICAgICAgYSBmYXN0IGxvb2t1cCB1c2luZyB0aGUgY2FzZSBvZmZzZXQsIG90aGVyd2lzZSBm
YWxsIGJhY2sgdG8gYSBmdWxsIHJlc29sdmUgYW5kCi0gICAgICAgICBjYWNoZSB0aGUgbmV3IHN0
cnVjdHVyZSBhbmQgb2Zmc2V0LgorICAgICAgICAgICBQZXJmb3JtcyBhIGR5bmFtaWMgcHJvcGVy
dHkgbG9va3VwIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHksIG9uIHRoZQorICAgICAgICAgICBwcm92
aWRlZCBnbG9iYWwgb2JqZWN0LiAgSWYgc3RydWN0dXJlIG1hdGNoZXMgdGhlIFN0cnVjdHVyZSBv
ZiB0aGUKKyAgICAgICAgICAgZ2xvYmFsIHRoZW4gcGVyZm9ybSBhIGZhc3QgbG9va3VwIHVzaW5n
IHRoZSBjYXNlIG9mZnNldCwgb3RoZXJ3aXNlCisgICAgICAgICAgIGZhbGwgYmFjayB0byBhIGZ1
bGwgcmVzb2x2ZSBhbmQgY2FjaGUgdGhlIG5ldyBzdHJ1Y3R1cmUgYW5kIG9mZnNldC4KICAgICAg
ICAgIAotICAgICAgICAgVGhpcyB3YWxrcyB0aHJvdWdoIG4gbGV2ZWxzIG9mIHRoZSBzY29wZSBj
aGFpbiB0byB2ZXJpZnkgdGhhdCBub25lIG9mIHRob3NlIGxldmVscwotICAgICAgICAgaW4gdGhl
IHNjb3BlIGNoYWluIGluY2x1ZGUgZHluYW1pY2FsbHkgYWRkZWQgcHJvcGVydGllcy4KKyAgICAg
ICAgICAgVGhpcyB3YWxrcyB0aHJvdWdoIG4gbGV2ZWxzIG9mIHRoZSBzY29wZSBjaGFpbiB0byB2
ZXJpZnkgdGhhdCBub25lIG9mCisgICAgICAgICAgIHRob3NlIGxldmVscyBpbiB0aGUgc2NvcGUg
Y2hhaW4gaW5jbHVkZSBkeW5hbWljYWxseSBhZGRlZCBwcm9wZXJ0aWVzLgogICAgICAgICAgKi8K
ICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXNvbHZlR2xvYmFsRHluYW1pYyhjYWxsRnJhbWUsIHZQ
QywgZXhjZXB0aW9uVmFsdWUpKSkKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CkBAIC00ODI3
LDcgKzQ4MTUsOCBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgICAgIEluaXRpYWxp
c2VzIGRzdChyKSB0byBKU1ZhbHVlKCkuCiAKLSAgICAgICAgICAgVGhpcyBvcGNvZGUgYXBwZWFy
cyBvbmx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrLgorICAgICAgICAgICBUaGlz
IG9wY29kZSBjYW4gYXBwZWFyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIGJsb2NrIG9yIGF0
IHRoZQorICAgICAgICAgICBiZWdpbm5pbmcgb2YgYSBibG9jayBzY29wZS4KICAgICAgICAgICov
CiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogCkBAIC01MDQ5LDQzICs1MDM4
LDY4IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX25leHRfcG5hbWUpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQotICAg
IERFRklORV9PUENPREUob3Bfam1wX3Njb3BlcykgewotICAgICAgICAvKiBqbXBfc2NvcGVzIGNv
dW50KG4pIHRhcmdldChvZmZzZXQpCisgICAgREVGSU5FX09QQ09ERShvcF9lbnN1cmVfbG9jYWxf
aW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgLyogZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkIGRzdChy
KQogCi0gICAgICAgICAgIFJlbW92ZXMgdGhlIGEgbnVtYmVyIG9mIGl0ZW1zIGZyb20gdGhlIGN1
cnJlbnQgc2NvcGUgY2hhaW4KLSAgICAgICAgICAgc3BlY2lmaWVkIGJ5IGltbWVkaWF0ZSBudW1i
ZXIgY291bnQsIHRoZW4ganVtcHMgdG8gb2Zmc2V0Ci0gICAgICAgICAgIHRhcmdldC4KKyAgICAg
ICAgICAgQXNzZXJ0IHRoYXQgZHN0IGhhcyBiZWVuIGluaXRpYWxpemVkLCBpLmUuLCBpcyBub3Qg
ZW1wdHkuCiAgICAgICAgICovCi0gICAgICAgIGludCBjb3VudCA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotCi0gICAgICAgIFNjb3Bl
Q2hhaW5Ob2RlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLSAgICAgICAgd2hpbGUg
KGNvdW50LS0pCi0gICAgICAgICAgICB0bXAgPSB0bXAtPnBvcCgpOwotICAgICAgICBjYWxsRnJh
bWUtPnNldFNjb3BlQ2hhaW4odG1wKTsKLQotICAgICAgICB2UEMgKz0gdGFyZ2V0OworICAgICAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHZQQ1sxXS51Lm9wZXJhbmQpLmlz
RW1wdHkoKSkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gSlNWYWx1ZShjcmVhdGVV
bmluaXRpYWxpemVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmlkZW50aWZpZXIodlBDWzJdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGdvdG8gdm1f
dGhyb3c7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX2Vuc3VyZV9sb2NhbF9pbml0aWFsaXplZCk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKICAgICB9Ci0jaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fQ0xBU1NJQ19JTlRFUlBSRVRFUikK
LSAgICAvLyBBcHBlYXNlIEdDQwotICAgIGdvdG8gKigmJnNraXBfbmV3X3Njb3BlKTsKLSNlbmRp
ZgotICAgIERFRklORV9PUENPREUob3BfcHVzaF9uZXdfc2NvcGUpIHsKLSAgICAgICAgLyogbmV3
X3Njb3BlIGRzdChyKSBwcm9wZXJ0eShpZCkgdmFsdWUocikKKyAgICBERUZJTkVfT1BDT0RFKG9w
X3JlaWZ5X3Njb3BlKSB7CisgICAgICAgIC8qIHJlaWZ5X3Njb3BlIGRzdChyKSB0ZW1wbChyKSBi
YXNlKHIpCiAgICAgICAgICAKLSAgICAgICAgICAgQ29uc3RydWN0cyBhIG5ldyBTdGF0aWNTY29w
ZU9iamVjdCB3aXRoIHByb3BlcnR5IHNldCB0byB2YWx1ZS4gIFRoYXQgc2NvcGUKLSAgICAgICAg
ICAgb2JqZWN0IGlzIHRoZW4gcHVzaGVkIG9udG8gdGhlIFNjb3BlQ2hhaW4uICBUaGUgc2NvcGUg
b2JqZWN0IGlzIHRoZW4gc3RvcmVkCi0gICAgICAgICAgIGluIGRzdCBmb3IgR0MuCisgICAgICAg
ICAgIENvbnN0cnVjdHMgYSBuZXcgU3RhdGljU2NvcGVPYmplY3QsIHVzaW5nIHRlbXBsIGFzIGEg
dGVtcGxhdGUuIFRoYXQKKyAgICAgICAgICAgc2NvcGUgb2JqZWN0IGlzIHRoZW4gc3RvcmVkIGlu
IGRzdCBhbmQgcHVzaGVkIG9udG8gdGhlIFNjb3BlQ2hhaW4uCisgICAgICAgICAgIFRoZSBzdG9y
YWdlIGZvciB0aGlzIGJsb2NrIHNjb3BlIGlzIGluaXRpYWxseSBpbiB0aGUgcmVnaXN0ZXJzCisg
ICAgICAgICAgIGZvbGxvd2luZyBiYXNlLiBXaGVuIGNvbnRyb2wgbGVhdmVzIHRoaXMgc2NvcGUs
IHRoZXNlIHZhbHVlcyB3aWxsIGJlCisgICAgICAgICAgIHRvcm4gb2ZmLgogICAgICAgICAgKi8K
LSAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNyZWF0ZUV4Y2VwdGlvblNjb3BlKGNh
bGxGcmFtZSwgdlBDKSk7CisgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOworCisg
ICAgICAgIGlmICghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkuanNWYWx1ZSgpKSB7CisgICAg
ICAgICAgICBpbnQgdGVtcGwgPSB2UENbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJh
c2UgPSB2UENbM10udS5vcGVyYW5kOworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+cih0
ZW1wbCkuanNWYWx1ZSgpLmlzT2JqZWN0KCkpOworICAgICAgICAgICAgSlNPYmplY3QqIHNjb3Bl
VGVtcGxhdGUgPSBhc09iamVjdChjYWxsRnJhbWUtPnIodGVtcGwpLmpzVmFsdWUoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoc2NvcGVUZW1wbGF0ZS0+aXNTdGF0aWNTY29wZU9iamVjdCgpKTsKKyAg
ICAgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIG5ld1Njb3BlID0gc3RhdGljX2Nhc3Q8SlNT
dGF0aWNTY29wZU9iamVjdCo+KHNjb3BlVGVtcGxhdGUpOworICAgICAgICAgICAgbmV3U2NvcGUg
PSBuZXdTY29wZS0+cmVpZnkoKmdsb2JhbERhdGEsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBi
YXNlKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gbmV3U2NvcGU7
CisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNo
YWluKCktPnB1c2gobmV3U2NvcGUpKTsKKyAgICAgICAgfQogCi0gICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX3B1c2hfbmV3X3Njb3BlKTsKKyAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfcmVpZnlfc2NvcGUpOworICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CisgICAgfQor
ICAgIERFRklORV9PUENPREUob3BfdGVhcl9vZmZfc2NvcGUpIHsKKyAgICAgICAgLyogdGVhcl9v
ZmZfc2NvcGUgc3JjKHIpCisKKyAgICAgICAgICAgSWYgdGhlIHNjb3BlIHN0b3JlZCBpbiBTUkMg
d2FzIHJlaWZpZWQsIGNvcHkgdGhlIGJsb2NrLXNjb3BlZCBsb2NhbHMKKyAgICAgICAgICAgaW4g
dGhlIHJlZ2lzdGVycyBmb2xsb3dpbmcgU1JDIGZyb20gdGhlIHJlZ2lzdGVyIGZpbGUgdG8gdGhl
CisgICAgICAgICAgIGhlYXAuIE11bmdlIHRoZSBzY29wZSBvYmplY3Qgc3RvcmVkIGluIFNSQyB0
byBwb2ludCB0byB0aGlzIG5ldworICAgICAgICAgICBiYWNraW5nIHN0b3JlLCBhbmQgcmVtb3Zl
IGl0IGZyb20gdGhlIHNjb3BlIGNoYWluLgorCisgICAgICAgICAgIFRoaXMgb3Bjb2RlIGFwcGVh
cnMgd2hlbiBsZWF2aW5nIGJsb2NrIHNjb3Blcy4KKyAgICAgICAgKi8KKworICAgICAgICBpbnQg
c3JjID0gdlBDWzFdLnUub3BlcmFuZDsKKworICAgICAgICBpZiAoSlNWYWx1ZSBzY29wZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihzcmMpLmpzVmFsdWUoKSkgeworICAgICAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KHNjb3BlKTsKKyAgICAgICAgICAgIEFTU0VSVChvYmplY3Qt
PmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxKU1N0YXRp
Y1Njb3BlT2JqZWN0Kj4ob2JqZWN0KS0+dGVhck9mZigqZ2xvYmFsRGF0YSk7CisgICAgICAgICAg
ICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnBvcCgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3RlYXJfb2Zm
X3Njb3BlKTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KLSNpZiBFTkFCTEUo
Q09NUFVURURfR09UT19DTEFTU0lDX0lOVEVSUFJFVEVSKQotICAgIHNraXBfbmV3X3Njb3BlOgot
I2VuZGlmCiAgICAgREVGSU5FX09QQ09ERShvcF9jYXRjaCkgewogICAgICAgICAvKiBjYXRjaCBl
eChyKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNTQxY2M4OTZhMzI4OTBmNmM1
ZWY2MWI0YjY1YjcyNGU2OGVlNmI0MS4uNmQ5NjUwMGJhYzdiNjdiZDI5MmVkYjY4YzE0ODk0ODg2
NWQyOTFjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMjcyLDcgKzI3Miw2IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9w
X2plcV9udWxsKQogICAgICAgICBERUZJTkVfT1Aob3BfamZhbHNlKQogICAgICAgICBERUZJTkVf
T1Aob3Bfam1wKQotICAgICAgICBERUZJTkVfT1Aob3Bfam1wX3Njb3BlcykKICAgICAgICAgREVG
SU5FX09QKG9wX2puZXFfbnVsbCkKICAgICAgICAgREVGSU5FX09QKG9wX2puZXFfcHRyKQogICAg
ICAgICBERUZJTkVfT1Aob3Bfamxlc3MpCkBAIC0zMTcsNyArMzE2LDkgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfcHJlX2luYykKICAg
ICAgICAgREVGSU5FX09QKG9wX3Byb2ZpbGVfZGlkX2NhbGwpCiAgICAgICAgIERFRklORV9PUChv
cF9wcm9maWxlX3dpbGxfY2FsbCkKLSAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfbmV3X3Njb3Bl
KQorICAgICAgICBERUZJTkVfT1Aob3BfZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkKQorICAgICAg
ICBERUZJTkVfT1Aob3BfcmVpZnlfc2NvcGUpCisgICAgICAgIERFRklORV9PUChvcF90ZWFyX29m
Zl9zY29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfc2NvcGUpCiAgICAgICAgIGNhc2Ug
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgogICAgICAgICBjYXNlIG9wX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX25vcm1hbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDgwZTUyNjc3
NTk5NGZlYzk0NjY1MmM1YWZhMTNkODk1ZjJlNzFlZGIuLjk4NDY1NTg3NjJkZDgyNDg3N2E2N2Q3
MWNjYjZmNDA3MDkyYjQ5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtODE4LDcgKzgx
OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfamVxX251bGwoSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3Bfam1wKEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1p
dF9vcF9qbXBfc2NvcGVzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmVx
X251bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2puZXFfcHRyKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbGVzcyhJbnN0cnVjdGlvbiopOwpAQCAt
ODY0LDcgKzg2Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfcHJl
X2luYyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV9kaWRfY2Fs
bChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV93aWxsX2NhbGwo
SW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3Ry
dWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQo
SW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3JlaWZ5X3Njb3BlKEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90ZWFyX29mZl9zY29wZShJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfcHVzaF9zY29wZShJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9wdXRfYnlfaW5kZXgoSW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCmluZGV4IDJkYjgyYmY0YWQyMGQ2MDNhZjAzNDlkZTRlZjUxNGNmM2Qw
MDI2YzYuLjcxOTU4YjE0OGRiM2VkMWJiMTdmMjI1YjBiM2E4NDUwOTlmNDRlZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTAxNiwxMiArMTAxNiwzNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b19qc251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnN1cmVfbG9j
YWxfaW5pdGlhbGl6ZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF9uZXdfc2NvcGUpOworICAgIHVu
c2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgSnVtcCBu
b3RFbXB0eSA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQpOwogICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmNhbGwoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAg
IG5vdEVtcHR5LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3JlaWZ5X3Njb3Bl
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0ZW1wbCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgSnVtcCBzY29wZVJlaWZpZWQgPSBicmFu
Y2hUZXN0UHRyKE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVv
ZihSZWdpc3RlcikpKTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVp
Znlfc2NvcGUpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHRlbXBsLCByZWdUMSk7CisgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGJhc2UpKTsKKyAgICBzdHViQ2FsbC5j
YWxsKGRzdCk7CisgICAgc2NvcGVSZWlmaWVkLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3RlYXJfb2ZmX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgdW5zaWduZWQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
ICAgIEp1bXAgc2NvcGVOb3RSZWlmaWVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBzY29wZSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9vZmZfc2NvcGUpOworICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KHNjb3BlLCByZWdUMSk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIHNj
b3BlTm90UmVpZmllZC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzNCwxNCArMTA1OSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wX3Njb3BlcyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9q
bXBfc2NvcGVzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICBh
ZGRKdW1wKGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci19Ci0KIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAppbmRleCBkNGM3OTZjMmZkZjYwODNjYTdhN2YwZjQ5NWJiMzgwYzc1NWRlMDA1Li40NDZkODk2
YzQwODg3OTIxODdmMDRiODQxOTliMmM2NjRmODIyMzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xMzI4LDEyICsxMzI4LDM5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF90b19qc251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0NhCiAgICAgc3R1YkNhbGwuY2FsbChkc3QpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9wdXNoX25ld19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX3B1c2hfbmV3X3Njb3BlKTsKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEp1bXAgbm90RW1wdHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgdGFnRm9yKGRzdCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7
CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2Vuc3VyZV9sb2NhbF9pbml0
aWFsaXplZCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
LSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAg
IHN0dWJDYWxsLmNhbGwoKTsKKyAgICBub3RFbXB0eS5saW5rKHRoaXMpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9yZWlmeV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Cisg
ICAgdW5zaWduZWQgdGVtcGwgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEp1
bXAgc2NvcGVSZWlmaWVkID0gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcihkc3QpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIGVtaXRMb2FkUGF5bG9hZCh0ZW1w
bCwgcmVnVDApOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZWlmeV9z
Y29wZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOworICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihiYXNlKSk7CisgICAgc3R1YkNhbGwuY2FsbChkc3QpOwor
ICAgIHNjb3BlUmVpZmllZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90ZWFy
X29mZl9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2ln
bmVkIHNjb3BlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBKdW1wIHNj
b3BlTm90UmVpZmllZCA9IGJyYW5jaDMyKEVxdWFsLCB0YWdGb3Ioc2NvcGUpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIGVtaXRMb2FkUGF5bG9hZChzY29wZSwg
cmVnVDApOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9z
Y29wZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOworICAgIHN0dWJDYWxsLmNh
bGwoKTsKKyAgICBzY29wZU5vdFJlaWZpZWQubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNTMsMTQg
KzEzODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9j
YXRjaCksIGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
am1wX3Njb3BlcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbXBfc2NvcGVzKTsKLSAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkp
OwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICB1bnNpZ25lZCB0YWJsZUlu
ZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKaW5kZXggOWFlMzJjNGIwZGUyYjY5ZTMzMWE1OGFkZmM0MGU0MTUx
Y2EyZmE5MC4uYTcxZDJhYWY3Y2Q3YWVhYjlhNjM4ZDEwOWI0MmUyNjAxMzg3ZGZkNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTMwODAsNyArMzA4MCw3IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2Z1bmNfZXhwKQogICAgICAgICBk
b2VzIG5vdCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0aGUgRnVuY3Rpb25FeHByZXNzaW9u
LgogICAgICAqLwogICAgIGlmICghZnVuY3Rpb24tPm5hbWUoKS5pc051bGwoKSkgewotICAgICAg
ICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0gSlNTdGF0aWNTY29w
ZU9iamVjdDo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9u
bHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25T
Y29wZU9iamVjdCA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZSgqc3RhY2tGcmFtZS5nbG9i
YWxEYXRhLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUpOwog
ICAgICAgICBmdW5jLT5zZXRTY29wZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuYy0+c2Nv
cGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7CiAgICAgfQogCkBAIC0zMzcxLDI4ICsz
MzcxLDQ1IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9pbikKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShj
YWxsRnJhbWUsIHByb3BlcnR5KSkpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVj
dCosIG9wX3B1c2hfbmV3X3Njb3BlKQorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfZW5z
dXJlX2xvY2FsX2luaXRpYWxpemVkKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKKyAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVVu
aW5pdGlhbGl6ZWRWYXJpYWJsZUVycm9yKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1l
LmFyZ3NbMF0uaWRlbnRpZmllcigpKTsKKyAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5EKCk7
Cit9CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUo
c3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIHN0
YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCksIERvbnREZWxldGUpOworREVGSU5FX1NUVUJfRlVO
Q1RJT04oSlNPYmplY3QqLCBvcF9yZWlmeV9zY29wZSkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tf
RlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJh
bWUuY2FsbEZyYW1lOwotICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKS0+cHVzaChzY29wZSkpOwotICAgIHJldHVybiBzY29wZTsKKyAgICAvLyBBcmd1
bWVudHM6IHNjb3BlIHRlbXBsYXRlIG9iamVjdCAoanN2YWx1ZSksIG9mZnNldCBvZiByZWdpc3Rl
cnMgKGludDMyKS4KKyAgICBKU1ZhbHVlIHRlbXBsID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFs
dWUoKTsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIo
KTsKKworICAgIEFTU0VSVCh0ZW1wbC5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogc2NvcGVU
ZW1wbGF0ZSA9IGFzT2JqZWN0KHRlbXBsKTsKKyAgICBBU1NFUlQoc2NvcGVUZW1wbGF0ZS0+aXNT
dGF0aWNTY29wZU9iamVjdCgpKTsKKyAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBuZXdTY29wZSA9
IHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihzY29wZVRlbXBsYXRlKTsKKyAgICBu
ZXdTY29wZSA9IG5ld1Njb3BlLT5yZWlmeSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0Zy
YW1lLmNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7CisgICAgc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3Bl
Q2hhaW4oKS0+cHVzaChuZXdTY29wZSkpOworCisgICAgLy8gR2VuZXJhdGVkIGNvZGUgc3RvcmVz
IGl0IGluIGNhbGxGcmFtZS0+cihkc3QpLgorICAgIHJldHVybiBuZXdTY29wZTsKIH0KIAotREVG
SU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bfam1wX3Njb3BlcykKK0RFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wX3RlYXJfb2ZmX3Njb3BlKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKIAotICAgIHVuc2lnbmVkIGNvdW50ID0gc3RhY2tGcmFtZS5hcmdzWzBd
LmludDMyKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFt
ZTsKKyAgICAvLyBBcmd1bWVudHM6IHNjb3BlIG9iamVjdCAoanN2YWx1ZSkuCisgICAgSlNWYWx1
ZSBzY29wZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKHNjb3Bl
KTsKIAotICAgIFNjb3BlQ2hhaW5Ob2RlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsK
LSAgICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICBjYWxs
RnJhbWUtPnNldFNjb3BlQ2hhaW4odG1wKTsKKyAgICBBU1NFUlQoc2NvcGUuaXNPYmplY3QoKSk7
CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHNjb3BlKTsKKyAgICBBU1NFUlQob2Jq
ZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpOworICAgIHN0YXRpY19jYXN0PEpTU3RhdGljU2Nv
cGVPYmplY3QqPihvYmplY3QpLT50ZWFyT2ZmKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEpOworICAg
IHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LT5zY29wZUNoYWluKCktPnBvcCgpKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfcHV0X2J5X2luZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCmluZGV4IDYw
ZGM4YTI3MGQ4ZWJlZTY0YTEzOWE4NzBmYmJkNDZjMjAyZDMxZjYuLjEzZGNkNTRlYTkzZTg1NWE0
OWY2NTRlMmJlYTliNzRiNGFjNmVlN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmgKQEAgLTQxNiw3ICs0MTYsOSBAQCBleHRlcm4gIkMiIHsKICAgICBKU09iamVjdCogSklUX1NU
VUIgY3RpX29wX25ld19vYmplY3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09iamVj
dCogSklUX1NUVUIgY3RpX29wX25ld19yZWdleHAoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAg
ICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfYWN0aXZhdGlvbihTVFVCX0FSR1NfREVD
TEFSQVRJT04pOwotICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9uZXdfc2NvcGUo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9lbnN1cmVf
bG9jYWxfaW5pdGlhbGl6ZWQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICBKU09iamVjdCog
SklUX1NUVUIgY3RpX29wX3JlaWZ5X3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAg
dm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKICAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfc2NvcGUoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsKICAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF90cmFu
c2l0aW9uX3JlYWxsb2MoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X3BuYW1lcyhTVFVCX0FSR1NfREVDTEFSQVRJ
T04pOwpAQCAtNDMzLDcgKzQzNSw2IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NUVUIg
Y3RpX29wX2NoZWNrX2hhc19pbnN0YW5jZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZv
aWQgSklUX1NUVUIgY3RpX29wX2RlYnVnKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9p
ZCBKSVRfU1RVQiBjdGlfb3BfZW5kKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgdm9pZCBK
SVRfU1RVQiBjdGlfb3Bfam1wX3Njb3BlcyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZv
aWQgSklUX1NUVUIgY3RpX29wX3BvcF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAg
IHZvaWQgSklUX1NUVUIgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbChTVFVCX0FS
R1NfREVDTEFSQVRJT04pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKaW5kZXggZGFjNzJjOWRiN2NkMzc5ZDczYjQ3YWY4MzVkNzQ1MWNiZDIzOTRl
ZS4uOGI1MDAzOTdjOGU4NDk0OWE2OTVkZGMzOGIyNzc3NDdmOTZkZjVhMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0xMTIwLDE4ICsx
MTIwLDYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZXJfc2V0dGVy
KQogICAgIExMSU5UX0VORCgpOwogfQogCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
am1wX3Njb3BlcykKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIHVuc2lnbmVkIGNvdW50ID0g
cGNbMV0udS5vcGVyYW5kOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiB0bXAgPSBleGVjLT5zY29wZUNo
YWluKCk7Ci0gICAgd2hpbGUgKGNvdW50LS0pCi0gICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0g
ICAgZXhlYy0+c2V0U2NvcGVDaGFpbih0bXApOwotICAgIHBjICs9IHBjWzJdLnUub3BlcmFuZDsK
LSAgICBMTElOVF9FTkQoKTsKLX0KLQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2p0
cnVlKQogewogICAgIExMSU5UX0JFR0lOKCk7CkBAIC0xMjQzLDcgKzEyMzEsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Z1bmNfZXhwKQogICAgIEpTRnVuY3Rpb24qIGZ1
bmMgPSBmdW5jdGlvbi0+bWFrZShleGVjLCBleGVjLT5zY29wZUNoYWluKCkpOwogICAgIAogICAg
IGlmICghZnVuY3Rpb24tPm5hbWUoKS5pc051bGwoKSkgewotICAgICAgICBKU1N0YXRpY1Njb3Bl
T2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRl
KGV4ZWMsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Cisg
ICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBKU1N0YXRp
Y1Njb3BlT2JqZWN0OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywg
UmVhZE9ubHkgfCBEb250RGVsZXRlKTsKICAgICAgICAgZnVuYy0+c2V0U2NvcGUoZ2xvYmFsRGF0
YSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7CiAgICAgfQogICAg
IApAQCAtMTQ1MCw2ICsxNDM4LDQxIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90
ZWFyX29mZl9hcmd1bWVudHMpCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKK0xMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQpCit7CisgICAgTExJTlRf
QkVHSU4oKTsKKyAgICBMTElOVF9USFJPVyhjcmVhdGVVbmluaXRpYWxpemVkVmFyaWFibGVFcnJv
cihleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpKSk7
Cit9CisKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZWlmeV9zY29wZSkKK3sKKyAg
ICBMTElOVF9CRUdJTigpOworICAgIGludCBkc3QgPSBwY1sxXS51Lm9wZXJhbmQ7CisgICAgaW50
IHRlbXBsID0gcGNbMl0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gcGNbM10udS5vcGVyYW5k
OworICAgIEFTU0VSVCghZXhlYy0+dW5jaGVja2VkUihkc3QpLmpzVmFsdWUoKSk7CisgICAgQVNT
RVJUKGV4ZWMtPnIodGVtcGwpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCog
c2NvcGVUZW1wbGF0ZSA9IGFzT2JqZWN0KGV4ZWMtPnIodGVtcGwpLmpzVmFsdWUoKSk7CisgICAg
QVNTRVJUKHNjb3BlVGVtcGxhdGUtPmlzU3RhdGljU2NvcGVPYmplY3QoKSk7CisgICAgSlNTdGF0
aWNTY29wZU9iamVjdCogbmV3U2NvcGUgPSBzdGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0
Kj4oc2NvcGVUZW1wbGF0ZSk7CisgICAgbmV3U2NvcGUgPSBuZXdTY29wZS0+cmVpZnkoZ2xvYmFs
RGF0YSwgZXhlYy0+cmVnaXN0ZXJzKCkgKyBiYXNlKTsKKyAgICBleGVjLT51bmNoZWNrZWRSKGRz
dCkgPSBuZXdTY29wZTsKKyAgICBleGVjLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4o
KS0+cHVzaChuZXdTY29wZSkpOworICAgIExMSU5UX0VORCgpOworfQorCitMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfdGVhcl9vZmZfc2NvcGUpCit7CisgICAgTExJTlRfQkVHSU4oKTsK
KyAgICBpbnQgc3JjID0gcGNbMV0udS5vcGVyYW5kOworICAgIEFTU0VSVChleGVjLT51bmNoZWNr
ZWRSKGRzdCkuanNWYWx1ZSgpKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZXhl
Yy0+dW5jaGVja2VkUihzcmMpLmpzVmFsdWUoKSk7CisgICAgQVNTRVJUKG9iamVjdC0+aXNTdGF0
aWNTY29wZU9iamVjdCgpKTsKKyAgICBzdGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4o
b2JqZWN0KS0+dGVhck9mZihnbG9iYWxEYXRhKTsKKyAgICBleGVjLT5zZXRTY29wZUNoYWluKGV4
ZWMtPnNjb3BlQ2hhaW4oKS0+cG9wKCkpOworICAgIExMSU5UX0VORCgpOworfQorCiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3RyY2F0KQogewogICAgIExMSU5UX0JFR0lOKCk7CkBA
IC0xNTE4LDE1ICsxNTQxLDYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3BvcF9z
Y29wZSkKICAgICBMTElOVF9FTkQoKTsKIH0KIAotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3B1c2hfbmV3X3Njb3BlKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBK
U1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoZXhlYywgY29kZUJsb2NrLT5pZGVudGlmaWVyKHBj
WzJdLnUub3BlcmFuZCksIExMSU5UX09QKDMpLmpzVmFsdWUoKSwgRG9udERlbGV0ZSk7Ci0gICAg
ZXhlYy0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpKTsKLSAg
ICBMTElOVF9SRVRVUk4oc2NvcGUpOwotfQotCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfdGhyb3cpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmgKaW5kZXggN2IzYjhiZGE2NTZlYjFmOWI3ZjMxZjA2MmFi
ZjA5ZjU0NTM3MGU4NS4uMjhmY2FmN2Q2ZjM3MWZiNmFkMjA2ODJlMWE0ODY4ODJkNmE1ZjRiOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKQEAgLTE1
OSw3ICsxNTksNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbCk7
CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2luZGV4KTsKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wdXRfZ2V0dGVyX3NldHRlcik7Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfam1wX3Njb3Blcyk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfanRydWUp
OwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pmYWxzZSk7CiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfamxlc3MpOwpAQCAtMTgxLDEzICsxODAsMTUgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYXJncyk7CiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfY2FsbF9ldmFsKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90
ZWFyX29mZl9hY3RpdmF0aW9uKTsKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90ZWFy
X29mZl9hcmd1bWVudHMpOworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Vuc3VyZV9s
b2NhbF9pbml0aWFsaXplZCk7CitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVpZnlf
c2NvcGUpOworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX3Njb3BlKTsK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfZ2V0X3BuYW1lcyk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9w
bmFtZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF9zY29wZSk7CiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcG9wX3Njb3BlKTsKLUxMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wdXNoX25ld19zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfdGhyb3cpOwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rocm93X3JlZmVy
ZW5jZV9lcnJvcik7CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVidWcpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CmluZGV4IDlhZjkxYmVmMmM0ODE3NTQ4ODMzMWZkYjk0MjQxNTRhMDE4NWE3ZGYuLjM2Mzg3YmIx
NWM1MTIzY2E2OTZhYTc0OGFmZTk4OTI1NzdjZWNmNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTUyNSwxMiArNTI1
LDYgQEAgX2xsaW50X29wX3B1dF9nZXR0ZXJfc2V0dGVyOgogICAgIGRpc3BhdGNoKDUpCiAKIAot
X2xsaW50X29wX2ptcF9zY29wZXM6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93
UGF0aChfbGxpbnRfc2xvd19wYXRoX2ptcF9zY29wZXMpCi0gICAgZGlzcGF0Y2goMCkKLQotCiBf
bGxpbnRfb3BfbG9vcF9pZl90cnVlOgogICAgIG5vcAogX2xsaW50X29wX2p0cnVlOgpAQCAtNzI3
LDEyICs3MjEsNiBAQCBfbGxpbnRfb3BfcG9wX3Njb3BlOgogICAgIGRpc3BhdGNoKDEpCiAKIAot
X2xsaW50X29wX3B1c2hfbmV3X3Njb3BlOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBjYWxs
U2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXNoX25ld19zY29wZSkKLSAgICBkaXNwYXRjaCg0
KQotCi0KIF9sbGludF9vcF90aHJvdzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2FsbFNs
b3dQYXRoKF9sbGludF9zbG93X3BhdGhfdGhyb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDQ2YzYy
MjZlNTQ0ZTgxNjVlY2ZlMmZhNTUyNGY0MDU5NjQ3ZmMyNDkuLjhjYjQ1ZThlMDFhYzU2ZWEwZmYw
NGU2NjA1MWVhYWVjZTI2YjJmYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xNDU4LDYgKzE0NTgs
MzMgQEAgX2xsaW50X29wX3RlYXJfb2ZmX2FyZ3VtZW50czoKICAgICBkaXNwYXRjaCgyKQogCiAK
K19sbGludF9vcF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQ6CisgICAgdHJhY2VFeGVjdXRpb24o
KQorICAgIGxvYWRpIDRbUENdLCB0MAorICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwg
RW1wdHlWYWx1ZVRhZywgLm9wRW5zdXJlTG9jYWxJbml0aWFsaXplZERvbmUKKyAgICBjYWxsU2xv
d1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9lbnN1cmVfbG9jYWxfaW5pdGlhbGl6ZWQpCisub3BFbnN1
cmVMb2NhbEluaXRpYWxpemVkRG9uZToKKyAgICBkaXNwYXRjaCgzKQorCisKK19sbGludF9vcF9y
ZWlmeV9zY29wZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGkgNFtQQ10sIHQwCisg
ICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BSZWlmeVNj
b3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3JlaWZ5X3Njb3BlKQor
Lm9wUmVpZnlTY29wZURvbmU6CisgICAgZGlzcGF0Y2goNCkKKworCitfbGxpbnRfb3BfdGVhcl9v
ZmZfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpIDRbUENdLCB0MAorICAg
IGJpZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BUZWFyT2ZmU2Nv
cGVEb25lCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfdGVhcl9vZmZfc2NvcGUp
Cisub3BUZWFyT2ZmU2NvcGVEb25lOgorICAgIGRpc3BhdGNoKDIpCisKKwogX2xsaW50X29wX3Jl
dDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3Vl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20KaW5kZXggZGRmNTFmNTk0ZmI2Y2NmYzQyNGExNmQ5ZmI4Y2U2OWJiYzRkMzEx
OC4uYTA3YWE4Zjg2NTEzY2RhNzU1YjEyZmE1ZGZkMGJmNGNlZDlkZjZjMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
QEAgLTEzMTQsNiArMTMxNCwzMyBAQCBfbGxpbnRfb3BfdGVhcl9vZmZfYXJndW1lbnRzOgogICAg
IGRpc3BhdGNoKDIpCiAKIAorX2xsaW50X29wX2Vuc3VyZV9sb2NhbF9pbml0aWFsaXplZDoKKyAg
ICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBidHBu
eiBbY2ZyLCB0MCwgOF0sIC5vcEVuc3VyZUxvY2FsSW5pdGlhbGl6ZWREb25lCisgICAgY2FsbFNs
b3dQYXRoKF9sbGludF9zbG93X3BhdGhfZW5zdXJlX2xvY2FsX2luaXRpYWxpemVkKQorLm9wRW5z
dXJlTG9jYWxJbml0aWFsaXplZERvbmU6CisgICAgZGlzcGF0Y2goMykKKworCitfbGxpbnRfb3Bf
cmVpZnlfc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpcyA4W1BCLCBQQywg
OF0sIHQwCisgICAgYnRweiBbY2ZyLCB0MCwgOF0sIC5vcFJlaWZ5U2NvcGVEb25lCisgICAgY2Fs
bFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVpZnlfc2NvcGUpCisub3BSZWlmeVNjb3BlRG9u
ZToKKyAgICBkaXNwYXRjaCg0KQorCisKK19sbGludF9vcF90ZWFyX29mZl9zY29wZToKKyAgICB0
cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBidHB6IFtj
ZnIsIHQwLCA4XSwgLm9wVGVhck9mZlNjb3BlRG9uZQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRf
c2xvd19wYXRoX3RlYXJfb2ZmX3Njb3BlKQorLm9wVGVhck9mZlNjb3BlRG9uZToKKyAgICBkaXNw
YXRjaCgyKQorCisKIF9sbGludF9vcF9yZXQ6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNo
ZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVz
LmgKaW5kZXggZjc1MmI5MWU5NWRkOTQxYjFjZjk4YjEyMDY1MzFlZGY5NGU4YzczNy4uYTQwMTll
ZjQwMmI5NWQ2ZTEwY2Y4MTYxYjdjODhhNzNhZTUwYzExNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaApAQCAtMTQyMiw3ICsxNDIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgc2V0VXNlc0FyZ3VtZW50cygpIHsgbV9zY29wZUZsYWdzIHw9IFVzZXNBcmd1bWVu
dHNGbGFnOyB9CiAgICAgICAgIGJvb2wgdXNlc1RoaXMoKSBjb25zdCB7IHJldHVybiBtX3Njb3Bl
RmxhZ3MgJiBVc2VzVGhpc0ZsYWc7IH0KIAotICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbkZv
ck1vcmVUaGFuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVzZXNF
dmFsRmxhZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgICAgIGJvb2wg
bmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3Nj
b3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnKTsgfQogICAgICAgICBib29s
IG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkg
fHwgbmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKTsgfQogCiAgICAgICAgIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCA3NTEzZDFmMTFmZDQ4OTU4MjhhZjhj
YWViZTgwYWRhMTViNWY1N2Y5Li5lNDIwNjI4Zjk5NDU2NTAxNjI3OTU2OWI2OTc3ZGY0NDk1ODhi
OTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTE2Miw3ICsxNjIs
NyBAQCBzdHJ1Y3QgU2NvcGUgewogICAgIEFMV0FZU19JTkxJTkUgU2NvcGVGbGFncyB1c2VzRmxh
Z3MoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBBbGxTY29wZVVzZXNGbGFnczsgfQog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGbGFncyhTY29wZUZsYWdzIHNjb3BlRmxhZ3MpIHsg
bV9zY29wZUZsYWdzIHw9IHNjb3BlRmxhZ3M7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBu
ZWVkc0Z1bGxBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVzZXNF
dmFsRmxhZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgQUxXQVlTX0lO
TElORSBib29sIG5lZWRzRnVsbEFjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxh
Z3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnKTsgfQogICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBzdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU3RyaWN0TW9k
ZUZsYWc7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hhZG93c0FyZ3VtZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFNoYWRvd3NBcmd1bWVudHNGbGFnOyB9CiAgICAgQUxX
QVlTX0lOTElORSBib29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3Mg
JiBGdW5jdGlvbk1vZGVGbGFnOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCmluZGV4IGNlNjNhZTlhZjRlZjQ2NDdjNWMxNzY2Mzdj
YzQzY2ZkZDg3ZjhiOTQuLmZjNGEwMjZiZTYyODdkMjBiOTdmMWEzNzU4MDYxYTBiMjI5Y2RmY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwCkBAIC0xMTEsNiArMTExLDEyIEBAIEpTT2JqZWN0KiBjcmVhdGVVbmRlZmluZWRWYXJp
YWJsZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiAgICAg
cmV0dXJuIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOwogfQogICAgIAorSlNP
YmplY3QqIGNyZWF0ZVVuaW5pdGlhbGl6ZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpCit7CisgICAgVVN0cmluZyBtZXNzYWdlKG1ha2VVU3Ry
aW5nKCJVbmluaXRpYWxpemVkIHZhcmlhYmxlOiAiLCBpZGVudC51c3RyaW5nKCkpKTsKKyAgICBy
ZXR1cm4gY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgbWVzc2FnZSk7Cit9CisgICAgCiBKU09i
amVjdCogY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFy
KiBvcCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VV
U3RyaW5nKCInIiwgdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCAiJyBpcyBub3Qg
YSB2YWxpZCBhcmd1bWVudCBmb3IgJyIsIG9wLCAiJyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCmluZGV4IDdiZmZkMjk0YjM1Njg3NGZh
YzE0YmQ5NDRjYzRjOTJiYjJjN2I3MjguLjI1ZmUyMzIxY2VjZTg5M2NmODE4MDlhN2I3MmQwYzYz
NzI0OWM5ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvbkhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3Qq
IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqKTsKIEpTT2JqZWN0KiBjcmVhdGVT
dGFja092ZXJmbG93RXJyb3IoSlNHbG9iYWxPYmplY3QqKTsKIEpTT2JqZWN0KiBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKEpTR2xvYmFsT2JqZWN0Kik7CiBKU09iamVjdCogY3JlYXRlVW5kZWZpbmVk
VmFyaWFibGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CitKU09iamVjdCog
Y3JlYXRlVW5pbml0aWFsaXplZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYpOwogSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNW
YWx1ZSk7CiBKU09iamVjdCogY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0YXRlKiwgY29u
c3QgY2hhciogb3AsIEpTVmFsdWUpOwogSlNPYmplY3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVy
cm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCmluZGV4IDFhZTQ0YjdlYWZiZWU4Y2ViOTUyYjhhOTBmNzViZTMxMmQ5Zjgw
YzQuLjZhOGIxYTRlYWNiNGYwZTg3NDE3OTJiZTg2YTI2MzEzNzU5N2NjMzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTI5NCw3ICsyOTQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4g
bV9zY29wZUZsYWdzICYgVXNlc0V2YWxGbGFnOyB9CiAgICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNBcmd1bWVudHNGbGFnOyB9Ci0g
ICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJl
ZFZhcmlhYmxlcyB8fCBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFn
IHwgVXNlc0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIHx8IG1fc2NvcGVGbGFncyAmIChVc2Vz
RXZhbEZsYWcgfCBVc2VzV2l0aEZsYWcpOyB9CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU3RyaWN0TW9kZUZsYWc7IH0KIAogICAgICAg
ICB2b2lkIHVubGlua0NhbGxzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCmluZGV4IGY4OTQyYjVmODY1ZGI1OWUxNTQy
ZGM0ZTNiNWM3Y2YyNzljMTcxNjMuLjBlZTAxZGM2ZWVlYzQ0NmY5M2ZhNGJmYmE1MTdiOGM0ZTBj
MTVjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGlj
U2NvcGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuY3BwCkBAIC00Niw3ICs0Niw4IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CiAgICAgQVNTRVJU
KHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4oKSk7CiAgICAgSlNWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdpc3RlclN0b3Jl
KTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9yZWdpc3RlcnMpCisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzLCB0aGlzT2JqZWN0LT5tX3N5bWJvbFRh
YmxlLT5zaXplKCkpOwogfQogCiBKU09iamVjdCogSlNTdGF0aWNTY29wZU9iamVjdDo6dG9UaGlz
T2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaAppbmRleCBiYmYwM2EzNDczYTI1
NzY5ZDJiNDI1OWI3NTBmNmJmN2ZmZDQwZjg5Li40MzIzYjE0ZjU4OTU2YmZkN2I1MGRiNjdkNzlh
MWJhNTVkZmUxOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0YXRpY1Njb3BlT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdGF0aWNTY29wZU9iamVjdC5oCkBAIC0zNCwxMyArMzQsNTAgQEAgbmFtZXNwYWNlIEpTQ3sK
ICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBCYXNlOwogCi0g
ICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVjdCogY3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgSlNTdGF0aWNT
Y29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0
YXRpY1Njb3BlT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNTdGF0aWNTY29wZU9iamVjdChleGVj
KTsKLSAgICAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCBpZGVudGlm
aWVyLCB2YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkU3ltYm9s
VGFibGU+IHRhYmxlID0gU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpOworICAgICAgICAgICAg
SlNTdGF0aWNTY29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU1N0YXRpY1Njb3BlT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0YXRpY1Njb3Bl
T2JqZWN0KGdsb2JhbERhdGEsIHRhYmxlLnJlbGVhc2UoKSwgMCk7CisgICAgICAgICAgICBzY29w
ZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICByZXR1cm4g
c2NvcGVPYmplY3Q7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9i
amVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgeworICAg
ICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogc2NvcGVPYmplY3QgPSBjcmVhdGUoZ2xvYmFs
RGF0YSk7CisgICAgICAgICAgICBzY29wZU9iamVjdC0+YWRkVmFyaWFibGUobmFtZSwgYXR0cmli
dXRlcywgU3ltYm9sVGFibGVFbnRyeTo6Tm9UZW1wb3JhbERlYWRab25lKTsKKyAgICAgICAgICAg
IE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBhZG9w
dEFycmF5UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5bMV0pOworICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMgPSByZWdpc3RlckFycmF5LmdldCgpOworICAg
ICAgICAgICAgcmVnaXN0ZXJzWzBdLnNldChnbG9iYWxEYXRhLCBzY29wZU9iamVjdCwgdmFsdWUp
OworICAgICAgICAgICAgc2NvcGVPYmplY3QtPnNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lz
dGVyQXJyYXkucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKKyAg
ICAgICAgfQorCisgICAgICAgIGludCBhZGRWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBuYW1l
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTeW1ib2xUYWJsZUVudHJ5OjpUZW1wb3JhbERlYWRab25l
S2luZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcmVnaXN0ZXJzKTsK
KyAgICAgICAgICAgIGludCBpZHggPSBzeW1ib2xUYWJsZSgpLnNpemUoKTsKKyAgICAgICAgICAg
IHN5bWJvbFRhYmxlKCkuYWRkKG5hbWUuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KGlkeCwgYXR0
cmlidXRlcywga2luZCkpOworICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlKCkuc2l6ZSgp
ID09IGlkeCArIDEpOworICAgICAgICAgICAgcmV0dXJuIGlkeDsKKyAgICAgICAgfQorCisgICAg
ICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHJlaWZ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
UmVnaXN0ZXIqIHJlZ2lzdGVycykKKyAgICAgICAgeworICAgICAgICAgICAgSlNTdGF0aWNTY29w
ZU9iamVjdCAqc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0YXRp
Y1Njb3BlT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGdsb2Jh
bERhdGEsIG1fc3ltYm9sVGFibGUsIHJlZ2lzdGVycyk7CisgICAgICAgICAgICBzY29wZU9iamVj
dC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVP
YmplY3Q7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHRlYXJPZmYoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJy
aWVyPFVua25vd24+W21fc3ltYm9sVGFibGUtPnNpemUoKV0pOworICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMgPSByZWdpc3RlckFycmF5LmdldCgpOworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3N5bWJvbFRhYmxlLT5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgICAgICByZWdpc3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0
ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lz
dGVyQXJyYXkucmVsZWFzZSgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgYm9vbCBpc0R5bmFt
aWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogICAgICAgICBzdGF0
aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqKTsKQEAgLTU0LDI0
ICs5MSwxOCBAQCBuYW1lc3BhY2UgSlNDewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVy
U3RvcmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAg
c3ltYm9sVGFibGUoKS5hZGQoaWRlbnRpZmllci5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEs
IGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfQogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAg
ICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0
YSgpLnN0YXRpY1Njb3BlU3RydWN0dXJlLmdldCgpLCAmbV9zeW1ib2xUYWJsZSwgcmVpbnRlcnBy
ZXRfY2FzdDxSZWdpc3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSkKKyAgICAgICAgSlNTdGF0
aWNTY29wZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U2hhcmVk
U3ltYm9sVGFibGU+IHRhYmxlLCBSZWdpc3RlciogcmVnaXN0ZXJzKQorICAgICAgICAgICAgOiBK
U1ZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RhdGljU2NvcGVTdHJ1Y3R1
cmUuZ2V0KCksIHRhYmxlLmdldCgpLCByZWdpc3RlcnMpCisgICAgICAgICAgICAsIG1fc3ltYm9s
VGFibGUodGFibGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICAgICAgU3ltYm9sVGFibGUgbV9zeW1ib2xUYWJsZTsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVnaXN0ZXJTdG9yZTsKKyAgICAgICAg
UmVmUHRyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOwogICAgIH07CiAKICAgICBp
bmxpbmUgYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0Ojppc0R5bmFtaWNTY29wZShib29sJikgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCmluZGV4IGY1
NDBhMTJjNzNlZjE3MjZmNmMyZmRhZWZlZDU5MWU1Y2VlYTM2OWQuLjlmM2RhZWIyNjMxMmZlOWJh
ZDg1ZWEzYWZhNGVkOWNhYjhjOTY3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaApAQCAtNTEsMTMgKzUxLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCkKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAgICAgICAgcGFjayhpbmRleCwgZmFs
c2UsIGZhbHNlKTsKKyAgICAgICAgICAgIHBhY2soaW5kZXgsIGZhbHNlLCBmYWxzZSwgZmFsc2Up
OwogICAgICAgICB9CiAKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkSW5k
ZXgoaW5kZXgpKTsKLSAgICAgICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25s
eSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgICAgIHBhY2soaW5kZXgsIGF0dHJp
YnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtLCBmYWxzZSk7CisgICAgICAg
IH0KKworICAgICAgICBlbnVtIFRlbXBvcmFsRGVhZFpvbmVLaW5kIHsgSGFzVGVtcG9yYWxEZWFk
Wm9uZSwgTm9UZW1wb3JhbERlYWRab25lIH07CisKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeShp
bnQgaW5kZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFRlbXBvcmFsRGVhZFpvbmVLaW5kIGtpbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKKyAg
ICAgICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAm
IERvbnRFbnVtLCBraW5kID09IEhhc1RlbXBvcmFsRGVhZFpvbmUpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0CkBAIC04Miw3ICs5MCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlcyh1bnNpZ25lZCBhdHRyaWJ1
dGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBwYWNrKGdldEluZGV4KCksIGF0dHJpYnV0ZXMg
JiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgICAgIHBhY2soZ2V0
SW5kZXgoKSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0sIGhh
c1RlbXBvcmFsRGVhZFpvbmUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzUmVhZE9u
bHkoKSBjb25zdApAQCAtOTAsMTkgKzk4LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuIG1fYml0cyAmIFJlYWRPbmx5RmxhZzsKICAgICAgICAgfQogCisgICAgICAgIGJv
b2wgaGFzVGVtcG9yYWxEZWFkWm9uZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2JpdHMgJiBIYXNUZW1wb3JhbERlYWRab25lRmxhZzsKKyAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFJlYWRPbmx5RmxhZyA9IDB4
MTsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRFbnVtRmxhZyA9IDB4MjsKICAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE5vdE51bGxGbGFnID0gMHg0OwotICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgRmxhZ0JpdHMgPSAzOworICAgICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgSGFzVGVtcG9yYWxEZWFkWm9uZUZsYWcgPSAweDg7CisgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBGbGFnQml0cyA9IDQ7CiAKLSAgICAgICAgdm9pZCBwYWNrKGludCBpbmRl
eCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICAgICAgdm9pZCBwYWNrKGludCBp
bmRleCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSwgYm9vbCBoYXNUZW1wb3JhbERlYWRa
b25lKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2JpdHMgPSAoaW5kZXggPDwgRmxhZ0JpdHMp
IHwgTm90TnVsbEZsYWc7CiAgICAgICAgICAgICBpZiAocmVhZE9ubHkpCiAgICAgICAgICAgICAg
ICAgbV9iaXRzIHw9IFJlYWRPbmx5RmxhZzsKICAgICAgICAgICAgIGlmIChkb250RW51bSkKICAg
ICAgICAgICAgICAgICBtX2JpdHMgfD0gRG9udEVudW1GbGFnOworICAgICAgICAgICAgaWYgKGhh
c1RlbXBvcmFsRGVhZFpvbmUpCisgICAgICAgICAgICAgICAgbV9iaXRzIHw9IEhhc1RlbXBvcmFs
RGVhZFpvbmVGbGFnOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGlzVmFsaWRJ
bmRleChpbnQgaW5kZXgpCg==
</data>
<flag name="review"
          id="137922"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>