<?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>121074</bug_id>
          
          <creation_ts>2013-09-09 20:47:01 -0700</creation_ts>
          <short_desc>JSC should have a generational garbage collector</short_desc>
          <delta_ts>2014-04-29 15:33:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>121239</dependson>
    
    <dependson>126092</dependson>
    
    <dependson>120138</dependson>
    
    <dependson>120179</dependson>
    
    <dependson>120389</dependson>
    
    <dependson>120910</dependson>
    
    <dependson>121007</dependson>
    
    <dependson>121045</dependson>
    
    <dependson>121118</dependson>
    
    <dependson>121238</dependson>
    
    <dependson>121534</dependson>
    
    <dependson>121702</dependson>
    
    <dependson>121821</dependson>
    
    <dependson>121920</dependson>
    
    <dependson>125518</dependson>
    
    <dependson>125530</dependson>
    
    <dependson>125975</dependson>
    
    <dependson>125976</dependson>
    
    <dependson>126012</dependson>
    
    <dependson>126025</dependson>
    
    <dependson>126040</dependson>
    
    <dependson>126047</dependson>
    
    <dependson>126093</dependson>
    
    <dependson>126527</dependson>
    
    <dependson>126552</dependson>
    
    <dependson>126555</dependson>
    
    <dependson>130040</dependson>
    
    <dependson>130617</dependson>
    
    <dependson>131197</dependson>
    
    <dependson>131634</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>philn</cc>
    
    <cc>rego+ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>927089</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-09 20:47:01 -0700</bug_when>
    <thetext>All in the title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927099</commentid>
    <comment_count>1</comment_count>
      <attachid>211152</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-09 21:17:17 -0700</bug_when>
    <thetext>Created attachment 211152
checkpoint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927605</commentid>
    <comment_count>2</comment_count>
      <attachid>211270</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-10 17:56:25 -0700</bug_when>
    <thetext>Created attachment 211270
checkpoint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927609</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-10 17:58:26 -0700</bug_when>
    <thetext>Attachment 211270 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/JavaScriptCore/assembler/MacroAssemblerCodeRef.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/ValueProfile.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGRepatch.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.cpp&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.h&apos;, u&apos;Source/JavaScriptCore/heap/CopiedAllocator.h&apos;, u&apos;Source/JavaScriptCore/heap/CopiedBlock.h&apos;, u&apos;Source/JavaScriptCore/heap/CopiedBlockInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/CopiedSpace.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CopiedSpace.h&apos;, u&apos;Source/JavaScriptCore/heap/CopyVisitorInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/heap/MarkedBlock.cpp&apos;, u&apos;Source/JavaScriptCore/heap/MarkedBlock.h&apos;, u&apos;Source/JavaScriptCore/heap/MarkedSpace.h&apos;, u&apos;Source/JavaScriptCore/heap/SlotVisitor.cpp&apos;, u&apos;Source/JavaScriptCore/heap/SlotVisitor.h&apos;, u&apos;Source/JavaScriptCore/heap/SlotVisitorInlines.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlines.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntCommon.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.h&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter64.asm&apos;, u&apos;Source/JavaScriptCore/offlineasm/instructions.rb&apos;, u&apos;Source/JavaScriptCore/offlineasm/x86.rb&apos;, u&apos;Source/JavaScriptCore/runtime/Butterfly.h&apos;, u&apos;Source/JavaScriptCore/runtime/ButterflyInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/IndexingHeader.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSActivation.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArray.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSPropertyNameIterator.h&apos;, u&apos;Source/JavaScriptCore/runtime/MapData.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Options.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/StructureRareDataInlines.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSArray.cpp:703:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/heap/SlotVisitor.cpp:92:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSObject.cpp:553:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSObject.cpp:2388:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:220:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:222:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.h:97:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:971:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4494:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/Options.cpp:215:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/Options.cpp:217:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1472:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1504:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1663:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1695:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1700:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/heap/Heap.cpp:506:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:513:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:521:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:529:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:536:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:545:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:553:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:561:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:569:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:578:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:615:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:625:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:779:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/heap/Heap.cpp:814:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:820:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:936:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/heap/Heap.cpp:946:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2835:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2837:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4045:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 36 in 50 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>927610</commentid>
    <comment_count>4</comment_count>
      <attachid>211270</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-10 18:05:18 -0700</bug_when>
    <thetext>Comment on attachment 211270
checkpoint

Attachment 211270 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1731801</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927611</commentid>
    <comment_count>5</comment_count>
      <attachid>211270</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-10 18:06:09 -0700</bug_when>
    <thetext>Comment on attachment 211270
checkpoint

Attachment 211270 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1726996</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927622</commentid>
    <comment_count>6</comment_count>
      <attachid>211270</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-10 19:08:46 -0700</bug_when>
    <thetext>Comment on attachment 211270
checkpoint

Attachment 211270 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1731810</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927625</commentid>
    <comment_count>7</comment_count>
      <attachid>211270</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-10 20:02:45 -0700</bug_when>
    <thetext>Comment on attachment 211270
checkpoint

Attachment 211270 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1784027</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927651</commentid>
    <comment_count>8</comment_count>
      <attachid>211270</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-09-10 23:21:24 -0700</bug_when>
    <thetext>Comment on attachment 211270
checkpoint

Attachment 211270 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1732871</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928136</commentid>
    <comment_count>9</comment_count>
      <attachid>211394</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-11 21:37:15 -0700</bug_when>
    <thetext>Created attachment 211394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928142</commentid>
    <comment_count>10</comment_count>
      <attachid>211394</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-11 21:49:55 -0700</bug_when>
    <thetext>Comment on attachment 211394
Patch

Attachment 211394 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1802036</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928143</commentid>
    <comment_count>11</comment_count>
      <attachid>211394</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-11 21:54:31 -0700</bug_when>
    <thetext>Comment on attachment 211394
Patch

Attachment 211394 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1812038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928146</commentid>
    <comment_count>12</comment_count>
      <attachid>211394</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-11 22:03:59 -0700</bug_when>
    <thetext>Comment on attachment 211394
Patch

Attachment 211394 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1819025</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928153</commentid>
    <comment_count>13</comment_count>
      <attachid>211394</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-11 22:27:51 -0700</bug_when>
    <thetext>Comment on attachment 211394
Patch

Attachment 211394 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1859002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928160</commentid>
    <comment_count>14</comment_count>
      <attachid>211394</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-11 22:46:51 -0700</bug_when>
    <thetext>Comment on attachment 211394
Patch

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

Looks like some build carnage remains.

What&apos;s the performance status here?

&gt; Source/JavaScriptCore/heap/Heap.cpp:58
&gt; +#define ENABLE_GC_LOGGING 1

Oops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928282</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-12 07:58:10 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 211394 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=211394&amp;action=review
&gt; 
&gt; Looks like some build carnage remains.
&gt; 
&gt; What&apos;s the performance status here?
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:58
&gt; &gt; +#define ENABLE_GC_LOGGING 1
&gt; 
&gt; Oops!

Sorry, this wasn&apos;t meant to be a finished patch :-( Forgot to unset the r+ flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928285</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-12 07:58:42 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt;  r+ flag.
r? flag</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930470</commentid>
    <comment_count>17</comment_count>
      <attachid>211960</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-17 18:20:42 -0700</bug_when>
    <thetext>Created attachment 211960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930473</commentid>
    <comment_count>18</comment_count>
      <attachid>211960</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-17 18:30:21 -0700</bug_when>
    <thetext>Comment on attachment 211960
Patch

Attachment 211960 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1817954</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930475</commentid>
    <comment_count>19</comment_count>
      <attachid>211960</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-17 18:32:02 -0700</bug_when>
    <thetext>Comment on attachment 211960
Patch

Attachment 211960 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1889045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930476</commentid>
    <comment_count>20</comment_count>
      <attachid>211960</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-17 18:43:21 -0700</bug_when>
    <thetext>Comment on attachment 211960
Patch

Attachment 211960 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1886291</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930479</commentid>
    <comment_count>21</comment_count>
      <attachid>211960</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-17 18:46:16 -0700</bug_when>
    <thetext>Comment on attachment 211960
Patch

Attachment 211960 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1830092</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930484</commentid>
    <comment_count>22</comment_count>
      <attachid>211960</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-09-17 18:59:59 -0700</bug_when>
    <thetext>Comment on attachment 211960
Patch

Attachment 211960 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/1928038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930520</commentid>
    <comment_count>23</comment_count>
      <attachid>211960</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-09-17 22:27:57 -0700</bug_when>
    <thetext>Comment on attachment 211960
Patch

Attachment 211960 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1864216</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931051</commentid>
    <comment_count>24</comment_count>
      <attachid>212090</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-19 12:56:17 -0700</bug_when>
    <thetext>Created attachment 212090
checkpoint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931161</commentid>
    <comment_count>25</comment_count>
      <attachid>212115</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-19 18:56:28 -0700</bug_when>
    <thetext>Created attachment 212115
checkpoint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933797</commentid>
    <comment_count>26</comment_count>
      <attachid>212773</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-26 17:26:36 -0700</bug_when>
    <thetext>Created attachment 212773
rebase</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211152</attachid>
            <date>2013-09-09 21:17:17 -0700</date>
            <delta_ts>2013-09-10 17:56:24 -0700</delta_ts>
            <desc>checkpoint</desc>
            <filename>bug-121074-20130909211657.patch</filename>
            <type>text/plain</type>
            <size>132231</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MCBA
QAorMjAxMy0wOS0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIGdlbmVyYXRpb25hbCBnYXJiYWdlIGNvbGxlY3Rv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMDc0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRy
OjpGdW5jdGlvblB0cik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6CisgICAg
ICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmls
ZUJhc2U6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1
dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJhbnNpdGlvblN0dWIp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHA6CisgICAgICAgIChKU0M6
OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbik6CisgICAgICAgIChKU0M6OkNvbnNl
cnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuaDoK
KyAgICAgICAgKiBoZWFwL0NvcGllZEFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpDb3BpZWRB
bGxvY2F0b3I6OnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyk6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Y3JlYXRlTm9aZXJvRmlsbCk6
CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpDb3BpZWRCbG9jayk6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjpkaWRTdXJ2aXZlR0MpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6
ZGlkRXZhY3VhdGVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpjYW5CZVJlY3lj
bGVkKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnBpbik6CisgICAgICAgIChKU0M6OkNv
cGllZEJsb2NrOjp1bnBpbik6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjppc09sZCk6Cisg
ICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpsaXZlQnl0ZXMpOgorICAgICAgICAqIGhlYXAvQ29w
aWVkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZl
Qnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5n
V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRl
c0R1cmluZ0NvcHlpbmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAg
ICAoSlNDOjpDb3BpZWRTcGFjZTo6ZGlkU3RhcnRGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChK
U0M6OkNvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcGllZFNw
YWNlOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp3aWxsQWJhbmRv
blN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZGlkQXNzaWduU3RvcmFnZSk6
CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFj
ZTo6aGVhcCk6CisgICAgICAgICogaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOgorICAgICAgICAoSlNDOjpDb3B5
VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3cpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRv
cjo6ZGlkQ29weSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRpZEFiYW5kb24pOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRPbGRHZW5lcmF0aW9u
RXhlY3V0YWJsZXNUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1Jl
bWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0
SWZOZWNlc3NhcnlPckRlZmVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkQWxsb2NhdGUpOgor
ICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpIZWFwOjp3
aWxsQWJhbmRvblN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRBc3NpZ25TdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weVdyaXRlQmFycmllcik6CisgICAgICAgICogaGVh
cC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmlzSW5SZW1lbWJlcmVkU2V0KToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6b3BlcmF0aW9uSW5Qcm9ncmVzcyk6CisgICAgICAgIChKU0M6OkhlYXA6
OnNob3VsZENvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjppc0NvbGxlY3RpbmcpOgorICAg
ICAgICAoSlNDOjpIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQpOgorICAgICAgICAoSlNDOjpI
ZWFwOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6TWFya2VkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhclJl
bWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2xlYXJNYXJrc1dpdGhD
b2xsZWN0aW9uVHlwZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6c2V0UmVtZW1iZXJlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpj
bGVhclJlbWVtYmVyZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXRvbWljQ2xlYXJS
ZW1lbWJlcmVkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzUmVtZW1iZXJlZCk6Cisg
ICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpDbGVhck1hcmtzOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6Q2xlYXJSZW1lbWJlcmVkU2V0OjpvcGVyYXRvcigp
KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmNsZWFyUmVtZW1iZXJlZFNldCk6CisgICAg
ICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp+
U2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2sp
OgorICAgICAgICAoSlNDOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptYXJrU3RhY2spOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6c2hhcmVkRGF0YSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnVuY29uZGl0aW9uYWxseUFwcGVuZCk6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIpOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6aGVhcCk6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAg
ICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNU
SU9OKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludENv
bW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OmxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyk6CisgICAgICAgIChKU0M6OkxMSW50
OjpsbGludF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXJfc2xvdyk6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtOgorICAgICAgICAqIG9mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiOgorICAgICAgICAq
IG9mZmxpbmVhc20veDg2LnJiOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6dG90YWxTaXplKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5n
SGVhZGVyLmg6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpT
Qzo6SlNBY3RpdmF0aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3Bw
OgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVh
dGVJbml0aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxD
b250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6d2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgICog
cnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVJhcmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKiBydW50aW1lL09wdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRp
Y3Rpb25hcnlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRQcmV2aW91c0lE
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFs
dWUpOgorCiAyMDEzLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgZGlzYWJsZSBHQyBsb2dnaW5nLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
CShyZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSByZXR1cm5UeXBlLCB0eXBlbmFtZSBhcmdUeXBl
MSwgdHlwZW5hbWUgYXJnVHlwZTIsIHR5cGVuYW1lIGFyZ1R5cGUzLCB0eXBlbmFtZSBhcmdUeXBl
NCwgdHlwZW5hbWUgYXJnVHlwZTUsIHR5cGVuYW1lIGFyZ1R5cGU2PgorICAgIEZ1bmN0aW9uUHRy
KHJldHVyblR5cGUoKnZhbHVlKShhcmdUeXBlMSwgYXJnVHlwZTIsIGFyZ1R5cGUzLCBhcmdUeXBl
NCwgYXJnVHlwZTUsIGFyZ1R5cGU2KSkKKyAgICAgICAgOiBtX3ZhbHVlKCh2b2lkKil2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CisgICAg
fQorCiAvLyBNU1ZDIGRvZXNuJ3Qgc2VlbSB0byB0cmVhdCBmdW5jdGlvbnMgd2l0aCBkaWZmZXJl
bnQgY2FsbGluZyBjb252ZW50aW9ucyBhcwogLy8gZGlmZmVyZW50IHR5cGVzOyB0aGVzZSBtZXRo
b2RzIGFscmVhZHkgZGVmaW5lZCBmb3IgZmFzdGNhbGwsIGJlbG93LgogI2lmIENBTExJTkdfQ09O
VkVOVElPTl9JU19TVERDQUxMICYmICFPUyhXSU5ET1dTKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDE4LDcgKzI0MTgsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9u
Z1JlZmVyCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVzLnNpemUoKTsgKytpKQogICAgICAgICBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlc1tp
XS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIAotICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKENv
bGxlY3Rpb24pOworICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKHZpc2l0b3IuaGVhcCgpLT5vcGVy
YXRpb25JblByb2dyZXNzKCkpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMTU1MzY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAg
ICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChvcGVyYXRpb24gPT0gQ29sbGVjdGlvbgorICAgICAg
ICBpZiAoKG9wZXJhdGlvbiA9PSBGdWxsQ29sbGVjdGlvbiB8fCBvcGVyYXRpb24gPT0gRWRlbkNv
bGxlY3Rpb24pCiAgICAgICAgICAgICAmJiAhbV9zaW5nbGV0b25WYWx1ZUlzVG9wCiAgICAgICAg
ICAgICAmJiAhIW1fc2luZ2xldG9uVmFsdWUKICAgICAgICAgICAgICYmIG1fc2luZ2xldG9uVmFs
dWUuaXNDZWxsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NTM2NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTMwNSw3ICsxMzA1LDYgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7Ci0KICAgICAgICAgZmlsdGVyKHZhbHVlLCBub2RlLT5zdHJ1Y3R1
cmUoKSk7CiAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3ICsy
NjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJl
ZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJn
NCwgR1BSUmVnIGFyZzUpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcg
YXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwogICAgICAgICBhZGRD
YWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMjczLDEwICsyNzMs
OSBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKICAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzMpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7Ci0gICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
R1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJn
MywgVHJ1c3RlZEltbTMyIGFyZzQpCiAgICAgewogICAgICAgICByZXNldENhbGxBcmd1bWVudHMo
KTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
QEAgLTI4Niw3ICsyODUsMTYgQEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJn
NCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVkSW1t
MzIgYXJnNCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIEdQUlJlZyBhcmczKQor
ICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1
bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxs
QXJndW1lbnQoYXJnMyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmcz
LCBUcnVzdGVkSW1tUHRyIGFyZzQpCiAgICAgewogICAgICAgICByZXNldENhbGxBcmd1bWVudHMo
KTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
QEAgLTI5NiwxNiArMzA0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzQpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgR1BSUmVnIGFy
ZzMpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBUcnVzdGVkSW1tMzIg
YXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwogICAgICAgICBhZGRD
YWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBhZGRDYWxs
QXJndW1lbnQoYXJnMSk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKICAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CiAg
ICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVkSW1tUHRyIGFy
ZzQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tMzIgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcg
YXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwogICAgICAgICBhZGRD
YWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMzE1LDcgKzMyNCw3
IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcg
YXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQs
IFRydXN0ZWRJbW0zMiBhcmc1KQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7
CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBA
IC0zMjMsOSArMzMyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIp
OwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmc0KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOwogICAgIH0KIAotICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMy
IGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZElt
bTMyIGFyZzUpCiAgICAgewogICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKICAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTMzMyw2ICsz
NDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKICAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7Cisg
ICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0LCBHUFJSZWcgYXJnNSkKQEAgLTkxNSw2ICs5MjYs
MjAgQEAgcHVibGljOgogICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
YXJnMiwgYXJnMyk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVk
SW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAg
ICAgcG9rZShhcmc1LCBQT0tFX0FSR1VNRU5UX09GRlNFVCArIDEpOworICAgICAgICBwb2tlKGFy
ZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBU
cnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsK
KyAgICAgICAgcG9rZShhcmc1LCBQT0tFX0FSR1VNRU5UX09GRlNFVCArIDEpOworICAgICAgICBw
b2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCiAgICAgewogICAgICAg
ICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKQEAgLTEwMjMsNiArMTA0OCwyOSBA
QCBwdWJsaWM6CiAgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAg
ICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKICAgICB9CisKKyNlbmRpZgorCisjaWYgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVS
UyA9PSA2CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BS
UmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgc2V0dXBUd29TdHVi
QXJnczxHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSND4oYXJnMSwg
YXJnNCk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBtb3ZlKGFyZzUs
IEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUp
CisgICAgeworICAgICAgICBwdXNoKGFyZzEpOworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQ
UkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFI0PihhcmcyLCBhcmc0KTsK
KyAgICAgICAgcG9wKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBtb3ZlKGFyZzUs
IEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2
b2lkIHNldHVwUmVzdWx0cyhHUFJSZWcgZGVzdEEsIEdQUlJlZyBkZXN0QikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU1MzY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTczNiw4ICsxNzM2LDExIEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVhbGxvY2F0ZUIKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBvYmplY3QtPndpbGxSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLCBvYmplY3QtPmJ1dHRlcmZs
eSgpKTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3Jh
Z2Uodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CiAgICAgb2JqZWN0LT5zZXRCdXR0
ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAgICBvYmplY3QtPmRpZFJl
cGxhY2VPbGRCdXR0ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0dXJlKCksIHJlc3VsdCk7CiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKQEAgLTE3NDYsOCAr
MTc0OSwxMSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CiAKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgb2JqZWN0LT53
aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgb2JqZWN0LT5i
dXR0ZXJmbHkoKSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxp
bmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBu
ZXdTaXplKTsKICAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZShyZXN1bHQpOworICAgIG9iamVjdC0+ZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgb2JqZWN0
LT5zdHJ1Y3R1cmUoKSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4ocmVzdWx0KTsKIH0KIApAQCAtMTk0NCw2ICsxOTUwLDMwIEBAIHNpemVfdCBERkdfT1BFUkFU
SU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCit2b2lkIERGR19PUEVSQVRJT04gZGZnQ29weVdy
aXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgdm9pZCogb2xkUHRyLCBz
aXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRyLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKworICAgIGV4ZWMtPmhlYXAoKS0+Y29weVdyaXRlQmFycmllcihjZWxsLCBvbGRQdHIs
IG9sZFNpemUsIG5ld1B0ciwgbmV3U2l6ZSk7Cit9CisKK3ZvaWQgREZHX09QRVJBVElPTiBkZmdV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworCisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIoY2VsbCk7
Cit9CisKK3ZvaWQgREZHX09QRVJBVElPTiBkZmdXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIG93bmVkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAg
ZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIsIG93bmVkKTsKK30KKwogdm9pZCBERkdf
T1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRl
KiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCB0eXBlZGVm
IHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBlZGVmIHZvaWQgREZHX09QRVJB
VElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCwgZG91YmxlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25f
RU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0
eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUq
LCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25f
RUNCKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBCdXR0ZXJmbHkqKTsKIHR5cGVkZWYgdm9pZCBERkdf
T1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIElu
bGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJh
dGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNhbGxGcmFt
ZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0pKKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAt
MTMwLDcgKzEzMSw4IEBAIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmEK
IHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VaWikoRXhlY1N0
YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIFN0cmluZ0ltcGwqIERGR19PUEVSQVRJ
T04gKCpJX0RGR09wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwogdHlwZWRl
ZiBKU1N0cmluZyogREZHX09QRVJBVElPTiAoKkpzc19ERkdPcGVyYXRpb25fRVopKEV4ZWNTdGF0
ZSosIGludDMyX3QpOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21D
aGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKK3R5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OIChWX0RGR09wZXJhdGlvbl9FQ1BTUFMpKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOworSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lO
VEVSTkFMOwogCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mgb3V0IHRv
IEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBKSVQuCiBK
U0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSopIFdURl9JTlRFUk5BTDsKQEAgLTMxNiw2ICszMTgsMTAgQEAgdm9pZCBERkdfT1BFUkFU
SU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NS
RW50cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVh
bUluZGV4KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKK3ZvaWQg
REZHX09QRVJBVElPTiBkZmdDb3B5V3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIHZv
aWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOwordm9pZCBERkdfT1BFUkFUSU9OIGRmZ1dyaXRl
QmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3ZvaWQgREZHX09QRVJBVElP
TiBkZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworCiB9
IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3
VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNTUzNjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NTYsNyArNjU2LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAg
IGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFsc2U7CiAjZW5kaWYKICAgICAKLSAg
ICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBl
eGVjLT5jb2RlQmxvY2soKSk7CiAgICAgCiAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQ
UlJlZyAmJiAod3JpdGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSkgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NzIsNyArNjcyLDggQEAg
c3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKTsKLSAgICAKKworLyogICAgCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgc2NyYXRjaEdQUjIgPSBTcGVj
dWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQ
Uik7CkBAIC02ODAsOSArNjgxLDEyIEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigK
ICAgICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VH
UFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUiwgc2NyYXRjaEdQUik7CiAjZW5kaWYKICAgICBzdHVi
Sml0LnB1c2goc2NyYXRjaEdQUjIpOwotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIo
c3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzKTsKKyovCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgd3JpdGVCYXJy
aWVyT3BlcmF0aW9uID0gU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNl
R1BSLCBzY3JhdGNoR1BSLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisvKgogICAg
IHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIyKTsKICNlbmRpZgorKi8KICAgICAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKQEAg
LTcxOCw2ICs3MjIsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgfQog
ICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29k
ZUJsb2NrKCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsod3JpdGVCYXJyaWVyT3BlcmF0aW9uLCBk
ZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nl
c3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUs
IGZhaWx1cmVMYWJlbCk7CiAgICAgICAgICAgICAKQEAgLTgxMSwxMiArODE2LDE1IEBAIHN0YXRp
YyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgfQogICAgIH0KIAorLyoKICNp
ZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgQVNTRVJUKG5lZWRTZWNvbmRT
Y3JhdGNoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7CisqLwog
ICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1
cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAgICBTcGVjdWxhdGl2ZUpJVDo6d3Jp
dGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHdy
aXRlQmFycmllck9wZXJhdGlvbiA9IFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1Ykpp
dCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjb3B5V3JpdGVCYXJyaWVyT3BlcmF0aW9uOworLyoK
ICNlbmRpZgorKi8KICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAgICAgCkBAIC04MzIsNiArODQwLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25T
dHViKAogICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAgICAgICAgICAgIHN0dWJKaXQubmVnUHRy
KHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCks
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIGNvcHlXcml0ZUJhcnJpZXJPcGVyYXRpb24gPSBT
cGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCAwLCAwLCBz
Y3JhdGNoR1BSMSwgbmV3U2l6ZSk7CiAgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwpAQCAtODQzLDYgKzg1Miw4
IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFp
bmluZyk7CiAgICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CiAgICAgICAg
ICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAg
ICAgICAvLyBUT0RPOiBHZXQgdGhlIHJlYWwgYmFzZSBvZiB0aGUgb2xkIEJ1dHRlcmZseS4KKyAg
ICAgICAgICAgIGNvcHlXcml0ZUJhcnJpZXJPcGVyYXRpb24gPSBTcGVjdWxhdGl2ZUpJVDo6Y29w
eVdyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMywgb2xkU2l6ZSwgc2Ny
YXRjaEdQUjEsIG5ld1NpemUpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CiAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIz
ID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICBmb3Ig
KHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9s
ZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewpAQCAtOTA5LDYgKzkyMCw5IEBAIHN0
YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICB9CiAgICAgCiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJpZXJPcGVyYXRpb24sIGRmZ1VuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIpOworICAgIGlmIChzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCisgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoY29weVdyaXRlQmFycmllck9wZXJhdGlvbiwgZGZnQ29weVdyaXRlQmFy
cmllcik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25l
KSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1
NTM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MzAsNyArMjgzMCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgT0JKRUNUX09GRlNFVE9GKEFyZ3Vt
ZW50cywgbV9zbG93QXJndW1lbnRzKSkpKTsKLSAgICAKKyAgIAorICAgICAgICAgICAgd3JpdGVC
YXJyaWVyKGJhc2VSZWcsIHZhbHVlUmVnLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAKICAgICAgICAgICAgIG1faml0Lm1vdmUocHJvcGVydHlS
ZWcsIHNjcmF0Y2gyUmVnKTsKICAgICAgICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2gyUmVnKTsK
ICAgICAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyUmVnLCBzY3JhdGNo
MlJlZyk7CkBAIC0zOTQ3LDExICszOTQ5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAg
ICAgICAKLSAgICAgICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAg
ICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0
dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0CiAgICAgICAgIHdyaXRlQmFycmllcihi
YXNlR1BSLCBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgV3Jp
dGVCYXJyaWVyRm9yR2VuZXJpY0FjY2Vzcyk7Ci0jZW5kaWYKICAgICAgICAgCiAgICAgICAgIG1f
aml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogICAgICAgICAKQEAgLTQwMDYs
MTggKzQwMDUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0jZW5kaWYKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAg
ICAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgICAgIHdyaXRl
QmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQzKCksIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzKTsKLSNlbmRpZgogCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwogICAgICAgICAKQEAgLTQwMzYsMTIg
KzQwMzEsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKKyAgICAgICAgY2FjaGVkUHV0QnlJZChu
b2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0
Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKKyAgICAgICAKKy8q
IAogICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICB2YWx1ZS51c2UoKTsKKyovCiAKLSAgICAg
ICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9k
ZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGly
ZWN0KTsKLSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUvKiwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5Ki8pOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQwNTQsMTIgKzQwNTEs
MTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5j
b2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIs
IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKKworLyoKICAgICAgICAgYmFzZS51
c2UoKTsKICAgICAgICAgdmFsdWUudXNlKCk7CisqLwogCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQo
bm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3Jh
dGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7Ci0KLSAgICAgICAgbm9S
ZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbm9SZXN1
bHQobm9kZS8qLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkqLyk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtNDM4MCw2ICs0Mzc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVk
SW1tMzIocmVnaXN0ZXJzT2Zmc2V0KSwgYWN0aXZhdGlvblZhbHVlR1BSLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YWN0aXZhdGlvblZhbHVlR1BSLCBKU0FjdGl2YXRpb246Om9mZnNldE9mUmVnaXN0ZXJzKCkpKTsK
KyAgICAgICAgd3JpdGVCYXJyaWVyKGFjdGl2YXRpb25WYWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAK
ICAgICAgICAgbm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzMsMjAgKzgzMyw4MSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlKiBuCiAgICAgfQogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVn
IG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyVXNl
S2luZCB1c2VLaW5kKQorTWFjcm9Bc3NlbWJsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNvcHlX
cml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIG9sZFN0
b3JhZ2UsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUp
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2kpCisgICAgICAgIGppdC5wdXNoKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAg
IGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob3duZXIsIG9sZFN0b3JhZ2UsIFRydXN0
ZWRJbW0zMihvbGRTaXplKSwgbmV3U3RvcmFnZSwgVHJ1c3RlZEltbTMyKG5ld1NpemUpKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgaml0LnBv
cChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICByZXR1cm4gY2FsbDsKK30KKworTWFjcm9B
c3NlbWJsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJhcnJpZXIoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgdm9pZCogb2xkU3RvcmFnZSwgc2l6ZV90IG9sZFNpemUs
IEdQUlJlZyBuZXdTdG9yYWdlLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0
LnB1c2goR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShvd25lciwgVHJ1c3RlZEltbVB0cihvbGRTdG9yYWdlKSwgVHJ1c3RlZEltbTMy
KG9sZFNpemUpLCBuZXdTdG9yYWdlLCBUcnVzdGVkSW1tMzIobmV3U2l6ZSkpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBqaXQucG9wKEdQUklu
Zm86OnRvUmVnaXN0ZXIoaSkpOworICAgIHJldHVybiBjYWxsOworfQorCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb3B5V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIG9sZFN0b3JhZ2Us
IHNpemVfdCBvbGRTaXplLCBHUFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUpCit7Cisg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJh
dGlvbihkZmdDb3B5V3JpdGVCYXJyaWVyLCBvd25lciwgb2xkU3RvcmFnZSwgb2xkU2l6ZSwgbmV3
U3RvcmFnZSwgbmV3U2l6ZSk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKKyAgICAvLyBOZWVkIHRvIHJlbG9hZCB0aGUgYnV0dGVyZmx5IHBvaW50ZXIgc2luY2Ug
ZmlsbGluZyB3b24ndCByZWxvYWQgaXQgc2luY2UgaXQncyBhIHRlbXBvcmFyeS4KKyAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG93bmVyLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBuZXdTdG9yYWdlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29w
eVdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIHZvaWQqIG9sZFN0b3JhZ2UsIHNpemVfdCBvbGRT
aXplLCBHUFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihkZmdDb3B5
V3JpdGVCYXJyaWVyLCBvd25lciwgb2xkU3RvcmFnZSwgb2xkU2l6ZSwgbmV3U3RvcmFnZSwgbmV3
U2l6ZSk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAv
LyBOZWVkIHRvIHJlbG9hZCB0aGUgYnV0dGVyZmx5IHBvaW50ZXIgc2luY2UgZmlsbGluZyB3b24n
dCByZWxvYWQgaXQgc2luY2UgaXQncyBhIHRlbXBvcmFyeS4KKyAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG93bmVyLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBuZXdTdG9yYWdlKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2Ny
YXRjaDEsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKIHsKICAgICBVTlVTRURfUEFSQU0o
aml0KTsKICAgICBVTlVTRURfUEFSQU0ob3duZXIpOwogICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
MSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKICAgICBVTlVTRURfUEFSQU0odXNlS2lu
ZCk7CiAgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gxKTsKLSAgICBBU1NFUlQob3duZXIgIT0g
c2NyYXRjaDIpOwotICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7CiAKICNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChq
aXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKICNlbmRp
ZgorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKQorICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsK
KyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG93bmVyKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgaml0LnBvcChHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpKTsKKyAgICByZXR1cm4gY2FsbDsKK30KKwordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2gxKQorewor
ICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7CisKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCisgICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChtX2ppdCwgV3JpdGVCYXJyaWVy
Q291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOworI2VuZGlmCisgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihkZmdVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lckdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvd25l
ck5vdE51bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG93
bmVyR1BSKTsKKyAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgb3duZXJOb3ROdWxsLmxpbmso
Jm1faml0KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBv
d25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VL
aW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQpAQCAtODYzLDYg
KzkyNCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnCiAjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIEpJVENvbXBpbGVyOjplbWl0Q291
bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsK
ICNlbmRpZgorICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRl
c3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKGRmZ1dyaXRlQmFycmllciwgb3duZXJHUFIsIHZhbHVlR1BSKTsKKyAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIAorICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG93bmVyTm90TnVsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgb3duZXJHUFIpOworICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAg
ICBvd25lck5vdE51bGwubGluaygmbV9qaXQpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
dmFsdWVOb3ROdWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCB2YWx1ZUdQUik7CisgICAgbV9qaXQuYnJlYWtwb2ludCgpOworICAgIHZhbHVlTm90TnVsbC5s
aW5rKCZtX2ppdCk7CisKKyAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVl
LCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
cmF0Y2gyKQpAQCAtODc5LDYgKzk1NSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJh
cnJpZXIoR1BSUmVnCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIEpJ
VENvbXBpbGVyOjplbWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3Vu
dGVyRm9yKHVzZUtpbmQpKTsKICNlbmRpZgorCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
SW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihkZmdXcml0ZUJhcnJpZXIsIG93bmVy
R1BSLCB2YWx1ZSk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG93bmVyTm90TnVsbCA9IG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3duZXJHUFIpOworICAgIG1faml0LmJyZWFr
cG9pbnQoKTsKKyAgICBvd25lck5vdE51bGwubGluaygmbV9qaXQpOwogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBF
ZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNo
KQpAQCAtODk0LDYgKzk3OCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIo
SlNDZWxsCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIEpJVENvbXBp
bGVyOjplbWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9y
KHVzZUtpbmQpKTsKICNlbmRpZgorICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlk
R1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ1dyaXRlQmFycmllciwgb3duZXIsIHZhbHVl
R1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgdmFsdWVOb3ROdWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUik7CisgICAgbV9qaXQuYnJlYWtwb2ludCgp
OworICAgIHZhbHVlTm90TnVsbC5saW5rKCZtX2ppdCk7CisKKyAgICBpc05vdENlbGwubGluaygm
bV9qaXQpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9kZSkK
QEAgLTQzMDQsNiArNDM5OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0
ZVByb3AKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKICAg
ICAgICAgCiAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgY29weVdyaXRl
QmFycmllcihiYXNlR1BSLCAwLCAwLCBzY3JhdGNoR1BSLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNp
dHkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAgICAgICAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0
Y2hHUFIsIG5vZGUpOwogfQpAQCAtNDM1MSw3ICs0NDQ3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpT
VmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKICAgICB9CiAgICAgbV9qaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSkpOwotICAgIAorICAgIGNvcHlXcml0ZUJhcnJpZXIoYmFzZUdQUiwgb2xkU3Rv
cmFnZUdQUiwgb2xkU2l6ZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUpOyAgIAorIAogICAgIHN0b3Jh
Z2VSZXN1bHQoc2NyYXRjaEdQUjIsIG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTUzNjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxOSw4ICszMTksMTMgQEAgcHVibGljOgogICAgICAgICBzcGVjdWxhdGlvbldhdGNo
cG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYs
IEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIs
IFdyaXRlQmFycmllclVzZUtpbmQpOwotCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNvcHlXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIG93bmVyR1BSLCB2b2lkKiBv
bGRQdHIsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcgbmV3UHRyR1BSLCBzaXplX3QgbmV3U2l6ZSk7
CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNvcHlXcml0ZUJhcnJpZXIoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgb2xkUHRyR1BSLCBzaXplX3Qgb2xkU2l6
ZSwgR1BSUmVnIG5ld1B0ckdQUiwgc2l6ZV90IG5ld1NpemUpOworICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCB3cml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIG93bmVyR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUjEsIFdyaXRlQmFycmllclVzZUtpbmQpOworCisgICAgdm9pZCBj
b3B5V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIG9sZFB0ciwgc2l6ZV90IG9s
ZFNpemUsIEdQUlJlZyBuZXdQdHIsIHNpemVfdCBuZXdTaXplKTsKKyAgICB2b2lkIGNvcHlXcml0
ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRTaXplLCBH
UFJSZWcgbmV3UHRyLCBzaXplX3QgbmV3U2l6ZSk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BS
UmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKICAgICB2
b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2
YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxp
ZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3
cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJV
c2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRj
aEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQs
IEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcpOwpAQCAtMTAyMCw2ICsxMDI1LDE2
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ1BTUFMg
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHNpemVfdCBhcmczLCBHUFJSZWcg
YXJnNCwgc2l6ZV90IGFyZzUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0LCBUcnVzdGVk
SW1tMzIoYXJnNSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfREZHT3BlcmF0aW9uX0VDUFNQUyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCB2b2lkKiBhcmcy
LCBzaXplX3QgYXJnMywgR1BSUmVnIGFyZzQsIHNpemVfdCBhcmc1KQorICAgIHsKKyAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJn
MiksIFRydXN0ZWRJbW0zMihhcmczKSwgYXJnNCwgVHJ1c3RlZEltbTMyKGFyZzUpKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9
CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNz
SnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIpOwpAQCAtMTA1NCw2ICsxMDY5LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUp
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
KTsKICAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VDQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxs
RnJhbWUpKTsKQEAgLTEwNzIsNiArMTA4OCwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Igb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQorCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgSlNDZWxsKiBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKworICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNDIG9wZXJh
dGlvbiwgSlNDZWxsKiBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBhcmcyKTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAg
ICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmczKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIGFyZzMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZl
Um9vdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2
Miw3IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdS
b290czsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBNYXJrSG9vaywgSlNDOjpPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbj4KIGlubGluZSB2
b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgbWFya0hvb2subWFy
ayhwKTsKQEAgLTkwLDcgKzkwLDcgQEAgaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdl
bmVyaWNBZAogICAgIG1fcm9vdHNbbV9zaXplKytdID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4ocCk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgordGVtcGxhdGU8dHlwZW5hbWUgTWFy
a0hvb2ssIEpTQzo6T3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24+CiB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBNYXJrSG9v
ayYgbWFya0hvb2spCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CkBAIC0xMDAsNyArMTAw
LDcgQEAgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogCiAgICAgVGlu
eUJsb29tRmlsdGVyIGZpbHRlciA9IG1fYmxvY2tzLT5maWx0ZXIoKTsgLy8gTWFrZSBhIGxvY2Fs
IGNvcHkgb2YgZmlsdGVyIHRvIHNob3cgdGhlIGNvbXBpbGVyIGl0IHdvbid0IGFsaWFzLCBhbmQg
Y2FuIGJlIHJlZ2lzdGVyLWFsbG9jYXRlZC4KICAgICBmb3IgKGNoYXIqKiBpdCA9IHN0YXRpY19j
YXN0PGNoYXIqKj4oYmVnaW4pOyBpdCAhPSBzdGF0aWNfY2FzdDxjaGFyKio+KGVuZCk7ICsraXQp
Ci0gICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgZmlsdGVyLCBtYXJrSG9vayk7CisgICAg
ICAgIGdlbmVyaWNBZGRQb2ludGVyPE1hcmtIb29rLCBvcGVyYXRpb24+KCppdCwgZmlsdGVyLCBt
YXJrSG9vayk7CiB9CiAKIGNsYXNzIER1bW15TWFya0hvb2sgewpAQCAtMTEwLDEzICsxMTAsMjEg
QEAgcHVibGljOgogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZv
aWQqIGVuZCkKIHsKKyAgICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiA9IG1fY29waWVk
U3BhY2UtPmhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpOwogICAgIER1bW15TWFya0hvb2sg
ZHVtbXk7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgZHVtbXkpOworICAgIGlmIChv
cGVyYXRpb24gPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgIGdlbmVyaWNBZGRTcGFuPER1bW15
TWFya0hvb2ssIEZ1bGxDb2xsZWN0aW9uPihiZWdpbiwgZW5kLCBkdW1teSk7CisgICAgZWxzZQor
ICAgICAgICBnZW5lcmljQWRkU3BhbjxEdW1teU1hcmtIb29rLCBFZGVuQ29sbGVjdGlvbj4oYmVn
aW4sIGVuZCwgZHVtbXkpOwogfQogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCog
YmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcykKIHsK
LSAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMpOworICAgIE9w
ZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uID0gbV9jb3BpZWRTcGFjZS0+aGVhcCgpLT5vcGVy
YXRpb25JblByb2dyZXNzKCk7CisgICAgaWYgKG9wZXJhdGlvbiA9PSBGdWxsQ29sbGVjdGlvbikK
KyAgICAgICAgZ2VuZXJpY0FkZFNwYW48SklUU3R1YlJvdXRpbmVTZXQsIEZ1bGxDb2xsZWN0aW9u
PihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJp
Y0FkZFNwYW48SklUU3R1YlJvdXRpbmVTZXQsIEVkZW5Db2xsZWN0aW9uPihiZWdpbiwgZW5kLCBq
aXRTdHViUm91dGluZXMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgpA
QCAtMTQyLDggKzE1MCwxMiBAQCBwcml2YXRlOgogdm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRk
KAogICAgIHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHVi
Um91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKKyAgICBPcGVyYXRpb25JblBy
b2dyZXNzIG9wZXJhdGlvbiA9IG1fY29waWVkU3BhY2UtPmhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9n
cmVzcygpOwogICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBDb2RlQmxv
Y2tTZXQ+IG1hcmtIb29rKGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7Ci0gICAgZ2VuZXJp
Y0FkZFNwYW4oYmVnaW4sIGVuZCwgbWFya0hvb2spOworICAgIGlmIChvcGVyYXRpb24gPT0gRnVs
bENvbGxlY3Rpb24pCisgICAgICAgIGdlbmVyaWNBZGRTcGFuPENvbXBvc2l0ZU1hcmtIb29rPEpJ
VFN0dWJSb3V0aW5lU2V0LCBDb2RlQmxvY2tTZXQ+LCBGdWxsQ29sbGVjdGlvbj4oYmVnaW4sIGVu
ZCwgbWFya0hvb2spOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48Q29tcG9zaXRl
TWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4sIEVkZW5Db2xsZWN0aW9u
PihiZWdpbiwgZW5kLCBtYXJrSG9vayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCShyZXZp
c2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVS
b290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMCArNTMsMTAgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMTI4OwogICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkgPSA4MTkyIC8gc2l6ZW9mKEpTQ2VsbCopOwogICAg
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1hcmtIb29rLCBKU0M6Ok9wZXJhdGlvbkluUHJvZ3Jlc3M+CiAgICAgdm9pZCBnZW5lcmljQWRk
UG9pbnRlcih2b2lkKiwgVGlueUJsb29tRmlsdGVyLCBNYXJrSG9vayYpOwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWFya0hvb2s+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2ssIEpT
Qzo6T3BlcmF0aW9uSW5Qcm9ncmVzcz4KICAgICB2b2lkIGdlbmVyaWNBZGRTcGFuKHZvaWQqLCB2
b2lkKiBlbmQsIE1hcmtIb29rJik7CiAgICAgCiAgICAgdm9pZCBncm93KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMTU1
MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgZmFz
dFBhdGhTaG91bGRTdWNjZWVkKHNpemVfdCBieXRlcykgY29uc3Q7CiAgICAgQ2hlY2tlZEJvb2xl
YW4gdHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKTsKKyAgICBDaGVja2Vk
Qm9vbGVhbiB0cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0
UHRyKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlKHZvaWQgKm9sZFB0ciwgc2l6
ZV90IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0ZXMpOwogICAgIHZvaWQqIGZvcmNlQWxsb2NhdGUo
c2l6ZV90IGJ5dGVzKTsKICAgICBDb3BpZWRCbG9jayogcmVzZXRDdXJyZW50QmxvY2soKTsKQEAg
LTkzLDYgKzk0LDE0IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnQK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0
cikKK3sKKyAgICBpZiAoIXRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgbV9jdXJyZW50QmxvY2stPnJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlp
bmcoYnl0ZXMpOworICAgIHJldHVybiB0cnVlOworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4g
Q29waWVkQWxsb2NhdG9yOjp0cnlSZWFsbG9jYXRlKAogICAgIHZvaWQqIG9sZFB0ciwgc2l6ZV90
IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0ZXMpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEyICs0Nywx
NiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGVOb1plcm9GaWxsKERl
YWRCbG9jayopOwogCiAgICAgdm9pZCBwaW4oKTsKKyAgICB2b2lkIHVucGluKCk7CiAgICAgYm9v
bCBpc1Bpbm5lZCgpOwogCisgICAgYm9vbCBpc09sZCgpOwogICAgIGJvb2wgaXNPdmVyc2l6ZSgp
OwogCiAgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7CiAgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMo
SlNDZWxsKiwgQ29weVRva2VuLCB1bnNpZ25lZCk7CisgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXNE
dXJpbmdXcml0ZUJhcnJpZXIodW5zaWduZWQpOworICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVzRHVy
aW5nQ29weWluZyh1bnNpZ25lZCk7CiAgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsKICAgICB2b2lk
IGRpZEV2YWN1YXRlQnl0ZXModW5zaWduZWQpOwogICAgIGJvb2wgc2hvdWxkRXZhY3VhdGUoKTsK
QEAgLTkyLDE0ICs5NiwxNiBAQCBwcml2YXRlOgogICAgIE93blB0cjxDb3B5V29ya0xpc3Q+IG1f
d29ya0xpc3Q7CiAKICAgICBzaXplX3QgbV9yZW1haW5pbmc7Ci0gICAgdWludHB0cl90IG1faXNQ
aW5uZWQ7CisgICAgYm9vbCBtX2lzUGlubmVkIDogMTsKKyAgICBib29sIG1faXNPbGQgOiAxOwog
ICAgIHVuc2lnbmVkIG1fbGl2ZUJ5dGVzOworICAgIHVuc2lnbmVkIG1fbGl2ZU9iamVjdHM7CiB9
OwogCiBpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZEJsb2NrOjpjcmVhdGVOb1plcm9GaWxsKERl
YWRCbG9jayogYmxvY2spCiB7CiAgICAgUmVnaW9uKiByZWdpb24gPSBibG9jay0+cmVnaW9uKCk7
Ci0gICAgcmV0dXJuIG5ldyhOb3ROdWxsLCBibG9jaykgQ29waWVkQmxvY2socmVnaW9uKTsKKyAg
ICByZXR1cm4gbmV3IChOb3ROdWxsLCBibG9jaykgQ29waWVkQmxvY2socmVnaW9uKTsKIH0KIAog
aW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRCbG9jazo6Y3JlYXRlKERlYWRCbG9jayogYmxvY2sp
CkBAIC0xMjUsNyArMTMxLDkgQEAgaW5saW5lIENvcGllZEJsb2NrOjpDb3BpZWRCbG9jayhSZWdp
b24qIAogICAgIDogSGVhcEJsb2NrPENvcGllZEJsb2NrPihyZWdpb24pCiAgICAgLCBtX3JlbWFp
bmluZyhwYXlsb2FkQ2FwYWNpdHkoKSkKICAgICAsIG1faXNQaW5uZWQoZmFsc2UpCisgICAgLCBt
X2lzT2xkKGZhbHNlKQogICAgICwgbV9saXZlQnl0ZXMoMCkKKyAgICAsIG1fbGl2ZU9iamVjdHMo
MCkKIHsKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgbV93b3JrTGlzdExvY2suSW5pdCgp
OwpAQCAtMTM1LDYgKzE0Myw4IEBAIGlubGluZSBDb3BpZWRCbG9jazo6Q29waWVkQmxvY2soUmVn
aW9uKiAKIAogaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZFN1cnZpdmVHQygpCiB7CisgICAg
QVNTRVJUKCEhbV9saXZlQnl0ZXMgPT0gISFtX2xpdmVPYmplY3RzKTsKKyAgICBtX2xpdmVPYmpl
Y3RzID0gMDsKICAgICBtX2xpdmVCeXRlcyA9IDA7CiAgICAgbV9pc1Bpbm5lZCA9IGZhbHNlOwog
ICAgIGlmIChtX3dvcmtMaXN0KQpAQCAtMTQ0LDExICsxNTQsMTYgQEAgaW5saW5lIHZvaWQgQ29w
aWVkQmxvY2s6OmRpZFN1cnZpdmVHQygpCiBpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6ZGlkRXZh
Y3VhdGVCeXRlcyh1bnNpZ25lZCBieXRlcykKIHsKICAgICBBU1NFUlQobV9saXZlQnl0ZXMgPj0g
Ynl0ZXMpOworICAgIEFTU0VSVChtX2xpdmVPYmplY3RzKTsKKyAgICBBU1NFUlQoISFtX2xpdmVC
eXRlcyA9PSAhIW1fbGl2ZU9iamVjdHMpOwogICAgIG1fbGl2ZUJ5dGVzIC09IGJ5dGVzOworICAg
IG1fbGl2ZU9iamVjdHMgLT0gMTsKKyAgICBBU1NFUlQoISFtX2xpdmVCeXRlcyA9PSAhIW1fbGl2
ZU9iamVjdHMpOwogfQogCiBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6Y2FuQmVSZWN5Y2xlZCgp
CiB7CisgICAgQVNTRVJUKCEhbV9saXZlQnl0ZXMgPT0gISFtX2xpdmVPYmplY3RzKTsKICAgICBy
ZXR1cm4gIW1fbGl2ZUJ5dGVzOwogfQogCkBAIC0xNTksMTYgKzE3NCwyNyBAQCBpbmxpbmUgYm9v
bCBDb3BpZWRCbG9jazo6c2hvdWxkRXZhY3VhdGUoCiAKIGlubGluZSB2b2lkIENvcGllZEJsb2Nr
OjpwaW4oKQogeworICAgIG1faXNPbGQgPSB0cnVlOwogICAgIG1faXNQaW5uZWQgPSB0cnVlOwog
ICAgIGlmIChtX3dvcmtMaXN0KQogICAgICAgICBtX3dvcmtMaXN0LmNsZWFyKCk7CiB9CiAKK2lu
bGluZSB2b2lkIENvcGllZEJsb2NrOjp1bnBpbigpCit7CisgICAgbV9pc1Bpbm5lZCA9IGZhbHNl
OworfQorCiBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNQaW5uZWQoKQogewogICAgIHJldHVy
biBtX2lzUGlubmVkOwogfQogCitpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNPbGQoKQorewor
ICAgIHJldHVybiBtX2lzT2xkOworfQorCiBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNPdmVy
c2l6ZSgpCiB7CiAgICAgcmV0dXJuIHJlZ2lvbigpLT5pc0N1c3RvbVNpemUoKTsKQEAgLTE3Niw2
ICsyMDIsNyBAQCBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNPdmVyc2l6ZSgpCiAKIGlubGlu
ZSB1bnNpZ25lZCBDb3BpZWRCbG9jazo6bGl2ZUJ5dGVzKCkKIHsKKyAgICBBU1NFUlQoISFtX2xp
dmVCeXRlcyA9PSAhIW1fbGl2ZU9iamVjdHMpOwogICAgIHJldHVybiBtX2xpdmVCeXRlczsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxp
bmVzLmgJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiwxNSBAQCBpbmxp
bmUgdm9pZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzCiAjaWYgRU5BQkxFKFBBUkFMTEVM
X0dDKQogICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV93b3JrTGlzdExvY2spOwogI2VuZGlm
CisgICAgQVNTRVJUKCEhbV9saXZlQnl0ZXMgPT0gISFtX2xpdmVPYmplY3RzKTsKKyAgICBtX2xp
dmVPYmplY3RzICs9IDE7CiAgICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7CisgICAgQVNTRVJUKCEh
bV9saXZlQnl0ZXMgPT0gISFtX2xpdmVPYmplY3RzKTsKKyAgICBtX2lzT2xkID0gdHJ1ZTsKKyAg
ICBBU1NFUlQobV9saXZlQnl0ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7CisKKyAgICBp
ZiAoaXNQaW5uZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFzaG91bGRFdmFjdWF0
ZSgpKSB7CiAgICAgICAgIHBpbigpOwpAQCAtNDksNiArNTcsMjYgQEAgaW5saW5lIHZvaWQgQ29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcwogICAgIG1fd29ya0xpc3QtPmFwcGVuZChDb3B5V29y
a2xpc3RJdGVtKG93bmVyLCB0b2tlbikpOwogfQogCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6
cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nV3JpdGVCYXJyaWVyKHVuc2lnbmVkIGJ5dGVzKQoreworICAg
IEFTU0VSVCghIW1fbGl2ZUJ5dGVzID09ICEhbV9saXZlT2JqZWN0cyk7CisgICAgbV9saXZlT2Jq
ZWN0cyArPSAxOworICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVzOworICAgIEFTU0VSVCghIW1fbGl2
ZUJ5dGVzID09ICEhbV9saXZlT2JqZWN0cyk7CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDw9IENv
cGllZEJsb2NrOjpibG9ja1NpemUpOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVw
b3J0TGl2ZUJ5dGVzRHVyaW5nQ29weWluZyh1bnNpZ25lZCBieXRlcykKK3sKKyAgICBBU1NFUlQo
ISFtX2xpdmVCeXRlcyA9PSAhIW1fbGl2ZU9iamVjdHMpOworICAgIC8vIFRoaXMgZG9lc24ndCBu
ZWVkIHRvIGJlIGxvY2tlZCBiZWNhdXNlIHRoZSB0aHJlYWQgdGhhdCBjYWxscyB0aGlzIGZ1bmN0
aW9uIG93bnMgdGhlIGN1cnJlbnQgYmxvY2suCisgICAgbV9pc09sZCA9IHRydWU7CisgICAgbV9s
aXZlT2JqZWN0cyArPSAxOworICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVzOworICAgIEFTU0VSVCgh
IW1fbGl2ZUJ5dGVzID09ICEhbV9saXZlT2JqZWN0cyk7CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVz
IDw9IENvcGllZEJsb2NrOjpibG9ja1NpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIENvcGllZEJsb2NrSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2
ICsxODEsMTcgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAg
IH0KIH0KIAordm9pZCBDb3BpZWRTcGFjZTo6ZGlkU3RhcnRGdWxsQ29sbGVjdGlvbigpCit7Cisg
ICAgQVNTRVJUKGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9u
KTsKKyAgICBBU1NFUlQobV9mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgZm9yIChDb3BpZWRC
bG9jayogYmxvY2sgPSBtX3RvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5l
eHQoKSkKKyAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOworCisgICAgZm9yIChDb3BpZWRC
bG9jayogYmxvY2sgPSBtX292ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxv
Y2stPm5leHQoKSkKKyAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOworfQorCiB2b2lkIENv
cGllZFNwYWNlOjpzdGFydGVkQ29weWluZygpCiB7CiAgICAgc3RkOjpzd2FwKG1fZnJvbVNwYWNl
LCBtX3RvU3BhY2UpOwpAQCAtMTk0LDkgKzIwNSwxMSBAQCB2b2lkIENvcGllZFNwYWNlOjpzdGFy
dGVkQ29weWluZygpCiAgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX2Zyb21TcGFjZS0+
aGVhZCgpOyBibG9jazsgYmxvY2sgPSBuZXh0KSB7CiAgICAgICAgIG5leHQgPSBibG9jay0+bmV4
dCgpOwogICAgICAgICBpZiAoIWJsb2NrLT5pc1Bpbm5lZCgpICYmIGJsb2NrLT5jYW5CZVJlY3lj
bGVkKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dGKCJyZWN5Y2xpbmcgZW1wdHkgYmxvY2sgJXBc
biIsIGJsb2NrKTsKICAgICAgICAgICAgIHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhibG9jayk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorICAgICAgICBBU1NFUlQoYmxvY2stPmxp
dmVCeXRlcygpIDw9IENvcGllZEJsb2NrOjpibG9ja1NpemUpOwogICAgICAgICB0b3RhbExpdmVC
eXRlcyArPSBibG9jay0+bGl2ZUJ5dGVzKCk7CiAgICAgICAgIHRvdGFsVXNhYmxlQnl0ZXMgKz0g
YmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwogICAgIH0KQEAgLTIwOCwxMCArMjIxLDEwIEBAIHZv
aWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKICAgICAgICAgICAgIG1fYmxvY2tGaWx0
ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICAgICAgICAgIHRvdGFs
TGl2ZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKICAgICAgICAgICAgIHRvdGFs
VXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwotICAgICAgICAgICAgYmxv
Y2stPmRpZFN1cnZpdmVHQygpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9vdmVy
c2l6ZUJsb2Nrcy5yZW1vdmUoYmxvY2spOwogICAgICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUo
YmxvY2spOworICAgICAgICAgICAgZGF0YUxvZ0YoImRlYWxsb2NhdGluZyBvdmVyc2l6ZSBibG9j
ayAlcFxuIiwgYmxvY2spOwogICAgICAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRl
YWxsb2NhdGVDdXN0b21TaXplKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CiAgICAgICAg
IH0gCiAgICAgICAgIGJsb2NrID0gbmV4dDsKQEAgLTIxOSw3ICsyMzIsNyBAQCB2b2lkIENvcGll
ZFNwYWNlOjpzdGFydGVkQ29weWluZygpCiAKICAgICBkb3VibGUgbWFya2VkU3BhY2VCeXRlcyA9
IG1faGVhcC0+b2JqZWN0U3BhY2UoKS5jYXBhY2l0eSgpOwogICAgIGRvdWJsZSB0b3RhbEZyYWdt
ZW50YXRpb24gPSAoKGRvdWJsZSl0b3RhbExpdmVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpIC8g
KChkb3VibGUpdG90YWxVc2FibGVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpOwotICAgIG1fc2hv
dWxkRG9Db3B5UGhhc2UgPSB0b3RhbEZyYWdtZW50YXRpb24gPD0gT3B0aW9uczo6bWluSGVhcFV0
aWxpemF0aW9uKCk7CisgICAgbV9zaG91bGREb0NvcHlQaGFzZSA9IGhlYXAoKS0+b3BlcmF0aW9u
SW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uICYmIHRvdGFsRnJhZ21lbnRhdGlvbiA8PSBP
cHRpb25zOjptaW5IZWFwVXRpbGl6YXRpb24oKTsKICAgICBpZiAoIW1fc2hvdWxkRG9Db3B5UGhh
c2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQ0LDcgKzI1Nyw2IEBAIHZvaWQgQ29waWVkU3Bh
Y2U6OmRvbmVDb3B5aW5nKCkKICAgICAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3Bh
Y2UtPnJlbW92ZUhlYWQoKTsKICAgICAgICAgLy8gQWxsIG5vbi1waW5uZWQgYmxvY2tzIGluIGZy
b20tc3BhY2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNsYWltZWQgYXMgdGhleSB3ZXJlIGV2YWN1YXRl
ZC4KICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1Bpbm5lZCgpIHx8ICFtX3Nob3VsZERvQ29weVBo
YXNlKTsKLSAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOwogICAgICAgICAvLyBXZSBkb24n
dCBhZGQgdGhlIGJsb2NrIHRvIHRoZSBibG9ja1NldCBiZWNhdXNlIGl0IHdhcyBuZXZlciByZW1v
dmVkLgogICAgICAgICBBU1NFUlQobV9ibG9ja1NldC5jb250YWlucyhibG9jaykpOwogICAgICAg
ICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CkBAIC0z
MTYsNCArMzI4LDQ4IEBAIGJvb2wgQ29waWVkU3BhY2U6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWQK
ICAgICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgJm1fb3ZlcnNpemVCbG9j
a3MpOwogfQogCit2b2lkIENvcGllZFNwYWNlOjp3aWxsQWJhbmRvblN0b3JhZ2Uodm9pZCogcHRy
LCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybjsKKworICAg
IENvcGllZEJsb2NrKiBvbGRCbG9jayA9IGJsb2NrRm9yKHB0cik7CisKKyAgICBpZiAob2xkQmxv
Y2stPmlzT3ZlcnNpemUoKSkgeworICAgICAgICBvbGRCbG9jay0+dW5waW4oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHRoZSBibG9jayBpcyBvbGQgKGkuZS4gaXQgaGFz
IGFscmVhZHkgYmVlbiB0aHJvdWdoIGF0IGxlYXN0IG9uZSBjb2xsZWN0aW9uKQorICAgIC8vIHRo
ZW4gd2UgbmVlZCB0byByZW1vdmUgdGhlIGJ5dGVzIHdlIGFsbG9jYXRlZCBoZXJlIHByZXZpb3Vz
bHkgc28gdGhhdCB0aGUgYmxvY2sncworICAgIC8vIG1fbGl2ZUJ5dGVzIGNvdW50IHJlbWFpbnMg
YWNjdXJhdGUgYWNyb3NzIEVkZW5Db2xsZWN0aW9ucy4gCisgICAgLy8KKyAgICAvLyBBZGRpdGlv
bmFsbHksIGlmIHRoZSBibG9jayBpcyB0aGUgYmxvY2sgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcg
YWxsb2NhdGVkIG91dCBvZiwgCisgICAgLy8gd2UgbmVlZCB0byBzdWJ0cmFjdCB0aGUgYnl0ZXMg
ZnJvbSB0aGUgYmxvY2sgaW4gY2FzZSB3ZSBlbmQgdXAgcmVhbGxvYy1pbmcgaW4gdGhlIAorICAg
IC8vIHNhbWUgYmxvY2suIAorICAgIGlmIChvbGRCbG9jay0+aXNPbGQoKSB8fCBvbGRCbG9jayA9
PSBtX2FsbG9jYXRvci5jdXJyZW50QmxvY2soKSkgeworICAgICAgICBkYXRhTG9nRigid2lsbEFi
YW5kb25TdG9yYWdlOiAoJXAsICVsdSlcbiIsIHB0ciwgYnl0ZXMpOworICAgICAgICBvbGRCbG9j
ay0+ZGlkRXZhY3VhdGVCeXRlcyhieXRlcyk7CisgICAgfQorfQorCit2b2lkIENvcGllZFNwYWNl
OjpkaWRBc3NpZ25TdG9yYWdlKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIEFTU0VS
VChwdHIpOworICAgIENvcGllZEJsb2NrKiBuZXdCbG9jayA9IGJsb2NrRm9yKHB0cik7CisKKyAg
ICBpZiAobmV3QmxvY2stPmlzT3ZlcnNpemUoKSkgeworICAgICAgICBuZXdCbG9jay0+cGluKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkYXRhTG9nRigiZGlkQXNzaWduU3RvcmFn
ZTogKCVwLCAlbHUpXG4iLCBwdHIsIGJ5dGVzKTsKKworICAgIC8vIFdlIG5lZWQgdG8gbm90aWZ5
IHRoZSBibG9jayBvZiBhZGRpdGlvbmFsIGxpdmUgYnl0ZXMgaW4gY2FzZSBvdXIgbmV4dCBjb2xs
ZWN0aW9uIAorICAgIC8vIGlzIGFuIEVkZW5Db2xsZWN0aW9uLiBUaGlzIGZ1bmN0aW9uIG9ubHkg
Z2V0cyBjYWxsZWQgd2hlbiBhc3NpZ25pbmcgQ29waWVkU3BhY2UKKyAgICAvLyBhbGxvY2F0aW9u
cyB0byBvbGQtZ2VuZXJhdGlvbiBvYmplY3RzLCBiZWNhdXNlIHdlIHdvbid0IHJlcG9ydCB0aGVz
ZSBuZXcgYnl0ZXMgaW4gdGhlIAorICAgIC8vIENvcGllZEJsb2NrIGR1cmluZyBtYXJraW5nIG9m
IGFuIEVkZW5Db2xsZWN0aW9uLgorICAgIG5ld0Jsb2NrLT5yZXBvcnRMaXZlQnl0ZXNEdXJpbmdX
cml0ZUJhcnJpZXIoYnl0ZXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAkocmV2aXNpb24gMTU1MzY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNiArNjAsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29waWVkQWxsb2NhdG9yJiBhbGxv
Y2F0b3IoKSB7IHJldHVybiBtX2FsbG9jYXRvcjsgfQogCisgICAgdm9pZCBkaWRTdGFydEZ1bGxD
b2xsZWN0aW9uKCk7CisKICAgICB2b2lkIHN0YXJ0ZWRDb3B5aW5nKCk7CiAgICAgdm9pZCBkb25l
Q29weWluZygpOwogICAgIGJvb2wgaXNJbkNvcHlQaGFzZSgpIHsgcmV0dXJuIG1faW5Db3B5aW5n
UGhhc2U7IH0KQEAgLTgwLDYgKzgyLDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBDb3BpZWRC
bG9jayogYmxvY2tGb3Iodm9pZCopOwogCisgICAgSGVhcCogaGVhcCgpIGNvbnN0IHsgcmV0dXJu
IG1faGVhcDsgfQorCisgICAgdm9pZCBjb3B5V3JpdGVCYXJyaWVyKHZvaWQqIG9sZFB0ciwgc2l6
ZV90IG9sZFNpemUpOworICAgIHZvaWQgd2lsbEFiYW5kb25TdG9yYWdlKHZvaWQqIG9sZFB0ciwg
c2l6ZV90IG9sZFNpemUpOworICAgIHZvaWQgZGlkQXNzaWduU3RvcmFnZSh2b2lkKiBuZXdQdHIs
IHNpemVfdCBuZXdTaXplKTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc092ZXJzaXpl
KHNpemVfdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9y
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUs
NyBAQCBpbmxpbmUgYm9vbCBDb3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvCiBpbmxpbmUgdm9p
ZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQogewogICAgIHZv
aWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxs
IGJlIGFzc2lnbmVkLgotICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2Nh
dGUoYnl0ZXMsICZyZXN1bHQpKSkKKyAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRy
eUFsbG9jYXRlRHVyaW5nQ29weWluZyhieXRlcywgJnJlc3VsdCkpKQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIAogICAgIHJlc3VsdCA9IGFsbG9jYXRlTmV3U3BhY2VTbG93KGJ5dGVzKTsK
QEAgLTcwLDcgKzcwLDcgQEAgaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1Nw
YQogICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7CiAKICAg
ICB2b2lkKiByZXN1bHQgPSAwOwotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2Nv
cGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7CisgICAgQ2hlY2tlZEJv
b2xlYW4gZGlkU3VjY2VlZCA9IG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlRHVyaW5nQ29w
eWluZyhieXRlcywgJnJlc3VsdCk7CiAgICAgQVNTRVJUKGRpZFN1Y2NlZWQpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CkBAIC05OCw3ICs5OCw2IEBAIGlubGluZSB2b2lkIENvcHlWaXNpdG9yOjpk
aWRDb3B5KHZvaWQqIHAKICAgICBBU1NFUlQoIWJsb2NrLT5pc1Bpbm5lZCgpKTsKIAogICAgIGJs
b2NrLT5kaWRFdmFjdWF0ZUJ5dGVzKGJ5dGVzKTsKLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTUzNjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNiArNTUsOCBAQCBuYW1lc3BhY2UgeyAKIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VIZWFw
U2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ugd2VicGFnZS4KIHN0YXRp
YyBjb25zdCBzaXplX3Qgc21hbGxIZWFwU2l6ZSA9IDEgKiBNQjsgLy8gTWF0Y2hlcyB0aGUgRmFz
dE1hbGxvYyBwZXItdGhyZWFkIGNhY2hlLgogCisjZGVmaW5lIEVOQUJMRV9HQ19MT0dHSU5HIDAK
KwogI2lmIEVOQUJMRShHQ19MT0dHSU5HKQogI2lmIENPTVBJTEVSKENMQU5HKQogI2RlZmluZSBE
RUZJTkVfR0NfTE9HR0lOR19HTE9CQUwodHlwZSwgbmFtZSwgYXJndW1lbnRzKSBcCkBAIC0xNDks
NiArMTUxLDggQEAgc3RydWN0IEdDQ291bnRlciB7CiAjZGVmaW5lIEdDQ09VTlRFUihuYW1lLCB2
YWx1ZSkgZG8geyB9IHdoaWxlIChmYWxzZSkKICNlbmRpZgogCisjdW5kZWYgRU5BQkxFX0dDX0xP
R0dJTkcKKwogc3RhdGljIGlubGluZSBzaXplX3QgbWluSGVhcFNpemUoSGVhcFR5cGUgaGVhcFR5
cGUsIHNpemVfdCByYW1TaXplKQogewogICAgIGlmIChoZWFwVHlwZSA9PSBMYXJnZUhlYXApCkBA
IC0xNjAsNyArMTY0LDcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgcHJvcG9ydGlvbmFsSGVhcFNp
egogewogICAgIC8vIFRyeSB0byBzdGF5IHVuZGVyIDEvMiBSQU0gc2l6ZSB0byBsZWF2ZSByb29t
IGZvciB0aGUgRE9NLCByZW5kZXJpbmcsIG5ldHdvcmtpbmcsIGV0Yy4KICAgICBpZiAoaGVhcFNp
emUgPCByYW1TaXplIC8gNCkKLSAgICAgICAgcmV0dXJuIDIgKiBoZWFwU2l6ZTsKKyAgICAgICAg
cmV0dXJuIDMgKiBoZWFwU2l6ZTsKICAgICBpZiAoaGVhcFNpemUgPCByYW1TaXplIC8gMikKICAg
ICAgICAgcmV0dXJuIDEuNSAqIGhlYXBTaXplOwogICAgIHJldHVybiAxLjI1ICogaGVhcFNpemU7
CkBAIC0yNDgsOSArMjUyLDEyIEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICAgICAsIG1fcmFtU2l6ZShyYW1TaXplKCkpCiAgICAgLCBtX21pbkJ5dGVzUGVyQ3ljbGUo
bWluSGVhcFNpemUobV9oZWFwVHlwZSwgbV9yYW1TaXplKSkKICAgICAsIG1fc2l6ZUFmdGVyTGFz
dENvbGxlY3QoMCkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRMaW1pdChtX21pbkJ5dGVzUGVyQ3lj
bGUpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkKDApCi0gICAgLCBtX2J5dGVzQWJhbmRvbmVkKDAp
CisgICAgLCBtX21heEhlYXBTaXplKG1fbWluQnl0ZXNQZXJDeWNsZSkKKyAgICAsIG1fbWF4RWRl
blNpemUobV9tYXhIZWFwU2l6ZSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkK
KyAgICAsIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1fc2hvdWxkRG9GdWxs
Q29sbGVjdGlvbihmYWxzZSkKKyAgICAsIG1fbnVtQ29sbGVjdGlvbnNTaW5jZUxhc3RGdWxsKDAp
CiAgICAgLCBtX3RvdGFsQnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX3RvdGFsQnl0ZXNDb3BpZWQo
MCkKICAgICAsIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyhOb09wZXJhdGlvbikKQEAgLTMzMCw4ICsz
MzcsOCBAQCB2b2lkIEhlYXA6OnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCkKIAogdm9pZCBI
ZWFwOjpkaWRBYmFuZG9uKHNpemVfdCBieXRlcykKIHsKLSAgICBtX2FjdGl2aXR5Q2FsbGJhY2st
PmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWQgKyBtX2J5dGVzQWJhbmRvbmVkKTsKLSAgICBt
X2J5dGVzQWJhbmRvbmVkICs9IGJ5dGVzOworICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxs
b2NhdGUobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSArIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3lj
bGUpOworICAgIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUgKz0gYnl0ZXM7CiB9CiAKIHZvaWQg
SGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCkBAIC00NzksNiArNDg2LDEzIEBAIHZvaWQgSGVhcDo6
bWFya1Jvb3RzKCkKICAgICB2aXNpdG9yLnNldHVwKCk7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhl
YXBSb290VmlzaXRvcih2aXNpdG9yKTsKIAorICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
PT0gRWRlbkNvbGxlY3Rpb24pIHsKKyAgICAgICAgR0NQSEFTRShBZGRPbGRHZW5lcmF0aW9uRXhl
Y3V0YWJsZVRvUmVtZW1iZXJlZFNldCk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gcmUtcHJvY2Vz
cyBhbGwgb2xkLWdlbmVyYXRpb24gZXhlY3V0YWJsZXMgc28gdGhhdCB0aGV5CisgICAgICAgIC8v
IHVwZGF0ZSB0aGVpciBDb2RlQmxvY2tzLgorICAgICAgICBhZGRPbGRHZW5lcmF0aW9uRXhlY3V0
YWJsZXNUb1JlbWVtYmVyZWRTZXQoKTsKKyAgICB9CisKICAgICB7CiAgICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIgZW5hYmxlcih2aXNpdG9yKTsKIApAQCAtNDg5LDEyICs1MDMsMTQgQEAgdm9p
ZCBIZWFwOjptYXJrUm9vdHMoKQogICAgICAgICAgICAgTUFSS19MT0dfUk9PVCh2aXNpdG9yLCAi
QysrIFN0YWNrIik7CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChtYWNoaW5lVGhyZWFkUm9v
dHMpOwogICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAg
Ly9kYXRhTG9nRigiVmlzaXRlZCAlbHUgb2JqZWN0cyBzbyBmYXIuXG4iLCB2aXNpdG9yLnZpc2l0
Q291bnQoKSk7CiAgICAgICAgIH0KICAgICAgICAgewogICAgICAgICAgICAgR0NQSEFTRShWaXNp
dFN0YWNrUm9vdHMpOwogICAgICAgICAgICAgTUFSS19MT0dfUk9PVCh2aXNpdG9yLCAiU3RhY2si
KTsKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHN0YWNrUm9vdHMpOwogICAgICAgICAgICAg
dmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgLy9kYXRhTG9nRigiVmlzaXRl
ZCAlbHUgb2JqZWN0cyBzbyBmYXIuXG4iLCB2aXNpdG9yLnZpc2l0Q291bnQoKSk7CiAgICAgICAg
IH0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgewpAQCAtNTAyLDYgKzUxOCw3IEBAIHZv
aWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwg
IlNjcmF0Y2ggQnVmZmVycyIpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoc2NyYXRjaEJ1
ZmZlclJvb3RzKTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAg
ICAgICAgIC8vZGF0YUxvZ0YoIlZpc2l0ZWQgJWx1IG9iamVjdHMgc28gZmFyLlxuIiwgdmlzaXRv
ci52aXNpdENvdW50KCkpOwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgewpAQCAtNTA5LDEy
ICs1MjYsMTQgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgICAgICAgICAgTUFSS19MT0df
Uk9PVCh2aXNpdG9yLCAiUHJvdGVjdGVkIE9iamVjdHMiKTsKICAgICAgICAgICAgIG1hcmtQcm90
ZWN0ZWRPYmplY3RzKGhlYXBSb290VmlzaXRvcik7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7CisgICAgICAgICAgICAvL2RhdGFMb2dGKCJWaXNpdGVkICVsdSBvYmplY3Rz
IHNvIGZhci5cbiIsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKICAgICAgICAgfQogICAgICAgICB7
CiAgICAgICAgICAgICBHQ1BIQVNFKFZpc2l0VGVtcFNvcnRWZWN0b3JzKTsKICAgICAgICAgICAg
IE1BUktfTE9HX1JPT1QodmlzaXRvciwgIlRlbXAgU29ydCBWZWN0b3JzIik7CiAgICAgICAgICAg
ICBtYXJrVGVtcFNvcnRWZWN0b3JzKGhlYXBSb290VmlzaXRvcik7CiAgICAgICAgICAgICB2aXNp
dG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgICAgICAgICAvL2RhdGFMb2dGKCJWaXNpdGVkICVs
dSBvYmplY3RzIHNvIGZhci5cbiIsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKICAgICAgICAgfQog
CiAgICAgICAgIHsKQEAgLTUyMyw2ICs1NDIsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAg
ICAgICAgICAgICAgICAgTUFSS19MT0dfUk9PVCh2aXNpdG9yLCAiQXJndW1lbnQgQnVmZmVycyIp
OwogICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoaGVhcFJv
b3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5kb25h
dGVBbmREcmFpbigpOworICAgICAgICAgICAgICAgIC8vZGF0YUxvZ0YoIlZpc2l0ZWQgJWx1IG9i
amVjdHMgc28gZmFyLlxuIiwgdmlzaXRvci52aXNpdENvdW50KCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGlmIChtX3ZtLT5leGNlcHRpb24oKSkgewpAQCAtNTMwLDYgKzU1
MCw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICAgICAgICAgIE1BUktfTE9HX1JPT1Qo
dmlzaXRvciwgIkV4Y2VwdGlvbnMiKTsKICAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNp
dChtX3ZtLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7CisgICAgICAgICAgICAvL2RhdGFMb2dGKCJWaXNpdGVkICVsdSBvYmplY3Rz
IHNvIGZhci5cbiIsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKICAgICAgICAgfQogICAgIAogICAg
ICAgICB7CkBAIC01MzcsNiArNTU4LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgICAg
ICAgICAgTUFSS19MT0dfUk9PVCh2aXNpdG9yLCAiU3Ryb25nIEhhbmRsZXMiKTsKICAgICAgICAg
ICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwogICAg
ICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgLy9kYXRhTG9n
RigiVmlzaXRlZCAlbHUgb2JqZWN0cyBzbyBmYXIuXG4iLCB2aXNpdG9yLnZpc2l0Q291bnQoKSk7
CiAgICAgICAgIH0KICAgICAKICAgICAgICAgewpAQCAtNTQ0LDYgKzU2Niw3IEBAIHZvaWQgSGVh
cDo6bWFya1Jvb3RzKCkKICAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwgIkhhbmRs
ZSBTdGFjayIpOwogICAgICAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChoZWFwUm9vdFZpc2l0
b3IpOwogICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAg
Ly9kYXRhTG9nRigiVmlzaXRlZCAlbHUgb2JqZWN0cyBzbyBmYXIuXG4iLCB2aXNpdG9yLnZpc2l0
Q291bnQoKSk7CiAgICAgICAgIH0KICAgICAKICAgICAgICAgewpAQCAtNTUyLDYgKzU3NSw3IEBA
IHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICAgICAgICAgIG1fY29kZUJsb2Nrcy50cmFjZU1h
cmtlZCh2aXNpdG9yKTsKICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLnRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKHZpc2l0b3IpOwogICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFp
bigpOworICAgICAgICAgICAgLy9kYXRhTG9nRigiVmlzaXRlZCAlbHUgb2JqZWN0cyBzbyBmYXIu
XG4iLCB2aXNpdG9yLnZpc2l0Q291bnQoKSk7CiAgICAgICAgIH0KICAgICAKICNpZiBFTkFCTEUo
UEFSQUxMRUxfR0MpCkBAIC01ODIsNyArNjA2LDEzIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkK
ICAgICAgICAgfQogICAgIH0KIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShjbGVhclJlbWVtYmVy
ZWRTZXQpOworICAgICAgICBtX29iamVjdFNwYWNlLmNsZWFyUmVtZW1iZXJlZFNldCgpOworICAg
IH0KKwogICAgIEdDQ09VTlRFUihWaXNpdGVkVmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50
KCkpOworICAgIC8vZGF0YUxvZ0YoIlZpc2l0ZWQgJWx1IG9iamVjdHNcbiIsIHZpc2l0b3Iudmlz
aXRDb3VudCgpKTsKIAogICAgIG1fc2hhcmVkRGF0YS5kaWRGaW5pc2hNYXJraW5nKCk7CiAjaWYg
RU5BQkxFKE9CSkVDVF9NQVJLX0xPR0dJTkcpCkBAIC01OTIsNiArNjIyLDcgQEAgdm9pZCBIZWFw
OjptYXJrUm9vdHMoKQogI2VuZGlmCiAgICAgTUFSS19MT0dfTUVTU0FHRTIoIlxuTnVtYmVyIG9m
IGxpdmUgT2JqZWN0cyBhZnRlciBmdWxsIEdDICVsdSwgdG9vayAlLjZmIHNlY3NcbiIsIHZpc2l0
Q291bnQsIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7
CiAjZW5kaWYKKyAgICAvL2RhdGFMb2dGKCJUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUg
aGVhcDogJWx1XG4iLCBtX29iamVjdFNwYWNlLm9iamVjdENvdW50KCkpOwogCiAgICAgbV90b3Rh
bEJ5dGVzVmlzaXRlZCA9IHZpc2l0b3IuYnl0ZXNWaXNpdGVkKCk7CiAgICAgbV90b3RhbEJ5dGVz
Q29waWVkID0gdmlzaXRvci5ieXRlc0NvcGllZCgpOwpAQCAtNzEzLDExICs3NDQsMzYgQEAgdm9p
ZCBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpCiAgICAgbV9qaXRTdHViUm91dGlu
ZXMuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKK3ZvaWQgSGVh
cDo6YWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9SZW1lbWJlcmVkU2V0KCkKK3sKKyAgICBB
U1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKTsKKyAgICBmb3Ig
KEV4ZWN1dGFibGVCYXNlKiBjdXJyZW50ID0gbV9jb21waWxlZENvZGUuaGVhZCgpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKSB7CisgICAgICAgIGlmIChpc01hcmtlZChjdXJy
ZW50KSkKKyAgICAgICAgICAgIGFkZFRvUmVtZW1iZXJlZFNldChjdXJyZW50KTsKKyAgICB9Cisg
ICAgZGF0YUxvZ0YoIkxlbmd0aCBvZiBjb21waWxlZCBjb2RlOiAlbHVcbiIsIG1fY29tcGlsZWRD
b2RlLnNpemUoKSk7Cit9CisKK3ZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoY2VsbCk7CisgICAgQVNTRVJUKCFPcHRpb25zOjpl
bmFibGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNT
RVJUKGlzTWFya2VkKGNlbGwpKTsKKyAgICBpZiAobV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKGlzSW5SZW1lbWJlcmVkU2V0KGNlbGwpKQorICAgICAg
ICByZXR1cm47CisgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRSZW1lbWJlcmVk
KGNlbGwpOworICAgIG1fc2xvdFZpc2l0b3IudW5jb25kaXRpb25hbGx5QXBwZW5kKGNvbnN0X2Nh
c3Q8SlNDZWxsKj4oY2VsbCkpOworfQorCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkK
IHsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm47Ci0gICAgCisg
ICAKKyAgICBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24gPSB0cnVlOworICAgIG1fc2xvdFZpc2l0
b3IuY2xlYXJNYXJrU3RhY2soKTsgCiAgICAgY29sbGVjdChEb1N3ZWVwKTsKIH0KIApAQCAtNzQ5
LDcgKzgwNSwxOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAg
ICAgbV92bS0+cHJlcGFyZVRvRGlzY2FyZENvZGUoKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsg
Ly8gRGVjcmVtZW50IGRlZmVyYWwgbWFudWFsbHksIHNvIHdlIGRvbid0IEdDIHdoZW4gd2UgZG8g
c28sIHNpbmNlIHdlIGFyZSBhbHJlYWR5IEdDaW5nIS4KICAgICAKLSAgICBtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOworICAgIGlmIChtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24p
IHsKKyAgICAgICAgLy9kYXRhTG9nRigiU3RhcnRpbmcgRnVsbENvbGxlY3Rpb24uLi5cbiIpOwor
ICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBGdWxsQ29sbGVjdGlvbjsKKyAgICAgICAg
bV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uID0gZmFsc2U7CisgICAgICAgIG1fbnVtQ29sbGVjdGlv
bnNTaW5jZUxhc3RGdWxsID0gMDsKKyAgICAgICAgZGF0YUxvZ0YoIkZ1bGxDb2xsZWN0aW9uXG4i
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvL2RhdGFMb2dGKCJTdGFydGluZyBFZGVuQ29sbGVj
dGlvbi4uLlxuIik7CisgICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEVkZW5Db2xsZWN0
aW9uOworICAgICAgICBtX251bUNvbGxlY3Rpb25zU2luY2VMYXN0RnVsbCsrOworICAgICAgICBk
YXRhTG9nRigiRWRlbkNvbGxlY3Rpb25cbiIpOworICAgIH0KICAgICBtX2V4dHJhTWVtb3J5VXNh
Z2UgPSAwOwogCiAgICAgbV9hY3Rpdml0eUNhbGxiYWNrLT53aWxsQ29sbGVjdCgpOwpAQCAtNzYz
LDYgKzgzMCw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAg
ICB7CiAgICAgICAgIEdDUEhBU0UoQ2Fub25pY2FsaXplKTsKICAgICAgICAgbV9vYmplY3RTcGFj
ZS5jYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CisgICAgICAgIGlmIChtX29wZXJhdGlv
bkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgICAgICBtX3N0b3JhZ2VTcGFj
ZS5kaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCk7CiAgICAgfQogCiAgICAgbWFya1Jvb3RzKCk7CkBA
IC04MTAsNyArODc5LDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
ZwogICAgIH0KIAogICAgIG1fc3dlZXBlci0+c3RhcnRTd2VlcGluZyhtX2Jsb2NrU25hcHNob3Qp
OwotICAgIG1fYnl0ZXNBYmFuZG9uZWQgPSAwOworICAgIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3lj
bGUgPSAwOwogCiAgICAgewogICAgICAgICBHQ1BIQVNFKFJlc2V0QWxsb2NhdG9ycyk7CkBAIC04
MjMsMTkgKzg5MiwyNCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dn
CiAKICAgICBtX3NpemVBZnRlckxhc3RDb2xsZWN0ID0gY3VycmVudEhlYXBTaXplOwogCi0gICAg
Ly8gVG8gYXZvaWQgcGF0aG9sb2dpY2FsIEdDIGNodXJuIGluIHZlcnkgc21hbGwgYW5kIHZlcnkg
bGFyZ2UgaGVhcHMsIHdlIHNldAotICAgIC8vIHRoZSBuZXcgYWxsb2NhdGlvbiBsaW1pdCBiYXNl
ZCBvbiB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBoZWFwLCB3aXRoIGEKLSAgICAvLyBmaXhlZCBt
aW5pbXVtLgotICAgIHNpemVfdCBtYXhIZWFwU2l6ZSA9IG1heChtaW5IZWFwU2l6ZShtX2hlYXBU
eXBlLCBtX3JhbVNpemUpLCBwcm9wb3J0aW9uYWxIZWFwU2l6ZShjdXJyZW50SGVhcFNpemUsIG1f
cmFtU2l6ZSkpOwotICAgIG1fYnl0ZXNBbGxvY2F0ZWRMaW1pdCA9IG1heEhlYXBTaXplIC0gY3Vy
cmVudEhlYXBTaXplOworICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxl
Y3Rpb24pIHsKKyAgICAgICAgLy8gVG8gYXZvaWQgcGF0aG9sb2dpY2FsIEdDIGNodXJuIGluIHZl
cnkgc21hbGwgYW5kIHZlcnkgbGFyZ2UgaGVhcHMsIHdlIHNldAorICAgICAgICAvLyB0aGUgbmV3
IGFsbG9jYXRpb24gbGltaXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgaGVhcCwg
d2l0aCBhCisgICAgICAgIC8vIGZpeGVkIG1pbmltdW0uCisgICAgICAgIG1fbWF4SGVhcFNpemUg
PSBtYXgobWluSGVhcFNpemUobV9oZWFwVHlwZSwgbV9yYW1TaXplKSwgcHJvcG9ydGlvbmFsSGVh
cFNpemUoY3VycmVudEhlYXBTaXplLCBtX3JhbVNpemUpKTsKKyAgICB9CiAKLSAgICBtX2J5dGVz
QWxsb2NhdGVkID0gMDsKKyAgICBtX21heEVkZW5TaXplID0gbV9tYXhIZWFwU2l6ZSAtIGN1cnJl
bnRIZWFwU2l6ZTsKKyAgICBpZiAoKGRvdWJsZSltX21heEVkZW5TaXplIC8gKGRvdWJsZSltX21h
eEhlYXBTaXplIDwgKDEuMCAvIDMuMCkpCisgICAgICAgIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlv
biA9IHRydWU7CisKKyAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gMDsKICAgICBkb3Vi
bGUgbGFzdEdDRW5kVGltZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAg
ICAgbV9sYXN0R0NMZW5ndGggPSBsYXN0R0NFbmRUaW1lIC0gbGFzdEdDU3RhcnRUaW1lOwogCiAg
ICAgaWYgKE9wdGlvbnM6OnJlY29yZEdDUGF1c2VUaW1lcygpKQogICAgICAgICBIZWFwU3RhdGlz
dGljczo6cmVjb3JkR0NQYXVzZVRpbWUobGFzdEdDU3RhcnRUaW1lLCBsYXN0R0NFbmRUaW1lKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gQ29sbGVjdGlvbik7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0
aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbik7CiAKICAgICBt
X29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBKQVZBU0NSSVBUQ09SRV9H
Q19FTkQoKTsKQEAgLTg1NCw5ICs5MjgsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dn
bGUgc3dlZXBUb2dnCiAgICAgICAgIGRhdGFMb2coYWZ0ZXIgLSBiZWZvcmUsICIgbXMsICIsIGN1
cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICIga2JdXG4iKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoQUxM
T0NBVElPTl9MT0dHSU5HKQotICAgIGRhdGFMb2dGKCJKU0MgR0MgZmluaXNoaW5nIGNvbGxlY3Rp
b24uXG4iKTsKLSNlbmRpZgorICAgIC8vZGF0YUxvZ0YoIkpTQyBHQyBmaW5pc2hpbmcgY29sbGVj
dGlvbi4gVG9vayAlbGYgc2Vjb25kcy5cbiIsIG1fbGFzdEdDTGVuZ3RoKTsKIH0KIAogYm9vbCBI
ZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkKQEAgLTg2Niw3ICs5MzgsMTIgQEAgYm9v
bCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkKICAgICAKICAgICBpZiAoIXNob3Vs
ZENvbGxlY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorICAKKy8qIAorICAgIGlm
IChzdGFja0hlaWdodCgpID4gMzApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyovCisgCiAgICAg
Y29sbGVjdChEb05vdFN3ZWVwKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTg5OCw4ICs5NzUs
OCBAQCB2b2lkIEhlYXA6OnNldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFiCiAKIHZvaWQgSGVh
cDo6ZGlkQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogewotICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+
ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9jYXRlZCArIG1fYnl0ZXNBYmFuZG9uZWQpOwotICAgIG1f
Ynl0ZXNBbGxvY2F0ZWQgKz0gYnl0ZXM7CisgICAgbV9hY3Rpdml0eUNhbGxiYWNrLT5kaWRBbGxv
Y2F0ZShtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlICsgbV9ieXRlc0FiYW5kb25lZFRoaXNDeWNs
ZSk7CisgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSArPSBieXRlczsKIH0KIAogYm9vbCBI
ZWFwOjppc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpCkBAIC05NzUsNCArMTA1Miw0MSBAQCB2b2lk
IEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmCiAgICAgY29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcigpOwogfQogCit2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwq
IGZyb20pCit7CisgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChjb25zdF9jYXN0PEpT
Q2VsbCo+KGZyb20pKTsKKyAgICBpZiAoIWZyb20gfHwgIWlzTWFya2VkKGZyb20pKQorICAgICAg
ICByZXR1cm47CisgICAgSGVhcDo6aGVhcChmcm9tKS0+YWRkVG9SZW1lbWJlcmVkU2V0KGZyb20p
OworfQorCit2b2lkIEhlYXA6OndpbGxBYmFuZG9uU3RvcmFnZShjb25zdCBKU0NlbGwqIGNlbGws
IHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmICghY2VsbCB8fCAhaXNNYXJrZWQo
Y2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0b3JhZ2VTcGFjZS53aWxsQWJhbmRvblN0
b3JhZ2UocHRyLCBieXRlcyk7Cit9CisKK3ZvaWQgSGVhcDo6ZGlkQXNzaWduU3RvcmFnZShjb25z
dCBKU0NlbGwqIGNlbGwsIHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmICghY2Vs
bCB8fCAhaXNNYXJrZWQoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0b3JhZ2VTcGFj
ZS5kaWRBc3NpZ25TdG9yYWdlKHB0ciwgYnl0ZXMpOworfQorCit2b2lkIEhlYXA6OmNvcHlXcml0
ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tLCB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRTaXpl
LCB2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
TE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7CisKKyAgICBpZiAoIWZyb20g
fHwgIWlzTWFya2VkKGZyb20pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFuZXdQdHIpIHsK
KyAgICAgICAgQVNTRVJUKCFuZXdTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBI
ZWFwKiBoZWFwID0gSGVhcDo6aGVhcChmcm9tKTsKKyAgICBoZWFwLT5tX3N0b3JhZ2VTcGFjZS53
aWxsQWJhbmRvblN0b3JhZ2Uob2xkUHRyLCBvbGRTaXplKTsKKyAgICBoZWFwLT5tX3N0b3JhZ2VT
cGFjZS5kaWRBc3NpZ25TdG9yYWdlKG5ld1B0ciwgbmV3U2l6ZSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU1MzY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHR5cGVkZWYgSGFzaENvdW50ZWRT
ZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50U2V0OwogICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+IFR5cGVDb3VudFNldDsKIAotICAgIGVudW0gT3BlcmF0aW9uSW5Qcm9ncmVz
cyB7IE5vT3BlcmF0aW9uLCBBbGxvY2F0aW9uLCBDb2xsZWN0aW9uIH07CisgICAgZW51bSBPcGVy
YXRpb25JblByb2dyZXNzIHsgTm9PcGVyYXRpb24sIEFsbG9jYXRpb24sIEZ1bGxDb2xsZWN0aW9u
LCBFZGVuQ29sbGVjdGlvbiB9OwogCiAgICAgZW51bSBIZWFwVHlwZSB7IFNtYWxsSGVhcCwgTGFy
Z2VIZWFwIH07CiAKQEAgLTkzLDEwICs5MywyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAKKyAgICAgICAgdm9pZCBhZGRPbGRHZW5l
cmF0aW9uRXhlY3V0YWJsZXNUb1JlbWVtYmVyZWRTZXQoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBhZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKiBjZWxsKTsKKyAgICAg
ICAgYm9vbCBpc0luUmVtZW1iZXJlZFNldChjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjZWxsKTsKKyAgICAgICAgICAgIEFTU0VSVCghT3B0
aW9uczo6ZW5hYmxlQ29uY3VycmVudEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aXNSZW1lbWJl
cmVkKGNlbGwpOworICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzV3JpdGVCYXJyaWVy
RW5hYmxlZCgpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihj
b25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVy
KGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwotICAgICAgICBzdGF0aWMgdWludDhfdCogYWRkcmVz
c09mQ2FyZEZvcihKU0NlbGwqKTsKKworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBjb3B5V3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIHZvaWQqIG9sZFB0ciwgc2l6ZV90
IG9sZFNpemUsIHZvaWQqIG5ld1B0ciwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHdpbGxBYmFuZG9uU3RvcmFnZShjb25zdCBKU0NlbGwqLCB2b2lkKiBv
bGRQdHIsIHNpemVfdCBvbGRTaXplKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
aWRBc3NpZ25TdG9yYWdlKGNvbnN0IEpTQ2VsbCosIHZvaWQqIG5ld1B0ciwgc2l6ZV90IG5ld1Np
emUpOwogCiAgICAgICAgIEhlYXAoVk0qLCBIZWFwVHlwZSk7CiAgICAgICAgIH5IZWFwKCk7CkBA
IC0xMTQsNiArMTI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gdHJ1ZSBpZiBj
b2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCiAgICAgICAgIGlubGluZSBib29sIGlzQ29sbGVjdGlu
ZygpOworICAgICAgICBpbmxpbmUgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb25JblByb2dy
ZXNzKCkgeyByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzOyB9CiAgICAgICAgIC8vIHRydWUg
aWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCiAgICAgICAgIGlu
bGluZSBib29sIGlzQnVzeSgpOwogICAgICAgICAKQEAgLTI0Niw5ICsyNTksMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CiAgICAg
ICAgIHNpemVfdCBtX3NpemVBZnRlckxhc3RDb2xsZWN0OwogCi0gICAgICAgIHNpemVfdCBtX2J5
dGVzQWxsb2NhdGVkTGltaXQ7Ci0gICAgICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOwotICAg
ICAgICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZDsKKyAgICAgICAgc2l6ZV90IG1fbWF4SGVhcFNp
emU7CisgICAgICAgIHNpemVfdCBtX21heEVkZW5TaXplOworICAgICAgICBzaXplX3QgbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAgICAgICAgc2l6ZV90IG1fYnl0ZXNBYmFuZG9uZWRUaGlz
Q3ljbGU7CisgICAgICAgIGJvb2wgbV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uOworICAgICAgICB1
bnNpZ25lZCBtX251bUNvbGxlY3Rpb25zU2luY2VMYXN0RnVsbDsKIAogICAgICAgICBzaXplX3Qg
bV90b3RhbEJ5dGVzVmlzaXRlZDsKICAgICAgICAgc2l6ZV90IG1fdG90YWxCeXRlc0NvcGllZDsK
QEAgLTI2NCw2ICsyODAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVlRhYmxlU3BlY3Ry
dW0gbV9kZXN0cm95ZWRUeXBlQ291bnRzOwogI2VuZGlmCiAKKyAgICAgICAgSGFzaFNldDxjb25z
dCBKU0NlbGwqPiBtX2NvcHlpbmdSZW1lbWJlcmVkU2V0OworCiAgICAgICAgIFByb3RlY3RDb3Vu
dFNldCBtX3Byb3RlY3RlZFZhbHVlczsKICAgICAgICAgVmVjdG9yPFZlY3RvcjxWYWx1ZVN0cmlu
Z1BhaXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiogPiBtX3RlbXBTb3J0aW5nVmVjdG9yczsK
ICAgICAgICAgT3duUHRyPEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPiA+IG1fbWFya0xp
c3RTZXQ7CkBAIC0zMTMsOCArMzMxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChp
c0RlZmVycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChPcHRp
b25zOjpnY01heEhlYXBTaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRl
ZCA+IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBtX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb247Ci0gICAgICAgIHJldHVybiBtX2J5dGVz
QWxsb2NhdGVkID4gbV9ieXRlc0FsbG9jYXRlZExpbWl0ICYmIG1faXNTYWZlVG9Db2xsZWN0ICYm
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbjsKKyAgICAgICAgICAgIHJldHVy
biBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID4gT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpICYm
IG1faXNTYWZlVG9Db2xsZWN0ICYmIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlv
bjsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBtX21heEVkZW5T
aXplICYmIG1faXNTYWZlVG9Db2xsZWN0ICYmIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09w
ZXJhdGlvbjsKICAgICB9CiAKICAgICBib29sIEhlYXA6OmlzQnVzeSgpCkBAIC0zMjQsNyArMzQy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBib29sIEhlYXA6OmlzQ29sbGVjdGluZygpCiAg
ICAgewotICAgICAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IENvbGxlY3Rpb247
CisgICAgICAgIHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24g
fHwgbV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uOwogICAgIH0KIAogICAg
IGlubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKQEAgLTM2NCwxOCAr
MzgyLDMwIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQg
SGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopCisgICAgaW5saW5lIHZv
aWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKICAg
ICB7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAgICBXcml0ZUJh
cnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJpZXIoKTsKKyNlbmRpZgorICAgICAgICBpZiAo
IWZyb20gfHwgIWlzTWFya2VkKGZyb20pKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAoIXRvIHx8IGlzTWFya2VkKHRvKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSGVh
cDo6aGVhcChmcm9tKS0+YWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOwogICAgIH0KIAotICAgIGlu
bGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKQorICAg
IGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFs
dWUgdG8pCiAgICAgeworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICAg
ICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CisjZW5kaWYKKyAg
ICAgICAgaWYgKCF0by5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd3Jp
dGVCYXJyaWVyKGZyb20sIHRvLmFzQ2VsbCgpKTsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBI
ZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3QpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAxNTUzNjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDEwIEBAIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhSZWdpb24qIHJlZ2lv
biwKICAgICAsIG1fc3RhdGUoTmV3KSAvLyBBbGwgY2VsbHMgc3RhcnQgb3V0IHVubWFya2VkLgog
ICAgICwgbV93ZWFrU2V0KGFsbG9jYXRvci0+aGVhcCgpLT52bSgpKQogeworICAgIC8vIFRoaXMg
bmVlZHMgdG8gYmUgdHJ1ZSBiZWNhdXNlIHdlIHVzZSB0d28gYml0cyBpbiB0aGUgQml0bWFwIHJp
Z2h0IG5leHQgdG8gZWFjaCBvdGhlcgorICAgIC8vIGZvciB0aGUgbWFyayBiaXQgYW5kIHRoZSBy
ZW1lbWJlcmVkIHNldCBiaXQuCisgICAgLy8gQXRvbXMgYXJlIDggYnl0ZXMsIGJ1dCBhbGwgSlND
ZWxscyBhcmUgPj0gMTYgYnl0ZXMsIHNvIGVhY2ggY2VsbCB0ZWNobmljYWxseSB0YWtlcyBhdCBs
ZWFzdCB0d28gYXRvbXMuCisgICAgQVNTRVJUKG1fYXRvbXNQZXJDZWxsID49IDIpOwogICAgIEFT
U0VSVChhbGxvY2F0b3IpOwogICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhp
cyk7CiB9CkBAIC0xOTksNCArMjAzLDQwIEBAIHZvaWQgTWFya2VkQmxvY2s6OmNhbm9uaWNhbGl6
ZUNlbGxMaXZlbmUKICAgICBtX3N0YXRlID0gTWFya2VkOwogfQogCit2b2lkIE1hcmtlZEJsb2Nr
OjpjbGVhck1hcmtzKCkKK3sKKyAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkg
PT0gSlNDOjpFZGVuQ29sbGVjdGlvbikKKyAgICAgICAgdGhpcy0+Y2xlYXJNYXJrc1dpdGhDb2xs
ZWN0aW9uVHlwZTxNYXJrZWRCbG9jazo6RWRlbkNvbGxlY3Rpb24+KCk7CisgICAgZWxzZQorICAg
ICAgICB0aGlzLT5jbGVhck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlPE1hcmtlZEJsb2NrOjpGdWxs
Q29sbGVjdGlvbj4oKTsKK30KKwordm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJSZW1lbWJlcmVkU2V0
KCkKK3sKKyAgICBtX3JlbWVtYmVyZWRTZXQuY2xlYXJBbGwoKTsKK30KKwordGVtcGxhdGUgPE1h
cmtlZEJsb2NrOjpDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZT4KK3ZvaWQgTWFya2VkQmxv
Y2s6OmNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGUoKQoreworICAgIEhFQVBfTE9HX0JMT0NL
X1NUQVRFX1RSQU5TSVRJT04odGhpcyk7CisKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBOZXcgJiYg
bV9zdGF0ZSAhPSBGcmVlTGlzdGVkKTsKKyAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gTWFya2Vk
QmxvY2s6OkZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBtX21hcmtzLmNsZWFyQWxsKCk7CisgICAg
bV9uZXdseUFsbG9jYXRlZC5jbGVhcigpOworCisgICAgLy8gVGhpcyB3aWxsIGJlY29tZSB0cnVl
IGF0IHRoZSBlbmQgb2YgdGhlIG1hcmsgcGhhc2UuIFdlIHNldCBpdCBub3cgdG8KKyAgICAvLyBh
dm9pZCBhbiBleHRyYSBwYXNzIHRvIGRvIHNvIGxhdGVyLgorICAgIG1fc3RhdGUgPSBNYXJrZWQ7
Cit9CisKK3ZvaWQgTWFya2VkQmxvY2s6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKK3sKKyAgICBt
X3dlYWtTZXQubGFzdENoYW5jZVRvRmluYWxpemUoKTsKKworICAgIGNsZWFyTWFya3NXaXRoQ29s
bGVjdGlvblR5cGU8RnVsbENvbGxlY3Rpb24+KCk7CisgICAgc3dlZXAoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgLy8gc2l6ZS4KIAogICAgIGNsYXNzIE1hcmtlZEJsb2NrIDogcHVibGljIEhlYXBCbG9j
azxNYXJrZWRCbG9jaz4geworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tU2l6ZSA9
IDg7IC8vIGJ5dGVzCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tTaXplID0gNjQg
KiBLQjsKQEAgLTEzNyw3ICsxMzgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgIm5ld2x5IGFsbG9jYXRlZCIgYml0bWFwIHdhcyBub24tbnVsbCAK
ICAgICAgICAgLy8gYW5kIHdhcyBzdWNjZXNzZnVsbHkgY2xlYXJlZCBhbmQgZmFsc2Ugb3RoZXJ3
aXNlLgogICAgICAgICBib29sIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKKworICAgICAgICBlbnVt
IENvbGxlY3Rpb25UeXBlIHsgRWRlbkNvbGxlY3Rpb24sIEZ1bGxDb2xsZWN0aW9uIH07CiAgICAg
ICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAgICAgICB2b2lkIGNsZWFyUmVtZW1iZXJlZFNldCgp
OworICAgICAgICB0ZW1wbGF0ZSA8Q29sbGVjdGlvblR5cGUgY29sbGVjdGlvblR5cGU+CisgICAg
ICAgIHZvaWQgY2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlwZSgpOworCiAgICAgICAgIHNpemVf
dCBtYXJrQ291bnQoKTsKICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAKQEAgLTE1NCw2ICsxNjEs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0TWFya2VkKGNvbnN0IHZvaWQq
KTsKICAgICAgICAgdm9pZCBjbGVhck1hcmtlZChjb25zdCB2b2lkKik7CiAKKyAgICAgICAgdm9p
ZCBzZXRSZW1lbWJlcmVkKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgdm9pZCBjbGVhclJlbWVtYmVy
ZWQoY29uc3Qgdm9pZCopOworICAgICAgICB2b2lkIGF0b21pY0NsZWFyUmVtZW1iZXJlZChjb25z
dCB2b2lkKik7CisgICAgICAgIGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZvaWQqKTsKKwogICAg
ICAgICBib29sIGlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIHNl
dE5ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBjbGVhck5ld2x5QWxs
b2NhdGVkKGNvbnN0IHZvaWQqKTsKQEAgLTE4Miw4ICsxOTQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHNpemVfdCBtX2VuZEF0b207IC8vIFRoaXMgaXMgYSBmdXp6eSBlbmQuIEFsd2F5
cyB0ZXN0IGZvciA8IG1fZW5kQXRvbS4KICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgICAg
IFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwQXRvbWljPiBtX21hcmtzOwor
ICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBXVEY6OkJpdG1hcEF0b21pYz4gbV9y
ZW1lbWJlcmVkU2V0OwogI2Vsc2UKICAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywg
V1RGOjpCaXRtYXBOb3RBdG9taWM+IG1fbWFya3M7CisgICAgICAgIFdURjo6Qml0bWFwPGF0b21z
UGVyQmxvY2ssIFdURjo6Qml0bWFwTm90QXRvbWljPiBtX3JlbWVtYmVyZWRTZXQ7CiAjZW5kaWYK
ICAgICAgICAgT3duUHRyPFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+ID4gbV9uZXdseUFsbG9j
YXRlZDsKIApAQCAtMjI1LDE1ICsyMzksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJpdHM+
KHApICYgYmxvY2tNYXNrKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
bGFzdENoYW5jZVRvRmluYWxpemUoKQotICAgIHsKLSAgICAgICAgbV93ZWFrU2V0Lmxhc3RDaGFu
Y2VUb0ZpbmFsaXplKCk7Ci0KLSAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZCgpOwotICAgICAg
ICBjbGVhck1hcmtzKCk7Ci0gICAgICAgIHN3ZWVwKCk7Ci0gICAgfQotCiAgICAgaW5saW5lIE1h
cmtlZEFsbG9jYXRvciogTWFya2VkQmxvY2s6OmFsbG9jYXRvcigpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CkBAIC0yNzcsMTggKzI4Miw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBtX3N0YXRlID0gQWxsb2NhdGVkOwogICAgIH0KIAotICAgIGlubGluZSB2
b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKCkKLSAgICB7Ci0gICAgICAgIEhFQVBfTE9HX0JM
T0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7Ci0KLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0g
TmV3ICYmIG1fc3RhdGUgIT0gRnJlZUxpc3RlZCk7Ci0gICAgICAgIG1fbWFya3MuY2xlYXJBbGwo
KTsKLQotICAgICAgICAvLyBUaGlzIHdpbGwgYmVjb21lIHRydWUgYXQgdGhlIGVuZCBvZiB0aGUg
bWFyayBwaGFzZS4gV2Ugc2V0IGl0IG5vdyB0bwotICAgICAgICAvLyBhdm9pZCBhbiBleHRyYSBw
YXNzIHRvIGRvIHNvIGxhdGVyLgotICAgICAgICBtX3N0YXRlID0gTWFya2VkOwotICAgIH0KLQog
ICAgIGlubGluZSBzaXplX3QgTWFya2VkQmxvY2s6Om1hcmtDb3VudCgpCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9tYXJrcy5jb3VudCgpOwpAQCAtMzI0LDYgKzMxNywyNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PEJpdHM+KHApIC0gcmVpbnRl
cnByZXRfY2FzdDxCaXRzPih0aGlzKSkgLyBhdG9tU2l6ZTsKICAgICB9CiAKKyAgICBpbmxpbmUg
dm9pZCBNYXJrZWRCbG9jazo6c2V0UmVtZW1iZXJlZChjb25zdCB2b2lkKiBwKQorICAgIHsKKyAg
ICAgICAgbV9yZW1lbWJlcmVkU2V0LnNldChhdG9tTnVtYmVyKHApKTsKKyAgICB9CisKKyAgICBp
bmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJSZW1lbWJlcmVkKGNvbnN0IHZvaWQqIHApCisg
ICAgeworICAgICAgICBtX3JlbWVtYmVyZWRTZXQuY2xlYXIoYXRvbU51bWJlcihwKSk7CisgICAg
fQorCisgICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmF0b21pY0NsZWFyUmVtZW1iZXJlZChj
b25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgbV9yZW1lbWJlcmVkU2V0LmNvbmN1cnJlbnRU
ZXN0QW5kQ2xlYXIoYXRvbU51bWJlcihwKSk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmlzUmVtZW1iZXJlZChjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fcmVtZW1iZXJlZFNldC5nZXQoYXRvbU51bWJlcihwKSk7CisgICAgfQorCiAgICAgaW5s
aW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHApCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDE3IEBAIGNsYXNzIFdlYWtHQ0hhbmRsZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBz
dHJ1Y3QgQ2xlYXJNYXJrcyA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci0gICAgdm9pZCBv
cGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykgeyBibG9jay0+Y2xlYXJNYXJrcygpOyB9Cisg
ICAgdm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIGJs
b2NrLT5jbGVhck1hcmtzKCk7CisgICAgfQorfTsKKworc3RydWN0IENsZWFyUmVtZW1iZXJlZFNl
dCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAgdm9pZCBvcGVyYXRvcigpKE1hcmtl
ZEJsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIGJsb2NrLT5jbGVhclJlbWVtYmVyZWRTZXQo
KTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgU3dlZXAgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3Ig
ewpAQCAtMTA0LDYgKzExNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlz
dChNYXJrZWRCbG9jayopOwogCiAgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgdm9pZCBjbGVh
clJlbWVtYmVyZWRTZXQoKTsKICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKICAgICB2
b2lkIHN3ZWVwKCk7CiAgICAgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0yNTMsNiArMjY0LDEx
IEBAIGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpjbGVhck1hcmtzKCkKICAgICBmb3JFYWNoQmxv
Y2s8Q2xlYXJNYXJrcz4oKTsKIH0KIAoraW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmNsZWFyUmVt
ZW1iZXJlZFNldCgpCit7CisgICAgZm9yRWFjaEJsb2NrPENsZWFyUmVtZW1iZXJlZFNldD4oKTsK
K30KKwogaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6b2JqZWN0Q291bnQoKQogewogICAgIHJl
dHVybiBmb3JFYWNoQmxvY2s8TWFya0NvdW50PigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBAIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihHQ1RocmVhZFNoYXJlZEQKIAogU2xv
dFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBjbGVhck1hcmtTdGFjaygpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpzZXR1cCgp
CkBAIC02Myw2ICs2MywxNSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiAgICAgfQogfQog
Cit2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCit7CisgICAgd2hpbGUgKCFtX3N0
YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOworICAgICAgICB3aGls
ZSAobV9zdGFjay5jYW5SZW1vdmVMYXN0KCkpCisgICAgICAgICAgICBtX3N0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICB9Cit9CisKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVS
b290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7CiAgICAgU3RhY2tTdGF0czo6cHJvYmUoKTsKQEAg
LTgwLDcgKzg5LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKAog
I2VuZGlmCiAKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwotICAgIAorICAgCiAg
ICAgaWYgKGlzSlNTdHJpbmcoY2VsbCkpIHsKICAgICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRy
ZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRvcik7CiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24g
MTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNiArNDksMTAgQEAgcHVibGljOgogICAgIFNsb3RWaXNpdG9yKEdD
VGhyZWFkU2hhcmVkRGF0YSYpOwogICAgIH5TbG90VmlzaXRvcigpOwogCisgICAgTWFya1N0YWNr
QXJyYXkmIG1hcmtTdGFjaygpIHsgcmV0dXJuIG1fc3RhY2s7IH0KKworICAgIEhlYXAqIGhlYXAo
KSBjb25zdDsKKwogICAgIHZvaWQgYXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQoSklUV3JpdGVCYXJyaWVyPFQ+Kik7
CkBAIC02MCwxNyArNjQsMTkgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWRW
YWx1ZShKU1ZhbHVlKik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGFwcGVu
ZFVuYmFycmllcmVkV2VhayhXZWFrPFQ+Kik7CisgICAgdm9pZCB1bmNvbmRpdGlvbmFsbHlBcHBl
bmQoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBi
b29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgVHJpU3RhdGUgY29udGFpbnNPcGFx
dWVSb290VHJpU3RhdGUodm9pZCopOwogICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKIAotICAg
IEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIHsgcmV0dXJuIG1fc2hhcmVkOyB9Cisg
ICAgR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zaGFy
ZWQ7IH0KICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQog
CiAgICAgdm9pZCBzZXR1cCgpOwogICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGNsZWFyTWFy
a1N0YWNrKCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlc1Zpc2l0ZWQ7IH0KICAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVzQ29waWVkOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2
ICsxMDUsMTQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbAogICAg
ICAgICAKICAgICBNQVJLX0xPR19DSElMRCgqdGhpcywgY2VsbCk7CiAKKyAgICB1bmNvbmRpdGlv
bmFsbHlBcHBlbmQoY2VsbCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
dW5jb25kaXRpb25hbGx5QXBwZW5kKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoSGVhcDo6
aXNNYXJrZWQoY2VsbCkpOworICAgIG1fdmlzaXRDb3VudCsrOworICAgICAgICAKICAgICAvLyBT
aG91bGQgbmV2ZXIgYXR0ZW1wdCB0byBtYXJrIHNvbWV0aGluZyB0aGF0IGlzIHphcHBlZC4KICAg
ICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgICAgICAKQEAgLTIyMCw3ICsyMjgsNyBA
QCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKEpTQ2VsCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCisgICAgaWYgKGhlYXAoKS0+
b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uICYmIE1hcmtlZEJsb2NrOjpi
bG9ja0Zvcihvd25lciktPmlzUmVtZW1iZXJlZChvd25lcikpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMob3duZXIsIHRva2VuLCBieXRlcyk7CkBAIC0yNDEs
NiArMjQ5LDExIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW8KICNl
bmRpZgogfQogCitpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAoreworICAg
IHJldHVybiAmc2hhcmVkRGF0YSgpLm1fdm0tPmhlYXA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDggKzM5Myw3
IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgKIAogaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5k
ZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
KQogewotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsgLy8gV2UgaGFkIGZvdW5kIHRoaXMgc2Ny
YXRjaCByZWdpc3RlciB1c2VmdWwgaGVyZSBiZWZvcmUsIHNvIEkgd2lsbCBrZWVwIGl0IGZvciBu
b3cuCi0gICAgCisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgIFJlZ2lzdGVySUQgc3Ry
dWN0dXJlID0gc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlOwogICAgIFJlZ2lzdGVySUQgaW5kZXhp
bmdUeXBlID0gc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1
NTM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNyArMzU3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUs
IGRvbmUpKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVn
VDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNz
KTsKIH0KIAogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQpAQCAtMzc0LDYgKzM3Myw3IEBAIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXMKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0
ID0gbGFiZWwoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CisK
ICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKICAgICBjYXNlIEludDMyU2hhcGU6CiAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDMp
KTsKQEAgLTM5Miw2ICszOTIsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToK
KyAgICAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QyLCByZWdUMiwgU2hv
dWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yR2VuZXJpY0FjY2Vzcyk7CiAgICAg
ICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTQzMCw2ICs0MzEsNyBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAKICAgICBMYWJlbCBzdG9yZVJlc3Vs
dCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CisgICAg
ZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QyLCByZWdUMiwgU2hvdWxkRmlsdGVy
SW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yR2VuZXJpY0FjY2Vzcyk7CiAgICAgc3RvcmU2NChy
ZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAg
ICAgCkBAIC02MDcsNiArNjA5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3Ry
dWN0aW9uKgogICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9i
amVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2gu
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBTaG91bGRGaWx0
ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JHZW5lcmljQWNjZXNzKTsKKwogICAgIEJFR0lO
X1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKIAogICAgIExhYmVsIGhv
dFBhdGhCZWdpbih0aGlzKTsKQEAgLTYyMCw4ICs2MjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShz
ZXF1ZW5jZVB1dEJ5SWQpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJl
Z1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVy
dHlBY2Nlc3MpOwotCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQo
UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWQsIG1fYnl0ZWNv
ZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBwcm9wZXJ0eVN0b3Jh
Z2VMb2FkLCBkaXNwbGFjZW1lbnRMYWJlbCkpOwogfQogCkBAIC03MzEsMTIgKzczMywxMCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgICAgIHJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKICAgICB9CiAKLSAgICAvLyBQbGFudGlu
ZyB0aGUgbmV3IHN0cnVjdHVyZSB0cmlnZ2VycyB0aGUgd3JpdGUgYmFycmllciBzbyB3ZSBuZWVk
Ci0gICAgLy8gYW4gdW5jb25kaXRpb25hbCBiYXJyaWVyIGhlcmUuCi0gICAgZW1pdFdyaXRlQmFy
cmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotCiAgICAgQVNTRVJUKG5ld1N0cnVj
dHVyZS0+Y2xhc3NJbmZvKCkgPT0gb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSk7CiAgICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihuZXdTdHJ1Y3R1cmUpLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdU
MSwgcmVnVDMsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJG
b3JWYXJpYWJsZUFjY2Vzcyk7CiAgICAgY29tcGlsZVB1dERpcmVjdE9mZnNldChyZWdUMCwgcmVn
VDEsIGNhY2hlZE9mZnNldCk7CiAKICAgICByZXQoKTsKQEAgLTc1MSw5ICs3NTEsMTYgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgIHBhdGNoQnVmZmVyLmxp
bmsoZmFpbHVyZUNhbGwsIEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGly
ZWN0X2ZhaWwgOiBjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKIAogICAgIGlmICh3aWxsTmVlZFN0
b3JhZ2VSZWFsbG9jKSB7Ci0gICAgICAgIEFTU0VSVChtX2NhbGxzLnNpemUoKSA9PSAxKTsKKyAg
ICAgICAgQVNTRVJUKG1fY2FsbHMuc2l6ZSgpID09IDIpOwogICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0
aW9uX3JlYWxsb2MpKTsKKworICAgICAgICBBU1NFUlQobV9jYWxsc1sxXS50byA9PSBjdGlfaGVh
cF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG1fY2FsbHNbMV0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0
ZV9iYXJyaWVyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHNbMF0udG8g
PT0gY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKTsKKyAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9oZWFwX3VuY29uZGl0
aW9uYWxfd3JpdGVfYmFycmllcikpOwogICAgIH0KKwogICAgIAogICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFKApA
QCAtMTM0MywxMCArMTM1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoSW5zCiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90KiBvcGVy
YW5kU2xvdCwgdW5zaWduZWQgdmFsdWUpCiB7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QyLCByZWdUMSwg
cmVnVDEsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNj
ZXNzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CiAgICAgbmVn
UHRyKHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAg
ICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogfQog
CkBAIC0xMzU0LDEyICsxMzYyLDE0IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRw
dHJfdCBvcGUKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAg
ICAgc3RvcmVQdHIocmVnVDAsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wZXJhbmQpKTsKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJl
Z1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vz
cyk7CiB9CiAKIHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcih1bnNpZ25lZCBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIHVuc2lnbmVkIHZhbHVlKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMiwg
U2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdp
c3RlcnMoKSksIHJlZ1QwKTsKICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgb3Bl
cmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKIH0KQEAgLTE0NDIsMTAgKzE0NTIsMTAgQEAgdm9p
ZCBKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZQogdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBz
Y3JhdGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIFdyaXRl
QmFycmllclVzZUtpbmQgdXNlS2luZCkKIHsKICAgICBVTlVTRURfUEFSQU0ob3duZXIpOworICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgIFVO
VVNFRF9QQVJBTShzY3JhdGNoMik7CiAgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwogICAgIEFTU0VSVChv
d25lciAhPSBzY3JhdGNoKTsKICAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOwpAQCAtMTQ1
MywxOSArMTQ2Myw4NyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93
CiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIGVtaXRDb3VudChXcml0
ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CiAjZW5kaWYKKy8qCisg
ICAgLy8gVGVzdCBmb3IgbnVsbC4KKyAgICBKdW1wIHZhbHVlTnVsbCA9IGJyYW5jaFRlc3Q2NCha
ZXJvLCB2YWx1ZSk7CisgICAgLy8gVGVzdCBmb3IgY2VsbC4KKyAgICBKdW1wIHZhbHVlTm90Q2Vs
bCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCB2YWx1ZSwgdGFnTWFza1JlZ2lzdGVyKTsKKyovCisg
ICAgICAgIC8vcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKKyAgICBwdXNo
KHJlZ1QwKTsKKyAgICBwdXNoKHJlZ1QxKTsKKyAgICBwdXNoKHJlZ1QyKTsKKyAgICBwdXNoKHJl
Z1QzKTsKKyAgICBwdXNoKHJlZ1Q0KTsKKyAgICBwdXNoKHJlZ1Q0KTsKKyAgICBwdXNoKHJlZ1Q0
KTsKKworICAgIC8vIENhbGwgSGVhcDo6d3JpdGVCYXJyaWVyLgorICAgIGlmIChtb2RlID09IFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKTsKKyAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQob3duZXIpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX2hlYXBfd3Jp
dGVfYmFycmllcik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG93bmVyKTsKKyAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodmFsdWUpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7
CisgICAgfQorLyoKKyAgICB2YWx1ZU51bGwubGluayh0aGlzKTsKKyAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKKyovCisgICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDQpOworCisgICAg
cG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDMpOworICAgIHBvcChyZWdUMik7CisgICAgcG9wKHJl
Z1QxKTsKKyAgICBwb3AocmVnVDApOworICAgICAgICAvL3Jlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJp
ZXJNb2RlIG1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKIHsKICAgICBVTlVTRURf
UEFSQU0ob3duZXIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHNjcmF0Y2gpOwogICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLSAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAKICNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpCiAgICAgZW1pdENvdW50KFdyaXRlQmFycmllckNvdW50ZXJzOjpq
aXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKICNlbmRpZgorCisgICAgcHVzaChyZWdUMCk7CisgICAg
cHVzaChyZWdUMSk7CisgICAgcHVzaChyZWdUMik7CisgICAgcHVzaChyZWdUMyk7CisgICAgcHVz
aChyZWdUNCk7CisKKyAgICBwdXNoKHJlZ1Q0KTsKKyAgICBwdXNoKHJlZ1Q0KTsKKworICAgIGlm
IChtb2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKTsK
KyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihvd25lcikpOworICAg
ICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX2hlYXBfd3JpdGVfYmFycmllcik7CisgICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIob3duZXIpKTsKKyAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQodmFsdWUpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgfQorCisgICAg
cG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDQpOworCisgICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3Ao
cmVnVDMpOworICAgIHBvcChyZWdUMik7CisgICAgcG9wKHJlZ1QxKTsKKyAgICBwb3AocmVnVDAp
OwogfQogCiBKSVQ6Okp1bXAgSklUOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIFJlZ2lzdGVySUQgc2NyYXRjaCkKQEAgLTE1ODIsNyArMTY2MCw4IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAorICAgCisgICAgYm9vbCBuZWVk
c1dyaXRlQmFycmllciA9IGZhbHNlOyAKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNh
c2UgSklUSW50MzI6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CkBAIC0xNTkxLDkgKzE2NzAsMTEgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RG91YmxlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBuZWVkc1dyaXRlQmFycmllciA9
IHRydWU7CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRBcnJh
eVN0b3JhZ2U6CisgICAgICAgIG5lZWRzV3JpdGVCYXJyaWVyID0gdHJ1ZTsKICAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0xNjExLDcgKzE2OTIsMTIg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIAogICAgIHBh
dGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgp
KSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOwotICAgIAorICAgCisgICAgaWYgKG5lZWRzV3JpdGVCYXJyaWVyKSB7CisgICAgICAgIEFT
U0VSVChtX2NhbGxzWzBdLnRvID09IGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBfd3Jp
dGVfYmFycmllcikpOworICAgIH0KKyAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFs
SW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9E
b25lKSk7CiAgICAgCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX1NUVUIoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2
aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyNzYsNiArMjI3NiwxOCBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkLCBvcF9wdXRfdG9fc2NvCiAgICAgfQogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBoZWFwX3dyaXRlX2JhcnJpZXIpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5oZWFwKCktPndyaXRlQmFycmll
cihzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLmFzQ2VsbCgpLCBzdGFja0ZyYW1lLmFyZ3Nb
MV0uanNWYWx1ZSgpKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgaGVhcF91bmNv
bmRpdGlvbmFsX3dyaXRlX2JhcnJpZXIpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5oZWFwKCktPndyaXRlQmFycmll
cihzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLmFzQ2VsbCgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNyArNDIxLDggQEAgdm9p
ZCogSklUX1NUVUIgY3RpX3ZtX3Rocm93KFNUVUJfQVJHU19ERQogRW5jb2RlZEpTVmFsdWUgSklU
X1NUVUIgY3RpX29wX3Jlc29sdmVfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2Zyb21fc2NvcGUoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9w
dXRfdG9fc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci0KK3ZvaWQg
SklUX1NUVUIgY3RpX2hlYXBfd3JpdGVfYmFycmllcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgSklUX1NUVUIgY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9i
YXJyaWVyKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiBFbmNvZGVkRXhjZXB0aW9uSGFuZGxlciBKSVRfU1RVQiBjdGlfdm1faGFuZGxl
X2V4Y2VwdGlvbihDYWxsRnJhbWUqKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsK
ICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAko
cmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNlbmRpZgogCiAvLyBEaXNh
YmxlIGlubGluZSBjYWNoaW5nIG9mIGdldF9ieV9pZCBhbmQgcHV0X2J5X2lkLgotI2RlZmluZSBM
TElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgMAorI2RlZmluZSBMTElOVF9BTFdBWVNfQUNDRVNTX1NM
T1cgMQogCiAvLyBFbmFibGUgT1NSIGludG8gdGhlIEpJVC4gRGlzYWJsaW5nIHRoaXMgd2hpbGUg
dGhlIExMSW50IGlzIGVuYWJsZWQgZWZmZWN0aXZlbHkKIC8vIHR1cm5zIG9mZiBhbGwgSklUJ2lu
Zywgc2luY2UgaW4gTExJbnQncyBwYXJsYW5jZSwgT1NSIHN1YnN1bWVzIGFueSBmb3JtIG9mIEpJ
VApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCShyZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM2LDYgKzEzMzYsMTggQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zYwogICAgIExMSU5UX0VORCgpOwog
fQogCitleHRlcm4gIkMiIHZvaWQgbGxpbnRfd3JpdGVfYmFycmllcl9zbG93KEpTQ2VsbCogb3du
ZXIsIEpTQ2VsbCogdmFsdWUpCit7CisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAob3duZXIp
OworICAgIGhlYXAtPndyaXRlQmFycmllcihvd25lciwgdmFsdWUpOworfQorCitleHRlcm4gIkMi
IHZvaWQgbGxpbnRfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyX3Nsb3coSlNDZWxsKiBvd25l
cikKK3sKKyAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcChvd25lcik7CisgICAgaGVhcC0+d3Jp
dGVCYXJyaWVyKG93bmVyKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CiAKICNl
bmRpZiAvLyBFTkFCTEUoTExJTlQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuaAkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDggQEAgbmFtZXNwYWNlIExMSW50IHsKIAogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
bGxpbnRfdHJhY2Vfb3BlcmFuZChFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hl
cmUsIGludCBvcGVyYW5kKTsKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Ry
YWNlX3ZhbHVlKEV4ZWNTdGF0ZSosIEluc3RydWN0aW9uKiwgaW50IGZyb21XaGVyZSwgaW50IG9w
ZXJhbmQpOworZXh0ZXJuICJDIiB2b2lkIGxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyhKU0NlbGwq
LCBKU0NlbGwqKTsKK2V4dGVybiAiQyIgdm9pZCBsbGludF91bmNvbmRpdGlvbmFsX3dyaXRlX2Jh
cnJpZXJfc2xvdyhKU0NlbGwqKTsKIAogI2RlZmluZSBMTElOVF9TTE9XX1BBVEhfREVDTChuYW1l
KSBcCiAgICAgZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfIyNuYW1lKEV4ZWNT
dGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1
NTM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsOCArMTcyLDEwNCBAQCBtYWNybyBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlQ2VsbChpbmRleCwgCiAgICAgYnRxbnogdmFsdWUsIHRhZ01hc2ssIHNs
b3cKIGVuZAogCi1tYWNybyB3cml0ZUJhcnJpZXIodmFsdWUpCi0gICAgIyBOb3RoaW5nIHRvIGRv
LCBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgZ2VuZXJhdGlvbmFsIG9yIGluY3JlbWVudGFsIGNvbGxl
Y3Rvci4KK2NvbnN0IE1hcmtlZEJsb2NrU2l6ZSA9IDY0ICogMTAyNAorY29uc3QgTWFya2VkQmxv
Y2tIZWFkZXJNYXNrID0gfihNYXJrZWRCbG9ja1NpemUgLSAxKQorIyBzaXplb2YoYXRvbSkgPT0g
OAorY29uc3QgQXRvbU51bWJlclNoaWZ0ID0gMworY29uc3QgQml0TWFwV29yZFNoaWZ0ID0gNQor
Y29uc3QgQml0TWFwV29yZFNpemUgPSAzMgorY29uc3QgQml0TWFwV29yZE1vZCA9IEJpdE1hcFdv
cmRTaXplIC0gMQorCisjIENsb2JiZXJzIGJvdGggY2VsbCBhbmQgc2NyYXRjaC4KK21hY3JvIGlz
TWFya2VkKGNlbGwsIHNjcmF0Y2gsIGNvbnRpbnVhdGlvbikKKyAgICBtb3ZlIGNlbGwsIHNjcmF0
Y2gKKworIyBHZXQgdGhlIGluZGV4IG9mIHRoZSB3b3JkIGluIHRoZSBiaXRtYXAuCisgICAgYW5k
cSB+TWFya2VkQmxvY2tIZWFkZXJNYXNrLCBjZWxsCisgICAgcHVzaHEgY2VsbAorICAgIHJzaGlm
dHAgQXRvbU51bWJlclNoaWZ0ICsgQml0TWFwV29yZFNoaWZ0LCBjZWxsCisKKyMgTG9hZCB0aGUg
d29yZCBmcm9tIHRoZSBiaXRtYXAuCisgICAgYW5kcSBNYXJrZWRCbG9ja0hlYWRlck1hc2ssIHNj
cmF0Y2gKKyAgICBsb2FkaSBNYXJrZWRCbG9jazo6bV9tYXJrc1tzY3JhdGNoLCBjZWxsLCA0XSwg
c2NyYXRjaAorCisjIEdldCB0aGUgYW1vdW50IHRvIHJpZ2h0IHNoaWZ0IHRoZSByZXN1bHQgYnku
CisgICAgcG9wcSBjZWxsCisgICAgcnNoaWZ0cCBBdG9tTnVtYmVyU2hpZnQsIGNlbGwKKyAgICBh
bmRxIEJpdE1hcFdvcmRNb2QsIGNlbGwKKyAgICByc2hpZnRwIGNlbGwsIHNjcmF0Y2gKKworIyBD
aGVjayB0aGUgcmlnaHQtbW9zdCBiaXQuCisgICAgYW5kcSAxLCBzY3JhdGNoCisKKyAgICBjb250
aW51YXRpb24oc2NyYXRjaCkKK2VuZAorCittYWNybyB1bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVy
KG93bmVyKQorICAgIHB1c2hxIHQwCisgICAgcHVzaHEgdDEKKyAgICBwdXNocSB0MgorICAgIHB1
c2hxIHQzCisgICAgcHVzaHEgdDQKKyAgICBwdXNocSB0NQorICAgIHB1c2hxIHQ2CisgICAgY0Nh
bGwyKF9sbGludF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXJfc2xvdywgb3duZXIsIG93bmVy
KQorICAgIHBvcHEgdDYKKyAgICBwb3BxIHQ1CisgICAgcG9wcSB0NAorICAgIHBvcHEgdDMKKyAg
ICBwb3BxIHQyCisgICAgcG9wcSB0MQorICAgIHBvcHEgdDAKKyMgICAgc3RvcmVxIDAsIFtzcF0K
KyMgICAgc3RvcmVxIDAsIDhbc3BdCisjICAgIHN0b3JlcSAwLCAxNltzcF0KKyMgICAgc3RvcmVx
IDAsIDI0W3NwXQorIyAgICBzdG9yZXEgMCwgMzJbc3BdCisjICAgIHN0b3JlcSAwLCA0MFtzcF0K
KyMgICAgc3RvcmVxIDAsIDQ4W3NwXQorZW5kCisKK21hY3JvIHdyaXRlQmFycmllcldpdGhWYWx1
ZShvd25lciwgdmFsdWUpCisjIFNraXAgaWYgdmFsdWUgaXMgbnVsbCBvciBub3QgYSBjZWxsLgor
ICAgIGJ0cHogdmFsdWUsIC53cml0ZUJhcnJpZXJEb25lCisgICAgYnRxbnogdmFsdWUsIHRhZ01h
c2ssIC53cml0ZUJhcnJpZXJEb25lCisjICAgIHB1c2hxIG93bmVyCisjICAgIHB1c2hxIHZhbHVl
CisjICAgIGlzTWFya2VkKG93bmVyLCB2YWx1ZSwgCisjICAgICAgICBtYWNybyAobWFya2VkKQor
IyMgSWYgb3duZXIgaXNuJ3QgbWFya2VkLCB0aGVuIHdlJ3JlIGdvb2QgdG8gZ28uCisjICAgICAg
ICAgICAgYnRieiBtYXJrZWQsIC52YWx1ZUlzTm9uTnVsbENlbGwKKyMgICAgICAgICAgICBwb3Bx
IHZhbHVlCisjICAgICAgICAgICAgcG9wcSBvd25lcgorICAgICAgICAgICAgcHVzaHEgdDAKKyAg
ICAgICAgICAgIHB1c2hxIHQxCisgICAgICAgICAgICBwdXNocSB0MgorICAgICAgICAgICAgcHVz
aHEgdDMKKyAgICAgICAgICAgIHB1c2hxIHQ0CisgICAgICAgICAgICBwdXNocSB0NQorICAgICAg
ICAgICAgcHVzaHEgdDYKKyAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfd3JpdGVfYmFycmllcl9z
bG93LCBvd25lciwgdmFsdWUpCisgICAgICAgICAgICBwb3BxIHQ2CisgICAgICAgICAgICBwb3Bx
IHQ1CisgICAgICAgICAgICBwb3BxIHQ0CisgICAgICAgICAgICBwb3BxIHQzCisgICAgICAgICAg
ICBwb3BxIHQyCisgICAgICAgICAgICBwb3BxIHQxCisgICAgICAgICAgICBwb3BxIHQwCisjICAg
IHN0b3JlcSAwLCBbc3BdCisjICAgIHN0b3JlcSAwLCA4W3NwXQorIyAgICBzdG9yZXEgMCwgMTZb
c3BdCisjICAgIHN0b3JlcSAwLCAyNFtzcF0KKyMgICAgc3RvcmVxIDAsIDMyW3NwXQorIyAgICBz
dG9yZXEgMCwgNDBbc3BdCisjICAgIHN0b3JlcSAwLCA0OFtzcF0KKyMgICAgICAgICAgICBqbXAg
LndyaXRlQmFycmllckRvbmUKKyMgICAgICAgIGVuZCkKKyMudmFsdWVJc05vbk51bGxDZWxsOgor
IyAgICBwb3BxIHZhbHVlCisjICAgIHBvcHEgb3duZXIKKy53cml0ZUJhcnJpZXJEb25lOgogZW5k
CiAKIG1hY3JvIHZhbHVlUHJvZmlsZSh2YWx1ZSwgb3BlcmFuZCwgc2NyYXRjaCkKQEAgLTgyOSwx
MSArOTI1LDEzIEBAIGVuZAogCiBtYWNybyBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChw
cm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBiaWx0IHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKKyAgICB3
cml0ZUJhcnJpZXJXaXRoVmFsdWUob2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgbG9hZHAg
SlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdl
CiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgc3hpMnEgcHJvcGVydHlPZmZzZXRB
c0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkKIC5pc0lubGluZToKKyAg
ICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUob2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYWRk
cCBzaXplb2YgSlNPYmplY3QgLSAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIDgsIG9iamVj
dEFuZFN0b3JhZ2UKIC5yZWFkeToKICAgICBzdG9yZXEgdmFsdWUsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XQpA
QCAtODQ0LDcgKzk0Miw5IEBAIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDEpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oMSwgdDAp
CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIpCi0gICAgd3JpdGVCYXJyaWVyKHQy
KQorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9n
bG9iYWxPYmplY3RbdDFdLCB0MQorICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZSh0MSwgdDIpCiAg
ICAgc3RvcmVxIHQyLCBbdDBdCiAgICAgZGlzcGF0Y2goNSkKIApAQCAtOTMzLDEzICsxMDMzLDE0
IEBAIG1hY3JvIHB1dEJ5SWQoZ2V0UHJvcGVydHlTdG9yYWdlKQogICAgIGdldFByb3BlcnR5U3Rv
cmFnZSgKICAgICAgICAgdDAsCiAgICAgICAgIHQzLAotICAgICAgICBtYWNybyAocHJvcGVydHlT
dG9yYWdlLCBzY3JhdGNoKQotICAgICAgICAgICAgYnBuZXEgSlNDZWxsOjptX3N0cnVjdHVyZVt0
MF0sIHQxLCAub3BQdXRCeUlkU2xvdwotICAgICAgICAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9u
KDUsIHQxKQotICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0Miwgc2NyYXRjaCkK
LSAgICAgICAgICAgIHdyaXRlQmFycmllcih0MCkKLSAgICAgICAgICAgIHN0b3JlcSBzY3JhdGNo
LCBbcHJvcGVydHlTdG9yYWdlLCB0MV0KLSAgICAgICAgICAgIGRpc3BhdGNoKDkpCisgICAgICAg
IG1hY3JvIChwcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2gpICAgICAgICAgICAgICAgICAgICAgICAg
IyBMaXZlIHZhcmlhYmxlcworICAgICAgICAgICAgYnBuZXEgSlNDZWxsOjptX3N0cnVjdHVyZVt0
MF0sIHQxLCAub3BQdXRCeUlkU2xvdyAgICMgdDAsIHQxLCB0MiwgdDMKKyAgICAgICAgICAgIG1v
dmUgdDAsIHQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHQwLCB0
MSwgdDIsIHQzCisgICAgICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQyLCBzY3JhdGNo
KSAgICAgICAgICAgICAgICAgIyB0MCwgdDEsIHQyLCB0MworICAgICAgICAgICAgd3JpdGVCYXJy
aWVyV2l0aFZhbHVlKHQxLCBzY3JhdGNoKSAgICAgICAgICAgICAgICAgICMgdDAsIHQxLCAgICwg
dDMKKyAgICAgICAgICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig1LCB0MSkgICAgICAgICAgICAg
ICAgICAgICAgICAjIHQwLCB0MSwgICAsIHQzCisgICAgICAgICAgICBzdG9yZXEgc2NyYXRjaCwg
W3Byb3BlcnR5U3RvcmFnZSwgdDFdICAgICAgICAgICAgICAgIyB0MCwgdDEsICAgLCB0MworICAg
ICAgICAgICAgZGlzcGF0Y2goOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICMgICAsICAgLCAgICwgIAogICAgICAgICBlbmQpCiBlbmQKIApAQCAtOTcwLDkgKzEwNzEs
MTAgQEAgbWFjcm8gcHV0QnlJZFRyYW5zaXRpb24oYWRkaXRpb25hbENoZWNrcwogICAgICAgICBt
YWNybyAocHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoKQogICAgICAgICAgICAgYWRkcCB0MSwgcHJv
cGVydHlTdG9yYWdlLCB0MwogICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0Miwg
dDEpCi0gICAgICAgICAgICB3cml0ZUJhcnJpZXIodDEpCisgICAgICAgICAgICB3cml0ZUJhcnJp
ZXJXaXRoVmFsdWUodDAsIHQxKQogICAgICAgICAgICAgc3RvcmVxIHQxLCBbdDNdCiAgICAgICAg
ICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig2LCB0MSkKKyAgICAgICAgICAgIHdyaXRlQmFycmll
cldpdGhWYWx1ZSh0MCwgdDEpCiAgICAgICAgICAgICBzdG9yZXAgdDEsIEpTQ2VsbDo6bV9zdHJ1
Y3R1cmVbdDBdCiAgICAgICAgICAgICBkaXNwYXRjaCg5KQogICAgICAgICBlbmQpCkBAIC0xMTI5
LDcgKzEyMzEsOCBAQCBtYWNybyBjb250aWd1b3VzUHV0QnlWYWwoc3RvcmVDYWxsYmFjaykKICAg
ICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxl
bmd0aHMucHVibGljTGVuZ3RoW3QwXSwgLm91dE9mQm91bmRzCiAuc3RvcmVSZXN1bHQ6CiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQyKQotICAgIHN0b3JlQ2FsbGJhY2sodDIsIHQxLCBb
dDAsIHQzLCA4XSkKKyAgICBsZWFwIFt0MCwgdDMsIDhdLCB0MAorICAgIHN0b3JlQ2FsbGJhY2so
dDIsIHQzLCBbdDBdKQogICAgIGRpc3BhdGNoKDUpCiAKIC5vdXRPZkJvdW5kczoKQEAgLTExODQs
NyArMTI4Nyw3IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAgIGNvbnRpZ3VvdXNQdXRCeVZh
bCgKICAgICAgICAgbWFjcm8gKG9wZXJhbmQsIHNjcmF0Y2gsIGFkZHJlc3MpCiAgICAgICAgICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKG9wZXJhbmQsIHNjcmF0Y2gpCi0gICAgICAgICAgICB3
cml0ZUJhcnJpZXIoc2NyYXRjaCkKKyAgICAgICAgICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZSh0
MSwgc2NyYXRjaCkKICAgICAgICAgICAgIHN0b3JlcCBzY3JhdGNoLCBhZGRyZXNzCiAgICAgICAg
IGVuZCkKIApAQCAtMTE5MywyMSArMTI5NiwyMiBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAg
ICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxl
bmd0aHMudmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxPdXRPZkJvdW5kcwogICAgIGJ0cXog
QXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFn
ZUVtcHR5CiAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0OgorICAgIGxlYXAgQXJy
YXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdLCB0MAogICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigzLCB0MikKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKLSAgICB3cml0
ZUJhcnJpZXIodDEpCi0gICAgc3RvcmVxIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0
MywgOF0KKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MykKKyAgICB3cml0ZUJhcnJp
ZXJXaXRoVmFsdWUodDEsIHQzKQorICAgIHN0b3JlcSB0MywgW3QwXQogICAgIGRpc3BhdGNoKDUp
CiAKIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHk6CiAgICAgaWYgVkFMVUVfUFJPRklMRVIK
LSAgICAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgICAgIHN0b3JlYiAxLCBB
cnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCisgICAgICAgIGxvYWRwRnJvbUluc3Ry
dWN0aW9uKDQsIHQyKQorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3Jl
VG9Ib2xlW3QyXQogICAgIGVuZAogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVl
c0luVmVjdG9yW3QwXQogICAgIGJpYiB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0
b3JhZ2VTdG9yZVJlc3VsdAotICAgIGFkZGkgMSwgdDMsIHQxCi0gICAgc3RvcmVpIHQxLCAtc2l6
ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5n
dGhbdDBdCisgICAgYWRkaSAxLCB0MywgdDIKKyAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0KICAg
ICBqbXAgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbE91
dE9mQm91bmRzOgpAQCAtMTgzMiwxMiArMTkzNiwxNiBAQCBtYWNybyBwdXRHbG9iYWxWYXIoKQog
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHQwLCB0MSkKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig2LCB0MCkKKyAgICBsb2FkcCBD
b2RlQmxvY2tbY2ZyXSwgdDIKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3Qy
XSwgdDIKKyAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDIsIHQxKQogICAgIHN0b3JlcSB0MSwg
W3QwXQogZW5kCiAKIG1hY3JvIHB1dENsb3N1cmVWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigzLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikKKyAgICB3cml0
ZUJhcnJpZXJXaXRoVmFsdWUodDAsIHQyKQogICAgIGxvYWRwIEpTVmFyaWFibGVPYmplY3Q6Om1f
cmVnaXN0ZXJzW3QwXSwgdDAKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCiAgICAg
c3RvcmVxIHQyLCBbdDAsIHQxLCA4XQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxp
bmVhc20vaW5zdHJ1Y3Rpb25zLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCSh3b3JraW5nIGNvcHkp
CkBAIC04Niw3ICs4Niw5IEBAIE1BQ1JPX0lOU1RSVUNUSU9OUyA9CiAgICAgICJiY2QyaSIsCiAg
ICAgICJtb3ZkeiIsCiAgICAgICJwb3AiLAorICAgICAicG9wcSIsCiAgICAgICJwdXNoIiwKKyAg
ICAgInB1c2hxIiwKICAgICAgIm1vdmUiLAogICAgICAic3hpMnEiLAogICAgICAienhpMnEiLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkocmV2aXNpb24gMTU1
MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgY2xhc3MgUmVnaXN0ZXJJRAogICAgICAgICAgICAg
d2hlbiA6cXVhZAogICAgICAgICAgICAgICAgIGlzWDY0ID8gIiVyYXgiIDogcmFpc2UKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHJhaXNl
ICJJbnZhbGlkIGtpbmQgI3traW5kfSBmb3IgbmFtZSAje25hbWV9IgogICAgICAgICAgICAgZW5k
CiAgICAgICAgIHdoZW4gInQxIiwgImExIiwgInIxIgogICAgICAgICAgICAgY2FzZSBraW5kCkBA
IC05ODIsOCArOTgyLDEyIEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgICAgICBlbmQKICAg
ICAgICAgd2hlbiAicG9wIgogICAgICAgICAgICAgJGFzbS5wdXRzICJwb3AgI3tvcGVyYW5kc1sw
XS54ODZPcGVyYW5kKDpwdHIpfSIKKyAgICAgICAgd2hlbiAicG9wcSIKKyAgICAgICAgICAgICRh
c20ucHV0cyAicG9wcSAje29wZXJhbmRzWzBdLng4Nk9wZXJhbmQoOnB0cil9IgogICAgICAgICB3
aGVuICJwdXNoIgogICAgICAgICAgICAgJGFzbS5wdXRzICJwdXNoICN7b3BlcmFuZHNbMF0ueDg2
T3BlcmFuZCg6cHRyKX0iCisgICAgICAgIHdoZW4gInB1c2hxIgorICAgICAgICAgICAgJGFzbS5w
dXRzICJwdXNocSAje29wZXJhbmRzWzBdLng4Nk9wZXJhbmQoOnB0cil9IgogICAgICAgICB3aGVu
ICJtb3ZlIgogICAgICAgICAgICAgaGFuZGxlTW92ZQogICAgICAgICB3aGVuICJzeGkycSIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAx
NTUzNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIC0x
OwogICAgIH0KIAorICAgIHNpemVfdCB0b3RhbFNpemUoU3RydWN0dXJlKik7CisKICAgICB2b2lk
KiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0
dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9
CiAgICAgdm9pZCogYmFzZShTdHJ1Y3R1cmUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMTU1MzY1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw2ICs3MCwyMiBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAoraW5saW5lIHNpemVfdCBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXpl
X3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOwor
ICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBzdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5n
SGVhZGVyKCk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAg
ICBwcmVDYXBhY2l0eSA9IGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7
CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gaW5kZXhpbmdIZWFkZXIoKS0+
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBwcmVDYXBhY2l0eSA9IDA7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
ID0gMDsKKyAgICB9CisgICAgcmV0dXJuIEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOworfQorCiBpbmxpbmUgdm9pZCogQnV0dGVyZmx5OjpiYXNlKFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewogICAgIHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFj
aXR5KHN0cnVjdHVyZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsMTAgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogCiAgICAgc2l6ZV90IGlubGluZUNhcGFj
aXR5ID0gcGNbM10udS5vcGVyYW5kOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uc3Ry
dWN0b3ItPmFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+c3RydWN0dXJl
KCk7Ci0gICAgUkVUVVJOKGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSkpOwor
ICAgIC8vZXhlYy0+aGVhcCgpLT5zZXRDdXJyZW50Q2FsbEZyYW1lKGV4ZWMpOworICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpOworICAg
IC8vZXhlYy0+aGVhcCgpLT5zZXRDdXJyZW50Q2FsbEZyYW1lKDApOworICAgIFJFVFVSTihyZXN1
bHQpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhpcykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24g
MTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5
IGNhbm5vdCBiZQogICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4K
LSAgICBzaXplX3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IHByZUNhcGFjaXR5KFN0cnVjdHVyZSopOwogICAgIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqKTsKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTU1
MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogZHN0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4odGhpcykgKyByZWdpc3RlcnNPZmZzZXQoc3ltYm9sVGFibGUoKSkpOworICAgICAg
ICBpZiAoc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkgPiAxKSB7CisgICAgICAgICAgICBk
YXRhTG9nRigiVGVhcmluZyBvZmYgSlNBY3RpdmF0aW9uIHdpdGggY2FwdHVyZVN0YXJ0KCkgPSAl
dVxuIiwgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkpOworICAgICAgICAgICAgZGF0YUxv
Z0YoInRoaXMgPSAlcFxuIiwgdGhpcyk7CisgICAgICAgICAgICBkYXRhTG9nRigiZHN0ID0gJXBc
biIsIGRzdCk7CisgICAgICAgIH0KICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
c3JjID0gbV9yZWdpc3RlcnM7CiAKICAgICAgICAgaW50IGNhcHR1cmVFbmQgPSBzeW1ib2xUYWJs
ZSgpLT5jYXB0dXJlRW5kKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw2ICsyNDUsOCBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgLy8gSWYgbm90LCB3ZSBz
aG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KICAgICBBU1NFUlQoIWFk
ZFRvRnJvbnQgfHwgY291bnQgPiBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7CiAKKyAgICBkYXRhTG9n
RigidW5zaGlmdENvdW50U2xvd0Nhc2UgZm9yICVwIHdpdGggaW5kZXggYmlhcyAldVxuIiwgdGhp
cywgc3RvcmFnZS0+bV9pbmRleEJpYXMpOworCiAgICAgLy8gU3RlcCAxOgogICAgIC8vIEdhdGhl
ciA0IGtleSBtZXRyaWNzOgogICAgIC8vICAqIHVzZWRWZWN0b3JMZW5ndGggLSBob3cgbWFueSBl
bnRyaWVzIGFyZSBjdXJyZW50bHkgaW4gdGhlIHZlY3RvciAoY29uc2VydmF0aXZlIGVzdGltYXRl
IC0gZmV3ZXIgbWF5IGJlIGluIHVzZSBpbiBzcGFyc2UgdmVjdG9ycykuCkBAIC0yNzAsNiArMjcy
LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIC8vIFdl
J3JlIGVpdGhlciBnb2luZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdl
LCBvciB3ZSdyZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb25lLgogCiAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1
Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7CiAgICAg
dW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OwogICAgIC8vIElmIHRoZSBjdXJyZW50IHN0b3Jh
Z2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEpIHRoZW4g
anVzdCBrZWVwIHVzaW5nIGl0LgpAQCAtMzIxLDggKzMyNCw4IEBAIGJvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKIAogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotCi0gICAgbV9idXR0
ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3Ry
dWN0dXJlKG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3Ry
dWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY5Nywx
MiArNzAwLDE2IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKICAg
ICAKICAgICBpZiAoc3RhcnRJbmRleCArIGNvdW50ID4gdmVjdG9yTGVuZ3RoKQogICAgICAgICBj
b3VudCA9IHZlY3Rvckxlbmd0aCAtIHN0YXJ0SW5kZXg7Ci0gICAgCisgICAKKyAgICBkYXRhTG9n
Rigic2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UgZm9yICVwIHdpdGggaW5kZXggYmlhcyAldSBh
bmQgdmVjdG9yIGxlbmd0aCAldVxuIiwgdGhpcywgc3RvcmFnZS0+bV9pbmRleEJpYXMsIG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9
IG1pbih2ZWN0b3JMZW5ndGgsIG9sZExlbmd0aCk7CiAgICAgCiAgICAgdmVjdG9yTGVuZ3RoIC09
IGNvdW50OwogICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAg
IAorICAgIGlmICghbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICBkYXRhTG9n
RigiYnJlYWsgaGVyZVxuIik7CisKICAgICBpZiAodmVjdG9yTGVuZ3RoKSB7CiAgICAgICAgIGlm
IChzdGFydEluZGV4IDwgdXNlZFZlY3Rvckxlbmd0aCAtIChzdGFydEluZGV4ICsgY291bnQpKSB7
CiAgICAgICAgICAgICBpZiAoc3RhcnRJbmRleCkgewpAQCAtNzExLDkgKzcxOCw5IEBAIGJvb2wg
SlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAq
IHN0YXJ0SW5kZXgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9idXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKLSAgICAgICAgICAgIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgICAgICBzdG9yYWdlLT5t
X2luZGV4QmlhcyArPSBjb3VudDsKKyAgICAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHktPnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgICAgICBz
dG9yYWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHNldEJ1
dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShuZXdCdXR0ZXJmbHkpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgbWVtbW92ZSgKICAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvciArIHN0YXJ0SW5kZXgsCkBAIC03MjMsNiArNzMwLDggQEAgYm9vbCBKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZQogICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBzdG9yYWdlLT5tX2luZGV4
QmlhcyArPSBjb3VudDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODM1LDExICs4NDQsMTMg
QEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogCiAgICAgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CiAKKyAgICBkYXRhTG9n
RigidW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSBmb3IgJXAgd2l0aCBpbmRleCBiaWFzICV1
XG4iLCB0aGlzLCBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7CiAgICAgaWYgKG1vdmVGcm9udCAmJiBz
dG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2J1dHRlcmZseSA9IHN0
b3JhZ2UtPmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7Ci0gICAgICAg
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQoc3RydWN0dXJl
KCksIGNvdW50KTsKKyAgICAgICAgc3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50OwogICAgICAgICBzdG9y
YWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoICsgY291bnQpOworICAgICAgICBzZXRC
dXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUobmV3QnV0dGVyZmx5KTsKICAgICB9IGVs
c2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAg
ICAgICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwogICAg
IGVsc2UgaWYgKHVuc2hpZnRDb3VudFNsb3dDYXNlKGV4ZWMtPnZtKCksIG1vdmVGcm9udCwgY291
bnQpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
cmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDcsMTMgKzU0NywxNSBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiAgICAgfQogCiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwg
bV9idXR0ZXJmbHkpOyAKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1
dHRlcmZseSgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5KTsKLSAg
ICAKLSAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgIAogICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gMDsKICAgICBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KHZtLCB0aGlzLCBtYXApOworICAgIHNldEJ1dHRl
cmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShuZXdCdXR0ZXJmbHkpOworICAgIGRpZFJlcGxh
Y2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgIAogICAg
IHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQpAQCAtNjEzLDcgKzYxNSwx
MSBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRl
SW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZVVuZGVjaWRlZCk7CisKKyAgICB3aWxs
UmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
KyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CisKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5OwogfQogCkBAIC02MjIsNyArNjI4LDExIEBA
IENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0
aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlSW50MzIpOworCisgICAgd2lsbFJlcGxhY2VP
bGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0
dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlk
UmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAg
ICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTYzMyw3
ICs2NDMsMTEgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogICAg
IGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAg
ICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUU5hTjsKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVEb3VibGUpOworCisgICAgd2lsbFJlcGxhY2VPbGRC
dXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJl
QW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVw
bGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAg
cmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC02NDIsNyAr
NjU2LDExIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBj
cmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisKKyAg
ICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsK
ICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVy
Zmx5KTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1
dHRlcmZseSk7CisKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAK
QEAgLTY2Myw3ICs2ODEsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlT
dG9yYQogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5t
X2luZGV4QmlhcyA9IDA7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0
ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFj
ZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtNzMwLDcgKzc1MiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAgICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgog
ICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHko
KSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdl
LT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gc3RvcmFnZTsKIH0KIApAQCAtNzg3LDcgKzgx
MywxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgfQog
ICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJm
bHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdT
dG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAt
ODU2LDcgKzg4NiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9B
CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAg
IHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwog
ICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdl
LT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0
dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsK
IH0KIApAQCAtODg1LDcgKzkxOSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
Q29udGlndW91CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9u
KTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0
ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBu
ZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3
U3RvcmFnZTsKIH0KIApAQCAtMjMyMSwxOCArMjM1OSwyNSBAQCBib29sIEpTT2JqZWN0OjppbmNy
ZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJl
Y2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KICAgICBpZiAo
TElLRUxZKCFpbmRleEJpYXMpKSB7CiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsK
KyAgICAgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRl
cmZseSk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVy
Zmx5KCktPmdyb3dBcnJheVJpZ2h0KAogICAgICAgICAgICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgp
LCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
bmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKwog
ICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3
VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0
dXJlKG5ld0J1dHRlcmZseSk7CisgICAgICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCiAgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4g
QXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgogICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBkYXRhTG9nRigicHJlIGNhcGFjaXR5IGJl
Zm9yZTogJWx1XG4iLCBtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHko
c3RydWN0dXJlKCkpKTsKKyAgICBkYXRhTG9nRigiaW5kZXhpbmcgcGF5bG9hZCBiZWZvcmU6ICVs
dVxuIiwgbV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKHN0cnVjdHVyZSgpKSk7CisgICAgZGF0YUxvZ0YoInZlY3RvciBsZW5ndGggYmVmb3Jl
OiAldVxuIiwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB3aWxsUmVwbGFjZU9s
ZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsgCiAgICAgdW5zaWduZWQg
bmV3SW5kZXhCaWFzID0gc3RkOjptaW4oaW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFycmF5KAogICAgICAgICB2bSwgdGhpcywK
QEAgLTIzNDAsMTAgKzIzODUsMTQgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5n
dGgoVk0mIAogICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgCiAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMg
PSBuZXdJbmRleEJpYXM7CisgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJl
KCksIG5ld0J1dHRlcmZseSk7CisgICAgZGF0YUxvZ0YoInByZSBjYXBhY2l0eSBhZnRlcjogJWx1
XG4iLCBuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVy
ZSgpKSk7CisgICAgZGF0YUxvZ0YoImluZGV4aW5nIHBheWxvYWQgYWZ0ZXI6ICVsdVxuIiwgbmV3
QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhz
dHJ1Y3R1cmUoKSkpOworICAgIGRhdGFMb2dGKCJ2ZWN0b3IgbGVuZ3RoIGFmdGVyOiAldVxuXG4i
LCBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMjM1OCwxNSArMjQwNywxOSBAQCB2b2lkIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZN
JiB2bSwgCiAgICAgICAgIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIHVuc2lnbmVk
IG9sZFZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+
Z3Jvd0FycmF5UmlnaHQoCiAgICAgICAgIHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCiAgICAgICAgIG9sZFZlY3Rvckxlbmd0aCAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCiAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpOworCisgICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChu
ZXdWZWN0b3JMZW5ndGgpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVy
ZSgpLCBtX2J1dHRlcmZseSk7CisKICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3Ro
OyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFFOYU47CiAgICAgfQotICAgIG1fYnV0dGVyZmx5
LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKIH0KIAogQnV0dGVyZmx5KiBKU09i
amVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJDb21tb25J
ZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkRlZmVyR0Mu
aCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlTbG90LmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlTdG9yYWdlLmgiCkBAIC02MDQsMTMgKzYwNiwxNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVjU3RhdGUqIGV4ZWMpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYs
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAgdm9pZCBzZXRCdXR0ZXJmbHlX
aXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7IC8vIFlvdSBwcm9iYWJseSBkb24n
dCB3YW50IHRvIGNhbGwgdGhpcy4KKyAgICB2b2lkIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2lu
Z1N0cnVjdHVyZShCdXR0ZXJmbHkqKTsKICAgICAgICAgCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUo
Vk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYs
IFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxv
Y2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1
cmUqKTsKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nh
cnkoVk0mLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHZvaWQgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHko
Vk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKKyAgICB2b2lkIGRpZFJlcGxhY2VPbGRCdXR0
ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKKwogICAgIHZvaWQgZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3QoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0
ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCB0aGlzKTsKQEAgLTExMjMsOCArMTEyOCwyOCBAQCBp
bmxpbmUgYm9vbCBKU09iamVjdDo6aXNFcnJvckluc3RhbmNlKCkgCiAgICAgcmV0dXJuIHN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBFcnJvckluc3RhbmNlVHlwZTsKIH0KIAoraW5s
aW5lIHZvaWQgSlNPYmplY3Q6OndpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIEJ1dHRlcmZseSogb2xkQnV0dGVyZmx5KQoreworICAgIGlmICgh
b2xkQnV0dGVyZmx5KQorICAgICAgICByZXR1cm47CisgICAgdm9pZCogb2xkQmFzZSA9IG9sZEJ1
dHRlcmZseSA/IG9sZEJ1dHRlcmZseS0+YmFzZShvbGRTdHJ1Y3R1cmUpIDogMDsKKyAgICBzaXpl
X3Qgb2xkU2l6ZSA9IG9sZEJ1dHRlcmZseSA/IG9sZEJ1dHRlcmZseS0+dG90YWxTaXplKG9sZFN0
cnVjdHVyZSkgOiAwOworICAgIHZtLmhlYXAud2lsbEFiYW5kb25TdG9yYWdlKHRoaXMsIG9sZEJh
c2UsIG9sZFNpemUpOworfQorCitpbmxpbmUgdm9pZCBKU09iamVjdDo6ZGlkUmVwbGFjZU9sZEJ1
dHRlcmZseShWTSYgdm0sIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSkKK3sKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuOworICAg
IHZvaWQqIG5ld0Jhc2UgPSBuZXdCdXR0ZXJmbHkgPyBuZXdCdXR0ZXJmbHktPmJhc2UobmV3U3Ry
dWN0dXJlKSA6IDA7CisgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdCdXR0ZXJmbHkgPyBuZXdCdXR0
ZXJmbHktPnRvdGFsU2l6ZShuZXdTdHJ1Y3R1cmUpIDogMDsKKyAgICB2bS5oZWFwLmRpZEFzc2ln
blN0b3JhZ2UodGhpcywgbmV3QmFzZSwgbmV3U2l6ZSk7Cit9CisKIGlubGluZSB2b2lkIEpTT2Jq
ZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CisgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisgICAg
QVNTRVJUKCFidXR0ZXJmbHkgPT0gKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYg
IXN0cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIodGhpcykpKTsKICAgICBtX2J1dHRlcmZseSA9
IGJ1dHRlcmZseTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7CiB9CkBAIC0xMjkz
LDEwICsxMzE4LDE2IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgK
IAogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0
V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCisgICAgICAgIGJvb2wgZGlkQWxsb2NhdGVOZXdC
dXR0ZXJmbHkgPSBmYWxzZTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091
dE9mTGluZVN0b3JhZ2UoKSkgeworICAgICAgICAgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHko
dm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7
CisgICAgICAgICAgICBkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSA9IHRydWU7CisgICAgICAgIH0K
ICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRp
b24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7CiAgICAg
ICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZs
eSk7CisgICAgICAgIGlmIChkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSkKKyAgICAgICAgICAgIGRp
ZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogCiAg
ICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKQEAgLTEzMTQsMTIgKzEzNDUsMTkgQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIGlmIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVj
dHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZp
Y0Z1bmN0aW9uLCBvZmZzZXQpKSB7CiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsK
ICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKLSAgICAgICAg
aWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCisg
ICAgICAgIGJvb2wgZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSBmYWxzZTsKKyAgICAgICAgaWYg
KGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOworICAgICAg
ICAgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHRoaXMtPnN0cnVjdHVyZSgpLCBtX2J1
dHRlcmZseSk7CiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZSh2bSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwor
ICAgICAgICAgICAgZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSB0cnVlOworICAgICAgICB9CiAK
ICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgICAgIGlmIChkaWRBbGxvY2F0
ZU5ld0J1dHRlcmZseSkKKyAgICAgICAgICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZh
bHVlKTsKICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlvbnMgd2l0
aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCiAgICAgICAgIC8v
IHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCkBAIC0xMzg5LDkgKzE0
MjcsMTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYQogICAgIH0K
IAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsgCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0
ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKICAgICAgICAgdm0sIG9sZENhcGFjaXR5
LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIHNldFN0cnVjdHVyZUFu
ZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIGRpZFJlcGxh
Y2VPbGRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKIH0KIAogaW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNl
c3NhcnkoVk0mIHZtLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKQEAgLTE0MjcsMTAgKzE0Njcs
MTYgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkg
JiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5OwotICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxp
bmVTdG9yYWdlKCkpCisgICAgYm9vbCBkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSA9IGZhbHNlOwor
ICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpIHsKKyAg
ICAgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZs
eSk7CiAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091
dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgZGlkQWxsb2NhdGVOZXdCdXR0ZXJm
bHkgPSB0cnVlOworICAgIH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUo
KS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CisgICAgaWYgKGRpZEFsbG9jYXRl
TmV3QnV0dGVyZmx5KQorICAgICAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1
cmUoKSwgbmV3QnV0dGVyZmx5KTsKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5oCShyZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwOCw5ICsxMDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fZW51
bWVyYXRpb25DYWNoZS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIHZvaWQgU3RydWN0
dXJlUmFyZURhdGE6OnNldEVudW1lcmF0aW9uQ2FjaGUoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmUq
IG93bmVyLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmVSYXJlRGF0YTo6c2V0RW51bWVyYXRpb25DYWNoZShWTSYgdm0sIGNvbnN0IFN0cnVj
dHVyZSosIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9l
bnVtZXJhdGlvbkNhY2hlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgbV9lbnVtZXJh
dGlvbkNhY2hlLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2
aXNpb24gMTU1MzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRp
YWxpemUoKQogI2lmICFFTkFCTEUoWUFSUl9KSVQpCiAgICAgdXNlUmVnRXhwSklUKCkgPSBmYWxz
ZTsKICNlbmRpZgotICAgIAorICAgCisgICAgbWluSGVhcFV0aWxpemF0aW9uKCkgPSAxLjA7Cisg
CiAgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdoZXJlIG5lZWRlZCBhbmQgbWFrZSBjb3JyZWN0aW9u
cyB0byB0aGUgb3B0aW9uczoKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAoKSA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIEFT
U0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0
aW1pemVTb29uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCShyZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDUsOCArNzA1LDExIEBAIFN0
cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKIAogICAgIC8vIElmIHRoZSBv
YmplY3QgaGFkIGEgQnV0dGVyZmx5IGJ1dCBhZnRlciBmbGF0dGVuaW5nL2NvbXBhY3Rpbmcgd2Ug
bm8gbG9uZ2VyIGhhdmUgbmVlZCBvZiBpdCwKICAgICAvLyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0
IGJlY2F1c2UgdGhlIGNvbGxlY3RvciBkZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1cmUgdG8ga25vdyB0
aGUgc2l6ZSBmb3IgY29weWluZy4KLSAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhdGhp
cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0
KSkKKyAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhdGhpcy0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkgeworICAgICAgICBvYmpl
Y3QtPndpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLCBvYmpl
Y3QtPmJ1dHRlcmZseSgpKTsKICAgICAgICAgb2JqZWN0LT5zZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIHRoaXMsIDApOworICAgICAgICBvYmplY3QtPmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHko
dm0sIHRoaXMsIDApOworICAgIH0KIAogICAgIHJldHVybiB0aGlzOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmgJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICsz
NSw5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZVJhcmVEYXRhOjpwcmUKICAgICByZXR1
cm4gbV9wcmV2aW91cy5nZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6
OnNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQoraW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldFByZXZpb3VzSUQo
Vk0mIHZtLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBtX3ByZXZp
b3VzLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICBtX3ByZXZpb3VzLnNldCh2
bSwgdGhpcywgc3RydWN0dXJlKTsKIH0KIAogaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6
OmNsZWFyUHJldmlvdXNJRCgpCkBAIC01MCw5ICs1MCw5IEBAIGlubGluZSBKU1N0cmluZyogU3Ry
dWN0dXJlUmFyZURhdGE6Om9iamUKICAgICByZXR1cm4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlLmdl
dCgpOwogfQogCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJp
bmdWYWx1ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTU3RyaW5nKiB2YWx1ZSkKK2lu
bGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKFZNJiB2
bSwgY29uc3QgSlNDZWxsKiwgSlNTdHJpbmcqIHZhbHVlKQogewotICAgIG1fb2JqZWN0VG9TdHJp
bmdWYWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CisgICAgbV9vYmplY3RUb1N0cmluZ1ZhbHVl
LnNldCh2bSwgdGhpcywgdmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211270</attachid>
            <date>2013-09-10 17:56:25 -0700</date>
            <delta_ts>2013-09-11 21:37:12 -0700</delta_ts>
            <desc>checkpoint</desc>
            <filename>bug-121074-20130910175614.patch</filename>
            <type>text/plain</type>
            <size>152112</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MCBA
QAorMjAxMy0wOS0xMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIGdlbmVyYXRpb25hbCBnYXJiYWdlIGNvbGxlY3Rv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMDc0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRy
OjpGdW5jdGlvblB0cik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6CisgICAg
ICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmls
ZUJhc2U6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1
dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJhbnNpdGlvblN0dWIp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Z2VuZXJpY1dyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvcHlXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
Z2VuZXJpY0FkZFNwYW4pOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToK
KyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZUR1cmluZ0NvcHlpbmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6Q29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6Q29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6ZGlkRXZh
Y3VhdGVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpwaW4pOgorICAgICAgICAo
SlNDOjpDb3BpZWRCbG9jazo6dW5waW4pOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6aXNP
bGQpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9j
azo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nV3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6Q29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcpOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZGlkU3RhcnRGdWxs
Q29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZyk6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6
OkNvcGllZFNwYWNlOjp3aWxsQWJhbmRvblN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6ZGlkQXNzaWduU3RvcmFnZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgor
ICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6aGVhcCk6CisgICAgICAgICogaGVhcC9Db3B5Vmlz
aXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3Bh
Y2UpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3cpOgor
ICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAg
ICAgICAoSlNDOjpIZWFwOjpkaWRBYmFuZG9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jv
b3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9S
ZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JE
ZWZlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmRpZEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d2lsbEFiYW5kb25TdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkQXNzaWduU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvcHlXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAg
ICAgICAoSlNDOjpIZWFwOjppc0luUmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6
Om9wZXJhdGlvbkluUHJvZ3Jlc3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpzaG91bGRDb2xsZWN0
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OmNsZWFyTWFya3MpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2xlYXJS
ZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNsZWFyTWFya3NXaXRo
Q29sbGVjdGlvblR5cGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6bGFzdENoYW5jZVRv
RmluYWxpemUpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
c2V0UmVtZW1iZXJlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhclJlbWVtYmVy
ZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXRvbWljQ2xlYXJSZW1lbWJlcmVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzUmVtZW1iZXJlZCk6CisgICAgICAgICogaGVh
cC9NYXJrZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpDbGVhck1hcmtzOjpvcGVyYXRvcigpKToK
KyAgICAgICAgKEpTQzo6Q2xlYXJSZW1lbWJlcmVkU2V0OjpvcGVyYXRvcigpKToKKyAgICAgICAg
KEpTQzo6TWFya2VkU3BhY2U6OmNsZWFyUmVtZW1iZXJlZFNldCk6CisgICAgICAgICogaGVhcC9T
bG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2spOgorICAgICAgICAo
SlNDOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjptYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6c2hhcmVkRGF0YSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OnVuY29uZGl0aW9uYWxseUFwcGVuZCk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjpjb3B5TGF0ZXIpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aGVhcCk6
CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1
dENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAqIGppdC9K
SVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAg
ICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6Omxs
aW50X3dyaXRlX2JhcnJpZXJfc2xvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF91bmNv
bmRpdGlvbmFsX3dyaXRlX2JhcnJpZXJfc2xvdyk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93
UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAg
ICAgICAqIG9mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20v
eDg2LnJiOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dG90YWxTaXpl
KToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6Cisg
ICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0
aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0
ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6d2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6ZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0U3RydWN0
dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGltZS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpz
ZXRFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKiBydW50aW1lL01hcERhdGEuY3BwOgorICAg
ICAgICAoSlNDOjpNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVuZCk6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0
UHJldmlvdXNJRCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RU
b1N0cmluZ1ZhbHVlKToKKwogMjAxMy0wOS0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IHNvbWUgaW5kZW50YXRpb24gaW4gSW50ZXJwcmV0ZXIuY3BwLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsNiArMTM0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9J
TlRFUihtX3ZhbHVlKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSByZXR1cm5UeXBl
LCB0eXBlbmFtZSBhcmdUeXBlMSwgdHlwZW5hbWUgYXJnVHlwZTIsIHR5cGVuYW1lIGFyZ1R5cGUz
LCB0eXBlbmFtZSBhcmdUeXBlNCwgdHlwZW5hbWUgYXJnVHlwZTUsIHR5cGVuYW1lIGFyZ1R5cGU2
PgorICAgIEZ1bmN0aW9uUHRyKHJldHVyblR5cGUoKnZhbHVlKShhcmdUeXBlMSwgYXJnVHlwZTIs
IGFyZ1R5cGUzLCBhcmdUeXBlNCwgYXJnVHlwZTUsIGFyZ1R5cGU2KSkKKyAgICAgICAgOiBtX3Zh
bHVlKCh2b2lkKil2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5U
RVIobV92YWx1ZSk7CisgICAgfQorCiAvLyBNU1ZDIGRvZXNuJ3Qgc2VlbSB0byB0cmVhdCBmdW5j
dGlvbnMgd2l0aCBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucyBhcwogLy8gZGlmZmVyZW50
IHR5cGVzOyB0aGVzZSBtZXRob2RzIGFscmVhZHkgZGVmaW5lZCBmb3IgZmFzdGNhbGwsIGJlbG93
LgogI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMICYmICFPUyhXSU5ET1dTKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDE4LDcgKzI0MTgsNyBAQCB2b2lkIENvZGVCbG9jazo6
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzLnNpemUoKTsgKytpKQogICAgICAgICBtX29iamVjdEFs
bG9jYXRpb25Qcm9maWxlc1tpXS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIAotICAgIHVwZGF0
ZUFsbFByZWRpY3Rpb25zKENvbGxlY3Rpb24pOworICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKHZp
c2l0b3IuaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkpOwogfQogCiB2b2lkIENvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2
aXNpb24gMTU1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgc3RydWN0IFZhbHVlUHJv
ZmlsZUJhc2UgewogICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChvcGVyYXRpb24gPT0g
Q29sbGVjdGlvbgorICAgICAgICBpZiAoKG9wZXJhdGlvbiA9PSBGdWxsQ29sbGVjdGlvbiB8fCBv
cGVyYXRpb24gPT0gRWRlbkNvbGxlY3Rpb24pCiAgICAgICAgICAgICAmJiAhbV9zaW5nbGV0b25W
YWx1ZUlzVG9wCiAgICAgICAgICAgICAmJiAhIW1fc2luZ2xldG9uVmFsdWUKICAgICAgICAgICAg
ICYmIG1fc2luZ2xldG9uVmFsdWUuaXNDZWxsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwNSw3ICsxMzA1LDYgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBj
YXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7CiAgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0KICAgICAgICAgZmlsdGVyKHZh
bHVlLCBub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVy
ZXModHJ1ZSk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE1NTQ5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmc0KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJbW0z
MiBhcmczLCBHUFJSZWcgYXJnNCwgR1BSUmVnIGFyZzUpCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczLCBHUFJSZWcgYXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50
cygpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwpAQCAtMjczLDEwICsyNzMsOSBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmcyKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAgICAgICBhZGRDYWxsQXJn
dW1lbnQoYXJnNCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKICAgICB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCiAgICAgewogICAgICAgICBy
ZXNldENhbGxBcmd1bWVudHMoKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTI4Niw3ICsyODUsMTYgQEAgcHVibGljOgogICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoYXJnNCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJl
ZyBhcmczLCBUcnVzdGVkSW1tMzIgYXJnNCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBUcnVzdGVkSW1tUHRyIGFy
ZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7Cisg
ICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIp
OworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVkSW1tUHRyIGFyZzQpCiAgICAgewogICAgICAgICBy
ZXNldENhbGxBcmd1bWVudHMoKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTI5NiwxNiArMzA0LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW1Q
dHIgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBh
cmczLCBUcnVzdGVkSW1tMzIgYXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50
cygpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmcyKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgICAgICBhZGRDYWxs
QXJndW1lbnQoYXJnNCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmcz
LCBUcnVzdGVkSW1tUHRyIGFyZzQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIsIEdQ
UlJlZyBhcmczLCBHUFJSZWcgYXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50
cygpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwpAQCAtMzE1LDcgKzMyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzQpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgVHJ1
c3RlZEltbTMyIGFyZzQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIg
YXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQogICAgIHsKICAgICAgICAgcmVz
ZXRDYWxsQXJndW1lbnRzKCk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CkBAIC0zMjMsOSArMzMyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzIpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CiAgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUp
OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcgYXJnMywg
R1BSUmVnIGFyZzQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJS
ZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCiAgICAgewogICAgICAgICByZXNldENhbGxBcmd1
bWVudHMoKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKQEAgLTMzMyw2ICszNDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmcyKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAgICAgICBhZGRDYWxs
QXJndW1lbnQoYXJnNCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKICAgICB9CiAK
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0LCBHUFJSZWcgYXJn
NSkKQEAgLTkxNSw2ICs5MjYsMjAgQEAgcHVibGljOgogICAgICAgICBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZElt
bVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBh
cmc1KQorICAgIHsKKyAgICAgICAgcG9rZShhcmc1LCBQT0tFX0FSR1VNRU5UX09GRlNFVCArIDEp
OworICAgICAgICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJ
bW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgcG9rZShhcmc1LCBQT0tFX0FSR1VNRU5UX09GRlNF
VCArIDEpOworICAgICAgICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAg
ICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0K
KwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgVHJ1c3RlZEltbTMyIGFy
ZzQpCiAgICAgewogICAgICAgICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKQEAg
LTEwMjMsNiArMTA0OCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6
YXJndW1lbnRHUFIzKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICB9CisKKyNlbmRpZgorCisjaWYgTlVNQkVSX09G
X0FSR1VNRU5UX1JFR0lTVEVSUyA9PSA2CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVz
dGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAg
ICAgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFy
Z3VtZW50R1BSND4oYXJnMSwgYXJnNCk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyKTsKKyAgICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwor
ICAgICAgICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwg
VHJ1c3RlZEltbTMyIGFyZzUpCisgICAgeworICAgICAgICBwdXNoKGFyZzEpOworICAgICAgICBz
ZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRH
UFI0PihhcmcyLCBhcmc0KTsKKyAgICAgICAgcG9wKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwor
ICAgICAgICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
fQogI2VuZGlmCiAKICAgICB2b2lkIHNldHVwUmVzdWx0cyhHUFJSZWcgZGVzdEEsIEdQUlJlZyBk
ZXN0QikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczNiw4ICsxNzM2LDExIEBAIGNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAg
ICBvYmplY3QtPndpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgp
LCBvYmplY3QtPmJ1dHRlcmZseSgpKTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CiAg
ICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsK
KyAgICBvYmplY3QtPmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0dXJl
KCksIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7
CiB9CiAKQEAgLTE3NDYsOCArMTc0OSwxMSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7CisgICAgb2JqZWN0LT53aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1
Y3R1cmUoKSwgb2JqZWN0LT5idXR0ZXJmbHkoKSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBv
YmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKICAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhv
dXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIG9iamVjdC0+ZGlkUmVwbGFjZU9sZEJ1
dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMTk0NCw2ICsxOTUwLDMwIEBA
IHNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCit2b2lkIERGR19P
UEVSQVRJT04gZGZnQ29weVdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRyLCBzaXplX3QgbmV3
U2l6ZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIGV4ZWMtPmhlYXAoKS0+Y29weVdyaXRlQmFy
cmllcihjZWxsLCBvbGRQdHIsIG9sZFNpemUsIG5ld1B0ciwgbmV3U2l6ZSk7Cit9CisKK3ZvaWQg
REZHX09QRVJBVElPTiBkZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBjZWxsKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgZXhlYy0+aGVhcCgpLT53
cml0ZUJhcnJpZXIoY2VsbCk7Cit9CisKK3ZvaWQgREZHX09QRVJBVElPTiBkZmdXcml0ZUJhcnJp
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIG93bmVkKQoreworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworCisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIsIG93bmVk
KTsKK30KKwogdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlv
bkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0
Y2gpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2
ICsxMDMsNyBAQCB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgaW50MzJfdCwgZG91YmxlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9O
ICgqVl9ERkdPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBF
bmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9O
ICgqVl9ERkdPcGVyYXRpb25fRUNCKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBCdXR0ZXJmbHkqKTsK
IHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNJY2YpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVS
QVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2Vs
bCosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RG
R09wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpOwpAQCAtMTMwLDcgKzEzMSw4IEBAIHR5cGVkZWYgY2hhciogREZHX09QRVJB
VElPTiAoKlBfREZHT3BlcmEKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIFN0cmlu
Z0ltcGwqIERGR19PUEVSQVRJT04gKCpJX0RGR09wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBK
U1N0cmluZyopOwogdHlwZWRlZiBKU1N0cmluZyogREZHX09QRVJBVElPTiAoKkpzc19ERkdPcGVy
YXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVS
TkFMOyAKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OIChWX0RGR09wZXJhdGlvbl9FQ1BTUFMp
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOworSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUq
LCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOwogCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlk
ZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28g
Y29tcGxleCB0byBKSVQuCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKQEAgLTMxNiw2ICszMTgsMTAg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogY2hhciogREZHX09Q
RVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUlu
ZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCiAKK3ZvaWQgREZHX09QRVJBVElPTiBkZmdDb3B5V3JpdGVCYXJyaWVyKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOwordm9pZCBERkdf
T1BFUkFUSU9OIGRmZ1dyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsK
K3ZvaWQgREZHX09QRVJBVElPTiBkZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOworCiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9u
X0VTdFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlw
ZSB0eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDcsNzAgKzY0Nyw1NSBAQCBzdGF0aWMgdm9pZCBlbWl0
UHV0UmVwbGFjZVN0dWIoCiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwogI2VuZGlmCiAgICAgR1BSUmVn
IHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVH
UFIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAg
IEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9
IHRydWU7Ci0jZWxzZQotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFsc2U7
Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwogICAgIAotICAgIGlm
IChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgKHdyaXRlQmFycmllck5lZWRlZCB8fCBp
c091dE9mTGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgdmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1
bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQ
Uik7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRj
aC5kZmcudXNlZFJlZ2lzdGVycyk7CisgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7CiAjZW5k
aWYKLSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICBzdHViSml0
LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgfQorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsK
KyAgICAKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOwogCisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGV4ZWMtPmNvZGVCbG9jaygp
KTsKKworICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHVi
Sml0KTsKKyAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHVi
Sml0LmJyYW5jaFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7
Ci0gICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQ
UihiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0jZWxzZQotICAgIHNjcmF0Y2hHUFIy
ID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZh
bHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgIHN0dWJKaXQucHVzaChzY3JhdGNo
R1BSMik7Ci0gICAgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3Mp
OwotICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIyKTsKLSNlbmRpZgorCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgd3JpdGVCYXJyaWVyT3BlcmF0aW9uID0gU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpOwogICAg
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSkpOwogICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5l
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICAg
ICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVs
c2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAg
fQogI2VuZGlmCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwogICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3Jl
U2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICBpZiAoYWxs
b2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CiAgICAgICAgIHN1Y2Nlc3MgPSBzdHVi
Sml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0
KTsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIGFsbG9jYXRvci5y
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwogICAgICAgICBmYWlsdXJl
ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3VjY2VzcyA9IHN0dWJK
aXQuanVtcCgpOwpAQCAtNzE4LDYgKzcwMyw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNl
U3R1YigKICAgICB9CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHVi
Sml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJp
ZXJPcGVyYXRpb24sIGRmZ1VuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKICAgICAgICAgICAgIApAQCAtNzYyLDM1ICs3
NDgsMzQgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgIEFTU0VSVChz
Y3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKICAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gdmFsdWVH
UFIpOwogICAgIAotICAgIGJvb2wgbmVlZFNlY29uZFNjcmF0Y2ggPSBmYWxzZTsKLSAgICBib29s
IG5lZWRUaGlyZFNjcmF0Y2ggPSBmYWxzZTsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9G
SUxJTkcpCi0gICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOwotI2VuZGlmCisgICAgYm9vbCBu
ZWVkRm91cnRoU2NyYXRjaCA9IGZhbHNlOwogICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYm
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkU2Vjb25k
U2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOworICAgICAg
ICBuZWVkRm91cnRoU2NyYXRjaCA9IHRydWU7CiAgICAgfQogCi0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIyOwotICAgIGlmIChuZWVkU2Vjb25kU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMiA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIp
OwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBBU1NF
UlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQUik7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZh
bHVlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOworCisgICAg
R1BSUmVnIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
IEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjMg
IT0gdmFsdWVHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7Cisg
ICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIyKTsKKyAgICAKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjQ7CisgICAgaWYgKG5lZWRGb3VydGhTY3JhdGNoKSB7CisgICAgICAgIHNjcmF0
Y2hHUFI0ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBBU1NFUlQo
c2NyYXRjaEdQUjQgIT0gYmFzZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSB2
YWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMSk7Cisg
ICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMik7CisgICAgICAgIEFTU0VS
VChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMyk7CiAgICAgfSBlbHNlCi0gICAgICAgIHNjcmF0
Y2hHUFIyID0gSW52YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjM7Ci0gICAgaWYg
KG5lZWRUaGlyZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BS
KTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNT
RVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIzICE9IHNjcmF0Y2hHUFIyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBJ
bnZhbGlkR1BSUmVnOwotICAgICAgICAgICAgCisgICAgICAgIHNjcmF0Y2hHUFI0ID0gSW52YWxp
ZEdQUlJlZzsKKwogICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGlu
ZyhzdHViSml0KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7
CkBAIC04MTEsMTIgKzc5Niw5IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigK
ICAgICAgICAgfQogICAgIH0KIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
LSAgICBBU1NFUlQobmVlZFNlY29uZFNjcmF0Y2gpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAh
PSBJbnZhbGlkR1BSUmVnKTsKICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFy
cmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAg
U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSNlbmRpZgor
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHdyaXRlQmFycmllck9wZXJhdGlvbiA9IFNwZWN1bGF0
aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjb3B5V3JpdGVCYXJyaWVyT3BlcmF0
aW9uOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAK
QEAgLTgzMiw2ICs4MTQsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAg
ICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRj
aEdQUjEpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29s
dXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRj
aEdQUjEpOworICAgICAgICAgICAgY29weVdyaXRlQmFycmllck9wZXJhdGlvbiA9IFNwZWN1bGF0
aXZlSklUOjpjb3B5V3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIDAsIDAsIHNjcmF0Y2hH
UFIxLCBuZXdTaXplLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMpOwogICAgICAgICAgICAgc3R1
YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkp
LCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVl
KTsKQEAgLTg0Myw2ICs4MjYsOCBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIo
CiAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2Nh
dG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2Ny
YXRjaEdQUjEpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFi
c29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2Ny
YXRjaEdQUjEpOworICAgICAgICAgICAgLy8gVE9ETzogR2V0IHRoZSByZWFsIGJhc2Ugb2YgdGhl
IG9sZCBCdXR0ZXJmbHkuCisgICAgICAgICAgICBjb3B5V3JpdGVCYXJyaWVyT3BlcmF0aW9uID0g
U3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRj
aEdQUjMsIG9sZFNpemUsIHNjcmF0Y2hHUFIxLCBuZXdTaXplLCBzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjQpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3Jh
Z2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICBmb3IgKHB0cmRpZmZfdCBv
ZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZz
ZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewpAQCAtOTA5LDYgKzg5NCw5IEBAIHN0YXRpYyB2b2lkIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICB9CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayh3cml0ZUJhcnJpZXJPcGVyYXRpb24sIGRmZ1VuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIp
OworICAgIGlmIChzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoY29weVdyaXRlQmFycmllck9wZXJhdGlvbiwgZGZnQ29weVdyaXRlQmFycmllcik7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYg
KGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1NTQ5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NCwxNyArMjc0LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdl
dEJ5SWQoQ29kZU8KICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwg
R1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0
S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIs
IEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJS
ZWcgc2NyYXRjaEdQUjIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2lu
ZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7CiAgICAgCiAgICAgSklUQ29t
cGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgSklUQ29tcGlsZXI6
OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJX
aXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2lu
dGVyKSkpOwogCi0gICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgIHdyaXRlQmFy
cmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVVc2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BS
Mik7CiAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9y
YWdlTG9hZCA9Ci0gICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5z
dG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgMCkpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjEpOworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRj
aCA9IG1faml0LnN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgMCkpOwogCiAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAgICAgCkBAIC0zMTQsNyArMzE0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgICAgICAgICAgaWRlbnRp
ZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgfQogICAgIFJlZ2lzdGVyU2V0IGN1cnJl
bnRseVVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzKCk7Ci0gICAgY3VycmVudGx5VXNlZFJl
Z2lzdGVycy5jbGVhcihzY3JhdGNoR1BSKTsKKyAgICBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmNs
ZWFyKHNjcmF0Y2hHUFIxKTsKICAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQo
YmFzZUdQUikpOwogICAgIEFTU0VSVChjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmdldCh2YWx1ZUdQ
UikpOwogICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKApAQCAtMjY1OSw4ICsyNjU5LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpDb250
aWd1b3VzICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJy
aWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaDEodGhpcyk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMp
OworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hp
bGQzLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CkBAIC0yNzMz
LDggKzI3MzQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChIZWFwOjpp
c1dyaXRlQmFycmllckVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1
ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5n
cHIoKSk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAgICAgICAgICAg
ICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgc2NyYXRjaDEuZ3By
KCksIHNjcmF0Y2gyLmdwcigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOwpAQCAtMjgzMCw3ICsyODMyLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVnLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJndW1lbnRzLCBtX3Nsb3dBcmd1bWVudHMpKSkpOwotICAgIAorICAgCisgICAg
ICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVSZWcsIGNoaWxkMywgc2NyYXRjaFJl
Zywgc2NyYXRjaDJSZWcpOworIAogICAgICAgICAgICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywg
c2NyYXRjaDJSZWcpOwogICAgICAgICAgICAgbV9qaXQubmVnMzIoc2NyYXRjaDJSZWcpOwogICAg
ICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDJSZWcsIHNjcmF0Y2gyUmVn
KTsKQEAgLTI5MzQsNyArMjkzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBB
cnJheTo6SW50MzIgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKICAgICAgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0
ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAg
ICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIo
KSwgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdl
TGVuZ3RoR1BSKTsKQEAgLTI5ODMsNyArMjk4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVy
RW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5j
aGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2
YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwpAQCAtMzc0MiwxNCArMzc0NiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHJlZ2lzdGVy
cyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rl
cih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3RlcjIodGhpcyk7CiAK
ICAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBy
ZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2hSZWdpc3Rl
ci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gc2NyYXRjaFJlZ2lzdGVyMi5n
cHIoKTsKIAogICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OwotICAgICAgICB3cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDMo
KSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICB3
cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDMoKSwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMzk0NSwxMyArMzk1MSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNv
bXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNv
ZGVCbG9jaygpLCBub2RlKTsKIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMp
OworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIAotI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdy
aXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBp
dAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEoKS5uZXdTdHJ1Y3R1cmUsIFdyaXRlQmFycmllckZvckdlbmVyaWNBY2Nlc3MpOwotI2Vu
ZGlmCisgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsK
ICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkp
OwogICAgICAgICAKQEAgLTQwMDYsMTggKzQwMTEsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNl
dDogewotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0jZW5kaWYKICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIo
dGhpcyk7CiAKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgCi0jaWYgRU5BQkxF
KFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIo
KSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcyk7Ci0jZW5kaWYKKyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdw
cigpLCBub2RlLT5jaGlsZDMoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKIAog
ICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFw
aCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsK
ICAgICAgICAgCkBAIC00MDMwLDM2ICs0MDMzLDQ0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFB1dEJ5SWQ6IHsKICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7CiAgICAgICAgIAorICAgICAgICBjYWNoZWRQ
dXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIo
KSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIE5v
dERpcmVjdCk7CisgICAgICAgCisvKiAKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgdmFs
dWUudXNlKCk7CisqLwogCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwg
YmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNoR1BSLCBub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7Ci0gICAgICAgIAotICAgICAgICBub1Jlc3VsdChu
b2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChub2Rl
LyosIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSovKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSMiA9IHNjcmF0Y2gyLmdwcigpOwogICAgICAgICAKKyAgICAgICAgY2FjaGVkUHV0QnlJZChu
b2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwor
CisvKgogICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICB2YWx1ZS51c2UoKTsKKyovCiAKLSAg
ICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwg
bm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGly
ZWN0KTsKLQotICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICBub1Jlc3VsdChub2RlLyosIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSovKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDc2LDEwICs0MDg3LDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFj
Y2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQxKCks
IHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigp
KTsKQEAgLTQzNjAsOSArNDM3MSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSk7CiAKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWN0aXZhdGlvblZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICBHUFJSZWcgYWN0aXZhdGlvblZhbHVlR1BSID0g
YWN0aXZhdGlvblZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIoKTsKIAogICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBp
bGVyOjpaZXJvLCBhY3RpdmF0aW9uVmFsdWVHUFIpOwogCkBAIC00MzczLDEzICs0Mzg2LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZm9yIChp
bnQgaSA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKTsgaSA8IGNhcHR1cmVFbmQ7ICsraSkg
ewogICAgICAgICAgICAgbV9qaXQubG9hZDY0KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgaSAqIHNpemVvZihSZWdpc3RlcikpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc2Ny
YXRjaEdQUjEpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRp
b25WYWx1ZUdQUiwgcmVnaXN0ZXJzT2Zmc2V0ICsgaSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAg
ICAgICAgfQotICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyc09mZnNl
dCksIGFjdGl2YXRpb25WYWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgIG1faml0LnN0b3Jl
UHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGFjdGl2YXRpb25WYWx1ZUdQUiwg
SlNBY3RpdmF0aW9uOjpvZmZzZXRPZlJlZ2lzdGVycygpKSk7CisgICAgICAgIG1faml0LmFkZFB0
cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJzT2Zmc2V0KSwgYWN0aXZhdGlvblZhbHVlR1BSLCBzY3Jh
dGNoR1BSMSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhhY3RpdmF0aW9uVmFsdWVHUFIsIEpTQWN0aXZhdGlvbjo6b2Zmc2V0T2ZSZWdp
c3RlcnMoKSkpOworICAgICAgICB3cml0ZUJhcnJpZXIoYWN0aXZhdGlvblZhbHVlR1BSLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIpOwogCiAgICAgICAgIG5vdENyZWF0ZWQubGluaygmbV9qaXQp
OwogICAgICAgICBub1Jlc3VsdChub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODMzLDY3ICs4MzMsMjAyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVu
KE5vZGUqIG4KICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihN
YWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCitzdGF0aWMgSklUQ29tcGls
ZXI6Okp1bXAgZ2VuZXJpY1dyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93
bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICAvLyBDb3B5IG93
bmVyIHRvIHNjcmF0Y2gxCisgICAgaml0Lm1vdmUob3duZXIsIHNjcmF0Y2gxKTsKKyAgICAvLyBD
b3B5IG93bmVyIHRvIHNjcmF0Y2gyCisgICAgaml0Lm1vdmUob3duZXIsIHNjcmF0Y2gyKTsKKwor
ICAgIC8vIE1hc2sgc2NyYXRjaDEgdG8gYmxvY2sKKyAgICBqaXQuYW5kUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gxKTsKKyAg
ICAvLyBNYXNrIHNjcmF0Y2gyIHRvIGluZGV4CisgICAgaml0LmFuZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDIpOworCisg
ICAgLy8gU2hpZnQgaW5kZXgKKyAgICBqaXQucnNoaWZ0MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMig5KSwgc2NyYXRjaDIpOworCisgICAgLy8gRW1pdCBsb2FkIGFuZCBicmFuY2gKKyAg
ICByZXR1cm4gaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0ZvdXIsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpKTsKK30KKworc3RhdGljIEpJVENv
bXBpbGVyOjpKdW1wIGdlbmVyaWNXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTQ2Vs
bCogb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIC8qc2NyYXRjaDIqLykKK3sKKyAgICBN
YXJrZWRCbG9jayogYmxvY2sgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3Iob3duZXIpOworICAgIHNp
emVfdCBtYXJrSW5kZXggPSAocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG93bmVyKSAmIH5NYXJr
ZWRCbG9jazo6YmxvY2tNYXNrKSA+PiA5OworICAgIHVpbnQzMl90KiBhZGRyZXNzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSArIE1h
cmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpICsgbWFya0luZGV4OworCisgICAgLy8gRW1pdCBs
b2FkIGFuZCBicmFuY2gKKyAgICBqaXQubG9hZDMyKGFkZHJlc3MsIHNjcmF0Y2gxKTsKKyAgICBy
ZXR1cm4gaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaDEpOwor
fQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmll
cihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgb2xkU3RvcmFnZSwgc2l6
ZV90IG9sZFNpemUsIEdQUlJlZyBuZXdTdG9yYWdlLCBzaXplX3QgbmV3U2l6ZSwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5p
dGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIoaml0LCBvd25lciwgc2NyYXRjaDEs
IHNjcmF0Y2gyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG93bmVyLCBvbGRTdG9y
YWdlLCBUcnVzdGVkSW1tMzIob2xkU2l6ZSksIG5ld1N0b3JhZ2UsIFRydXN0ZWRJbW0zMihuZXdT
aXplKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspCisgICAg
ICAgIGppdC5wb3AoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisKKyAgICBkZWZpbml0ZWx5Tm90
TWFya2VkLmxpbmsoJmppdCk7CisgICAgcmV0dXJuIGNhbGw7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjb3B5V3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgb3duZXIsIHZvaWQqIG9sZFN0b3JhZ2UsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcg
bmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5l
cmljV3JpdGVCYXJyaWVyKGppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkK
KyAgICAgICAgaml0LnB1c2goR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvd25lciwgVHJ1c3RlZEltbVB0cihvbGRTdG9yYWdlKSwg
VHJ1c3RlZEltbTMyKG9sZFNpemUpLCBuZXdTdG9yYWdlLCBUcnVzdGVkSW1tMzIobmV3U2l6ZSkp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBq
aXQucG9wKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworCisgICAgZGVmaW5pdGVseU5vdE1hcmtl
ZC5saW5rKCZqaXQpOworICAgIHJldHVybiBjYWxsOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb3B5V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIG9sZFN0b3JhZ2UsIHNpemVf
dCBvbGRTaXplLCBHUFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRl
bHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lciwgc2NyYXRjaDEs
IHNjcmF0Y2gyKTsKKworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcp
OworICAgIGNhbGxPcGVyYXRpb24oZGZnQ29weVdyaXRlQmFycmllciwgb3duZXIsIG9sZFN0b3Jh
Z2UsIG9sZFNpemUsIG5ld1N0b3JhZ2UsIG5ld1NpemUpOworICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgLy8gTmVlZCB0byByZWxvYWQgdGhlIGJ1dHRlcmZs
eSBwb2ludGVyIHNpbmNlIGZpbGxpbmcgd29uJ3QgcmVsb2FkIGl0IHNpbmNlIGl0J3MgYSB0ZW1w
b3JhcnkuCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvd25lciwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgbmV3U3RvcmFnZSk7CisKKyAgICBkZWZpbml0
ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29w
eVdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIHZvaWQqIG9sZFN0b3JhZ2UsIHNpemVfdCBvbGRT
aXplLCBHUFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RN
YXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0
Y2gyKTsKKworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAg
IGNhbGxPcGVyYXRpb24oZGZnQ29weVdyaXRlQmFycmllciwgb3duZXIsIG9sZFN0b3JhZ2UsIG9s
ZFNpemUsIG5ld1N0b3JhZ2UsIG5ld1NpemUpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
SW52YWxpZEdQUlJlZyk7CisgICAgLy8gTmVlZCB0byByZWxvYWQgdGhlIGJ1dHRlcmZseSBwb2lu
dGVyIHNpbmNlIGZpbGxpbmcgd29uJ3QgcmVsb2FkIGl0IHNpbmNlIGl0J3MgYSB0ZW1wb3Jhcnku
CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvd25lciwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgbmV3U3RvcmFnZSk7CisKKyAgICBkZWZpbml0ZWx5Tm90
TWFya2VkLmxpbmsoJm1faml0KTsKK30KKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgU3BlY3VsYXRp
dmVKSVQ6OndyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJS
ZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsKLSAgICBVTlVTRURfUEFSQU0oaml0KTsK
LSAgICBVTlVTRURfUEFSQU0ob3duZXIpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CiAg
ICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gxKTsKICAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRj
aDIpOwotICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7CiAKLSNpZiBFTkFCTEUoV1JJ
VEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChqaXQsIFdy
aXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgorICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJy
aWVyKGppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0
LnB1c2goR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShvd25lcik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5j
YWxsKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
IGktLTspCisgICAgICAgIGppdC5wb3AoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisKKyAgICBk
ZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJmppdCk7CisgICAgcmV0dXJuIGNhbGw7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2
YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJS
ZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gy
KQogewotICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVl
R1BSKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJBTShzY3Jh
dGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lckdQ
Uiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKElu
dmFsaWRHUFJSZWcpOworICAgIGNhbGxPcGVyYXRpb24oZGZnVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciwgb3duZXJHUFIpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJl
Zyk7CiAKKyNpZm5kZWYgTkRFQlVHICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG93bmVy
Tm90TnVsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3du
ZXJHUFIpOworICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICBvd25lck5vdE51bGwubGluaygm
bV9qaXQpOworI2VuZGlmCisKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwg
R1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y3JhdGNoMikKK3sKICAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2Uubm9kZSgpKSkKICAg
ICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAg
IEpJVENvbXBpbGVyOjplbWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRD
b3VudGVyRm9yKHVzZUtpbmQpKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwg
PSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5pdGVs
eU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVyR1BSLCBzY3JhdGNo
MSwgc2NyYXRjaDIpOworCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJl
Zyk7CisgICAgY2FsbE9wZXJhdGlvbihkZmdXcml0ZUJhcnJpZXIsIG93bmVyR1BSLCB2YWx1ZUdQ
Uik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgIAorI2lm
bmRlZiBOREVCVUcgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3duZXJOb3ROdWxsID0gbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvd25lckdQUik7CisgICAg
bV9qaXQuYnJlYWtwb2ludCgpOworICAgIG93bmVyTm90TnVsbC5saW5rKCZtX2ppdCk7CisjZW5k
aWYKKworI2lmbmRlZiBOREVCVUcKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB2YWx1ZU5vdE51
bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BS
KTsKKyAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgdmFsdWVOb3ROdWxsLmxpbmsoJm1faml0
KTsKICNlbmRpZgorCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7CisgICAg
aWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwubGlu
aygmbV9qaXQpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVn
IG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3Jp
dGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gx
LCBHUFJSZWcgc2NyYXRjaDIpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKLSAgICBV
TlVTRURfUEFSQU0odmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0gICAgCiAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkKHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQo
bV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKKyAg
ICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFy
cmllcihtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ1dy
aXRlQmFycmllciwgb3duZXJHUFIsIHZhbHVlKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KEludmFsaWRHUFJSZWcpOworCisjaWZuZGVmIE5ERUJVRworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG93bmVyTm90TnVsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgb3duZXJHUFIpOworICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICBvd25lck5vdE51
bGwubGluaygmbV9qaXQpOwogI2VuZGlmCisKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmso
Jm1faml0KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2lu
ZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lcik7
Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlR1BSKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotCiAgICAgaWYgKGlzS25vd25Ob3RDZWxsKHZh
bHVlVXNlLm5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShXUklURV9CQVJS
SUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJh
cnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNOb3RDZWxsOworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkK
KyAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25a
ZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwg
b3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ1dyaXRlQmFycmllciwgb3du
ZXIsIHZhbHVlR1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcp
OworCisjaWZuZGVmIE5ERUJVRworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHZhbHVlTm90TnVs
bCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIp
OworICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICB2YWx1ZU5vdE51bGwubGluaygmbV9qaXQp
OwogI2VuZGlmCisKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlzTm90Q2VsbC5saW5r
KCZtX2ppdCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2Rl
KQpAQCAtNDI4Nyw2ICs0NDIyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9j
YXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAg
ICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CkBAIC00MzA0LDYgKzQ0NDEsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93
UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENh
cGFjaXR5LCBzY3JhdGNoR1BSKSk7CiAgICAgICAgIAogICAgIG1faml0LnN0b3JlUHRyKHNjcmF0
Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSkpOworICAgIGNvcHlXcml0ZUJhcnJpZXIoYmFzZUdQUiwgMCwgMCwgc2NyYXRjaEdQ
UiwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpLCBzY3JhdGNoMi5n
cHIoKSwgc2NyYXRjaDMuZ3ByKCkpOwogICAgICAgICAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0
Y2hHUFIsIG5vZGUpOwogfQpAQCAtNDMzMiw2ICs0NDcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIFN0b3JhZ2VPcGVyYW5kIG9sZFN0b3JhZ2UodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gz
KHRoaXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAg
R1BSUmVnIG9sZFN0b3JhZ2VHUFIgPSBvbGRTdG9yYWdlLmdwcigpOwpAQCAtNDM1MSw3ICs0NDkw
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgICAgICBt
X2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKICAgICB9
CiAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwotICAgIAorICAgIGNvcHlXcml0
ZUJhcnJpZXIoYmFzZUdQUiwgb2xkU3RvcmFnZUdQUiwgb2xkU2l6ZSwgc2NyYXRjaEdQUjIsIG5l
d1NpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoMy5ncHIoKSk7CisgCiAgICAgc3RvcmFnZVJlc3Vs
dChzY3JhdGNoR1BSMiwgbm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzE5LDExICszMTksMTYgQEAgcHVibGljOgogICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRG
b3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJl
ZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRl
QmFycmllclVzZUtpbmQpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BS
LCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQ
UlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IElu
dmFsaWRHUFJSZWcpOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlND
ZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7Ci0gICAgdm9p
ZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVl
VXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY29weVdyaXRlQmFycmllcihD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcgb3duZXIsIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUs
IEdQUlJlZyBuZXdQdHIsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y3JhdGNoMik7CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNvcHlXcml0ZUJhcnJp
ZXIoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIG93bmVyLCBHUFJSZWcgb2xkUHRyLCBzaXplX3Qgb2xk
U2l6ZSwgR1BSUmVnIG5ld1B0ciwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BS
UmVnIHNjcmF0Y2gyKTsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgd3JpdGVCYXJy
aWVyKENDYWxsSGVscGVycyYsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcg
c2NyYXRjaDIpOworCisgICAgdm9pZCBjb3B5V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwg
R1BSUmVnIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUsIEdQUlJlZyBuZXdQdHIsIHNpemVfdCBuZXdT
aXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCBjb3B5V3Jp
dGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwg
R1BSUmVnIG5ld1B0ciwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
cmF0Y2gyKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3du
ZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcg
c2NyYXRjaDIpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgSlNDZWxsKiB2
YWx1ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZvaWQgd3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RT
Y3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2Vy
dmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQ
UlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVnKQogICAgIHsKQEAgLTcyNSw3ICs3MzAsNyBA
QCBwdWJsaWM6CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChD
b2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21w
aWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7Ci0gICAgdm9p
ZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIEVk
Z2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVy
OjpKdW1wKCkpOworICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFz
ZSwgR1BSUmVnIHZhbHVlLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJl
ZyBzY3JhdGNoR1BSMiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQ
UlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1
bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1w
KCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKICAgICB2b2lkIGNhY2hlZFB1
dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdH
UFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNo
R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVt
cCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwpAQCAtMTAyMCw2ICsxMDI1
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ1BT
UFMgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHNpemVfdCBhcmczLCBHUFJS
ZWcgYXJnNCwgc2l6ZV90IGFyZzUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0LCBUcnVz
dGVkSW1tMzIoYXJnNSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfREZHT3BlcmF0aW9uX0VDUFNQUyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCB2b2lkKiBh
cmcyLCBzaXplX3QgYXJnMywgR1BSUmVnIGFyZzQsIHNpemVfdCBhcmc1KQorICAgIHsKKyAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIo
YXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSwgYXJnNCwgVHJ1c3RlZEltbTMyKGFyZzUpKTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAg
ICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9F
SnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwpAQCAtMTA1NCw2ICsxMDY5LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJh
bWUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZH
T3BlcmF0aW9uX0VDQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpbmxpbmVD
YWxsRnJhbWUpKTsKQEAgLTEwNzIsNiArMTA4OCwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Igb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQorCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgSlNDZWxsKiBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKwor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNDIG9w
ZXJhdGlvbiwgSlNDZWxsKiBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBhcmcyKTsK
KyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsK
KyAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0
aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmcz
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIsIGFyZzMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0
aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3
ICs2Miw3IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBu
ZXdSb290czsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBNYXJrSG9vaywgSlNDOjpPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbj4KIGlubGlu
ZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBUaW55
Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgbWFya0hvb2su
bWFyayhwKTsKQEAgLTkwLDcgKzkwLDcgQEAgaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmdlbmVyaWNBZAogICAgIG1fcm9vdHNbbV9zaXplKytdID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
cCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgordGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2ssIEpTQzo6T3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24+CiB2b2lkIENvbnNl
cnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBNYXJr
SG9vayYgbWFya0hvb2spCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CkBAIC0xMDAsNyAr
MTAwLDcgQEAgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogCiAgICAg
VGlueUJsb29tRmlsdGVyIGZpbHRlciA9IG1fYmxvY2tzLT5maWx0ZXIoKTsgLy8gTWFrZSBhIGxv
Y2FsIGNvcHkgb2YgZmlsdGVyIHRvIHNob3cgdGhlIGNvbXBpbGVyIGl0IHdvbid0IGFsaWFzLCBh
bmQgY2FuIGJlIHJlZ2lzdGVyLWFsbG9jYXRlZC4KICAgICBmb3IgKGNoYXIqKiBpdCA9IHN0YXRp
Y19jYXN0PGNoYXIqKj4oYmVnaW4pOyBpdCAhPSBzdGF0aWNfY2FzdDxjaGFyKio+KGVuZCk7ICsr
aXQpCi0gICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgZmlsdGVyLCBtYXJrSG9vayk7Cisg
ICAgICAgIGdlbmVyaWNBZGRQb2ludGVyPE1hcmtIb29rLCBvcGVyYXRpb24+KCppdCwgZmlsdGVy
LCBtYXJrSG9vayk7CiB9CiAKIGNsYXNzIER1bW15TWFya0hvb2sgewpAQCAtMTEwLDEzICsxMTAs
MjEgQEAgcHVibGljOgogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4s
IHZvaWQqIGVuZCkKIHsKKyAgICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiA9IG1fY29w
aWVkU3BhY2UtPmhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpOwogICAgIER1bW15TWFya0hv
b2sgZHVtbXk7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgZHVtbXkpOworICAgIGlm
IChvcGVyYXRpb24gPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgIGdlbmVyaWNBZGRTcGFuPER1
bW15TWFya0hvb2ssIEZ1bGxDb2xsZWN0aW9uPihiZWdpbiwgZW5kLCBkdW1teSk7CisgICAgZWxz
ZQorICAgICAgICBnZW5lcmljQWRkU3BhbjxEdW1teU1hcmtIb29rLCBFZGVuQ29sbGVjdGlvbj4o
YmVnaW4sIGVuZCwgZHVtbXkpOwogfQogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcykK
IHsKLSAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMpOworICAg
IE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uID0gbV9jb3BpZWRTcGFjZS0+aGVhcCgpLT5v
cGVyYXRpb25JblByb2dyZXNzKCk7CisgICAgaWYgKG9wZXJhdGlvbiA9PSBGdWxsQ29sbGVjdGlv
bikKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48SklUU3R1YlJvdXRpbmVTZXQsIEZ1bGxDb2xsZWN0
aW9uPihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMpOworICAgIGVsc2UKKyAgICAgICAgZ2Vu
ZXJpY0FkZFNwYW48SklUU3R1YlJvdXRpbmVTZXQsIEVkZW5Db2xsZWN0aW9uPihiZWdpbiwgZW5k
LCBqaXRTdHViUm91dGluZXMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PgpAQCAtMTQyLDggKzE1MCwxMiBAQCBwcml2YXRlOgogdm9pZCBDb25zZXJ2YXRpdmVSb290czo6
YWRkKAogICAgIHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRT
dHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKKyAgICBPcGVyYXRpb25J
blByb2dyZXNzIG9wZXJhdGlvbiA9IG1fY29waWVkU3BhY2UtPmhlYXAoKS0+b3BlcmF0aW9uSW5Q
cm9ncmVzcygpOwogICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBDb2Rl
QmxvY2tTZXQ+IG1hcmtIb29rKGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7Ci0gICAgZ2Vu
ZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgbWFya0hvb2spOworICAgIGlmIChvcGVyYXRpb24gPT0g
RnVsbENvbGxlY3Rpb24pCisgICAgICAgIGdlbmVyaWNBZGRTcGFuPENvbXBvc2l0ZU1hcmtIb29r
PEpJVFN0dWJSb3V0aW5lU2V0LCBDb2RlQmxvY2tTZXQ+LCBGdWxsQ29sbGVjdGlvbj4oYmVnaW4s
IGVuZCwgbWFya0hvb2spOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48Q29tcG9z
aXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4sIEVkZW5Db2xsZWN0
aW9uPihiZWdpbiwgZW5kLCBtYXJrSG9vayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCShy
ZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMCArNTMsMTAgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMTI4OwogICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkgPSA4MTkyIC8gc2l6ZW9mKEpTQ2VsbCopOwog
ICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1hcmtIb29rLCBKU0M6Ok9wZXJhdGlvbkluUHJvZ3Jlc3M+CiAgICAgdm9pZCBnZW5lcmlj
QWRkUG9pbnRlcih2b2lkKiwgVGlueUJsb29tRmlsdGVyLCBNYXJrSG9vayYpOwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2ss
IEpTQzo6T3BlcmF0aW9uSW5Qcm9ncmVzcz4KICAgICB2b2lkIGdlbmVyaWNBZGRTcGFuKHZvaWQq
LCB2b2lkKiBlbmQsIE1hcmtIb29rJik7CiAgICAgCiAgICAgdm9pZCBncm93KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAkocmV2aXNpb24g
MTU1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
ZmFzdFBhdGhTaG91bGRTdWNjZWVkKHNpemVfdCBieXRlcykgY29uc3Q7CiAgICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKTsKKyAgICBDaGVj
a2VkQm9vbGVhbiB0cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoc2l6ZV90IGJ5dGVzLCB2b2lkKiog
b3V0UHRyKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlKHZvaWQgKm9sZFB0ciwg
c2l6ZV90IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0ZXMpOwogICAgIHZvaWQqIGZvcmNlQWxsb2Nh
dGUoc2l6ZV90IGJ5dGVzKTsKICAgICBDb3BpZWRCbG9jayogcmVzZXRDdXJyZW50QmxvY2soKTsK
QEAgLTkzLDYgKzk0LDE0IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6
OnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKHNpemVfdCBieXRlcywgdm9pZCoqIG91
dFB0cikKK3sKKyAgICBpZiAoIXRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbV9jdXJyZW50QmxvY2stPnJlcG9ydExpdmVCeXRlc0R1cmluZ0Nv
cHlpbmcoYnl0ZXMpOworICAgIHJldHVybiB0cnVlOworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xl
YW4gQ29waWVkQWxsb2NhdG9yOjp0cnlSZWFsbG9jYXRlKAogICAgIHZvaWQqIG9sZFB0ciwgc2l6
ZV90IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0ZXMpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEyICs0
NywxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGVOb1plcm9GaWxs
KERlYWRCbG9jayopOwogCiAgICAgdm9pZCBwaW4oKTsKKyAgICB2b2lkIHVucGluKCk7CiAgICAg
Ym9vbCBpc1Bpbm5lZCgpOwogCisgICAgYm9vbCBpc09sZCgpOwogICAgIGJvb2wgaXNPdmVyc2l6
ZSgpOwogCiAgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7CiAgICAgdm9pZCByZXBvcnRMaXZlQnl0
ZXMoSlNDZWxsKiwgQ29weVRva2VuLCB1bnNpZ25lZCk7CisgICAgdm9pZCByZXBvcnRMaXZlQnl0
ZXNEdXJpbmdXcml0ZUJhcnJpZXIodW5zaWduZWQpOworICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVz
RHVyaW5nQ29weWluZyh1bnNpZ25lZCk7CiAgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsKICAgICB2
b2lkIGRpZEV2YWN1YXRlQnl0ZXModW5zaWduZWQpOwogICAgIGJvb2wgc2hvdWxkRXZhY3VhdGUo
KTsKQEAgLTk0LDcgKzk4LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q29weVdvcmtMaXN0PiBt
X3dvcmtMaXN0OwogCiAgICAgc2l6ZV90IG1fcmVtYWluaW5nOwotICAgIHVpbnRwdHJfdCBtX2lz
UGlubmVkOworICAgIGJvb2wgbV9pc1Bpbm5lZCA6IDE7CisgICAgYm9vbCBtX2lzT2xkIDogMTsK
ICAgICB1bnNpZ25lZCBtX2xpdmVCeXRlczsKICNpZm5kZWYgTkRFQlVHCiAgICAgdW5zaWduZWQg
bV9saXZlT2JqZWN0czsKQEAgLTEwNCw3ICsxMDksNyBAQCBwcml2YXRlOgogaW5saW5lIENvcGll
ZEJsb2NrKiBDb3BpZWRCbG9jazo6Y3JlYXRlTm9aZXJvRmlsbChEZWFkQmxvY2sqIGJsb2NrKQog
ewogICAgIFJlZ2lvbiogcmVnaW9uID0gYmxvY2stPnJlZ2lvbigpOwotICAgIHJldHVybiBuZXco
Tm90TnVsbCwgYmxvY2spIENvcGllZEJsb2NrKHJlZ2lvbik7CisgICAgcmV0dXJuIG5ldyAoTm90
TnVsbCwgYmxvY2spIENvcGllZEJsb2NrKHJlZ2lvbik7CiB9CiAKIGlubGluZSBDb3BpZWRCbG9j
ayogQ29waWVkQmxvY2s6OmNyZWF0ZShEZWFkQmxvY2sqIGJsb2NrKQpAQCAtMTMwLDYgKzEzNSw3
IEBAIGlubGluZSBDb3BpZWRCbG9jazo6Q29waWVkQmxvY2soUmVnaW9uKiAKICAgICA6IEhlYXBC
bG9jazxDb3BpZWRCbG9jaz4ocmVnaW9uKQogICAgICwgbV9yZW1haW5pbmcocGF5bG9hZENhcGFj
aXR5KCkpCiAgICAgLCBtX2lzUGlubmVkKGZhbHNlKQorICAgICwgbV9pc09sZChmYWxzZSkKICAg
ICAsIG1fbGl2ZUJ5dGVzKDApCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9saXZlT2JqZWN0cygw
KQpAQCAtMTU2LDYgKzE2Miw3IEBAIGlubGluZSB2b2lkIENvcGllZEJsb2NrOjpkaWRTdXJ2aXZl
R0MoKQogaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZEV2YWN1YXRlQnl0ZXModW5zaWduZWQg
Ynl0ZXMpCiB7CiAgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzID49IGJ5dGVzKTsKKyAgICBBU1NFUlQo
bV9saXZlT2JqZWN0cyk7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIG1fbGl2ZUJ5dGVz
IC09IGJ5dGVzOwogI2lmbmRlZiBOREVCVUcKQEAgLTE3OCwxNiArMTg1LDI3IEBAIGlubGluZSBi
b29sIENvcGllZEJsb2NrOjpzaG91bGRFdmFjdWF0ZSgKIAogaW5saW5lIHZvaWQgQ29waWVkQmxv
Y2s6OnBpbigpCiB7CisgICAgbV9pc09sZCA9IHRydWU7CiAgICAgbV9pc1Bpbm5lZCA9IHRydWU7
CiAgICAgaWYgKG1fd29ya0xpc3QpCiAgICAgICAgIG1fd29ya0xpc3QuY2xlYXIoKTsKIH0KIAor
aW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnVucGluKCkKK3sKKyAgICBtX2lzUGlubmVkID0gZmFs
c2U7Cit9CisKIGlubGluZSBib29sIENvcGllZEJsb2NrOjppc1Bpbm5lZCgpCiB7CiAgICAgcmV0
dXJuIG1faXNQaW5uZWQ7CiB9CiAKK2lubGluZSBib29sIENvcGllZEJsb2NrOjppc09sZCgpCit7
CisgICAgcmV0dXJuIG1faXNPbGQ7Cit9CisKIGlubGluZSBib29sIENvcGllZEJsb2NrOjppc092
ZXJzaXplKCkKIHsKICAgICByZXR1cm4gcmVnaW9uKCktPmlzQ3VzdG9tU2l6ZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgJKHJl
dmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2Nr
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTggQEAgaW5saW5lIHZvaWQg
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAg
ICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fd29ya0xpc3RMb2NrKTsKICNlbmRpZgotI2lmbmRl
ZiBOREVCVUcKKwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyNpZm5kZWYgTkRFQlVHCiAgICAg
bV9saXZlT2JqZWN0cysrOwogI2VuZGlmCiAgICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7CisgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIG1faXNPbGQgPSB0cnVlOworICAgIEFTU0VSVChtX2xp
dmVCeXRlcyA8PSBDb3BpZWRCbG9jazo6YmxvY2tTaXplKTsKKworICAgIGlmIChpc1Bpbm5lZCgp
KQorICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXNob3VsZEV2YWN1YXRlKCkpIHsKICAgICAg
ICAgcGluKCk7CkBAIC01Myw2ICs2MCwzMCBAQCBpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVw
b3J0TGl2ZUJ5dGVzCiAgICAgbV93b3JrTGlzdC0+YXBwZW5kKENvcHlXb3JrbGlzdEl0ZW0ob3du
ZXIsIHRva2VuKSk7CiB9CiAKK2lubGluZSB2b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0
ZXNEdXJpbmdXcml0ZUJhcnJpZXIodW5zaWduZWQgYnl0ZXMpCit7CisgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX2xpdmVPYmplY3RzKys7CisjZW5kaWYKKyAg
ICBtX2xpdmVCeXRlcyArPSBieXRlczsKKyAgICBBU1NFUlQoISFtX2xpdmVCeXRlcyA9PSAhIW1f
bGl2ZU9iamVjdHMpOworICAgIEFTU0VSVChtX2xpdmVCeXRlcyA8PSBDb3BpZWRCbG9jazo6Ymxv
Y2tTaXplKTsKK30KKworaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlc0R1
cmluZ0NvcHlpbmcodW5zaWduZWQgYnl0ZXMpCit7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwor
ICAgIC8vIFRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGxvY2tlZCBiZWNhdXNlIHRoZSB0aHJlYWQg
dGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uIG93bnMgdGhlIGN1cnJlbnQgYmxvY2suCisgICAgbV9p
c09sZCA9IHRydWU7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbGl2ZU9iamVjdHMrKzsKKyNlbmRp
ZgorICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVzOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICBBU1NFUlQobV9saXZlQnl0ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQ29waWVkQmxvY2tJbmxpbmVzX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHJldmlzaW9uIDE1
NTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSwxNyBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lRmls
bGluZ0Jsb2NrKENvcGllCiAgICAgfQogfQogCit2b2lkIENvcGllZFNwYWNlOjpkaWRTdGFydEZ1
bGxDb2xsZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNz
KCkgPT0gRnVsbENvbGxlY3Rpb24pOworICAgIEFTU0VSVChtX2Zyb21TcGFjZS0+aXNFbXB0eSgp
KTsKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fdG9TcGFjZS0+aGVhZCgpOyBibG9j
azsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7
CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb3ZlcnNpemVCbG9ja3MuaGVhZCgp
OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBibG9jay0+ZGlkU3Vydml2
ZUdDKCk7Cit9CisKIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKIHsKICAgICBz
dGQ6OnN3YXAobV9mcm9tU3BhY2UsIG1fdG9TcGFjZSk7CkBAIC0xOTcsNiArMjA4LDcgQEAgdm9p
ZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQogICAgICAgICAgICAgcmVjeWNsZUV2YWN1
YXRlZEJsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisgICAg
ICAgIEFTU0VSVChibG9jay0+bGl2ZUJ5dGVzKCkgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7
CiAgICAgICAgIHRvdGFsTGl2ZUJ5dGVzICs9IGJsb2NrLT5saXZlQnl0ZXMoKTsKICAgICAgICAg
dG90YWxVc2FibGVCeXRlcyArPSBibG9jay0+cGF5bG9hZENhcGFjaXR5KCk7CiAgICAgfQpAQCAt
MjA4LDcgKzIyMCw2IEBAIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKICAgICAg
ICAgICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsK
ICAgICAgICAgICAgIHRvdGFsTGl2ZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsK
ICAgICAgICAgICAgIHRvdGFsVXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgp
OwotICAgICAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgbV9vdmVyc2l6ZUJsb2Nrcy5yZW1vdmUoYmxvY2spOwogICAgICAgICAgICAg
bV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOwpAQCAtMjE5LDcgKzIzMCw3IEBAIHZvaWQgQ29waWVk
U3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKIAogICAgIGRvdWJsZSBtYXJrZWRTcGFjZUJ5dGVzID0g
bV9oZWFwLT5vYmplY3RTcGFjZSgpLmNhcGFjaXR5KCk7CiAgICAgZG91YmxlIHRvdGFsRnJhZ21l
bnRhdGlvbiA9ICgoZG91YmxlKXRvdGFsTGl2ZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcykgLyAo
KGRvdWJsZSl0b3RhbFVzYWJsZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcyk7Ci0gICAgbV9zaG91
bGREb0NvcHlQaGFzZSA9IHRvdGFsRnJhZ21lbnRhdGlvbiA8PSBPcHRpb25zOjptaW5IZWFwVXRp
bGl6YXRpb24oKTsKKyAgICBtX3Nob3VsZERvQ29weVBoYXNlID0gbV9oZWFwLT5vcGVyYXRpb25J
blByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24gJiYgdG90YWxGcmFnbWVudGF0aW9uIDw9IE9w
dGlvbnM6Om1pbkhlYXBVdGlsaXphdGlvbigpOwogICAgIGlmICghbV9zaG91bGREb0NvcHlQaGFz
ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDQsNyArMjU1LDYgQEAgdm9pZCBDb3BpZWRTcGFj
ZTo6ZG9uZUNvcHlpbmcoKQogICAgICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBtX2Zyb21TcGFj
ZS0+cmVtb3ZlSGVhZCgpOwogICAgICAgICAvLyBBbGwgbm9uLXBpbm5lZCBibG9ja3MgaW4gZnJv
bS1zcGFjZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2xhaW1lZCBhcyB0aGV5IHdlcmUgZXZhY3VhdGVk
LgogICAgICAgICBBU1NFUlQoYmxvY2stPmlzUGlubmVkKCkgfHwgIW1fc2hvdWxkRG9Db3B5UGhh
c2UpOwotICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7CiAgICAgICAgIC8vIFdlIGRvbid0
IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQgd2FzIG5ldmVyIHJlbW92
ZWQuCiAgICAgICAgIEFTU0VSVChtX2Jsb2NrU2V0LmNvbnRhaW5zKGJsb2NrKSk7CiAgICAgICAg
IG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKQEAgLTMx
Niw0ICszMjYsNDQgQEAgYm9vbCBDb3BpZWRTcGFjZTo6aXNQYWdlZE91dChkb3VibGUgZGVhZAog
ICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCAmbV9vdmVyc2l6ZUJsb2Nr
cyk7CiB9CiAKK3ZvaWQgQ29waWVkU3BhY2U6OndpbGxBYmFuZG9uU3RvcmFnZSh2b2lkKiBwdHIs
IHNpemVfdCBieXRlcykKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q29waWVkQmxvY2sqIG9sZEJsb2NrID0gYmxvY2tGb3IocHRyKTsKKworICAgIGlmIChvbGRCbG9j
ay0+aXNPdmVyc2l6ZSgpKSB7CisgICAgICAgIG9sZEJsb2NrLT51bnBpbigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlIGJsb2NrIGlzIG9sZCAoaS5lLiBpdCBoYXMg
YWxyZWFkeSBiZWVuIHRocm91Z2ggYXQgbGVhc3Qgb25lIGNvbGxlY3Rpb24pCisgICAgLy8gdGhl
biB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgYnl0ZXMgd2UgYWxsb2NhdGVkIGhlcmUgcHJldmlvdXNs
eSBzbyB0aGF0IHRoZSBibG9jaydzCisgICAgLy8gbV9saXZlQnl0ZXMgY291bnQgcmVtYWlucyBh
Y2N1cmF0ZSBhY3Jvc3MgRWRlbkNvbGxlY3Rpb25zLiAKKyAgICAvLworICAgIC8vIEFkZGl0aW9u
YWxseSwgaWYgdGhlIGJsb2NrIGlzIHRoZSBibG9jayB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBh
bGxvY2F0ZWQgb3V0IG9mLCAKKyAgICAvLyB3ZSBuZWVkIHRvIHN1YnRyYWN0IHRoZSBieXRlcyBm
cm9tIHRoZSBibG9jayBpbiBjYXNlIHdlIGVuZCB1cCByZWFsbG9jLWluZyBpbiB0aGUgCisgICAg
Ly8gc2FtZSBibG9jay4gCisgICAgaWYgKG9sZEJsb2NrLT5pc09sZCgpIHx8IG9sZEJsb2NrID09
IG1fYWxsb2NhdG9yLmN1cnJlbnRCbG9jaygpKQorICAgICAgICBvbGRCbG9jay0+ZGlkRXZhY3Vh
dGVCeXRlcyhieXRlcyk7Cit9CisKK3ZvaWQgQ29waWVkU3BhY2U6OmRpZEFzc2lnblN0b3JhZ2Uo
dm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKHB0cik7CisgICAgQ29waWVk
QmxvY2sqIG5ld0Jsb2NrID0gYmxvY2tGb3IocHRyKTsKKworICAgIGlmIChuZXdCbG9jay0+aXNP
dmVyc2l6ZSgpKSB7CisgICAgICAgIG5ld0Jsb2NrLT5waW4oKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gbm90aWZ5IHRoZSBibG9jayBvZiBhZGRpdGlvbmFs
IGxpdmUgYnl0ZXMgaW4gY2FzZSBvdXIgbmV4dCBjb2xsZWN0aW9uIAorICAgIC8vIGlzIGFuIEVk
ZW5Db2xsZWN0aW9uLiBUaGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiBhc3NpZ25p
bmcgQ29waWVkU3BhY2UKKyAgICAvLyBhbGxvY2F0aW9ucyB0byBvbGQtZ2VuZXJhdGlvbiBvYmpl
Y3RzLCBiZWNhdXNlIHdlIHdvbid0IHJlcG9ydCB0aGVzZSBuZXcgYnl0ZXMgaW4gdGhlIAorICAg
IC8vIENvcGllZEJsb2NrIGR1cmluZyBtYXJraW5nIG9mIGFuIEVkZW5Db2xsZWN0aW9uLgorICAg
IG5ld0Jsb2NrLT5yZXBvcnRMaXZlQnl0ZXNEdXJpbmdXcml0ZUJhcnJpZXIoYnl0ZXMpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2UuaAkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsOCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgQ29waWVkQWxsb2NhdG9yJiBhbGxvY2F0b3IoKSB7IHJldHVybiBtX2FsbG9j
YXRvcjsgfQogCisgICAgdm9pZCBkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCk7CisKICAgICB2b2lk
IHN0YXJ0ZWRDb3B5aW5nKCk7CiAgICAgdm9pZCBkb25lQ29weWluZygpOwogICAgIGJvb2wgaXNJ
bkNvcHlQaGFzZSgpIHsgcmV0dXJuIG1faW5Db3B5aW5nUGhhc2U7IH0KQEAgLTgwLDYgKzgyLDEy
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogYmxvY2tGb3Iodm9pZCopOwog
CisgICAgSGVhcCogaGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcDsgfQorCisgICAgdm9pZCBj
b3B5V3JpdGVCYXJyaWVyKHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUpOworICAgIHZvaWQg
d2lsbEFiYW5kb25TdG9yYWdlKHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUpOworICAgIHZv
aWQgZGlkQXNzaWduU3RvcmFnZSh2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKTsKKwogcHJp
dmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc092ZXJzaXplKHNpemVfdCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lv
biAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBpbmxpbmUgYm9vbCBDb3B5Vmlz
aXRvcjo6Y2hlY2tJZlNob3VsZENvCiBpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRl
TmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQogewogICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIENvbXBp
bGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgotICAgIGlmIChM
SUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpKSkKKyAg
ICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyhi
eXRlcywgJnJlc3VsdCkpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAogICAgIHJlc3Vs
dCA9IGFsbG9jYXRlTmV3U3BhY2VTbG93KGJ5dGVzKTsKQEAgLTcwLDcgKzcwLDcgQEAgaW5saW5l
IHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYQogICAgIG1fY29waWVkQWxsb2NhdG9y
LnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7CiAKICAgICB2b2lkKiByZXN1bHQgPSAwOwotICAg
IENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0
ZShieXRlcywgJnJlc3VsdCk7CisgICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IG1fY29w
aWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyhieXRlcywgJnJlc3VsdCk7CiAg
ICAgQVNTRVJUKGRpZFN1Y2NlZWQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcg
QEAgbmFtZXNwYWNlIHsgCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlSGVhcFNpemUgPSAzMiAq
IE1COyAvLyBBYm91dCAxLjVYIHRoZSBhdmVyYWdlIHdlYnBhZ2UuCiBzdGF0aWMgY29uc3Qgc2l6
ZV90IHNtYWxsSGVhcFNpemUgPSAxICogTUI7IC8vIE1hdGNoZXMgdGhlIEZhc3RNYWxsb2MgcGVy
LXRocmVhZCBjYWNoZS4KIAotI2RlZmluZSBFTkFCTEVfR0NfTE9HR0lORyAwCisjZGVmaW5lIEVO
QUJMRV9HQ19MT0dHSU5HIDEKIAogI2lmIEVOQUJMRShHQ19MT0dHSU5HKQogI2lmIENPTVBJTEVS
KENMQU5HKQpAQCAtMTUxLDYgKzE1MSw4IEBAIHN0cnVjdCBHQ0NvdW50ZXIgewogI2RlZmluZSBH
Q0NPVU5URVIobmFtZSwgdmFsdWUpIGRvIHsgfSB3aGlsZSAoZmFsc2UpCiAjZW5kaWYKIAorI3Vu
ZGVmIEVOQUJMRV9HQ19MT0dHSU5HCisKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1pbkhlYXBTaXpl
KEhlYXBUeXBlIGhlYXBUeXBlLCBzaXplX3QgcmFtU2l6ZSkKIHsKICAgICBpZiAoaGVhcFR5cGUg
PT0gTGFyZ2VIZWFwKQpAQCAtMTYyLDcgKzE2NCw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHBy
b3BvcnRpb25hbEhlYXBTaXoKIHsKICAgICAvLyBUcnkgdG8gc3RheSB1bmRlciAxLzIgUkFNIHNp
emUgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIERPTSwgcmVuZGVyaW5nLCBuZXR3b3JraW5nLCBldGMu
CiAgICAgaWYgKGhlYXBTaXplIDwgcmFtU2l6ZSAvIDQpCi0gICAgICAgIHJldHVybiAyICogaGVh
cFNpemU7CisgICAgICAgIHJldHVybiAzICogaGVhcFNpemU7CiAgICAgaWYgKGhlYXBTaXplIDwg
cmFtU2l6ZSAvIDIpCiAgICAgICAgIHJldHVybiAxLjUgKiBoZWFwU2l6ZTsKICAgICByZXR1cm4g
MS4yNSAqIGhlYXBTaXplOwpAQCAtMjUwLDkgKzI1MiwxMiBAQCBIZWFwOjpIZWFwKFZNKiB2bSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3JhbVNpemUocmFtU2l6ZSgpKQogICAgICwgbV9t
aW5CeXRlc1BlckN5Y2xlKG1pbkhlYXBTaXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSkpCiAgICAg
LCBtX3NpemVBZnRlckxhc3RDb2xsZWN0KDApCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkTGltaXQo
bV9taW5CeXRlc1BlckN5Y2xlKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQotICAgICwgbV9i
eXRlc0FiYW5kb25lZCgwKQorICAgICwgbV9tYXhIZWFwU2l6ZShtX21pbkJ5dGVzUGVyQ3ljbGUp
CisgICAgLCBtX21heEVkZW5TaXplKG1fbWF4SGVhcFNpemUpCisgICAgLCBtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlKDApCisgICAgLCBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlKDApCisgICAg
LCBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24oZmFsc2UpCisgICAgLCBtX251bUNvbGxlY3Rpb25z
U2luY2VMYXN0RnVsbCgwKQogICAgICwgbV90b3RhbEJ5dGVzVmlzaXRlZCgwKQogICAgICwgbV90
b3RhbEJ5dGVzQ29waWVkKDApCiAgICAgLCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MoTm9PcGVyYXRp
b24pCkBAIC0zMzIsOCArMzM3LDggQEAgdm9pZCBIZWFwOjpyZXBvcnRBYmFuZG9uZWRPYmplY3RH
cmFwaCgpCiAKIHZvaWQgSGVhcDo6ZGlkQWJhbmRvbihzaXplX3QgYnl0ZXMpCiB7Ci0gICAgbV9h
Y3Rpdml0eUNhbGxiYWNrLT5kaWRBbGxvY2F0ZShtX2J5dGVzQWxsb2NhdGVkICsgbV9ieXRlc0Fi
YW5kb25lZCk7Ci0gICAgbV9ieXRlc0FiYW5kb25lZCArPSBieXRlczsKKyAgICBtX2FjdGl2aXR5
Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgKyBtX2J5dGVz
QWJhbmRvbmVkVGhpc0N5Y2xlKTsKKyAgICBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlICs9IGJ5
dGVzOwogfQogCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQpAQCAtNDgxLDYgKzQ4Niwx
MyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgdmlzaXRvci5zZXR1cCgpOwogICAgIEhl
YXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IodmlzaXRvcik7CiAKKyAgICBpZiAobV9vcGVy
YXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAgIEdDUEhBU0UoQWRk
T2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVUb1JlbWVtYmVyZWRTZXQpOworICAgICAgICAvLyBXZSBu
ZWVkIHRvIHJlLXByb2Nlc3MgYWxsIG9sZC1nZW5lcmF0aW9uIGV4ZWN1dGFibGVzIHNvIHRoYXQg
dGhleQorICAgICAgICAvLyB1cGRhdGUgdGhlaXIgQ29kZUJsb2Nrcy4KKyAgICAgICAgYWRkT2xk
R2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9SZW1lbWJlcmVkU2V0KCk7CisgICAgfQorCiAgICAgewog
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIodmlzaXRvcik7CiAKQEAgLTQ5MSwx
MiArNTAzLDE0IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICAgICAgICAgIE1BUktfTE9H
X1JPT1QodmlzaXRvciwgIkMrKyBTdGFjayIpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQo
bWFjaGluZVRocmVhZFJvb3RzKTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4o
KTsKKyAgICAgICAgICAgIC8vZGF0YUxvZ0YoIlZpc2l0ZWQgJWx1IG9iamVjdHMgc28gZmFyLlxu
IiwgdmlzaXRvci52aXNpdENvdW50KCkpOwogICAgICAgICB9CiAgICAgICAgIHsKICAgICAgICAg
ICAgIEdDUEhBU0UoVmlzaXRTdGFja1Jvb3RzKTsKICAgICAgICAgICAgIE1BUktfTE9HX1JPT1Qo
dmlzaXRvciwgIlN0YWNrIik7CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChzdGFja1Jvb3Rz
KTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgICAgIC8v
ZGF0YUxvZ0YoIlZpc2l0ZWQgJWx1IG9iamVjdHMgc28gZmFyLlxuIiwgdmlzaXRvci52aXNpdENv
dW50KCkpOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIHsKQEAgLTUw
NCw2ICs1MTgsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgICAgICAgICBNQVJLX0xP
R19ST09UKHZpc2l0b3IsICJTY3JhdGNoIEJ1ZmZlcnMiKTsKICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHNjcmF0Y2hCdWZmZXJSb290cyk7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFu
ZERyYWluKCk7CisgICAgICAgICAgICAvL2RhdGFMb2dGKCJWaXNpdGVkICVsdSBvYmplY3RzIHNv
IGZhci5cbiIsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAg
ICAgIHsKQEAgLTUxMSwxMiArNTI2LDE0IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICAg
ICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwgIlByb3RlY3RlZCBPYmplY3RzIik7CiAgICAg
ICAgICAgICBtYXJrUHJvdGVjdGVkT2JqZWN0cyhoZWFwUm9vdFZpc2l0b3IpOwogICAgICAgICAg
ICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgLy9kYXRhTG9nRigiVmlz
aXRlZCAlbHUgb2JqZWN0cyBzbyBmYXIuXG4iLCB2aXNpdG9yLnZpc2l0Q291bnQoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgewogICAgICAgICAgICAgR0NQSEFTRShWaXNpdFRlbXBTb3J0VmVjdG9y
cyk7CiAgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJUZW1wIFNvcnQgVmVjdG9y
cyIpOwogICAgICAgICAgICAgbWFya1RlbXBTb3J0VmVjdG9ycyhoZWFwUm9vdFZpc2l0b3IpOwog
ICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgLy9kYXRh
TG9nRigiVmlzaXRlZCAlbHUgb2JqZWN0cyBzbyBmYXIuXG4iLCB2aXNpdG9yLnZpc2l0Q291bnQo
KSk7CiAgICAgICAgIH0KIAogICAgICAgICB7CkBAIC01MjUsNiArNTQyLDcgQEAgdm9pZCBIZWFw
OjptYXJrUm9vdHMoKQogICAgICAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwgIkFy
Z3VtZW50IEJ1ZmZlcnMiKTsKICAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6
bWFya0xpc3RzKGhlYXBSb290VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOwogICAgICAgICAgICAg
ICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgICAgICAgICAvL2RhdGFMb2dG
KCJWaXNpdGVkICVsdSBvYmplY3RzIHNvIGZhci5cbiIsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAobV92bS0+ZXhjZXB0aW9uKCkp
IHsKQEAgLTUzMiw2ICs1NTAsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgICAgICAg
ICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJFeGNlcHRpb25zIik7CiAgICAgICAgICAgICBoZWFw
Um9vdFZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpOwogICAgICAgICAg
ICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgLy9kYXRhTG9nRigiVmlz
aXRlZCAlbHUgb2JqZWN0cyBzbyBmYXIuXG4iLCB2aXNpdG9yLnZpc2l0Q291bnQoKSk7CiAgICAg
ICAgIH0KICAgICAKICAgICAgICAgewpAQCAtNTM5LDYgKzU1OCw3IEBAIHZvaWQgSGVhcDo6bWFy
a1Jvb3RzKCkKICAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwgIlN0cm9uZyBIYW5k
bGVzIik7CiAgICAgICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoaGVhcFJv
b3RWaXNpdG9yKTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAg
ICAgICAgIC8vZGF0YUxvZ0YoIlZpc2l0ZWQgJWx1IG9iamVjdHMgc28gZmFyLlxuIiwgdmlzaXRv
ci52aXNpdENvdW50KCkpOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIHsKQEAgLTU0Niw2ICs1
NjYsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgICAgICAgICBNQVJLX0xPR19ST09U
KHZpc2l0b3IsICJIYW5kbGUgU3RhY2siKTsKICAgICAgICAgICAgIG1faGFuZGxlU3RhY2sudmlz
aXQoaGVhcFJvb3RWaXNpdG9yKTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4o
KTsKKyAgICAgICAgICAgIC8vZGF0YUxvZ0YoIlZpc2l0ZWQgJWx1IG9iamVjdHMgc28gZmFyLlxu
IiwgdmlzaXRvci52aXNpdENvdW50KCkpOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIHsKQEAg
LTU1NCw2ICs1NzUsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgICAgICAgICBtX2Nv
ZGVCbG9ja3MudHJhY2VNYXJrZWQodmlzaXRvcik7CiAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0
aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAgICAgICAgIHZpc2l0
b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgICAgIC8vZGF0YUxvZ0YoIlZpc2l0ZWQgJWx1
IG9iamVjdHMgc28gZmFyLlxuIiwgdmlzaXRvci52aXNpdENvdW50KCkpOwogICAgICAgICB9CiAg
ICAgCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpAQCAtNTg0LDcgKzYwNiwxMyBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cygpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB7CisgICAgICAgIEdDUEhB
U0UoY2xlYXJSZW1lbWJlcmVkU2V0KTsKKyAgICAgICAgbV9vYmplY3RTcGFjZS5jbGVhclJlbWVt
YmVyZWRTZXQoKTsKKyAgICB9CisKICAgICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZp
c2l0b3IudmlzaXRDb3VudCgpKTsKKyAgICAvL2RhdGFMb2dGKCJWaXNpdGVkICVsdSBvYmplY3Rz
XG4iLCB2aXNpdG9yLnZpc2l0Q291bnQoKSk7CiAKICAgICBtX3NoYXJlZERhdGEuZGlkRmluaXNo
TWFya2luZygpOwogI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQpAQCAtNTk0LDkgKzYy
MiwxNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAjZW5kaWYKICAgICBNQVJLX0xPR19NRVNT
QUdFMigiXG5OdW1iZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVyIGZ1bGwgR0MgJWx1LCB0b29rICUu
NmYgc2Vjc1xuIiwgdmlzaXRDb3VudCwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSAtIGdjU3RhcnRUaW1lKTsKICNlbmRpZgorICAgIC8vZGF0YUxvZ0YoIlRvdGFsIG51bWJlciBv
ZiBvYmplY3RzIGluIHRoZSBoZWFwOiAlbHVcbiIsIG1fb2JqZWN0U3BhY2Uub2JqZWN0Q291bnQo
KSk7CiAKLSAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0gdmlzaXRvci5ieXRlc1Zpc2l0ZWQoKTsK
LSAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgaWYg
KG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAgICBtX3Rv
dGFsQnl0ZXNWaXNpdGVkICs9IHZpc2l0b3IuYnl0ZXNWaXNpdGVkKCk7CisgICAgICAgIG1fdG90
YWxCeXRlc0NvcGllZCArPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbik7Cisg
ICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSB2aXNpdG9yLmJ5dGVzVmlzaXRlZCgpOworICAg
ICAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgfQog
I2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fc2hh
cmVkRGF0YS5jaGlsZEJ5dGVzVmlzaXRlZCgpOwogICAgIG1fdG90YWxCeXRlc0NvcGllZCArPSBt
X3NoYXJlZERhdGEuY2hpbGRCeXRlc0NvcGllZCgpOwpAQCAtNzE1LDExICs3NTAsMzUgQEAgdm9p
ZCBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpCiAgICAgbV9qaXRTdHViUm91dGlu
ZXMuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKK3ZvaWQgSGVh
cDo6YWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9SZW1lbWJlcmVkU2V0KCkKK3sKKyAgICBB
U1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKTsKKyAgICBmb3Ig
KEV4ZWN1dGFibGVCYXNlKiBjdXJyZW50ID0gbV9jb21waWxlZENvZGUuaGVhZCgpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKSB7CisgICAgICAgIGlmIChpc01hcmtlZChjdXJy
ZW50KSkKKyAgICAgICAgICAgIGFkZFRvUmVtZW1iZXJlZFNldChjdXJyZW50KTsKKyAgICB9Cit9
CisKK3ZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBBU1NFUlQoY2VsbCk7CisgICAgQVNTRVJUKCFPcHRpb25zOjplbmFibGVDb25jdXJyZW50
SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzTWFya2VkKGNl
bGwpKTsKKyAgICBpZiAobV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKGlzSW5SZW1lbWJlcmVkU2V0KGNlbGwpKQorICAgICAgICByZXR1cm47CisgICAg
TWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRSZW1lbWJlcmVkKGNlbGwpOworICAgIG1f
c2xvdFZpc2l0b3IudW5jb25kaXRpb25hbGx5QXBwZW5kKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2Vs
bCkpOworfQorCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKIHsKICAgICBpZiAoIW1f
aXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm47Ci0gICAgCisgICAKKyAgICBtX3Nob3Vs
ZERvRnVsbENvbGxlY3Rpb24gPSB0cnVlOworICAgIG1fc2xvdFZpc2l0b3IuY2xlYXJNYXJrU3Rh
Y2soKTsgCiAgICAgY29sbGVjdChEb1N3ZWVwKTsKIH0KIApAQCAtNzUxLDcgKzgxMCwxOCBAQCB2
b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgbV92bS0+cHJlcGFy
ZVRvRGlzY2FyZENvZGUoKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsgLy8gRGVjcmVtZW50IGRl
ZmVyYWwgbWFudWFsbHksIHNvIHdlIGRvbid0IEdDIHdoZW4gd2UgZG8gc28sIHNpbmNlIHdlIGFy
ZSBhbHJlYWR5IEdDaW5nIS4KICAgICAKLSAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBDb2xs
ZWN0aW9uOworICAgIGlmIChtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24pIHsKKyAgICAgICAgLy9k
YXRhTG9nRigiU3RhcnRpbmcgRnVsbENvbGxlY3Rpb24uLi5cbiIpOworICAgICAgICBtX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPSBGdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgbV9zaG91bGREb0Z1bGxD
b2xsZWN0aW9uID0gZmFsc2U7CisgICAgICAgIG1fbnVtQ29sbGVjdGlvbnNTaW5jZUxhc3RGdWxs
ID0gMDsKKyAgICAgICAgZGF0YUxvZ0YoIkZ1bGxDb2xsZWN0aW9uXG4iKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvL2RhdGFMb2dGKCJTdGFydGluZyBFZGVuQ29sbGVjdGlvbi4uLlxuIik7Cisg
ICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEVkZW5Db2xsZWN0aW9uOworICAgICAgICBt
X251bUNvbGxlY3Rpb25zU2luY2VMYXN0RnVsbCsrOworICAgICAgICBkYXRhTG9nRigiRWRlbkNv
bGxlY3Rpb25cbiIpOworICAgIH0KICAgICBtX2V4dHJhTWVtb3J5VXNhZ2UgPSAwOwogCiAgICAg
bV9hY3Rpdml0eUNhbGxiYWNrLT53aWxsQ29sbGVjdCgpOwpAQCAtNzY1LDYgKzgzNSw4IEBAIHZv
aWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB7CiAgICAgICAgIEdD
UEhBU0UoQ2Fub25pY2FsaXplKTsKICAgICAgICAgbV9vYmplY3RTcGFjZS5jYW5vbmljYWxpemVD
ZWxsTGl2ZW5lc3NEYXRhKCk7CisgICAgICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0g
RnVsbENvbGxlY3Rpb24pCisgICAgICAgICAgICBtX3N0b3JhZ2VTcGFjZS5kaWRTdGFydEZ1bGxD
b2xsZWN0aW9uKCk7CiAgICAgfQogCiAgICAgbWFya1Jvb3RzKCk7CkBAIC04MTIsNyArODg0LDcg
QEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAg
IG1fc3dlZXBlci0+c3RhcnRTd2VlcGluZyhtX2Jsb2NrU25hcHNob3QpOwotICAgIG1fYnl0ZXNB
YmFuZG9uZWQgPSAwOworICAgIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUgPSAwOwogCiAgICAg
ewogICAgICAgICBHQ1BIQVNFKFJlc2V0QWxsb2NhdG9ycyk7CkBAIC04MjUsMTkgKzg5NywyNCBA
QCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAKICAgICBtX3NpemVB
ZnRlckxhc3RDb2xsZWN0ID0gY3VycmVudEhlYXBTaXplOwogCi0gICAgLy8gVG8gYXZvaWQgcGF0
aG9sb2dpY2FsIEdDIGNodXJuIGluIHZlcnkgc21hbGwgYW5kIHZlcnkgbGFyZ2UgaGVhcHMsIHdl
IHNldAotICAgIC8vIHRoZSBuZXcgYWxsb2NhdGlvbiBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVu
dCBzaXplIG9mIHRoZSBoZWFwLCB3aXRoIGEKLSAgICAvLyBmaXhlZCBtaW5pbXVtLgotICAgIHNp
emVfdCBtYXhIZWFwU2l6ZSA9IG1heChtaW5IZWFwU2l6ZShtX2hlYXBUeXBlLCBtX3JhbVNpemUp
LCBwcm9wb3J0aW9uYWxIZWFwU2l6ZShjdXJyZW50SGVhcFNpemUsIG1fcmFtU2l6ZSkpOwotICAg
IG1fYnl0ZXNBbGxvY2F0ZWRMaW1pdCA9IG1heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOwor
ICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pIHsKKyAgICAg
ICAgLy8gVG8gYXZvaWQgcGF0aG9sb2dpY2FsIEdDIGNodXJuIGluIHZlcnkgc21hbGwgYW5kIHZl
cnkgbGFyZ2UgaGVhcHMsIHdlIHNldAorICAgICAgICAvLyB0aGUgbmV3IGFsbG9jYXRpb24gbGlt
aXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgaGVhcCwgd2l0aCBhCisgICAgICAg
IC8vIGZpeGVkIG1pbmltdW0uCisgICAgICAgIG1fbWF4SGVhcFNpemUgPSBtYXgobWluSGVhcFNp
emUobV9oZWFwVHlwZSwgbV9yYW1TaXplKSwgcHJvcG9ydGlvbmFsSGVhcFNpemUoY3VycmVudEhl
YXBTaXplLCBtX3JhbVNpemUpKTsKKyAgICB9CisKKyAgICBtX21heEVkZW5TaXplID0gbV9tYXhI
ZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsKKyAgICBpZiAoKGRvdWJsZSltX21heEVkZW5TaXpl
IC8gKGRvdWJsZSltX21heEhlYXBTaXplIDwgKDEuMCAvIDMuMCkpCisgICAgICAgIG1fc2hvdWxk
RG9GdWxsQ29sbGVjdGlvbiA9IHRydWU7CiAKLSAgICBtX2J5dGVzQWxsb2NhdGVkID0gMDsKKyAg
ICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gMDsKICAgICBkb3VibGUgbGFzdEdDRW5kVGlt
ZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgbV9sYXN0R0NMZW5n
dGggPSBsYXN0R0NFbmRUaW1lIC0gbGFzdEdDU3RhcnRUaW1lOwogCiAgICAgaWYgKE9wdGlvbnM6
OnJlY29yZEdDUGF1c2VUaW1lcygpKQogICAgICAgICBIZWFwU3RhdGlzdGljczo6cmVjb3JkR0NQ
YXVzZVRpbWUobGFzdEdDU3RhcnRUaW1lLCBsYXN0R0NFbmRUaW1lKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gQ29sbGVjdGlvbik7CisgICAgUkVMRUFTRV9B
U1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uIHx8IG1fb3BlcmF0
aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbik7CiAKICAgICBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKQEAgLTg1
Niw5ICs5MzMsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAg
ICAgICAgIGRhdGFMb2coYWZ0ZXIgLSBiZWZvcmUsICIgbXMsICIsIGN1cnJlbnRIZWFwU2l6ZSAv
IDEwMjQsICIga2JdXG4iKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5H
KQotICAgIGRhdGFMb2dGKCJKU0MgR0MgZmluaXNoaW5nIGNvbGxlY3Rpb24uXG4iKTsKLSNlbmRp
ZgorICAgIC8vZGF0YUxvZ0YoIkpTQyBHQyBmaW5pc2hpbmcgY29sbGVjdGlvbi4gVG9vayAlbGYg
c2Vjb25kcy5cbiIsIG1fbGFzdEdDTGVuZ3RoKTsKIH0KIAogYm9vbCBIZWFwOjpjb2xsZWN0SWZO
ZWNlc3NhcnlPckRlZmVyKCkKQEAgLTg2OCw3ICs5NDMsNyBAQCBib29sIEhlYXA6OmNvbGxlY3RJ
Zk5lY2Vzc2FyeU9yRGVmZXIoKQogICAgIAogICAgIGlmICghc2hvdWxkQ29sbGVjdCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisgIAogICAgIGNvbGxlY3QoRG9Ob3RTd2VlcCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC05MDAsOCArOTc1LDggQEAgdm9pZCBIZWFwOjpzZXRHYXJi
YWdlQ29sbGVjdGlvblRpbWVyRW5hYgogCiB2b2lkIEhlYXA6OmRpZEFsbG9jYXRlKHNpemVfdCBi
eXRlcykKIHsKLSAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxv
Y2F0ZWQgKyBtX2J5dGVzQWJhbmRvbmVkKTsKLSAgICBtX2J5dGVzQWxsb2NhdGVkICs9IGJ5dGVz
OworICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSArIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUpOworICAgIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGUgKz0gYnl0ZXM7CiB9CiAKIGJvb2wgSGVhcDo6aXNWYWxpZEFsbG9jYXRpb24o
c2l6ZV90KQpAQCAtOTc3LDQgKzEwNTIsNDEgQEAgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoQW5kR0NJZgogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIAordm9p
ZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7CisgICAgaWYg
KCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAgICAgICAgcmV0dXJuOworICAgIEhlYXA6Omhl
YXAoZnJvbSktPmFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwordm9pZCBIZWFwOjp3aWxs
QWJhbmRvblN0b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxsLCB2b2lkKiBwdHIsIHNpemVfdCBieXRl
cykKK3sKKyAgICBpZiAoIWNlbGwgfHwgIWlzTWFya2VkKGNlbGwpKQorICAgICAgICByZXR1cm47
CisgICAgbV9zdG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9yYWdlKHB0ciwgYnl0ZXMpOworfQor
Cit2b2lkIEhlYXA6OmRpZEFzc2lnblN0b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxsLCB2b2lkKiBw
dHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBpZiAoIWNlbGwgfHwgIWlzTWFya2VkKGNlbGwpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zdG9yYWdlU3BhY2UuZGlkQXNzaWduU3RvcmFnZShwdHIs
IGJ5dGVzKTsKK30KKwordm9pZCBIZWFwOjpjb3B5V3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCog
ZnJvbSwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRyLCBzaXplX3Qg
bmV3U2l6ZSkKK3sKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0X2Nhc3Q8
SlNDZWxsKj4oZnJvbSkpOworCisgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghbmV3UHRyKSB7CisgICAgICAgIEFTU0VSVCghbmV3U2l6
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAo
ZnJvbSk7CisgICAgaGVhcC0+bV9zdG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9yYWdlKG9sZFB0
ciwgb2xkU2l6ZSk7CisgICAgaGVhcC0+bV9zdG9yYWdlU3BhY2UuZGlkQXNzaWduU3RvcmFnZShu
ZXdQdHIsIG5ld1NpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RDb3Vu
dFNldDsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlQ291bnRT
ZXQ7CiAKLSAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2Nh
dGlvbiwgQ29sbGVjdGlvbiB9OworICAgIGVudW0gT3BlcmF0aW9uSW5Qcm9ncmVzcyB7IE5vT3Bl
cmF0aW9uLCBBbGxvY2F0aW9uLCBGdWxsQ29sbGVjdGlvbiwgRWRlbkNvbGxlY3Rpb24gfTsKIAog
ICAgIGVudW0gSGVhcFR5cGUgeyBTbWFsbEhlYXAsIExhcmdlSGVhcCB9OwogCkBAIC05MywxMCAr
OTMsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRN
YXJrZWQoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgdm9pZCBzZXRNYXJrZWQoY29uc3Qg
dm9pZCopOwogCisgICAgICAgIHZvaWQgYWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9SZW1l
bWJlcmVkU2V0KCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJl
cmVkU2V0KGNvbnN0IEpTQ2VsbCogY2VsbCk7CisgICAgICAgIGJvb2wgaXNJblJlbWVtYmVyZWRT
ZXQoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoY2VsbCk7CisgICAgICAgICAgICBBU1NFUlQoIU9wdGlvbnM6OmVuYWJsZUNvbmN1cnJlbnRK
SVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBNYXJr
ZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzUmVtZW1iZXJlZChjZWxsKTsKKyAgICAgICAgfQog
ICAgICAgICBzdGF0aWMgYm9vbCBpc1dyaXRlQmFycmllckVuYWJsZWQoKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCopOwog
ICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwq
KTsKLSAgICAgICAgc3RhdGljIHVpbnQ4X3QqIGFkZHJlc3NPZkNhcmRGb3IoSlNDZWxsKik7CisK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29weVdyaXRlQmFycmllcihj
b25zdCBKU0NlbGwqLCB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRTaXplLCB2b2lkKiBuZXdQdHIs
IHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3aWxsQWJh
bmRvblN0b3JhZ2UoY29uc3QgSlNDZWxsKiwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSk7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlkQXNzaWduU3RvcmFnZShjb25zdCBK
U0NlbGwqLCB2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKTsKIAogICAgICAgICBIZWFwKFZN
KiwgSGVhcFR5cGUpOwogICAgICAgICB+SGVhcCgpOwpAQCAtMTE0LDYgKzEyNiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIC8vIHRydWUgaWYgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVz
cwogICAgICAgICBpbmxpbmUgYm9vbCBpc0NvbGxlY3RpbmcoKTsKKyAgICAgICAgaW5saW5lIE9w
ZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uSW5Qcm9ncmVzcygpIHsgcmV0dXJuIG1fb3BlcmF0
aW9uSW5Qcm9ncmVzczsgfQogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24gb3IgY29s
bGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1c3koKTsKICAg
ICAgICAgCkBAIC0yNDYsOSArMjU5LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25z
dCBzaXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwogICAgICAgICBzaXplX3QgbV9zaXplQWZ0ZXJM
YXN0Q29sbGVjdDsKIAotICAgICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZExpbWl0OwotICAg
ICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKLSAgICAgICAgc2l6ZV90IG1fYnl0ZXNBYmFu
ZG9uZWQ7CisgICAgICAgIHNpemVfdCBtX21heEhlYXBTaXplOworICAgICAgICBzaXplX3QgbV9t
YXhFZGVuU2l6ZTsKKyAgICAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Cisg
ICAgICAgIHNpemVfdCBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlOworICAgICAgICBib29sIG1f
c2hvdWxkRG9GdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgdW5zaWduZWQgbV9udW1Db2xsZWN0aW9u
c1NpbmNlTGFzdEZ1bGw7CiAKICAgICAgICAgc2l6ZV90IG1fdG90YWxCeXRlc1Zpc2l0ZWQ7CiAg
ICAgICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNDb3BpZWQ7CkBAIC0yNjQsNiArMjgwLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFZUYWJsZVNwZWN0cnVtIG1fZGVzdHJveWVkVHlwZUNvdW50
czsKICNlbmRpZgogCisgICAgICAgIEhhc2hTZXQ8Y29uc3QgSlNDZWxsKj4gbV9jb3B5aW5nUmVt
ZW1iZXJlZFNldDsKKwogICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRWYWx1ZXM7
CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4qID4gbV90ZW1wU29ydGluZ1ZlY3RvcnM7CiAgICAgICAgIE93blB0cjxIYXNoU2V0
PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4gPiBtX21hcmtMaXN0U2V0OwpAQCAtMzEzLDggKzMzMSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAoaXNEZWZlcnJlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQgPiBPcHRpb25zOjpnY01heEhlYXBT
aXplKCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5v
T3BlcmF0aW9uOwotICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZCA+IG1fYnl0ZXNBbGxv
Y2F0ZWRMaW1pdCAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBtX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
PT0gTm9PcGVyYXRpb247CisgICAgICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZFRoaXND
eWNsZSA+IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBt
X29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb247CisgICAgICAgIHJldHVybiBtX2J5
dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID4gbV9tYXhFZGVuU2l6ZSAmJiBtX2lzU2FmZVRvQ29sbGVj
dCAmJiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb247CiAgICAgfQogCiAgICAg
Ym9vbCBIZWFwOjppc0J1c3koKQpAQCAtMzI0LDcgKzM0Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgYm9vbCBIZWFwOjppc0NvbGxlY3RpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBDb2xsZWN0aW9uOworICAgICAgICByZXR1cm4gbV9vcGVy
YXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9PSBFZGVuQ29sbGVjdGlvbjsKICAgICB9CiAKICAgICBpbmxpbmUgSGVhcCogSGVhcDo6aGVh
cChjb25zdCBKU0NlbGwqIGNlbGwpCkBAIC0zNjQsMTggKzM4MiwzMCBAQCBuYW1lc3BhY2UgSlND
IHsKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgICAgIHJldHVybiB0
cnVlOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsK
ICNlbmRpZgogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqLCBKU0NlbGwqKQorICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihj
b25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pCiAgICAgeworI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3Jp
dGVCYXJyaWVyKCk7CisjZW5kaWYKKyAgICAgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChmcm9t
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCF0byB8fCBpc01hcmtlZCh0bykp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEhlYXA6OmhlYXAoZnJvbSktPmFkZFRvUmVt
ZW1iZXJlZFNldChmcm9tKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0
ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKQogICAgIHsKKyNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJz
Ojpjb3VudFdyaXRlQmFycmllcigpOworI2VuZGlmCisgICAgICAgIGlmICghdG8uaXNDZWxsKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdyaXRlQmFycmllcihmcm9tLCB0by5hc0Nl
bGwoKSk7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlD
b3N0KHNpemVfdCBjb3N0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmNwcAkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNCArMTk5LDQwIEBAIHZv
aWQgTWFya2VkQmxvY2s6OmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmUKICAgICBtX3N0YXRlID0gTWFy
a2VkOwogfQogCit2b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKCkKK3sKKyAgICBpZiAoaGVh
cCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gSlNDOjpFZGVuQ29sbGVjdGlvbikKKyAgICAg
ICAgdGhpcy0+Y2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlwZTxNYXJrZWRCbG9jazo6RWRlbkNv
bGxlY3Rpb24+KCk7CisgICAgZWxzZQorICAgICAgICB0aGlzLT5jbGVhck1hcmtzV2l0aENvbGxl
Y3Rpb25UeXBlPE1hcmtlZEJsb2NrOjpGdWxsQ29sbGVjdGlvbj4oKTsKK30KKwordm9pZCBNYXJr
ZWRCbG9jazo6Y2xlYXJSZW1lbWJlcmVkU2V0KCkKK3sKKyAgICBtX3JlbWVtYmVyZWRTZXQuY2xl
YXJBbGwoKTsKK30KKwordGVtcGxhdGUgPE1hcmtlZEJsb2NrOjpDb2xsZWN0aW9uVHlwZSBjb2xs
ZWN0aW9uVHlwZT4KK3ZvaWQgTWFya2VkQmxvY2s6OmNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5
cGUoKQoreworICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7CisKKyAg
ICBBU1NFUlQobV9zdGF0ZSAhPSBOZXcgJiYgbV9zdGF0ZSAhPSBGcmVlTGlzdGVkKTsKKyAgICBp
ZiAoY29sbGVjdGlvblR5cGUgPT0gTWFya2VkQmxvY2s6OkZ1bGxDb2xsZWN0aW9uKQorICAgICAg
ICBtX21hcmtzLmNsZWFyQWxsKCk7CisKKyAgICAvLyBUaGlzIHdpbGwgYmVjb21lIHRydWUgYXQg
dGhlIGVuZCBvZiB0aGUgbWFyayBwaGFzZS4gV2Ugc2V0IGl0IG5vdyB0bworICAgIC8vIGF2b2lk
IGFuIGV4dHJhIHBhc3MgdG8gZG8gc28gbGF0ZXIuCisgICAgbV9zdGF0ZSA9IE1hcmtlZDsKK30K
Kwordm9pZCBNYXJrZWRCbG9jazo6bGFzdENoYW5jZVRvRmluYWxpemUoKQoreworICAgIG1fd2Vh
a1NldC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOworCisgICAgY2xlYXJOZXdseUFsbG9jYXRlZCgp
OworICAgIGNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGU8RnVsbENvbGxlY3Rpb24+KCk7Cisg
ICAgc3dlZXAoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDgg
KzY5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gc2l6ZS4KIAogICAgIGNsYXNzIE1hcmtl
ZEJsb2NrIDogcHVibGljIEhlYXBCbG9jazxNYXJrZWRCbG9jaz4geworICAgICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBhdG9tU2l6ZSA9IDg7IC8vIGJ5dGVzCisgICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgYXRvbVNpemUgPSAxNjsgLy8gYnl0ZXMKICAgICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBibG9ja1NpemUgPSA2NCAqIEtCOwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJs
b2NrTWFzayA9IH4oYmxvY2tTaXplIC0gMSk7IC8vIGJsb2NrU2l6ZSBtdXN0IGJlIGEgcG93ZXIg
b2YgdHdvLgogCkBAIC0xMzcsNyArMTM4LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlICJuZXdseSBhbGxvY2F0ZWQiIGJpdG1hcCB3YXMgbm9uLW51
bGwgCiAgICAgICAgIC8vIGFuZCB3YXMgc3VjY2Vzc2Z1bGx5IGNsZWFyZWQgYW5kIGZhbHNlIG90
aGVyd2lzZS4KICAgICAgICAgYm9vbCBjbGVhck5ld2x5QWxsb2NhdGVkKCk7CisKKyAgICAgICAg
ZW51bSBDb2xsZWN0aW9uVHlwZSB7IEVkZW5Db2xsZWN0aW9uLCBGdWxsQ29sbGVjdGlvbiB9Owog
ICAgICAgICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICAgICAgdm9pZCBjbGVhclJlbWVtYmVyZWRT
ZXQoKTsKKyAgICAgICAgdGVtcGxhdGUgPENvbGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBlPgor
ICAgICAgICB2b2lkIGNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGUoKTsKKwogICAgICAgICBz
aXplX3QgbWFya0NvdW50KCk7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpOwogCkBAIC0xNTQsNiAr
MTYxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldE1hcmtlZChjb25zdCB2
b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJNYXJrZWQoY29uc3Qgdm9pZCopOwogCisgICAgICAg
IHZvaWQgc2V0UmVtZW1iZXJlZChjb25zdCB2b2lkKik7CisgICAgICAgIHZvaWQgY2xlYXJSZW1l
bWJlcmVkKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgdm9pZCBhdG9taWNDbGVhclJlbWVtYmVyZWQo
Y29uc3Qgdm9pZCopOworICAgICAgICBib29sIGlzUmVtZW1iZXJlZChjb25zdCB2b2lkKik7CisK
ICAgICAgICAgYm9vbCBpc05ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9p
ZCBzZXROZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXds
eUFsbG9jYXRlZChjb25zdCB2b2lkKik7CkBAIC0xNjQsNiArMTc2LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZl
Q2VsbChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lk
IGZvckVhY2hEZWFkQ2VsbChGdW5jdG9yJik7CiAKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk1hcmtzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEJsb2NrLCBtX21h
cmtzKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9t
QWxpZ25tZW50TWFzayA9IGF0b21TaXplIC0gMTsgLy8gYXRvbVNpemUgbXVzdCBiZSBhIHBvd2Vy
IG9mIHR3by4KIApAQCAtMTgyLDggKzE5NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c2l6ZV90IG1fZW5kQXRvbTsgLy8gVGhpcyBpcyBhIGZ1enp5IGVuZC4gQWx3YXlzIHRlc3QgZm9y
IDwgbV9lbmRBdG9tLgogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICAgICAgV1RGOjpCaXRt
YXA8YXRvbXNQZXJCbG9jaywgV1RGOjpCaXRtYXBBdG9taWM+IG1fbWFya3M7CisgICAgICAgIFdU
Rjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwQXRvbWljPiBtX3JlbWVtYmVyZWRT
ZXQ7CiAjZWxzZQogICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBXVEY6OkJpdG1h
cE5vdEF0b21pYz4gbV9tYXJrczsKKyAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywg
V1RGOjpCaXRtYXBOb3RBdG9taWM+IG1fcmVtZW1iZXJlZFNldDsKICNlbmRpZgogICAgICAgICBP
d25QdHI8V1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gPiBtX25ld2x5QWxsb2NhdGVkOwogCkBA
IC0yMjUsMTUgKzI0MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxNYXJrZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBibG9j
a01hc2spOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpsYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpCi0gICAgewotICAgICAgICBtX3dlYWtTZXQubGFzdENoYW5jZVRvRmluYWxp
emUoKTsKLQotICAgICAgICBjbGVhck5ld2x5QWxsb2NhdGVkKCk7Ci0gICAgICAgIGNsZWFyTWFy
a3MoKTsKLSAgICAgICAgc3dlZXAoKTsKLSAgICB9Ci0KICAgICBpbmxpbmUgTWFya2VkQWxsb2Nh
dG9yKiBNYXJrZWRCbG9jazo6YWxsb2NhdG9yKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2FsbG9jYXRvcjsKQEAgLTI3NywxOCArMjg0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIG1fc3RhdGUgPSBBbGxvY2F0ZWQ7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgTWFya2Vk
QmxvY2s6OmNsZWFyTWFya3MoKQotICAgIHsKLSAgICAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVf
VFJBTlNJVElPTih0aGlzKTsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSAhPSBOZXcgJiYgbV9z
dGF0ZSAhPSBGcmVlTGlzdGVkKTsKLSAgICAgICAgbV9tYXJrcy5jbGVhckFsbCgpOwotCi0gICAg
ICAgIC8vIFRoaXMgd2lsbCBiZWNvbWUgdHJ1ZSBhdCB0aGUgZW5kIG9mIHRoZSBtYXJrIHBoYXNl
LiBXZSBzZXQgaXQgbm93IHRvCi0gICAgICAgIC8vIGF2b2lkIGFuIGV4dHJhIHBhc3MgdG8gZG8g
c28gbGF0ZXIuCi0gICAgICAgIG1fc3RhdGUgPSBNYXJrZWQ7Ci0gICAgfQotCiAgICAgaW5saW5l
IHNpemVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKICAgICB7CiAgICAgICAgIHJldHVybiBt
X21hcmtzLmNvdW50KCk7CkBAIC0zMjQsNiArMzE5LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgLSByZWludGVycHJldF9jYXN0
PEJpdHM+KHRoaXMpKSAvIGF0b21TaXplOwogICAgIH0KIAorICAgIGlubGluZSB2b2lkIE1hcmtl
ZEJsb2NrOjpzZXRSZW1lbWJlcmVkKGNvbnN0IHZvaWQqIHApCisgICAgeworICAgICAgICBtX3Jl
bWVtYmVyZWRTZXQuc2V0KGF0b21OdW1iZXIocCkpOworICAgIH0KKworICAgIGlubGluZSB2b2lk
IE1hcmtlZEJsb2NrOjpjbGVhclJlbWVtYmVyZWQoY29uc3Qgdm9pZCogcCkKKyAgICB7CisgICAg
ICAgIG1fcmVtZW1iZXJlZFNldC5jbGVhcihhdG9tTnVtYmVyKHApKTsKKyAgICB9CisKKyAgICBp
bmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6YXRvbWljQ2xlYXJSZW1lbWJlcmVkKGNvbnN0IHZvaWQq
IHApCisgICAgeworICAgICAgICBtX3JlbWVtYmVyZWRTZXQuY29uY3VycmVudFRlc3RBbmRDbGVh
cihhdG9tTnVtYmVyKHApKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6
aXNSZW1lbWJlcmVkKGNvbnN0IHZvaWQqIHApCisgICAgeworICAgICAgICByZXR1cm4gbV9yZW1l
bWJlcmVkU2V0LmdldChhdG9tTnVtYmVyKHApKTsKKyAgICB9CisKICAgICBpbmxpbmUgYm9vbCBN
YXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsMTcg
QEAgY2xhc3MgV2Vha0dDSGFuZGxlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKIHN0cnVjdCBDbGVh
ck1hcmtzIDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAgICB2b2lkIG9wZXJhdG9yKCko
TWFya2VkQmxvY2sqIGJsb2NrKSB7IGJsb2NrLT5jbGVhck1hcmtzKCk7IH0KKyAgICB2b2lkIG9w
ZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgYmxvY2stPmNsZWFy
TWFya3MoKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2xlYXJSZW1lbWJlcmVkU2V0IDogTWFya2Vk
QmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJs
b2NrKQorICAgIHsKKyAgICAgICAgYmxvY2stPmNsZWFyUmVtZW1iZXJlZFNldCgpOworICAgIH0K
IH07CiAKIHN0cnVjdCBTd2VlcCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CkBAIC0xMDAs
NiArMTEwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KE1hcmtlZEJs
b2NrKik7CiAKICAgICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICB2b2lkIGNsZWFyUmVtZW1iZXJl
ZFNldCgpOwogICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZCgpOwogICAgIHZvaWQgc3dlZXAo
KTsKICAgICBzaXplX3Qgb2JqZWN0Q291bnQoKTsKQEAgLTI1MSw2ICsyNjIsMTEgQEAgaW5saW5l
IHZvaWQgTWFya2VkU3BhY2U6OmNsZWFyTWFya3MoKQogICAgIGZvckVhY2hCbG9jazxDbGVhck1h
cmtzPigpOwogfQogCitpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Y2xlYXJSZW1lbWJlcmVkU2V0
KCkKK3sKKyAgICBmb3JFYWNoQmxvY2s8Q2xlYXJSZW1lbWJlcmVkU2V0PigpOworfQorCiBpbmxp
bmUgc2l6ZV90IE1hcmtlZFNwYWNlOjpvYmplY3RDb3VudCgpCiB7CiAgICAgcmV0dXJuIGZvckVh
Y2hCbG9jazxNYXJrQ291bnQ+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAg
U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRAogCiBTbG90VmlzaXRvcjo6
flNsb3RWaXNpdG9yKCkKIHsKLSAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOworICAgIGNs
ZWFyTWFya1N0YWNrKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OnNldHVwKCkKQEAgLTYzLDYg
KzYzLDE1IEBAIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKICAgICB9CiB9CiAKK3ZvaWQgU2xv
dFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKCkKK3sKKyAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0
eSgpKSB7CisgICAgICAgIG1fc3RhY2sucmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChtX3N0YWNr
LmNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOworICAg
IH0KK30KKwogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25z
ZXJ2YXRpdmVSb290cykKIHsKICAgICBTdGFja1N0YXRzOjpwcm9iZSgpOwpAQCAtODAsNyArODks
NyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oCiAjZW5kaWYKIAog
ICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7Ci0gICAgCisgICAKICAgICBpZiAoaXNK
U1N0cmluZyhjZWxsKSkgewogICAgICAgICBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihjb25zdF9j
YXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxNTU0OTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgU2xvdFZpc2l0b3IoR0NUaHJlYWRTaGFy
ZWREYXRhJik7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKKyAgICBNYXJrU3RhY2tBcnJheSYgbWFy
a1N0YWNrKCkgeyByZXR1cm4gbV9zdGFjazsgfQorCisgICAgSGVhcCogaGVhcCgpIGNvbnN0Owor
CiAgICAgdm9pZCBhcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB2b2lkIGFwcGVuZChKSVRXcml0ZUJhcnJpZXI8VD4qKTsKQEAgLTYwLDE3
ICs2NCwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFs
dWUqKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVy
ZWRXZWFrKFdlYWs8VD4qKTsKKyAgICB2b2lkIHVuY29uZGl0aW9uYWxseUFwcGVuZChKU0NlbGwq
KTsKICAgICAKICAgICB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOwogICAgIGJvb2wgY29udGFp
bnNPcGFxdWVSb290KHZvaWQqKTsKICAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlT
dGF0ZSh2b2lkKik7CiAgICAgaW50IG9wYXF1ZVJvb3RDb3VudCgpOwogCi0gICAgR0NUaHJlYWRT
aGFyZWREYXRhJiBzaGFyZWREYXRhKCkgeyByZXR1cm4gbV9zaGFyZWQ7IH0KKyAgICBHQ1RocmVh
ZFNoYXJlZERhdGEmIHNoYXJlZERhdGEoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZDsgfQogICAg
IGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICB2b2lk
IHNldHVwKCk7CiAgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgY2xlYXJNYXJrU3RhY2soKTsK
IAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRl
ZDsgfQogICAgIHNpemVfdCBieXRlc0NvcGllZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNDb3Bp
ZWQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxNCBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsCiAgICAgICAgIAogICAg
IE1BUktfTE9HX0NISUxEKCp0aGlzLCBjZWxsKTsKIAorICAgIHVuY29uZGl0aW9uYWxseUFwcGVu
ZChjZWxsKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp1bmNvbmRpdGlv
bmFsbHlBcHBlbmQoSlNDZWxsKiBjZWxsKQoreworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChj
ZWxsKSk7CisgICAgbV92aXNpdENvdW50Kys7CisgICAgICAgIAogICAgIC8vIFNob3VsZCBuZXZl
ciBhdHRlbXB0IHRvIG1hcmsgc29tZXRoaW5nIHRoYXQgaXMgemFwcGVkLgogICAgIEFTU0VSVCgh
Y2VsbC0+aXNaYXBwZWQoKSk7CiAgICAgICAgIApAQCAtMjEyLDcgKzIyMCw5IEBAIGlubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9y
Ojpjb3B5TGF0ZXIoSlNDZWxsKiBvd25lciwgQ29weVRva2VuIHRva2VuLCB2b2lkKiBwdHIsIHNp
emVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoYnl0ZXMpOwotICAgIG1fYnl0ZXNDb3BpZWQgKz0g
Ynl0ZXM7CisgICAgYm9vbCBpc1JlbWVtYmVyZWQgPSBoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jl
c3MoKSA9PSBFZGVuQ29sbGVjdGlvbiAmJiBNYXJrZWRCbG9jazo6YmxvY2tGb3Iob3duZXIpLT5p
c1JlbWVtYmVyZWQob3duZXIpOworICAgIGlmICghaXNSZW1lbWJlcmVkKQorICAgICAgICBtX2J5
dGVzQ29waWVkICs9IGJ5dGVzOwogCiAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3Bh
Y2U6OmJsb2NrRm9yKHB0cik7CiAgICAgaWYgKGJsb2NrLT5pc092ZXJzaXplKCkpIHsKQEAgLTIy
MCw3ICsyMzAsNyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKEpTQ2VsCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCisgICAg
aWYgKGlzUmVtZW1iZXJlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYmxvY2stPnJlcG9ydExp
dmVCeXRlcyhvd25lciwgdG9rZW4sIGJ5dGVzKTsKQEAgLTI0MSw2ICsyNTEsMTEgQEAgaW5saW5l
IHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtbwogI2VuZGlmCiB9CiAKK2lubGluZSBI
ZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICZzaGFyZWREYXRh
KCkubV92bS0+aGVhcDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTbG90
VmlzaXRvcklubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgJKHJldmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODgsOCArMzg4LDcgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGUsIFJlZ2lzdGVy
SUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gpOyAvLyBXZSBoYWQgZm91bmQgdGhpcyBzY3JhdGNoIHJlZ2lzdGVyIHVzZWZ1
bCBoZXJlIGJlZm9yZSwgc28gSSB3aWxsIGtlZXAgaXQgZm9yIG5vdy4KLSAgICAKKyAgICBVTlVT
RURfUEFSQU0oc2NyYXRjaCk7CiAgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVB
bmRJbmRleGluZ1R5cGU7CiAgICAgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmVB
bmRJbmRleGluZ1R5cGU7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1Nyw3ICszNTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9u
CiAgICAgCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlv
bkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwogCi0gICAgZW1p
dFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1t
ZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwogfQogCiBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4
aW5nU2hhcGUpCkBAIC0zNzQsNiArMzczLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5l
cmljQ29udGlndW91cwogCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKKwogICAgIHN3aXRjaCAoaW5kZXhp
bmdTaGFwZSkgewogICAgIGNhc2UgSW50MzJTaGFwZToKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMykpOwpAQCAtMzkyLDYgKzM5Miw3
IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXMKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDIsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVz
LCBXcml0ZUJhcnJpZXJGb3JHZW5lcmljQWNjZXNzKTsKICAgICAgICAgc3RvcmU2NChyZWdUMywg
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgpAQCAtNDMwLDYgKzQzMSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJy
YXlTdG9yYWdlUHV0QnkKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJl
Z1QwLCByZWdUMywgcmVnVDIsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJh
cnJpZXJGb3JHZW5lcmljQWNjZXNzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVn
VDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKQEAgLTYwNyw2ICs2MDks
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgLy8gSnVt
cCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgdGhlIGJhc2Ugb2JqZWN0IGlzIGFuIGltbWVkaWF0
ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2VzIG5vdCBtYXRjaC4KICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAorICAgIGVtaXRXcml0ZUJhcnJpZXIo
cmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRl
QmFycmllckZvckdlbmVyaWNBY2Nlc3MpOworCiAgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFV
RU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwogCiAgICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMpOwpA
QCAtNjIwLDggKzYyNCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlv
bioKIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiAK
LSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0KICAgICBt
X3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxh
dGlvbkluZm8oUHJvcGVydHlTdHViUHV0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgaG90UGF0aEJl
Z2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHByb3BlcnR5U3RvcmFnZUxvYWQsIGRpc3BsYWNlbWVu
dExhYmVsKSk7CiB9CiAKQEAgLTczMSwxMiArNzMzLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4ocmVnVDMpOwogICAgIH0KIAotICAgIC8vIFBsYW50aW5nIHRoZSBuZXcgc3RydWN0dXJl
IHRyaWdnZXJzIHRoZSB3cml0ZSBiYXJyaWVyIHNvIHdlIG5lZWQKLSAgICAvLyBhbiB1bmNvbmRp
dGlvbmFsIGJhcnJpZXIgaGVyZS4KLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwg
cmVnVDIsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcyk7Ci0KICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5jbGFzc0luZm8oKSA9
PSBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG5ld1N0cnVjdHVyZSksIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
KTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMywgcmVnVDMsIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsK
ICAgICBjb21waWxlUHV0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsK
IAogICAgIHJldCgpOwpAQCAtNzUxLDkgKzc1MSwxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVu
Y3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9w
dXRfYnlfaWRfZmFpbCkpOwogCiAgICAgaWYgKHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MpIHsKLSAg
ICAgICAgQVNTRVJUKG1fY2FsbHMuc2l6ZSgpID09IDEpOworICAgICAgICBBU1NFUlQobV9jYWxs
cy5zaXplKCkgPT0gMik7CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9t
LCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOworCisg
ICAgICAgIEFTU0VSVChtX2NhbGxzWzFdLnRvID09IGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3Jp
dGVfYmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1sxXS5mcm9tLCBG
dW5jdGlvblB0cihjdGlfaGVhcF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXIpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQobV9jYWxsc1swXS50byA9PSBjdGlfaGVhcF91bmNvbmRp
dGlvbmFsX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNb
MF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVy
KSk7CiAgICAgfQorCiAgICAgCiAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklU
U3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREUoCkBAIC0xMzQzLDEwICsxMzUwLDEx
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShJbnMKIAogdm9pZCBKSVQ6
OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3QqIG9wZXJhbmRTbG90LCBpbnQgdmFsdWUp
CiB7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGVtaXRX
cml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QyLCByZWdUMSwgcmVnVDEsIFNob3VsZEZpbHRlckltbWVk
aWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKICAgICBsb2Fk
UHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CiAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogfQogCkBAIC0xMzU0LDEyICsxMzYyLDE0IEBA
IHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGUKIHsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wZXJhbmQpKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlh
dGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0
UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUpCiB7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1Qw
LCByZWdUMSwgcmVnVDIsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJp
ZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Zhcmlh
YmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDApOwogICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQpAQCAt
MTQ0MiwxMCArMTQ1MiwxMCBAQCB2b2lkIEpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQoUmVwYXRjaEJ1
ZmZlCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3Rl
cklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFJlZ2lzdGVySUQgc2NyYXRjaDIsIFdyaXRl
QmFycmllck1vZGUgbW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQogewogICAgIFVO
VVNFRF9QQVJBTShvd25lcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaCk7CiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKICAgICBVTlVTRURf
UEFSQU0odXNlS2luZCk7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0obW9kZSk7CiAgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gpOwogICAgIEFTU0VSVChvd25l
ciAhPSBzY3JhdGNoMik7CkBAIC0xNDUzLDE5ICsxNDYzLDg3IEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKFJlZ2lzdGVySUQgb3cKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJ
TkcpCiAgICAgZW1pdENvdW50KFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVz
ZUtpbmQpKTsKICNlbmRpZgorLyoKKyAgICAvLyBUZXN0IGZvciBudWxsLgorICAgIEp1bXAgdmFs
dWVOdWxsID0gYnJhbmNoVGVzdDY0KFplcm8sIHZhbHVlKTsKKyAgICAvLyBUZXN0IGZvciBjZWxs
LgorICAgIEp1bXAgdmFsdWVOb3RDZWxsID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHZhbHVlLCB0
YWdNYXNrUmVnaXN0ZXIpOworKi8KKyAgICAgICAgLy9wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwocmVnVDMpOworICAgIHB1c2gocmVnVDApOworICAgIHB1c2gocmVnVDEpOworICAgIHB1
c2gocmVnVDIpOworICAgIHB1c2gocmVnVDMpOworICAgIHB1c2gocmVnVDQpOworICAgIHB1c2go
cmVnVDQpOworICAgIHB1c2gocmVnVDQpOworCisgICAgLy8gQ2FsbCBIZWFwOjp3cml0ZUJhcnJp
ZXIuCisgICAgaWYgKG1vZGUgPT0gVW5jb25kaXRpb25hbFdyaXRlQmFycmllcikgeworICAgICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfaGVhcF91bmNvbmRpdGlvbmFsX3dyaXRl
X2JhcnJpZXIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvd25lcik7CisgICAgICAg
IHN0dWJDYWxsLmNhbGwoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfaGVhcF93cml0ZV9iYXJyaWVyKTsKKyAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQob3duZXIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudCh2YWx1ZSk7Cisg
ICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICB9CisvKgorICAgIHZhbHVlTnVsbC5saW5rKHRo
aXMpOworICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOworKi8KKyAgICBwb3AocmVnVDQpOwor
ICAgIHBvcChyZWdUNCk7CisKKyAgICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUMyk7CisgICAg
cG9wKHJlZ1QyKTsKKyAgICBwb3AocmVnVDEpOworICAgIHBvcChyZWdUMCk7CisgICAgICAgIC8v
cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3Rl
cklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1vZGUgbW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1
c2VLaW5kKQogewogICAgIFVOVVNFRF9QQVJBTShvd25lcik7CisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CiAgICAgVU5VU0VEX1BBUkFNKHVzZUtp
bmQpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwog
ICAgIAogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICBlbWl0Q291bnQo
V3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwogI2VuZGlmCisK
KyAgICBwdXNoKHJlZ1QwKTsKKyAgICBwdXNoKHJlZ1QxKTsKKyAgICBwdXNoKHJlZ1QyKTsKKyAg
ICBwdXNoKHJlZ1QzKTsKKyAgICBwdXNoKHJlZ1Q0KTsKKworICAgIHB1c2gocmVnVDQpOworICAg
IHB1c2gocmVnVDQpOworCisgICAgaWYgKG1vZGUgPT0gVW5jb25kaXRpb25hbFdyaXRlQmFycmll
cikgeworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfaGVhcF91bmNvbmRp
dGlvbmFsX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tUHRyKG93bmVyKSk7CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfaGVhcF93cml0ZV9iYXJy
aWVyKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihvd25lcikp
OworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudCh2YWx1ZSk7CisgICAgICAgIHN0dWJDYWxs
LmNhbGwoKTsKKyAgICB9CisKKyAgICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUNCk7CisKKyAg
ICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUMyk7CisgICAgcG9wKHJlZ1QyKTsKKyAgICBwb3Ao
cmVnVDEpOworICAgIHBvcChyZWdUMCk7CiB9CiAKIEpJVDo6SnVtcCBKSVQ6OmFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUmVnaXN0ZXJJRCBzY3JhdGNoKQpAQCAtMTU4Miw3
ICsxNjYwLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAg
IAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgCisgICAKKyAgICBib29sIG5lZWRzV3JpdGVCYXJyaWVyID0gZmFsc2U7IAogICAgIHN3aXRj
aCAoYXJyYXlNb2RlKSB7CiAgICAgY2FzZSBKSVRJbnQzMjoKICAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludDMyUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKQEAgLTE1OTEs
OSArMTY3MCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAg
ICAgIG5lZWRzV3JpdGVCYXJyaWVyID0gdHJ1ZTsKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENv
bnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgbmVlZHNXcml0ZUJhcnJp
ZXIgPSB0cnVlOwogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKQEAgLTE2MTEsNyArMTY5MiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bChCeVZhbEluCiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRp
b25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29k
ZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgCisgICAKKyAgICBpZiAobmVlZHNXcml0
ZUJhcnJpZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHNbMF0udG8gPT0gY3RpX2hlYXBfd3Jp
dGVfYmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9tLCBG
dW5jdGlvblB0cihjdGlfaGVhcF93cml0ZV9iYXJyaWVyKSk7CisgICAgfQorIAogICAgIHBhdGNo
QnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5
VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICAKICAgICBieVZhbEluZm8tPnN0dWJS
b3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3Niw2ICsyMjc2LDE4
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF90b19zY28KICAgICB9CiB9CiAK
K0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIGhlYXBfd3JpdGVfYmFycmllcikKK3sKKyAgICBT
VFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisgICAgc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPmhlYXAoKS0+d3JpdGVCYXJyaWVyKHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkuYXND
ZWxsKCksIHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCkpOworfQorCitERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkLCBoZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcikKK3sKKyAgICBT
VFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisgICAgc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPmhlYXAoKS0+d3JpdGVCYXJyaWVyKHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkuYXND
ZWxsKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxNTU0OTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyMSw3ICs0MjEsOCBAQCB2b2lkKiBKSVRfU1RVQiBjdGlfdm1fdGhyb3coU1RVQl9BUkdT
X0RFCiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfcmVzb2x2ZV9zY29wZShTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0
aV9vcF9nZXRfZnJvbV9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
IHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF90b19zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKLQordm9pZCBKSVRfU1RVQiBjdGlfaGVhcF93cml0ZV9iYXJyaWVyKFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfU1RVQiBjdGlfaGVh
cF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIEVuY29kZWRFeGNlcHRpb25IYW5kbGVy
IEpJVF9TVFVCIGN0aV92bV9oYW5kbGVfZXhjZXB0aW9uKENhbGxGcmFtZSopIFJFRkVSRU5DRURf
RlJPTV9BU00gV1RGX0lOVEVSTkFMOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludENvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludENvbW1vbi5oCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQAogI2VuZGlmCiAKIC8vIERpc2FibGUgaW5saW5lIGNhY2hpbmcgb2YgZ2V0X2J5X2lkIGFu
ZCBwdXRfYnlfaWQuCi0jZGVmaW5lIExMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAwCisjZGVmaW5l
IExMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAxCiAKIC8vIEVuYWJsZSBPU1IgaW50byB0aGUgSklU
LiBEaXNhYmxpbmcgdGhpcyB3aGlsZSB0aGUgTExJbnQgaXMgZW5hYmxlZCBlZmZlY3RpdmVseQog
Ly8gdHVybnMgb2ZmIGFsbCBKSVQnaW5nLCBzaW5jZSBpbiBMTEludCdzIHBhcmxhbmNlLCBPU1Ig
c3Vic3VtZXMgYW55IGZvcm0gb2YgSklUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMzYsNiArMTMzNiwxOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3Rv
X3NjCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKK2V4dGVybiAiQyIgdm9pZCBsbGludF93cml0ZV9i
YXJyaWVyX3Nsb3coSlNDZWxsKiBvd25lciwgSlNDZWxsKiB2YWx1ZSkKK3sKKyAgICBIZWFwKiBo
ZWFwID0gSGVhcDo6aGVhcChvd25lcik7CisgICAgaGVhcC0+d3JpdGVCYXJyaWVyKG93bmVyLCB2
YWx1ZSk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBsbGludF91bmNvbmRpdGlvbmFsX3dyaXRlX2Jh
cnJpZXJfc2xvdyhKU0NlbGwqIG93bmVyKQoreworICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFw
KG93bmVyKTsKKyAgICBoZWFwLT53cml0ZUJhcnJpZXIob3duZXIpOworfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6TExJbnQKIAogI2VuZGlmIC8vIEVOQUJMRShMTElOVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCShyZXZpc2lvbiAxNTU0
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBleHRlcm4g
IkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV9vcGVyYW5kKEV4ZWNTdGF0ZSosIElu
c3RydWN0aW9uKiwgaW50IGZyb21XaGVyZSwgaW50IG9wZXJhbmQpOwogZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgbGxpbnRfdHJhY2VfdmFsdWUoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24q
LCBpbnQgZnJvbVdoZXJlLCBpbnQgb3BlcmFuZCk7CitleHRlcm4gIkMiIHZvaWQgbGxpbnRfd3Jp
dGVfYmFycmllcl9zbG93KEpTQ2VsbCosIEpTQ2VsbCopOworZXh0ZXJuICJDIiB2b2lkIGxsaW50
X3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcl9zbG93KEpTQ2VsbCopOwogCiAjZGVmaW5lIExM
SU5UX1NMT1dfUEFUSF9ERUNMKG5hbWUpIFwKICAgICBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBsbGludF8jI25hbWUoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE3Miw4ICsx
NzIsMTA0IEBAIG1hY3JvIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKGluZGV4LCAKICAgICBi
dHFueiB2YWx1ZSwgdGFnTWFzaywgc2xvdwogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllcih2YWx1
ZSkKLSAgICAjIE5vdGhpbmcgdG8gZG8sIHNpbmNlIHdlIGRvbid0IGhhdmUgYSBnZW5lcmF0aW9u
YWwgb3IgaW5jcmVtZW50YWwgY29sbGVjdG9yLgorY29uc3QgTWFya2VkQmxvY2tTaXplID0gNjQg
KiAxMDI0Citjb25zdCBNYXJrZWRCbG9ja0hlYWRlck1hc2sgPSB+KE1hcmtlZEJsb2NrU2l6ZSAt
IDEpCisjIHNpemVvZihhdG9tKSA9PSA4Citjb25zdCBBdG9tTnVtYmVyU2hpZnQgPSAzCitjb25z
dCBCaXRNYXBXb3JkU2hpZnQgPSA1Citjb25zdCBCaXRNYXBXb3JkU2l6ZSA9IDMyCitjb25zdCBC
aXRNYXBXb3JkTW9kID0gQml0TWFwV29yZFNpemUgLSAxCisKKyMgQ2xvYmJlcnMgYm90aCBjZWxs
IGFuZCBzY3JhdGNoLgorbWFjcm8gaXNNYXJrZWQoY2VsbCwgc2NyYXRjaCwgY29udGludWF0aW9u
KQorICAgIG1vdmUgY2VsbCwgc2NyYXRjaAorCisjIEdldCB0aGUgaW5kZXggb2YgdGhlIHdvcmQg
aW4gdGhlIGJpdG1hcC4KKyAgICBhbmRxIH5NYXJrZWRCbG9ja0hlYWRlck1hc2ssIGNlbGwKKyAg
ICBwdXNocSBjZWxsCisgICAgcnNoaWZ0cCBBdG9tTnVtYmVyU2hpZnQgKyBCaXRNYXBXb3JkU2hp
ZnQsIGNlbGwKKworIyBMb2FkIHRoZSB3b3JkIGZyb20gdGhlIGJpdG1hcC4KKyAgICBhbmRxIE1h
cmtlZEJsb2NrSGVhZGVyTWFzaywgc2NyYXRjaAorICAgIGxvYWRpIE1hcmtlZEJsb2NrOjptX21h
cmtzW3NjcmF0Y2gsIGNlbGwsIDRdLCBzY3JhdGNoCisKKyMgR2V0IHRoZSBhbW91bnQgdG8gcmln
aHQgc2hpZnQgdGhlIHJlc3VsdCBieS4KKyAgICBwb3BxIGNlbGwKKyAgICByc2hpZnRwIEF0b21O
dW1iZXJTaGlmdCwgY2VsbAorICAgIGFuZHEgQml0TWFwV29yZE1vZCwgY2VsbAorICAgIHJzaGlm
dHAgY2VsbCwgc2NyYXRjaAorCisjIENoZWNrIHRoZSByaWdodC1tb3N0IGJpdC4KKyAgICBhbmRx
IDEsIHNjcmF0Y2gKKworICAgIGNvbnRpbnVhdGlvbihzY3JhdGNoKQorZW5kCisKK21hY3JvIHVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIob3duZXIpCisgICAgcHVzaHEgdDAKKyAgICBwdXNocSB0
MQorICAgIHB1c2hxIHQyCisgICAgcHVzaHEgdDMKKyAgICBwdXNocSB0NAorICAgIHB1c2hxIHQ1
CisgICAgcHVzaHEgdDYKKyAgICBjQ2FsbDIoX2xsaW50X3VuY29uZGl0aW9uYWxfd3JpdGVfYmFy
cmllcl9zbG93LCBvd25lciwgb3duZXIpCisgICAgcG9wcSB0NgorICAgIHBvcHEgdDUKKyAgICBw
b3BxIHQ0CisgICAgcG9wcSB0MworICAgIHBvcHEgdDIKKyAgICBwb3BxIHQxCisgICAgcG9wcSB0
MAorIyAgICBzdG9yZXEgMCwgW3NwXQorIyAgICBzdG9yZXEgMCwgOFtzcF0KKyMgICAgc3RvcmVx
IDAsIDE2W3NwXQorIyAgICBzdG9yZXEgMCwgMjRbc3BdCisjICAgIHN0b3JlcSAwLCAzMltzcF0K
KyMgICAgc3RvcmVxIDAsIDQwW3NwXQorIyAgICBzdG9yZXEgMCwgNDhbc3BdCitlbmQKKworbWFj
cm8gd3JpdGVCYXJyaWVyV2l0aFZhbHVlKG93bmVyLCB2YWx1ZSkKKyMgU2tpcCBpZiB2YWx1ZSBp
cyBudWxsIG9yIG5vdCBhIGNlbGwuCisgICAgYnRweiB2YWx1ZSwgLndyaXRlQmFycmllckRvbmUK
KyAgICBidHFueiB2YWx1ZSwgdGFnTWFzaywgLndyaXRlQmFycmllckRvbmUKKyMgICAgcHVzaHEg
b3duZXIKKyMgICAgcHVzaHEgdmFsdWUKKyMgICAgaXNNYXJrZWQob3duZXIsIHZhbHVlLCAKKyMg
ICAgICAgIG1hY3JvIChtYXJrZWQpCisjIyBJZiBvd25lciBpc24ndCBtYXJrZWQsIHRoZW4gd2Un
cmUgZ29vZCB0byBnby4KKyMgICAgICAgICAgICBidGJ6IG1hcmtlZCwgLnZhbHVlSXNOb25OdWxs
Q2VsbAorIyAgICAgICAgICAgIHBvcHEgdmFsdWUKKyMgICAgICAgICAgICBwb3BxIG93bmVyCisg
ICAgICAgICAgICBwdXNocSB0MAorICAgICAgICAgICAgcHVzaHEgdDEKKyAgICAgICAgICAgIHB1
c2hxIHQyCisgICAgICAgICAgICBwdXNocSB0MworICAgICAgICAgICAgcHVzaHEgdDQKKyAgICAg
ICAgICAgIHB1c2hxIHQ1CisgICAgICAgICAgICBwdXNocSB0NgorICAgICAgICAgICAgY0NhbGwy
KF9sbGludF93cml0ZV9iYXJyaWVyX3Nsb3csIG93bmVyLCB2YWx1ZSkKKyAgICAgICAgICAgIHBv
cHEgdDYKKyAgICAgICAgICAgIHBvcHEgdDUKKyAgICAgICAgICAgIHBvcHEgdDQKKyAgICAgICAg
ICAgIHBvcHEgdDMKKyAgICAgICAgICAgIHBvcHEgdDIKKyAgICAgICAgICAgIHBvcHEgdDEKKyAg
ICAgICAgICAgIHBvcHEgdDAKKyMgICAgc3RvcmVxIDAsIFtzcF0KKyMgICAgc3RvcmVxIDAsIDhb
c3BdCisjICAgIHN0b3JlcSAwLCAxNltzcF0KKyMgICAgc3RvcmVxIDAsIDI0W3NwXQorIyAgICBz
dG9yZXEgMCwgMzJbc3BdCisjICAgIHN0b3JlcSAwLCA0MFtzcF0KKyMgICAgc3RvcmVxIDAsIDQ4
W3NwXQorIyAgICAgICAgICAgIGptcCAud3JpdGVCYXJyaWVyRG9uZQorIyAgICAgICAgZW5kKQor
Iy52YWx1ZUlzTm9uTnVsbENlbGw6CisjICAgIHBvcHEgdmFsdWUKKyMgICAgcG9wcSBvd25lcgor
LndyaXRlQmFycmllckRvbmU6CiBlbmQKIAogbWFjcm8gdmFsdWVQcm9maWxlKHZhbHVlLCBvcGVy
YW5kLCBzY3JhdGNoKQpAQCAtODI5LDExICs5MjUsMTMgQEAgZW5kCiAKIG1hY3JvIHN0b3JlUHJv
cGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3Jh
Z2UsIHZhbHVlKQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVP
ZmZzZXQsIC5pc0lubGluZQorICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZShvYmplY3RBbmRTdG9y
YWdlLCB2YWx1ZSkKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3Rv
cmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAg
ICBzeGkycSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1w
IC5yZWFkeQogLmlzSW5saW5lOgorICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZShvYmplY3RBbmRT
dG9yYWdlLCB2YWx1ZSkKICAgICBhZGRwIHNpemVvZiBKU09iamVjdCAtIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgogICAgIHN0b3JlcSB2
YWx1ZSwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIDhdCkBAIC04NDQsNyArOTQyLDkgQEAgX2xsaW50X29wX2luaXRf
Z2xvYmFsX2NvbnN0OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKICAgICBsb2Fk
cEZyb21JbnN0cnVjdGlvbigxLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0
MikKLSAgICB3cml0ZUJhcnJpZXIodDIpCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCisg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MV0sIHQxCisgICAgd3JpdGVCYXJy
aWVyV2l0aFZhbHVlKHQxLCB0MikKICAgICBzdG9yZXEgdDIsIFt0MF0KICAgICBkaXNwYXRjaCg1
KQogCkBAIC05MzMsMTMgKzEwMzMsMTQgQEAgbWFjcm8gcHV0QnlJZChnZXRQcm9wZXJ0eVN0b3Jh
Z2UpCiAgICAgZ2V0UHJvcGVydHlTdG9yYWdlKAogICAgICAgICB0MCwKICAgICAgICAgdDMsCi0g
ICAgICAgIG1hY3JvIChwcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2gpCi0gICAgICAgICAgICBicG5l
cSBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXSwgdDEsIC5vcFB1dEJ5SWRTbG93Ci0gICAgICAgICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNSwgdDEpCi0gICAgICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHQyLCBzY3JhdGNoKQotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKHQwKQotICAg
ICAgICAgICAgc3RvcmVxIHNjcmF0Y2gsIFtwcm9wZXJ0eVN0b3JhZ2UsIHQxXQotICAgICAgICAg
ICAgZGlzcGF0Y2goOSkKKyAgICAgICAgbWFjcm8gKHByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaCkg
ICAgICAgICAgICAgICAgICAgICAgICAjIExpdmUgdmFyaWFibGVzCisgICAgICAgICAgICBicG5l
cSBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXSwgdDEsIC5vcFB1dEJ5SWRTbG93ICAgIyB0MCwgdDEs
IHQyLCB0MworICAgICAgICAgICAgbW92ZSB0MCwgdDEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgdDAsIHQxLCB0MiwgdDMKKyAgICAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUodDIsIHNjcmF0Y2gpICAgICAgICAgICAgICAgICAjIHQwLCB0MSwgdDIsIHQz
CisgICAgICAgICAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDEsIHNjcmF0Y2gpICAgICAgICAg
ICAgICAgICAgIyB0MCwgdDEsICAgLCB0MworICAgICAgICAgICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDUsIHQxKSAgICAgICAgICAgICAgICAgICAgICAgICMgdDAsIHQxLCAgICwgdDMKKyAgICAg
ICAgICAgIHN0b3JlcSBzY3JhdGNoLCBbcHJvcGVydHlTdG9yYWdlLCB0MV0gICAgICAgICAgICAg
ICAjIHQwLCB0MSwgICAsIHQzCisgICAgICAgICAgICBkaXNwYXRjaCg5KSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICwgICAsICAgLCAgCiAgICAgICAgIGVuZCkK
IGVuZAogCkBAIC05NzAsOSArMTA3MSwxMCBAQCBtYWNybyBwdXRCeUlkVHJhbnNpdGlvbihhZGRp
dGlvbmFsQ2hlY2tzCiAgICAgICAgIG1hY3JvIChwcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2gpCiAg
ICAgICAgICAgICBhZGRwIHQxLCBwcm9wZXJ0eVN0b3JhZ2UsIHQzCiAgICAgICAgICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKLSAgICAgICAgICAgIHdyaXRlQmFycmllcih0MSkK
KyAgICAgICAgICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZSh0MCwgdDEpCiAgICAgICAgICAgICBz
dG9yZXEgdDEsIFt0M10KICAgICAgICAgICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQxKQor
ICAgICAgICAgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQwLCB0MSkKICAgICAgICAgICAgIHN0
b3JlcCB0MSwgSlNDZWxsOjptX3N0cnVjdHVyZVt0MF0KICAgICAgICAgICAgIGRpc3BhdGNoKDkp
CiAgICAgICAgIGVuZCkKQEAgLTExMjksNyArMTIzMSw4IEBAIG1hY3JvIGNvbnRpZ3VvdXNQdXRC
eVZhbChzdG9yZUNhbGxiYWNrKQogICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdLCAub3V0T2ZCb3Vu
ZHMKIC5zdG9yZVJlc3VsdDoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDIpCi0gICAg
c3RvcmVDYWxsYmFjayh0MiwgdDEsIFt0MCwgdDMsIDhdKQorICAgIGxlYXAgW3QwLCB0MywgOF0s
IHQwCisgICAgc3RvcmVDYWxsYmFjayh0MiwgdDMsIFt0MF0pCiAgICAgZGlzcGF0Y2goNSkKIAog
Lm91dE9mQm91bmRzOgpAQCAtMTE4NCw3ICsxMjg3LDcgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6
CiAgICAgY29udGlndW91c1B1dEJ5VmFsKAogICAgICAgICBtYWNybyAob3BlcmFuZCwgc2NyYXRj
aCwgYWRkcmVzcykKICAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUob3BlcmFuZCwg
c2NyYXRjaCkKLSAgICAgICAgICAgIHdyaXRlQmFycmllcihzY3JhdGNoKQorICAgICAgICAgICAg
d3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQxLCBzY3JhdGNoKQogICAgICAgICAgICAgc3RvcmVwIHNj
cmF0Y2gsIGFkZHJlc3MKICAgICAgICAgZW5kKQogCkBAIC0xMTkzLDIxICsxMjk2LDIyIEBAIF9s
bGludF9vcF9wdXRfYnlfdmFsOgogICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy52ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZh
bE91dE9mQm91bmRzCiAgICAgYnRxeiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0s
IC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3Rv
cmVSZXN1bHQ6CisgICAgbGVhcCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0sIHQw
CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQyKQotICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUodDIsIHQxKQotICAgIHdyaXRlQmFycmllcih0MSkKLSAgICBzdG9yZXEgdDEsIEFycmF5
U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
dDIsIHQzKQorICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZSh0MSwgdDMpCisgICAgc3RvcmVxIHQz
LCBbdDBdCiAgICAgZGlzcGF0Y2goNSkKIAogLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eToK
ICAgICBpZiBWQUxVRV9QUk9GSUxFUgotICAgICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig0LCB0
MSkKLSAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0MV0K
KyAgICAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNCwgdDIpCisgICAgICAgIHN0b3JlYiAxLCBB
cnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDJdCiAgICAgZW5kCiAgICAgYWRkaSAxLCBB
cnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCiAgICAgYmliIHQzLCAtc2l6ZW9m
IEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhb
dDBdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0Ci0gICAgYWRkaSAxLCB0Mywg
dDEKLSAgICBzdG9yZWkgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0KKyAgICBhZGRpIDEsIHQzLCB0MgorICAgIHN0
b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0
aHMucHVibGljTGVuZ3RoW3QwXQogICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3Jl
UmVzdWx0CiAKIC5vcFB1dEJ5VmFsT3V0T2ZCb3VuZHM6CkBAIC0xODMyLDEyICsxOTM2LDE2IEBA
IG1hY3JvIHB1dEdsb2JhbFZhcigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQwKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDAsIHQxKQogICAgIGxvYWRwRnJvbUluc3RydWN0
aW9uKDYsIHQwKQorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MgorICAgIGxvYWRwIENvZGVC
bG9jazo6bV9nbG9iYWxPYmplY3RbdDJdLCB0MgorICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZSh0
MiwgdDEpCiAgICAgc3RvcmVxIHQxLCBbdDBdCiBlbmQKIAogbWFjcm8gcHV0Q2xvc3VyZVZhcigp
CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUodDEsIHQyKQorICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZSh0MCwgdDIpCiAgICAgbG9h
ZHAgSlNWYXJpYWJsZU9iamVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0MAogICAgIGxvYWRpc0Zyb21J
bnN0cnVjdGlvbig2LCB0MSkKICAgICBzdG9yZXEgdDIsIFt0MCwgdDEsIDhdCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCShyZXZp
c2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVj
dGlvbnMucmIJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDkgQEAgTUFDUk9fSU5TVFJVQ1RJ
T05TID0KICAgICAgImJjZDJpIiwKICAgICAgIm1vdmR6IiwKICAgICAgInBvcCIsCisgICAgICJw
b3BxIiwKICAgICAgInB1c2giLAorICAgICAicHVzaHEiLAogICAgICAibW92ZSIsCiAgICAgICJz
eGkycSIsCiAgICAgICJ6eGkycSIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGlu
ZWFzbS94ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVh
c20veDg2LnJiCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2Zm
bGluZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBjbGFzcyBS
ZWdpc3RlcklECiAgICAgICAgICAgICB3aGVuIDpxdWFkCiAgICAgICAgICAgICAgICAgaXNYNjQg
PyAiJXJheCIgOiByYWlzZQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJhaXNl
CisgICAgICAgICAgICAgICAgcmFpc2UgIkludmFsaWQga2luZCAje2tpbmR9IGZvciBuYW1lICN7
bmFtZX0iCiAgICAgICAgICAgICBlbmQKICAgICAgICAgd2hlbiAidDEiLCAiYTEiLCAicjEiCiAg
ICAgICAgICAgICBjYXNlIGtpbmQKQEAgLTk4Miw4ICs5ODIsMTIgQEAgY2xhc3MgSW5zdHJ1Y3Rp
b24KICAgICAgICAgICAgIGVuZAogICAgICAgICB3aGVuICJwb3AiCiAgICAgICAgICAgICAkYXNt
LnB1dHMgInBvcCAje29wZXJhbmRzWzBdLng4Nk9wZXJhbmQoOnB0cil9IgorICAgICAgICB3aGVu
ICJwb3BxIgorICAgICAgICAgICAgJGFzbS5wdXRzICJwb3BxICN7b3BlcmFuZHNbMF0ueDg2T3Bl
cmFuZCg6cHRyKX0iCiAgICAgICAgIHdoZW4gInB1c2giCiAgICAgICAgICAgICAkYXNtLnB1dHMg
InB1c2ggI3tvcGVyYW5kc1swXS54ODZPcGVyYW5kKDpwdHIpfSIKKyAgICAgICAgd2hlbiAicHVz
aHEiCisgICAgICAgICAgICAkYXNtLnB1dHMgInB1c2hxICN7b3BlcmFuZHNbMF0ueDg2T3BlcmFu
ZCg6cHRyKX0iCiAgICAgICAgIHdoZW4gIm1vdmUiCiAgICAgICAgICAgICBoYW5kbGVNb3ZlCiAg
ICAgICAgIHdoZW4gInN4aTJxIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5LmgJKHJldmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgc2l6ZV90IHRvdGFsU2l6ZShT
dHJ1Y3R1cmUqKTsKKwogICAgIHZvaWQqIGJhc2Uoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNh
cGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KICAgICB2b2lkKiBiYXNlKFN0cnVjdHVyZSopOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5l
cy5oCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDIyIEBAIGlubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbmkKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCitpbmxpbmUgc2l6ZV90IEJ1dHRlcmZseTo6dG90YWxTaXplKFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IHN0cnVj
dHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKTsKKyAgICBpZiAoVU5MSUtFTFkoaGFzSW5k
ZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gaW5kZXhpbmdIZWFkZXIoKS0+
cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMgPSBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1
cmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKyAgICByZXR1cm4gQnV0dGVyZmx5
Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVh
ZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKIGlubGluZSB2b2lkKiBCdXR0
ZXJmbHk6OmJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgcmV0dXJuIGJhc2UoaW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTU1NDk0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDcgKzIxNywxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3RoaXMpCiAK
ICAgICBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSBwY1szXS51Lm9wZXJhbmQ7CiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+YWxsb2NhdGlvblByb2ZpbGUoZXhlYywgaW5s
aW5lQ2FwYWNpdHkpLT5zdHJ1Y3R1cmUoKTsKLSAgICBSRVRVUk4oY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYywgc3RydWN0dXJlKSk7CisgICAgLy9leGVjLT5oZWFwKCktPnNldEN1cnJlbnRDYWxs
RnJhbWUoZXhlYyk7CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgLy9leGVjLT5oZWFwKCktPnNldEN1cnJlbnRDYWxsRnJh
bWUoMCk7CisgICAgUkVUVVJOKHJlc3VsdCk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF90b190aGlzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdI
ZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ0hlYWRlci5oCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmRleGluZ0hlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcg
QEAgcHVibGljOgogICAgIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBzdGFuZGFsb25l
IGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJlCiAgICAgLy8gdXNlZCBvbiBhIGNvcHkg
b2YgdGhlIEluZGV4aW5nSGVhZGVyLgotICAgIHNpemVfdCBwcmVDYXBhY2l0eShTdHJ1Y3R1cmUq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7
CiAgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSopOwogICAg
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5oCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBkc3Qg
PSByZWludGVycHJldF9jYXN0X3B0cjxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oCiAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHJlZ2lzdGVyc09mZnNldChz
eW1ib2xUYWJsZSgpKSk7CisgICAgICAgIGlmIChzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQo
KSA+IDEpIHsKKyAgICAgICAgICAgIGRhdGFMb2dGKCJUZWFyaW5nIG9mZiBKU0FjdGl2YXRpb24g
d2l0aCBjYXB0dXJlU3RhcnQoKSA9ICV1XG4iLCBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQo
KSk7CisgICAgICAgICAgICBkYXRhTG9nRigidGhpcyA9ICVwXG4iLCB0aGlzKTsKKyAgICAgICAg
ICAgIGRhdGFMb2dGKCJkc3QgPSAlcFxuIiwgZHN0KTsKKyAgICAgICAgfQogICAgICAgICBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiBzcmMgPSBtX3JlZ2lzdGVyczsKIAogICAgICAgICBpbnQg
Y2FwdHVyZUVuZCA9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxNTU0OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQ1LDYgKzI0NSw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0m
IHYKICAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFz
dCBwYXRoLgogICAgIEFTU0VSVCghYWRkVG9Gcm9udCB8fCBjb3VudCA+IHN0b3JhZ2UtPm1faW5k
ZXhCaWFzKTsKIAorICAgIGRhdGFMb2dGKCJ1bnNoaWZ0Q291bnRTbG93Q2FzZSBmb3IgJXAgd2l0
aCBpbmRleCBiaWFzICV1XG4iLCB0aGlzLCBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7CisKICAgICAv
LyBTdGVwIDE6CiAgICAgLy8gR2F0aGVyIDQga2V5IG1ldHJpY3M6CiAgICAgLy8gICogdXNlZFZl
Y3Rvckxlbmd0aCAtIGhvdyBtYW55IGVudHJpZXMgYXJlIGN1cnJlbnRseSBpbiB0aGUgdmVjdG9y
IChjb25zZXJ2YXRpdmUgZXN0aW1hdGUgLSBmZXdlciBtYXkgYmUgaW4gdXNlIGluIHNwYXJzZSB2
ZWN0b3JzKS4KQEAgLTI3MCw2ICsyNzIsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKFZNJiB2CiAgICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRvIGNob29zZSB0byBhbGxv
Y2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBleGlz
dGluZyBvbmUuCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgd2lsbFJlcGxh
Y2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgdm9pZCog
bmV3QWxsb2NCYXNlID0gMDsKICAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHk7CiAgICAg
Ly8gSWYgdGhlIGN1cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKGJ1
dCBub3QgdG9vIGxhcmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQuCkBAIC0zMjEsOCArMzI0
LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogCiAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0
aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJ
bmRleEJpYXM7Ci0KLSAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBzZXRCdXR0
ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUobmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtNjk3LDkgKzcwMCwxMSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291
bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgCiAgICAgaWYgKHN0YXJ0SW5kZXggKyBjb3VudCA+IHZl
Y3Rvckxlbmd0aCkKICAgICAgICAgY291bnQgPSB2ZWN0b3JMZW5ndGggLSBzdGFydEluZGV4Owot
ICAgIAorICAgCisgICAgZGF0YUxvZ0YoInNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlIGZvciAl
cCB3aXRoIGluZGV4IGJpYXMgJXUgYW5kIHZlY3RvciBsZW5ndGggJXVcbiIsIHRoaXMsIHN0b3Jh
Z2UtPm1faW5kZXhCaWFzLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4odmVjdG9yTGVuZ3RoLCBvbGRMZW5ndGgpOwogICAg
IAorICAgIAogICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzQmVmb3JlU2hpZnRSZWdpb24gPSBzdGFy
dEluZGV4OwogICAgIHVuc2lnbmVkIGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uID0gc3RhcnRJ
bmRleCArIGNvdW50OwogICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzQWZ0ZXJTaGlmdFJlZ2lvbiA9
IHVzZWRWZWN0b3JMZW5ndGggLSBmaXJzdEluZGV4QWZ0ZXJTaGlmdFJlZ2lvbjsKQEAgLTc0Myw3
ICs3NDgsNiBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAg
ICAgIC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4gV2UgYWxzbyBkb24ndCBtb2RpZnkgdGhlIHZl
Y3RvciBsZW5ndGggYmVjYXVzZSB3ZSdyZSBub3QgYWN0dWFsbHkgY2hhbmdpbmcKICAgICAgICAg
Ly8gaXRzIGxlbmd0aDsgd2UncmUganVzdCB1c2luZyBsZXNzIG9mIGl0LgogICAgIH0KLSAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODU2LDExICs4NjAsMTMgQEAgYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogCiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
ID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CiAKKyAgICBkYXRhTG9nRigidW5zaGlmdENvdW50
V2l0aEFycmF5U3RvcmFnZSBmb3IgJXAgd2l0aCBpbmRleCBiaWFzICV1XG4iLCB0aGlzLCBzdG9y
YWdlLT5tX2luZGV4Qmlhcyk7CiAgICAgaWYgKG1vdmVGcm9udCAmJiBzdG9yYWdlLT5tX2luZGV4
QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7Ci0gICAgICAgIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAg
ICAgICAgc3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0
b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50OwogICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JM
ZW5ndGgodmVjdG9yTGVuZ3RoICsgY291bnQpOworICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0
Q2hhbmdpbmdTdHJ1Y3R1cmUobmV3QnV0dGVyZmx5KTsKICAgICB9IGVsc2UgaWYgKCFtb3ZlRnJv
bnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAgICAgICBzdG9yYWdlID0g
c3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwogICAgIGVsc2UgaWYgKHVuc2hp
ZnRDb3VudFNsb3dDYXNlKGV4ZWMtPnZtKCksIG1vdmVGcm9udCwgY291bnQpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTU1NDk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDcsMTMgKzU0NywxNSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRl
ckRpY3Rpb25hcnlJCiAgICAgfQogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAg
IHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOyAK
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNp
emVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigw
KSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5KTsKLSAgICAKLSAgICBtX2J1dHRl
cmZseSA9IG5ld0J1dHRlcmZseTsKKyAgIAogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1faW5kZXhCaWFzID0gMDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5z
ZXRWZWN0b3JMZW5ndGgoMCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXAuc2V0KHZtLCB0aGlzLCBtYXApOworICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZShuZXdCdXR0ZXJmbHkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHko
dm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgIAogICAgIHJldHVybiBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQpAQCAtNjEzLDcgKzYxNSwxMSBAQCBCdXR0ZXJmbHkq
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRT
dG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpLCBBbGxvY2F0ZVVuZGVjaWRlZCk7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRl
cmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBsYWNl
T2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisKICAgICByZXR1
cm4gbmV3QnV0dGVyZmx5OwogfQogCkBAIC02MjIsNyArNjI4LDExIEBAIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3Jh
Z2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKCksIEFsbG9jYXRlSW50MzIpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0s
IHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1
dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTYzMyw3ICs2NDMsMTEgQEAgQ29u
dGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUU5hTjsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUo
KSwgQWxsb2NhdGVEb3VibGUpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZs
eSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC02NDIsNyArNjU2LDExIEBAIENvbnRp
Z3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5k
ZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisKKyAgICB3aWxsUmVwbGFjZU9s
ZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBkaWRS
ZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisKICAg
ICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKQEAgLTY2Myw3ICs2ODEs
MTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJlc3Vs
dC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7
CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3Jh
Z2VUcmFuc2l0aW9uKCkpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBu
ZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2
bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtNzMwLDcgKzc1MiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5k
ZWNpZGVkCiAgICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgogICAgIAogICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVw
bGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7
CisKICAgICByZXR1cm4gc3RvcmFnZTsKIH0KIApAQCAtNzg3LDcgKzgxMywxMSBAQCBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgfQogICAgIAogICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlk
UmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJm
bHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtODU2LDcgKzg4NiwxMSBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgfQogICAgIAog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xk
QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7
CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdl
LT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtODg1LDcg
KzkxOSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAg
fQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxS
ZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNl
dFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0
ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBu
ZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApA
QCAtMjMyMSwxOCArMjM1OSwyNSBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0
aChWTSYgCiAgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRo
ZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KICAgICBpZiAoTElLRUxZKCFpbmRleEJp
YXMpKSB7CiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgd2lsbFJl
cGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJh
eVJpZ2h0KAogICAgICAgICAgICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKICAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3Ro
KSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKwogICAgICAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsK
KyAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKG5ld0J1dHRlcmZs
eSk7CisgICAgICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdC
dXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgLy8gUmVt
b3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAm
IGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKKyAgICBkYXRhTG9nRigicHJlIGNhcGFjaXR5IGJlZm9yZTogJWx1XG4iLCBt
X2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKCkpKTsK
KyAgICBkYXRhTG9nRigiaW5kZXhpbmcgcGF5bG9hZCBiZWZvcmU6ICVsdVxuIiwgbV9idXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVy
ZSgpKSk7CisgICAgZGF0YUxvZ0YoInZlY3RvciBsZW5ndGggYmVmb3JlOiAldVxuIiwgbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwg
c3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsgCiAgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0g
c3RkOjptaW4oaW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdW
ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0
dGVyZmx5KCktPnJlc2l6ZUFycmF5KAogICAgICAgICB2bSwgdGhpcywKQEAgLTIzNDAsMTAgKzIz
ODUsMTQgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAg
ICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5n
dGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgCiAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7
CisgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKG5ld0J1dHRlcmZseSk7
CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZs
eSk7CisgICAgZGF0YUxvZ0YoInByZSBjYXBhY2l0eSBhZnRlcjogJWx1XG4iLCBuZXdCdXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSgpKSk7CisgICAgZGF0
YUxvZ0YoImluZGV4aW5nIHBheWxvYWQgYWZ0ZXI6ICVsdVxuIiwgbmV3QnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUoKSkpOwor
ICAgIGRhdGFMb2dGKCJ2ZWN0b3IgbGVuZ3RoIGFmdGVyOiAldVxuXG4iLCBuZXdCdXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjM1OCwxNSArMjQw
NywxOSBAQCB2b2lkIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAg
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0
aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1
dHRlcmZseSk7CiAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQo
CiAgICAgICAgIHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIHRydWUsCiAgICAgICAgIG9sZFZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSksCiAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpOworCisgICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgp
OworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZs
eSk7CisKICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9y
TGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
LmRhdGEoKVtpXSA9IFFOYU47CiAgICAgfQotICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgobmV3VmVjdG9yTGVuZ3RoKTsKIH0KIAogQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9m
TGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE1NTQ5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIKKyNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlTbG90LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlTdG9y
YWdlLmgiCkBAIC02MDQsMTMgKzYwNiwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWlmeVN0YXRp
Y0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVjU3RhdGUqIGV4ZWMpOwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYsIHNpemVfdCBvbGRTaXpl
LCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdT
dHJ1Y3R1cmUoQnV0dGVyZmx5Kik7IC8vIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwg
dGhpcy4KKyAgICB2b2lkIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShCdXR0
ZXJmbHkqKTsKICAgICAgICAgCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUq
KTsKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYsIFN0cnVjdHVyZSosIEJ1
dHRlcmZseSopOwogICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5l
Y2Vzc2FyeShWTSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lk
IHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCBTdHJ1Y3R1
cmUqKTsKIAorICAgIHZvaWQgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUq
LCBCdXR0ZXJmbHkqKTsKKyAgICB2b2lkIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkoVk0mLCBTdHJ1
Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKKwogICAgIHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qo
Vk0mIHZtKQogICAgIHsKICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3Ry
dWN0dXJlKHZtLCB0aGlzKTsKQEAgLTExMjMsOCArMTEyOCwyOCBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6aXNFcnJvckluc3RhbmNlKCkgCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLnR5cGUoKSA9PSBFcnJvckluc3RhbmNlVHlwZTsKIH0KIAoraW5saW5lIHZvaWQgSlNPYmpl
Y3Q6OndpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIEJ1dHRlcmZseSogb2xkQnV0dGVyZmx5KQoreworICAgIGlmICghb2xkQnV0dGVyZmx5KQor
ICAgICAgICByZXR1cm47CisgICAgdm9pZCogb2xkQmFzZSA9IG9sZEJ1dHRlcmZseSA/IG9sZEJ1
dHRlcmZseS0+YmFzZShvbGRTdHJ1Y3R1cmUpIDogMDsKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG9s
ZEJ1dHRlcmZseSA/IG9sZEJ1dHRlcmZseS0+dG90YWxTaXplKG9sZFN0cnVjdHVyZSkgOiAwOwor
ICAgIHZtLmhlYXAud2lsbEFiYW5kb25TdG9yYWdlKHRoaXMsIG9sZEJhc2UsIG9sZFNpemUpOwor
fQorCitpbmxpbmUgdm9pZCBKU09iamVjdDo6ZGlkUmVwbGFjZU9sZEJ1dHRlcmZseShWTSYgdm0s
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSkKK3sKKyAg
ICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIG5ld0Jhc2Ug
PSBuZXdCdXR0ZXJmbHkgPyBuZXdCdXR0ZXJmbHktPmJhc2UobmV3U3RydWN0dXJlKSA6IDA7Cisg
ICAgc2l6ZV90IG5ld1NpemUgPSBuZXdCdXR0ZXJmbHkgPyBuZXdCdXR0ZXJmbHktPnRvdGFsU2l6
ZShuZXdTdHJ1Y3R1cmUpIDogMDsKKyAgICB2bS5oZWFwLmRpZEFzc2lnblN0b3JhZ2UodGhpcywg
bmV3QmFzZSwgbmV3U2l6ZSk7Cit9CisKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkpCiB7CisgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgQVNTRVJUKCFidXR0ZXJm
bHkgPT0gKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIXN0cnVjdHVyZS0+aGFz
SW5kZXhpbmdIZWFkZXIodGhpcykpKTsKICAgICBtX2J1dHRlcmZseSA9IGJ1dHRlcmZseTsKICAg
ICBzZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7CiB9CkBAIC0xMjkzLDEwICsxMzE4LDE2IEBA
IGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAgICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxp
bmVTdG9yYWdlKCkpCisgICAgICAgIGJvb2wgZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2Uo
KSkgeworICAgICAgICAgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgp
LCBtX2J1dHRlcmZseSk7CiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5l
U3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgp
LT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBk
aWRBbGxvY2F0ZU5ld0J1dHRlcmZseSA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgb2Zmc2V0
ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7CiAgICAgICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CisgICAgICAgIGlm
IChkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSkKKyAgICAgICAgICAgIGRpZFJlcGxhY2VPbGRCdXR0
ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogCiAgICAgICAgIHZhbGlkYXRl
T2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNl
dChvZmZzZXQpKTsKQEAgLTEzMTQsMTIgKzEzNDUsMTkgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKAogICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1
Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZz
ZXQpKSB7CiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKLSAgICAgICAgaWYgKGN1cnJlbnRDYXBh
Y2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgIGJvb2wgZGlk
QWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSBmYWxzZTsKKyAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0
eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgd2lsbFJlcGxh
Y2VPbGRCdXR0ZXJmbHkodm0sIHRoaXMtPnN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAg
ICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENh
cGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgZGlk
QWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSB0cnVlOworICAgICAgICB9CiAKICAgICAgICAgdmFsaWRh
dGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNl
dChvZmZzZXQpKTsKICAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1
cmUsIG5ld0J1dHRlcmZseSk7CisgICAgICAgIGlmIChkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSkK
KyAgICAgICAgICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0
dGVyZmx5KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAg
Ly8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1
ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCiAgICAgICAgIC8vIHNvIGxlYXZlIHRoZSBz
bG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCkBAIC0xMzg5LDkgKzE0MjcsMTEgQEAgaW5saW5l
IHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYQogICAgIH0KIAogICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsgCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZSgKICAgICAgICAgdm0sIG9sZENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHko
dm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKIH0KIAogaW5saW5lIHZvaWQgSlNPYmpl
Y3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mIHZtLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKQEAgLTE0MjcsMTAgKzE0NjcsMTYgQEAgaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVz
ICYgQWNjZXNzb3IpKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5
OwotICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCisg
ICAgYm9vbCBkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSA9IGZhbHNlOworICAgIGlmIChzdHJ1Y3R1
cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpIHsKKyAgICAgICAgd2lsbFJlcGxh
Y2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgICAgIG5l
d0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VD
YXBhY2l0eSgpKTsKKyAgICAgICAgZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSB0cnVlOworICAg
IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRDYWxsYWJs
ZU9iamVjdCh2YWx1ZSkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0
dXJlKCksIG5ld0J1dHRlcmZseSk7CisgICAgaWYgKGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5KQor
ICAgICAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVy
Zmx5KTsKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oCShyZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw5ICsxMDgs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25DYWNoZS5n
ZXQoKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNl
dEVudW1lcmF0aW9uQ2FjaGUoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0
YTo6c2V0RW51bWVyYXRpb25DYWNoZShWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZSosIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9lbnVtZXJhdGlvbkNhY2hl
LnNldCh2bSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgbV9lbnVtZXJhdGlvbkNhY2hlLnNldCh2
bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNwcAkocmV2aXNpb24gMTU1NDk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MSwxNiArMTgxLDE4IEBAIENoZWNrZWRCb29sZWFuIE1hcERhdGE6OmVuc3VyZVNw
YWNlRm9yQXAKIAogICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzdGQ6Om1heChtX2NhcGFjaXR5
ICsgKG1fY2FwYWNpdHkgLyAyKSArIDEsIG1pbmltdW1NYXBTaXplKTsKICAgICB2b2lkKiBuZXdT
dG9yYWdlID0gMDsKKyAgICBEZWZlckdDIGRlZmVyKCpjYWxsRnJhbWUtPmhlYXAoKSk7CisgICAg
Y2FsbEZyYW1lLT5oZWFwKCktPndpbGxBYmFuZG9uU3RvcmFnZSh0aGlzLCBtX2VudHJpZXMsIG1f
Y2FwYWNpdHkgKiBzaXplb2YoRW50cnkpKTsKICAgICBpZiAoIWNhbGxGcmFtZS0+aGVhcCgpLT50
cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgcmVxdWlyZWRTaXplICogc2l6ZW9mKEVudHJ5KSwgJm5l
d1N0b3JhZ2UpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihjYWxsRnJhbWUpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIERlZmVyR0MgZGVmZXIoKmNhbGxGcmFt
ZS0+aGVhcCgpKTsKICAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4o
bmV3U3RvcmFnZSk7CiAgICAgaWYgKHNob3VsZFBhY2soKSkKICAgICAgICAgcmVwbGFjZUFuZFBh
Y2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgcmVxdWlyZWRTaXplKTsKICAgICBlbHNlCiAgICAg
ICAgIHJlcGxhY2VCYWNraW5nU3RvcmUobmV3RW50cmllcywgcmVxdWlyZWRTaXplKTsKKyAgICBj
YWxsRnJhbWUtPmhlYXAoKS0+ZGlkQXNzaWduU3RvcmFnZSh0aGlzLCBtX2VudHJpZXMsIHJlcXVp
cmVkU2l6ZSAqIHNpemVvZihFbnRyeSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTU1NDk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMiw3ICsyMTIsOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogI2lm
ICFFTkFCTEUoWUFSUl9KSVQpCiAgICAgdXNlUmVnRXhwSklUKCkgPSBmYWxzZTsKICNlbmRpZgot
ICAgIAorICAgCisgICAgbWluSGVhcFV0aWxpemF0aW9uKCkgPSAxLjA7CisgCiAgICAgLy8gRG8g
cmFuZ2UgY2hlY2tzIHdoZXJlIG5lZWRlZCBhbmQgbWFrZSBjb3JyZWN0aW9ucyB0byB0aGUgb3B0
aW9uczoKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSA+
PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIEFTU0VSVCh0aHJlc2hv
bGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShy
ZXZpc2lvbiAxNTU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDUsOCArNzA1LDExIEBAIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKIAogICAgIC8vIElmIHRoZSBvYmplY3QgaGFkIGEg
QnV0dGVyZmx5IGJ1dCBhZnRlciBmbGF0dGVuaW5nL2NvbXBhY3Rpbmcgd2Ugbm8gbG9uZ2VyIGhh
dmUgbmVlZCBvZiBpdCwKICAgICAvLyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0IGJlY2F1c2UgdGhl
IGNvbGxlY3RvciBkZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1cmUgdG8ga25vdyB0aGUgc2l6ZSBmb3Ig
Y29weWluZy4KLSAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhdGhpcy0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKKyAgICBpZiAo
b2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhdGhp
cy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkgeworICAgICAgICBvYmplY3QtPndpbGxSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLCBvYmplY3QtPmJ1dHRlcmZs
eSgpKTsKICAgICAgICAgb2JqZWN0LT5zZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMs
IDApOworICAgICAgICBvYmplY3QtPmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHRoaXMsIDAp
OworICAgIH0KIAogICAgIHJldHVybiB0aGlzOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgJKHJl
dmlzaW9uIDE1NTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIGlubGlu
ZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZVJhcmVEYXRhOjpwcmUKICAgICByZXR1cm4gbV9wcmV2aW91
cy5nZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldFByZXZpb3Vz
SUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24sIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
aW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1
Y3R1cmUqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBtX3ByZXZpb3VzLnNldCh2bSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgc3Ry
dWN0dXJlKTsKIH0KIAogaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmNsZWFyUHJldmlv
dXNJRCgpCkBAIC01MCw5ICs1MCw5IEBAIGlubGluZSBKU1N0cmluZyogU3RydWN0dXJlUmFyZURh
dGE6Om9iamUKICAgICByZXR1cm4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlLmdldCgpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShWTSYg
dm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTU3RyaW5nKiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0
cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKFZNJiB2bSwgY29uc3QgSlND
ZWxsKiwgSlNTdHJpbmcqIHZhbHVlKQogewotICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5zZXQo
dm0sIG93bmVyLCB2YWx1ZSk7CisgICAgbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNldCh2bSwgdGhp
cywgdmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211394</attachid>
            <date>2013-09-11 21:37:15 -0700</date>
            <delta_ts>2013-09-17 18:20:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121074-20130911213657.patch</filename>
            <type>text/plain</type>
            <size>165599</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NTg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NiBA
QAorMjAxMy0wOS0xMSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIGdlbmVyYXRpb25hbCBnYXJiYWdlIGNvbGxlY3Rv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMDc0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRy
OjpGdW5jdGlvblB0cik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6CisgICAg
ICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmls
ZUJhc2U6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1
dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJhbnNpdGlvblN0dWIp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Z2VuZXJpY1dyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvcHlXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
Z2VuZXJpY0FkZFNwYW4pOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToK
KyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZUR1cmluZ0NvcHlpbmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6Q29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6Q29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6ZGlkRXZh
Y3VhdGVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpwaW4pOgorICAgICAgICAo
SlNDOjpDb3BpZWRCbG9jazo6dW5waW4pOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6aXNP
bGQpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9j
azo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nV3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6Q29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcpOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZGlkU3RhcnRGdWxs
Q29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZyk6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6
OkNvcGllZFNwYWNlOjp3aWxsQWJhbmRvblN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6ZGlkQXNzaWduU3RvcmFnZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgor
ICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6aGVhcCk6CisgICAgICAgICogaGVhcC9Db3B5Vmlz
aXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3Bh
Y2UpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3cpOgor
ICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAg
ICAgICAoSlNDOjpIZWFwOjpkaWRBYmFuZG9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jv
b3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9S
ZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JE
ZWZlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmRpZEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d2lsbEFiYW5kb25TdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkQXNzaWduU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvcHlXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAg
ICAgICAoSlNDOjpIZWFwOjppc0luUmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6
Om9wZXJhdGlvbkluUHJvZ3Jlc3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpzaG91bGRDb2xsZWN0
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBoZWFwL01hcmtTdGFjay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtT
dGFja0FycmF5OjpmaWxsVmVjdG9yKToKKyAgICAgICAgKiBoZWFwL01hcmtTdGFjay5oOgorICAg
ICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5j
cHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OmNsZWFyUmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpjbGVhck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJs
b2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OmRpZFN3ZWVwVG9Ob0F2YWlsKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OnNldFJlbWVtYmVyZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
Y2xlYXJSZW1lbWJlcmVkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmF0b21pY0NsZWFy
UmVtZW1iZXJlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc1JlbWVtYmVyZWQpOgor
ICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFj
ZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnZpc2l0V2Vh
a1NldHMpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVhcFdlYWtTZXRzKToKKyAgICAg
ICAgKEpTQzo6VmVyaWZ5TWFya2VkOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6OmNsZWFyTWFya3MpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAg
ICAgKEpTQzo6Q2xlYXJNYXJrczo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNsZWFyUmVt
ZW1iZXJlZFNldDo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpkaWRB
bGxvY2F0ZUluQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2xlYXJSZW1lbWJl
cmVkU2V0KToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpj
bGVhck1hcmtTdGFjayk6CisgICAgICAgIChKU0M6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAq
IGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1hcmtTdGFj
ayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzaGFyZWREYXRhKToKKyAgICAgICAgKiBo
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aW50
ZXJuYWxBcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dW5jb25kaXRpb25hbGx5
QXBwZW5kKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvcHlMYXRlcik6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjpoZWFwKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlQcm9maWxp
bmdTaXRlKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdl
bmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVW
YXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNoZWNrTWFya1dvcmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwp
OgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVC
X0ZVTkNUSU9OKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9M
TEludENvbW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyk6CisgICAgICAgIChKU0M6
OkxMSW50OjpsbGludF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXJfc2xvdyk6CisgICAgICAg
ICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtOgorICAgICAgICAqIG9mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiOgorICAg
ICAgICAqIG9mZmxpbmVhc20veDg2LnJiOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6
CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dG90YWxTaXplKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0lu
ZGV4aW5nSGVhZGVyLmg6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6d2lsbFJlcGxhY2VPbGRCdXR0
ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVJhcmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKiBydW50aW1l
L01hcERhdGEuY3BwOgorICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVu
ZCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9u
czo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVSYXJlRGF0YTo6c2V0UHJldmlvdXNJRCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJh
cmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKToKKwogMjAxMy0wOS0xMSAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgaW5kZW50YXRpb24gaW4gSlND
IERlYnVnZ2VyIGhlYWRlciBmaWxlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMTU1
NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgcmV0dXJuVHlwZSwgdHlwZW5hbWUgYXJnVHlwZTEsIHR5cGVuYW1lIGFy
Z1R5cGUyLCB0eXBlbmFtZSBhcmdUeXBlMywgdHlwZW5hbWUgYXJnVHlwZTQsIHR5cGVuYW1lIGFy
Z1R5cGU1LCB0eXBlbmFtZSBhcmdUeXBlNj4KKyAgICBGdW5jdGlvblB0cihyZXR1cm5UeXBlKCp2
YWx1ZSkoYXJnVHlwZTEsIGFyZ1R5cGUyLCBhcmdUeXBlMywgYXJnVHlwZTQsIGFyZ1R5cGU1LCBh
cmdUeXBlNikpCisgICAgICAgIDogbV92YWx1ZSgodm9pZCopdmFsdWUpCisgICAgeworICAgICAg
ICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgIH0KKwogLy8gTVNWQyBk
b2Vzbid0IHNlZW0gdG8gdHJlYXQgZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGNhbGxpbmcgY29u
dmVudGlvbnMgYXMKIC8vIGRpZmZlcmVudCB0eXBlczsgdGhlc2UgbWV0aG9kcyBhbHJlYWR5IGRl
ZmluZWQgZm9yIGZhc3RjYWxsLCBiZWxvdy4KICNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1RE
Q0FMTCAmJiAhT1MoV0lORE9XUykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTU1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxOCw3ICsy
NDE4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlcy5zaXplKCk7
ICsraSkKICAgICAgICAgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXNbaV0udmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiAKLSAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucyhDb2xsZWN0aW9uKTsKKyAg
ICB1cGRhdGVBbGxQcmVkaWN0aW9ucyh2aXNpdG9yLmhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVz
cygpKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhT
bG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcg
KzE3MCw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgICAgIG1fYnVja2V0
c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAob3BlcmF0aW9uID09IENvbGxlY3Rpb24KKyAgICAgICAgaWYgKChvcGVyYXRp
b24gPT0gRnVsbENvbGxlY3Rpb24gfHwgb3BlcmF0aW9uID09IEVkZW5Db2xsZWN0aW9uKQogICAg
ICAgICAgICAgJiYgIW1fc2luZ2xldG9uVmFsdWVJc1RvcAogICAgICAgICAgICAgJiYgISFtX3Np
bmdsZXRvblZhbHVlCiAgICAgICAgICAgICAmJiBtX3NpbmdsZXRvblZhbHVlLmlzQ2VsbCgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNTU1ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNjQsNyArMTI2NCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwotCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAg
ICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVs
cGVycy5oCShyZXZpc2lvbiAxNTU1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNyArMjY1LDcgQEAgcHVibGlj
OgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3Rl
ZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIEdQUlJlZyBhcmc1
KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCiAgICAgewog
ICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTI3MywxMCArMjczLDkgQEAgcHVibGljOgog
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmczKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwotICAgICAgICBhZGRDYWxsQXJn
dW1lbnQoYXJnNSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBH
UFJSZWcgYXJnNCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW0z
MiBhcmc0KQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CiAgICAgICAgIGFk
ZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC0yODYsNyArMjg1
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
MzIgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAg
IHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMp
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbVB0
ciBhcmc0KQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CiAgICAgICAgIGFk
ZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC0yOTYsMTYgKzMw
NCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0
ZWRJbW0zMiBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCiAgICAgewog
ICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEp
OwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CiAgICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmczKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwogICAgIH0KIAotICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbVB0ciBhcmc0KQorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFy
ZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCiAgICAgewog
ICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTMxNSw3ICszMjQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgVHJ1c3RlZEltbTMyIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0KQorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJ
bW1QdHIgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIg
YXJnNSkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwogICAgICAgICBhZGRD
YWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMzIzLDkgKzMzMiwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKICAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzMpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBUcnVzdGVk
SW1tMzIgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQogICAg
IHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVu
dChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC0zMzMsNiArMzQzLDcgQEAgcHVibGlj
OgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CiAgICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmczKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgICAgICBhZGRDYWxs
QXJndW1lbnQoYXJnNSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmcz
LCBHUFJSZWcgYXJnNCwgR1BSUmVnIGFyZzUpCkBAIC05MTUsNiArOTI2LDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwog
ICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQ
UlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAgIHBva2UoYXJnNSwg
UE9LRV9BUkdVTUVOVF9PRkZTRVQgKyAxKTsKKyAgICAgICAgcG9rZShhcmc0LCBQT0tFX0FSR1VN
RU5UX09GRlNFVCk7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyLCBhcmczKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFy
ZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAgIHBva2Uo
YXJnNSwgUE9LRV9BUkdVTUVOVF9PRkZTRVQgKyAxKTsKKyAgICAgICAgcG9rZShhcmc0LCBQT0tF
X0FSR1VNRU5UX09GRlNFVCk7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyLCBhcmczKTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZElt
bTMyIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0KQogICAgIHsKICAgICAgICAgcG9rZShhcmc0LCBQ
T0tFX0FSR1VNRU5UX09GRlNFVCk7CkBAIC0xMDIzLDYgKzEwNDgsMjkgQEAgcHVibGljOgogICAg
ICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgICAgIG1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgfQor
CisjZW5kaWYKKworI2lmIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgPT0gNgorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEs
IFRydXN0ZWRJbW1QdHIgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVz
dGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjQ+KGFyZzEsIGFyZzQpOworICAgICAg
ICBtb3ZlKGFyZzIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIG1vdmUoYXJnMywg
R1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgbW92ZShhcmc1LCBHUFJJbmZvOjphcmd1
bWVudEdQUjUpOworICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVk
SW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAg
ICAgcHVzaChhcmcxKTsKKyAgICAgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1bWVu
dEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSND4oYXJnMiwgYXJnNCk7CisgICAgICAgIHBvcChH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgCisgICAgICAgIG1vdmUoYXJnMywg
R1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgbW92ZShhcmc1LCBHUFJJbmZvOjphcmd1
bWVudEdQUjUpOworICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIH0KICNlbmRpZgogCiAgICAgdm9pZCBzZXR1cFJlc3Vs
dHMoR1BSUmVnIGRlc3RBLCBHUFJSZWcgZGVzdEIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
MzYsOCArMTczNiwxMSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgQVNT
RVJUKCFvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgb2JqZWN0LT53aWxsUmVwbGFjZU9sZEJ1dHRlcmZs
eSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgb2JqZWN0LT5idXR0ZXJmbHkoKSk7CiAgICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0
aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENo
YW5naW5nU3RydWN0dXJlKHJlc3VsdCk7CisgICAgb2JqZWN0LT5kaWRSZXBsYWNlT2xkQnV0dGVy
Zmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLCByZXN1bHQpOwogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0xNzQ2LDggKzE3NDksMTEgQEAgY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCisg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIG9iamVjdC0+d2lsbFJlcGxhY2VPbGRC
dXR0ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0dXJlKCksIG9iamVjdC0+YnV0dGVyZmx5KCkpOwog
ICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwg
b2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7CiAgICAg
b2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAg
ICBvYmplY3QtPmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0dXJlKCks
IHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9
CiAKQEAgLTE5NDQsNiArMTk1MCwzMCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0
SlNWYWx1ZVRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvQm9vbGVh
bihleGVjKTsKIH0KIAordm9pZCBERkdfT1BFUkFUSU9OIGRmZ0NvcHlXcml0ZUJhcnJpZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUs
IHZvaWQqIG5ld1B0ciwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBl
eGVjLT5oZWFwKCktPmNvcHlXcml0ZUJhcnJpZXIoY2VsbCwgb2xkUHRyLCBvbGRTaXplLCBuZXdQ
dHIsIG5ld1NpemUpOworfQorCit2b2lkIERGR19PUEVSQVRJT04gZGZnVW5jb25kaXRpb25hbFdy
aXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKworICAgIGV4ZWMtPmhlYXAoKS0+d3JpdGVCYXJyaWVyKGNlbGwpOworfQorCit2b2lkIERG
R19PUEVSQVRJT04gZGZnV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25l
ciwgSlNDZWxsKiBvd25lZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIGV4ZWMtPmhlYXAoKS0+
d3JpdGVCYXJyaWVyKG93bmVyLCBvd25lZCk7Cit9CisKIHZvaWQgREZHX09QRVJBVElPTiBkZWJ1
Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCog
ZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVS
QVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09w
ZXJhdGlvbl9FT1pEKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIGRvdWJsZSk7CiB0
eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkopKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIERG
R19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0
eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDQikoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgQnV0dGVyZmx5Kik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZf
REZHT3BlcmF0aW9uX0VDSWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUq
KTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNDSWNmKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIHR5cGVkZWYg
dm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTEzMCw3ICsxMzEsOCBA
QCB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhCiB0eXBlZGVmIGNoYXIq
IERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FWlopKEV4ZWNTdGF0ZSosIGludDMyX3Qs
IGludDMyX3QpOwogdHlwZWRlZiBTdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OICgqSV9ERkdPcGVy
YXRpb25fRUpzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgSlNTdHJpbmcqIERG
R19PUEVSQVRJT04gKCpKc3NfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsK
LUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0
YXRlKiwgaW50MzJfdCkgIFdURl9JTlRFUk5BTDsgCit0eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoVl9ERkdPcGVyYXRpb25fRUNQU1BTKShFeGVjU3RhdGUqLCBKU0NlbGwqLCB2b2lkKiwgc2l6
ZV90LCB2b2lkKiwgc2l6ZV90KTsKK0pTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJp
bmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiwgaW50MzJfdCkgIFdURl9JTlRFUk5BTDsKIAogLy8g
VGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50
YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgogSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5U
RVJOQUw7CkBAIC0zMTYsNiArMzE4LDEwIEBAIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGll
clVwTm93KEV4ZWMKIGNoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNT
dGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkgV1RGX0lO
VEVSTkFMOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCit2b2lkIERGR19PUEVSQVRJT04g
ZGZnQ29weVdyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCB2b2lkKiwgc2l6ZV90LCB2
b2lkKiwgc2l6ZV90KTsKK3ZvaWQgREZHX09QRVJBVElPTiBkZmdXcml0ZUJhcnJpZXIoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Cit2b2lkIERGR19PUEVSQVRJT04gZGZnVW5jb25kaXRp
b25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKKwogfSAvLyBleHRlcm4gIkMi
CiAKIGlubGluZSBQX0RGR09wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRo
U2l6ZUZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTU1NTg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ3LDcwICs2
NDcsNTUgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIEdQUlJlZyB2YWx1
ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFn
R1BSKTsKICNlbmRpZgogICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJl
Z2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7
Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjI7Ci0gICAgY29uc3Qg
Ym9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSB0cnVlOwotI2Vsc2UKLSAgICBjb25zdCBib29sIHdy
aXRlQmFycmllck5lZWRlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXIgc3R1YkppdDsKICAgICAKLSAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnICYm
ICh3cml0ZUJhcnJpZXJOZWVkZWQgfHwgaXNPdXRPZkxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1
bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSKTsKLSNlbHNlCi0g
ICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNl
R1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOworICAgIGFsbG9j
YXRvci5sb2NrKGJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYWxsb2NhdG9y
LmxvY2sodmFsdWVUYWdHUFIpOwogI2VuZGlmCi0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
ID0gdHJ1ZTsKLSAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwotICAgIH0KKyAgICBh
bGxvY2F0b3IubG9jayh2YWx1ZUdQUik7CisgICAgCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0g
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIAorICAgIENDYWxsSGVscGVycyBzdHVi
Sml0KHZtLCBleGVjLT5jb2RlQmxvY2soKSk7CisKKyAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7CisgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hQdHIoCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNjcmF0Y2hHUFIyID0gU3BlY3Vs
YXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIp
OwotI2Vsc2UKLSAgICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNo
R1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUiwgc2NyYXRjaEdQUik7Ci0jZW5kaWYK
LSAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUjIpOwotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0
ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdyaXRl
QmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSMik7
Ci0jZW5kaWYKKworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHdyaXRlQmFycmllck9wZXJhdGlv
biA9IFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChp
c0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKICAgICAgICAgc3R1YkppdC5zdG9y
ZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0
dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3Rv
cmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAg
ICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpIHsKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSk7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQu
c3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9m
ZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkp
OworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgIAogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1Y2Nlc3M7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKICAg
ICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3Ao
c2NyYXRjaEdQUik7CisgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Cisg
ICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQp
OwogICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBi
YWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hH
UFIpOworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhz
dHViSml0KTsKICAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKQEAgLTcxOCw2ICs3MDMsNyBAQCBz
dGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgfQogICAgIAogICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIHBh
dGNoQnVmZmVyLmxpbmsod3JpdGVCYXJyaWVyT3BlcmF0aW9uLCBkZmdVbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b0RvbmUpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CiAg
ICAgICAgICAgICAKQEAgLTc2MiwzNSArNzQ4LDM0IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFu
c2l0aW9uU3R1YigKICAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7CiAgICAgQVNT
RVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKICAgICAKLSAgICBib29sIG5lZWRTZWNvbmRT
Y3JhdGNoID0gZmFsc2U7Ci0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7Ci0jaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIG5lZWRTZWNvbmRTY3JhdGNoID0g
dHJ1ZTsKLSNlbmRpZgorICAgIGJvb2wgbmVlZEZvdXJ0aFNjcmF0Y2ggPSBmYWxzZTsKICAgICBp
ZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKQogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpIHsKLSAgICAgICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOwotICAgICAgICBuZWVkVGhp
cmRTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgbmVlZEZvdXJ0aFNjcmF0Y2ggPSB0cnVlOwogICAg
IH0KIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gp
IHsKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNTRVJU
KHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9
IHNjcmF0Y2hHUFIxKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2Nh
dGVTY3JhdGNoR1BSKCk7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IGJhc2VHUFIpOworICAg
IEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIy
ICE9IHNjcmF0Y2hHUFIxKTsKKworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gYmFzZUdQUik7
CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRj
aEdQUjMgIT0gc2NyYXRjaEdQUjEpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNo
R1BSMik7CisgICAgCisgICAgR1BSUmVnIHNjcmF0Y2hHUFI0OworICAgIGlmIChuZWVkRm91cnRo
U2NyYXRjaCkgeworICAgICAgICBzY3JhdGNoR1BSNCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFI0ICE9IGJhc2VHUFIpOworICAgICAg
ICBBU1NFUlQoc2NyYXRjaEdQUjQgIT0gdmFsdWVHUFIpOworICAgICAgICBBU1NFUlQoc2NyYXRj
aEdQUjQgIT0gc2NyYXRjaEdQUjEpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjQgIT0gc2Ny
YXRjaEdQUjIpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjQgIT0gc2NyYXRjaEdQUjMpOwog
ICAgIH0gZWxzZQotICAgICAgICBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWc7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIzOwotICAgIGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7Ci0gICAgICAgIHNj
cmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBBU1NF
UlQoc2NyYXRjaEdQUjMgIT0gYmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAh
PSB2YWx1ZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7
Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIAorICAg
ICAgICBzY3JhdGNoR1BSNCA9IEludmFsaWRHUFJSZWc7CisKICAgICBhbGxvY2F0b3IucHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7CiAKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwpAQCAtODExLDEyICs3OTYsOSBAQCBzdGF0aWMgdm9p
ZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIH0KICAgICB9CiAKLSNpZiBFTkFCTEUo
V1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgQVNTRVJUKG5lZWRTZWNvbmRTY3JhdGNoKTsK
LSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgLy8gTXVzdCBh
bHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9u
IGl0c2VsZiByZXF1aXJlcyBpdAotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1
YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCB3cml0ZUJh
cnJpZXJPcGVyYXRpb24gPSBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJh
c2VHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY29weVdyaXRlQmFycmllck9wZXJhdGlvbjsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCkBAIC04MzIsNiArODE0LDcgQEAgc3RhdGljIHZvaWQg
ZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAgICAgICAg
ICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIGNvcHlXcml0ZUJh
cnJpZXJPcGVyYXRpb24gPSBTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmllcihzdHViSml0
LCBiYXNlR1BSLCAwLCAwLCBzY3JhdGNoR1BSMSwgbmV3U2l6ZSwgc2NyYXRjaEdQUjIsIHNjcmF0
Y2hHUFIzKTsKICAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CkBAIC04NDMsNiArODI2LDggQEAgc3RhdGljIHZv
aWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAgICAg
ICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHN0dWJKaXQu
YWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+
bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIC8vIFRPRE86
IEdldCB0aGUgcmVhbCBiYXNlIG9mIHRoZSBvbGQgQnV0dGVyZmx5LgorICAgICAgICAgICAgY29w
eVdyaXRlQmFycmllck9wZXJhdGlvbiA9IFNwZWN1bGF0aXZlSklUOjpjb3B5V3JpdGVCYXJyaWVy
KHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIzLCBvbGRTaXplLCBzY3JhdGNoR1BSMSwgbmV3
U2l6ZSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFI0KTsKICAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRj
aEdQUjEpOwogICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdl
LCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQogICAg
ICAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKQEAgLTkwOSw2
ICs4OTQsOSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgfQogICAg
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJs
b2NrKCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsod3JpdGVCYXJyaWVyT3BlcmF0aW9uLCBkZmdV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKTsKKyAgICBpZiAoc2NyYXRjaEdQUjFIYXNTdG9yYWdl
KQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNvcHlXcml0ZUJhcnJpZXJPcGVyYXRpb24sIGRm
Z0NvcHlXcml0ZUJhcnJpZXIpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvRG9uZSkpOwogICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkK
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNTU1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsMTcgKzI3NCwxNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2Fj
aGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcg
dmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRo
VGFyZ2V0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2Us
IEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0KQogewogICAgIAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9D
b21wYXJlOwogICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0g
bV9qaXQucGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKIAotICAgIHdyaXRlQmFycmllcihiYXNl
R1BSLCB2YWx1ZUdQUiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBz
Y3JhdGNoR1BSKTsKKyAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVXNl
LCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpOwogCiAgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRp
YmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAgICBtX2ppdC5jb252ZXJ0
aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMy
IHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFs
dWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDApKTsKKyAgICAgICAgbV9q
aXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICBKSVRDb21waWxlcjo6
RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTY0V2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIDApKTsK
IAogICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwogICAg
IApAQCAtMzE0LDcgKzMxNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQo
Q29kZU8KICAgICAgICAgICAgIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOwogICAg
IH0KICAgICBSZWdpc3RlclNldCBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVy
cygpOwotICAgIGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaEdQUik7CisgICAg
Y3VycmVudGx5VXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoR1BSMSk7CiAgICAgQVNTRVJUKGN1
cnJlbnRseVVzZWRSZWdpc3RlcnMuZ2V0KGJhc2VHUFIpKTsKICAgICBBU1NFUlQoY3VycmVudGx5
VXNlZFJlZ2lzdGVycy5nZXQodmFsdWVHUFIpKTsKICAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2Vz
cygKQEAgLTI2NzEsOCArMjY3MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYXJyYXlN
b2RlLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyAmJiBIZWFwOjppc1dyaXRlQmFycmllckVu
YWJsZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwot
ICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQz
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIo
YmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdw
cigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBjaGlsZDQpOwpAQCAtMjc0NSw4ICsyNzQ2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3
cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDIodGhpcyk7CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdw
cigpLCBjaGlsZDMsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsK
QEAgLTI4NDIsNyArMjg0NCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCiAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAogICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZVJlZywgT0JKRUNUX09GRlNFVE9GKEFyZ3VtZW50cywgbV9zbG93QXJndW1l
bnRzKSkpKTsKLSAgICAKKworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVl
UmVnLCBjaGlsZDMsIHNjcmF0Y2hSZWcsIHNjcmF0Y2gyUmVnKTsKKwogICAgICAgICAgICAgbV9q
aXQubW92ZShwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwogICAgICAgICAgICAgbV9qaXQubmVn
MzIoc2NyYXRjaDJSZWcpOwogICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2Ny
YXRjaDJSZWcsIHNjcmF0Y2gyUmVnKTsKQEAgLTI5NDYsNyArMjk1MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6SW50MzIgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
LSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNo
aWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3Rv
cmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZh
bHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTI5OTUsNyArMjk5OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgaWYg
KEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VH
UFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgICAgIHdy
aXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2guZ3By
KCksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwpAQCAtMzc1NCwxNCArMzc1OCwx
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHJlZ2lzdGVycyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2hSZWdpc3RlcjIodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3By
KCk7CiAgICAgICAgIEdQUlJlZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7CiAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hSZWdpc3Rlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaFJlZ2lzdGVyMi5ncHIoKTsKIAogICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVl
R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICB3cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZh
bHVlR1BSLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNj
cmF0Y2hHUFIpOworICAgICAgICB3cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlR1BSLCBub2Rl
LT5jaGlsZDMoKSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIpOwogICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzk1NywxMyArMzk2MywxMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG1faml0LmppdENv
ZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9qaXQuZ3Jh
cGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsKIAogICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhp
cyk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgCi0gICAg
ICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgLy8gTXVz
dCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0
aW9uIGl0c2VsZiByZXF1aXJlcyBpdAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUsIFdyaXRlQmFycmllckZv
ckdlbmVyaWNBY2Nlc3MpOwotI2VuZGlmCisgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCBu
b2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgc2NyYXRjaDEuZ3By
KCksIHNjcmF0Y2gyLmdwcigpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkubmV3U3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogICAgICAgICAKQEAgLTQwMTgsMTggKzQwMjMsMTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDIoKSk7Ci0jZW5kaWYKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIg
PSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
ICAgICAgICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgICAgICB3
cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMygpLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKKyAgICAgICAgd3JpdGVCYXJyaWVy
KGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDMoKSwgc2NyYXRjaDEuZ3ByKCks
IHNjcmF0Y2gyLmdwcigpKTsKIAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFj
Y2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCkBAIC00MDQyLDM2ICs0MDQ1LDM0IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFB1dEJ5SWQ6
IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwog
ICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7CiAgICAg
ICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAg
Y2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+
Y2hpbGQyKCksIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgbm9kZS0+aWRlbnRpZmllck51bWJl
cigpLCBOb3REaXJlY3QpOwogCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdp
biwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNoR1BSLCBub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7Ci0gICAgICAgIAotICAgICAgICBub1Jlc3Vs
dChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7
CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAg
ICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwogICAgICAg
ICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7Ci0KLSAgICAgICAg
Y2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+
Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsK
KyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQ
Uiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgbm9kZS0+aWRlbnRp
Zmllck51bWJlcigpLCBEaXJlY3QpOwogCi0gICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKQEAgLTQwODgsMTAgKzQwODksMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJh
cnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB3cml0ZUJhcnJp
ZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIoKSwg
bm9kZS0+Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVn
KTsKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDEoKSwgc2NyYXRjaDEuZ3ByKCks
IHNjcmF0Y2gyLmdwcigpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9qaXQuc3Rv
cmU2NCh2YWx1ZS5ncHIoKSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpOwpAQCAtNDM3Miw5ICs0
MzczLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKIAog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhY3RpdmF0aW9uVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhp
cyk7CiAgICAgICAgIEdQUlJlZyBhY3RpdmF0aW9uVmFsdWVHUFIgPSBhY3RpdmF0aW9uVmFsdWUu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGFjdGl2
YXRpb25WYWx1ZUdQUik7CiAKQEAgLTQzODUsMTMgKzQzODgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBmb3IgKGludCBpID0gc3ltYm9sVGFi
bGUtPmNhcHR1cmVTdGFydCgpOyBpIDwgY2FwdHVyZUVuZDsgKytpKSB7CiAgICAgICAgICAgICBt
X2ppdC5sb2FkNjQoCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoCi0gICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgaSAqIHNpemVvZihSZWdpc3RlcikpLCBzY3JhdGNoR1BSMSk7CiAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxLCBKSVRDb21waWxl
cjo6QWRkcmVzcygKICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGlvblZhbHVlR1BSLCByZWdp
c3RlcnNPZmZzZXQgKyBpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICB9Ci0gICAgICAg
IG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJzT2Zmc2V0KSwgYWN0aXZhdGlvblZh
bHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwg
SklUQ29tcGlsZXI6OkFkZHJlc3MoYWN0aXZhdGlvblZhbHVlR1BSLCBKU0FjdGl2YXRpb246Om9m
ZnNldE9mUmVnaXN0ZXJzKCkpKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihy
ZWdpc3RlcnNPZmZzZXQpLCBhY3RpdmF0aW9uVmFsdWVHUFIsIHNjcmF0Y2hHUFIxKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGFjdGl2
YXRpb25WYWx1ZUdQUiwgSlNBY3RpdmF0aW9uOjpvZmZzZXRPZlJlZ2lzdGVycygpKSk7CisgICAg
ICAgIHdyaXRlQmFycmllcihhY3RpdmF0aW9uVmFsdWVHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMik7CiAKICAgICAgICAgbm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7CiAgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzMsNjcgKzgz
MywyMDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSogbgogICAgIH0K
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiBq
aXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIsIFdyaXRl
QmFycmllclVzZUtpbmQgdXNlS2luZCkKK3N0YXRpYyBKSVRDb21waWxlcjo6SnVtcCBnZW5lcmlj
V3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIC8vIENvcHkgb3duZXIgdG8gc2NyYXRjaDEK
KyAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDEpOworICAgIC8vIENvcHkgb3duZXIgdG8gc2Ny
YXRjaDIKKyAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDIpOworCisgICAgLy8gTWFzayBzY3Jh
dGNoMSB0byBibG9jaworICAgIGppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDEpOworICAgIC8vIE1hc2sgc2NyYXRj
aDIgdG8gaW5kZXgKKyAgICBqaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
fk1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMik7CisKKyAgICAvLyBTaGlmdCBpbmRl
eAorICAgIGppdC5yc2hpZnQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMgKyA0KSwg
c2NyYXRjaDIpOworCisgICAgLy8gRW1pdCBsb2FkIGFuZCBicmFuY2gKKyAgICByZXR1cm4gaml0
LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBNYXJrZWRC
bG9jazo6b2Zmc2V0T2ZNYXJrcygpKSk7Cit9CisKK3N0YXRpYyBKSVRDb21waWxlcjo6SnVtcCBn
ZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBKU0NlbGwqIG93bmVyLCBHUFJS
ZWcgc2NyYXRjaDEsIEdQUlJlZyAvKnNjcmF0Y2gyKi8pCit7CisgICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKTsKKyAgICBzaXplX3QgbWFya0luZGV4
ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihvd25lcikgJiB+TWFya2VkQmxvY2s6OmJsb2Nr
TWFzaykgPj4gKDMgKyA0KTsKKyAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsgTWFya2VkQmxvY2s6
Om9mZnNldE9mTWFya3MoKSkgKyBtYXJrSW5kZXg7CisKKyAgICAvLyBFbWl0IGxvYWQgYW5kIGJy
YW5jaAorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGFkZHJlc3Mp
LCBzY3JhdGNoMSk7CisgICAgcmV0dXJuIGppdC5icmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6
WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEpKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIG9sZFN0b3JhZ2UsIHNpemVfdCBvbGRTaXplLCBH
UFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQg
PSBnZW5lcmljV3JpdGVCYXJyaWVyKGppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkKKyAgICAgICAgaml0LnB1c2goR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvd25lciwgb2xkU3RvcmFnZSwgVHJ1c3RlZElt
bTMyKG9sZFNpemUpLCBuZXdTdG9yYWdlLCBUcnVzdGVkSW1tMzIobmV3U2l6ZSkpOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBqaXQucG9wKEdQ
UkluZm86OnRvUmVnaXN0ZXIoaSkpOworCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZq
aXQpOworICAgIHJldHVybiBjYWxsOworfQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBTcGVjdWxh
dGl2ZUpJVDo6Y29weVdyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVy
LCB2b2lkKiBvbGRTdG9yYWdlLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1N0b3JhZ2UsIHNp
emVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmll
cihqaXQsIG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGppdC5w
dXNoKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUob3duZXIsIFRydXN0ZWRJbW1QdHIob2xkU3RvcmFnZSksIFRydXN0ZWRJbW0zMihv
bGRTaXplKSwgbmV3U3RvcmFnZSwgVHJ1c3RlZEltbTMyKG5ld1NpemUpKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgaml0LnBvcChHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpKTsKKworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmaml0KTsK
KyAgICByZXR1cm4gY2FsbDsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFy
cmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBvbGRTdG9yYWdlLCBzaXplX3Qgb2xkU2l6ZSwgR1BS
UmVnIG5ld1N0b3JhZ2UsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0g
Z2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisK
KyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKGRmZ0NvcHlXcml0ZUJhcnJpZXIsIG93bmVyLCBvbGRTdG9yYWdlLCBvbGRTaXplLCBu
ZXdTdG9yYWdlLCBuZXdTaXplKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRH
UFJSZWcpOworICAgIC8vIE5lZWQgdG8gcmVsb2FkIHRoZSBidXR0ZXJmbHkgcG9pbnRlciBzaW5j
ZSBmaWxsaW5nIHdvbid0IHJlbG9hZCBpdCBzaW5jZSBpdCdzIGEgdGVtcG9yYXJ5LgorICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3duZXIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIG5ld1N0b3JhZ2UpOworCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5s
aW5rKCZtX2ppdCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJhcnJpZXIo
R1BSUmVnIG93bmVyLCB2b2lkKiBvbGRTdG9yYWdlLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5l
d1N0b3JhZ2UsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
MikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJp
Y1dyaXRlQmFycmllcihtX2ppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9u
KGRmZ0NvcHlXcml0ZUJhcnJpZXIsIG93bmVyLCBvbGRTdG9yYWdlLCBvbGRTaXplLCBuZXdTdG9y
YWdlLCBuZXdTaXplKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcp
OworICAgIC8vIE5lZWQgdG8gcmVsb2FkIHRoZSBidXR0ZXJmbHkgcG9pbnRlciBzaW5jZSBmaWxs
aW5nIHdvbid0IHJlbG9hZCBpdCBzaW5jZSBpdCdzIGEgdGVtcG9yYXJ5LgorICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3duZXIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIG5ld1N0b3JhZ2UpOworCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZt
X2ppdCk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJh
cnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGppdCk7Ci0gICAgVU5VU0VEX1BB
UkFNKG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJB
TShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwogICAgIEFTU0VSVChvd25l
ciAhPSBzY3JhdGNoMSk7CiAgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKLSAgICBBU1NF
UlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJP
RklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQoaml0LCBXcml0ZUJhcnJpZXJDb3Vu
dGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihqaXQsIG93bmVy
LCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGppdC5wdXNoKEdQUkluZm86
OnRvUmVnaXN0ZXIoaSkpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob3du
ZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KQorICAgICAg
ICBqaXQucG9wKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworCisgICAgZGVmaW5pdGVseU5vdE1h
cmtlZC5saW5rKCZqaXQpOworICAgIHJldHVybiBjYWxsOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2Ug
dmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVn
IG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsKLSAgICBVTlVT
RURfUEFSQU0ob3duZXJHUFIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7Ci0gICAgVU5V
U0VEX1BBUkFNKHNjcmF0Y2gxKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAgIFVO
VVNFRF9QQVJBTSh1c2VLaW5kKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90
TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBz
Y3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsK
KyAgICBjYWxsT3BlcmF0aW9uKGRmZ1VuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93bmVyR1BS
KTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisjaWZuZGVm
IE5ERUJVRyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvd25lck5vdE51bGwgPSBtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG93bmVyR1BSKTsKKyAgICBt
X2ppdC5icmVha3BvaW50KCk7CisgICAgb3duZXJOb3ROdWxsLmxpbmsoJm1faml0KTsKKyNlbmRp
ZgorCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7Cit9CiAKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQ
UiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CiAg
ICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlVXNlLm5vZGUoKSkpCiAgICAgICAgIHJldHVybjsK
IAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6
ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VL
aW5kKSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOworICAgIGlmICghaXNLbm93
bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNo
VGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBn
ZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsK
KworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIGNhbGxP
cGVyYXRpb24oZGZnV3JpdGVCYXJyaWVyLCBvd25lckdQUiwgdmFsdWVHUFIpOworICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisKKyNpZm5kZWYgTkRFQlVHIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG93bmVyTm90TnVsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3duZXJHUFIpOworICAgIG1faml0LmJyZWFrcG9pbnQo
KTsKKyAgICBvd25lck5vdE51bGwubGluaygmbV9qaXQpOworI2VuZGlmCisKKyNpZm5kZWYgTkRF
QlVHCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdmFsdWVOb3ROdWxsID0gbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUik7CisgICAgbV9qaXQuYnJl
YWtwb2ludCgpOworICAgIHZhbHVlTm90TnVsbC5saW5rKCZtX2ppdCk7CiAjZW5kaWYKKworICAg
IGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOworICAgIGlmICghaXNLbm93bkNlbGwo
dmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxs
KiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcg
b3duZXJHUFIsIEpTQ2VsbCogdmFsdWUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gy
KQogewotICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
Mik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotICAgIAogICAgIGlmIChIZWFwOjppc01h
cmtlZCh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJp
ZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVy
R1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
SW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihkZmdXcml0ZUJhcnJpZXIsIG93bmVy
R1BSLCB2YWx1ZSk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsK
KworI2lmbmRlZiBOREVCVUcKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvd25lck5vdE51bGwg
PSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG93bmVyR1BSKTsK
KyAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgb3duZXJOb3ROdWxsLmxpbmsoJm1faml0KTsK
ICNlbmRpZgorCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFs
dWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVn
IHNjcmF0Y2gpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKIHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXIpOwotICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZUdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotICAgIFVOVVNFRF9QQVJB
TSh1c2VLaW5kKTsKLQogICAgIGlmIChpc0tub3duTm90Q2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQog
ICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0g
ICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChtX2ppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6Ompp
dENvdW50ZXJGb3IodXNlS2luZCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsK
KyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlzTm90Q2Vs
bCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5pdGVs
eU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVyLCBzY3JhdGNoMSwg
c2NyYXRjaDIpOworCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7
CisgICAgY2FsbE9wZXJhdGlvbihkZmdXcml0ZUJhcnJpZXIsIG93bmVyLCB2YWx1ZUdQUik7Cisg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKworI2lmbmRlZiBOREVC
VUcKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB2YWx1ZU5vdE51bGwgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSKTsKKyAgICBtX2ppdC5icmVh
a3BvaW50KCk7CisgICAgdmFsdWVOb3ROdWxsLmxpbmsoJm1faml0KTsKICNlbmRpZgorCisgICAg
ZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7CisgICAgaWYgKCFpc0tub3duQ2VsbCh2
YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9kZSkKQEAgLTQzMTIsNiArNDQ0
Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhp
cyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAgICAKICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOwpAQCAtNDMyOSw2ICs0NDY2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQ
UikpOwogICAgICAgICAKICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKKyAgICBj
b3B5V3JpdGVCYXJyaWVyKGJhc2VHUFIsIDAsIDAsIHNjcmF0Y2hHUFIsIGluaXRpYWxPdXRPZkxp
bmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSwgc2NyYXRjaDIuZ3ByKCksIHNjcmF0Y2gzLmdw
cigpKTsKICAgICAgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSLCBub2RlKTsKIH0K
QEAgLTQzNTcsNiArNDQ5NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9j
YXRlUHIKICAgICBTdG9yYWdlT3BlcmFuZCBvbGRTdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsKICAgICAgICAg
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBvbGRTdG9yYWdl
R1BSID0gb2xkU3RvcmFnZS5ncHIoKTsKQEAgLTQzNzYsNyArNDUxNSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIyLCAtKG9mZnNldCArIHNp
emVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CiAgICAgfQogICAgIG1faml0LnN0b3Jl
UHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAKKyAgICBjb3B5V3JpdGVCYXJyaWVyKGJhc2VHUFIs
IG9sZFN0b3JhZ2VHUFIsIG9sZFNpemUsIHNjcmF0Y2hHUFIyLCBuZXdTaXplLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaDMuZ3ByKCkpOworCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwgbm9k
ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDExICszMTksMTYgQEAg
cHVibGljOgogICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25lckdQUiwgR1BSUmVn
IHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllclVzZUtpbmQpOwot
Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIs
IEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9
IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOwotICAg
IHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVC
YXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJV
c2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY29weVdyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgb3duZXIsIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUsIEdQUlJlZyBuZXdQdHIsIHNp
emVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNvcHlXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiwg
R1BSUmVnIG93bmVyLCBHUFJSZWcgb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1B0
ciwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgd3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYs
IEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworCisgICAg
dm9pZCBjb3B5V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIG9sZFB0ciwgc2l6
ZV90IG9sZFNpemUsIEdQUlJlZyBuZXdQdHIsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRj
aDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCBjb3B5V3JpdGVCYXJyaWVyKEdQUlJlZyBv
d25lckdQUiwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1B0ciwgc2l6
ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lk
IHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyB2YWx1ZSwg
RWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZv
aWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgSlNDZWxsKiB2YWx1ZSwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcg
c2NyYXRjaDIpOwogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBw
cmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJl
ZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJ
bnZhbGlkR1BSUmVnKQogICAgIHsKQEAgLTcyNSw3ICs3MzAsNyBAQCBwdWJsaWM6CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcg
YmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGls
bFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7Ci0gICAgdm9pZCBjYWNoZWRQdXRCeUlkKENv
ZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2UsIEdQUlJl
ZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOworICAgIHZv
aWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHZhbHVlLCBF
ZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1Bh
dGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JO
b25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJz
TW9kZSA9IE5lZWRUb1NwaWxsKTsKICAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwg
R1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBh
eWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9
IEpJVENvbXBpbGVyOjpKdW1wKCkpOwpAQCAtMTAyMCw2ICsxMDI1LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ1BTUFMgb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHNpemVfdCBhcmczLCBHUFJSZWcgYXJnNCwgc2l6ZV90IGFy
ZzUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMiwgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0LCBUcnVzdGVkSW1tMzIoYXJnNSkpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwor
ICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VDUFNQUyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCB2b2lkKiBhcmcyLCBzaXplX3QgYXJnMywg
R1BSUmVnIGFyZzQsIHNpemVfdCBhcmc1KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMiksIFRydXN0ZWRJbW0z
MihhcmczKSwgYXJnNCwgVHJ1c3RlZEltbTMyKGFyZzUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNzSnNzIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTA1NCw2
ICsxMDY5LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CisKICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQ0ljZiBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpKTsKQEAgLTEw
NzIsNiArMTA4OCwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Igb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgSlNDZWxs
KiBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKworICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgSlNDZWxsKiBh
cmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9CisKICAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNw
cAkocmV2aXNpb24gMTU1NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgQ29u
c2VydmF0aXZlUm9vdHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaywgSlND
OjpPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbj4KIGlubGluZSB2b2lkIENvbnNlcnZhdGl2
ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVy
LCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgbWFya0hvb2subWFyayhwKTsKQEAgLTkwLDcg
KzkwLDcgQEAgaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZAogICAgIG1f
cm9vdHNbbV9zaXplKytdID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4ocCk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIE1hcmtIb29rPgordGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2ssIEpTQzo6T3Bl
cmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24+CiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5l
cmljQWRkU3Bhbih2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBNYXJrSG9vayYgbWFya0hvb2spCiB7
CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBDb25z
ZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogCiAgICAgVGlueUJsb29tRmlsdGVyIGZp
bHRlciA9IG1fYmxvY2tzLT5maWx0ZXIoKTsgLy8gTWFrZSBhIGxvY2FsIGNvcHkgb2YgZmlsdGVy
IHRvIHNob3cgdGhlIGNvbXBpbGVyIGl0IHdvbid0IGFsaWFzLCBhbmQgY2FuIGJlIHJlZ2lzdGVy
LWFsbG9jYXRlZC4KICAgICBmb3IgKGNoYXIqKiBpdCA9IHN0YXRpY19jYXN0PGNoYXIqKj4oYmVn
aW4pOyBpdCAhPSBzdGF0aWNfY2FzdDxjaGFyKio+KGVuZCk7ICsraXQpCi0gICAgICAgIGdlbmVy
aWNBZGRQb2ludGVyKCppdCwgZmlsdGVyLCBtYXJrSG9vayk7CisgICAgICAgIGdlbmVyaWNBZGRQ
b2ludGVyPE1hcmtIb29rLCBvcGVyYXRpb24+KCppdCwgZmlsdGVyLCBtYXJrSG9vayk7CiB9CiAK
IGNsYXNzIER1bW15TWFya0hvb2sgewpAQCAtMTEwLDEzICsxMTAsMjEgQEAgcHVibGljOgogCiB2
b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCkKIHsKKyAg
ICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiA9IG1fY29waWVkU3BhY2UtPmhlYXAoKS0+
b3BlcmF0aW9uSW5Qcm9ncmVzcygpOwogICAgIER1bW15TWFya0hvb2sgZHVtbXk7Ci0gICAgZ2Vu
ZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgZHVtbXkpOworICAgIGlmIChvcGVyYXRpb24gPT0gRnVs
bENvbGxlY3Rpb24pCisgICAgICAgIGdlbmVyaWNBZGRTcGFuPER1bW15TWFya0hvb2ssIEZ1bGxD
b2xsZWN0aW9uPihiZWdpbiwgZW5kLCBkdW1teSk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmlj
QWRkU3BhbjxEdW1teU1hcmtIb29rLCBFZGVuQ29sbGVjdGlvbj4oYmVnaW4sIGVuZCwgZHVtbXkp
OwogfQogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVu
ZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcykKIHsKLSAgICBnZW5lcmljQWRk
U3BhbihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMpOworICAgIE9wZXJhdGlvbkluUHJvZ3Jl
c3Mgb3BlcmF0aW9uID0gbV9jb3BpZWRTcGFjZS0+aGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNz
KCk7CisgICAgaWYgKG9wZXJhdGlvbiA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgZ2VuZXJp
Y0FkZFNwYW48SklUU3R1YlJvdXRpbmVTZXQsIEZ1bGxDb2xsZWN0aW9uPihiZWdpbiwgZW5kLCBq
aXRTdHViUm91dGluZXMpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48SklUU3R1
YlJvdXRpbmVTZXQsIEVkZW5Db2xsZWN0aW9uPihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgpAQCAtMTQyLDggKzE1MCwx
MiBAQCBwcml2YXRlOgogdm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKAogICAgIHZvaWQqIGJl
Z2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVC
bG9ja1NldCYgY29kZUJsb2NrcykKIHsKKyAgICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlv
biA9IG1fY29waWVkU3BhY2UtPmhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpOwogICAgIENv
bXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBDb2RlQmxvY2tTZXQ+IG1hcmtIb29r
KGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4s
IGVuZCwgbWFya0hvb2spOworICAgIGlmIChvcGVyYXRpb24gPT0gRnVsbENvbGxlY3Rpb24pCisg
ICAgICAgIGdlbmVyaWNBZGRTcGFuPENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0
LCBDb2RlQmxvY2tTZXQ+LCBGdWxsQ29sbGVjdGlvbj4oYmVnaW4sIGVuZCwgbWFya0hvb2spOwor
ICAgIGVsc2UKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48Q29tcG9zaXRlTWFya0hvb2s8SklUU3R1
YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4sIEVkZW5Db2xsZWN0aW9uPihiZWdpbiwgZW5kLCBt
YXJrSG9vayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCShyZXZpc2lvbiAxNTU1ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MywxMCArNTMsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGlubGluZUNhcGFjaXR5ID0gMTI4OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5s
aW5lQ2FwYWNpdHkgPSA4MTkyIC8gc2l6ZW9mKEpTQ2VsbCopOwogICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcmtIb29rPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rLCBKU0M6
Ok9wZXJhdGlvbkluUHJvZ3Jlc3M+CiAgICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwg
VGlueUJsb29tRmlsdGVyLCBNYXJrSG9vayYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFy
a0hvb2s+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2ssIEpTQzo6T3BlcmF0aW9uSW5Q
cm9ncmVzcz4KICAgICB2b2lkIGdlbmVyaWNBZGRTcGFuKHZvaWQqLCB2b2lkKiBlbmQsIE1hcmtI
b29rJik7CiAgICAgCiAgICAgdm9pZCBncm93KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMTU1NTg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgZmFzdFBhdGhTaG91bGRTdWNj
ZWVkKHNpemVfdCBieXRlcykgY29uc3Q7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGUo
c2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKTsKKyAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxv
Y2F0ZUR1cmluZ0NvcHlpbmcoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKTsKICAgICBDaGVj
a2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlKHZvaWQgKm9sZFB0ciwgc2l6ZV90IG9sZEJ5dGVzLCBz
aXplX3QgbmV3Qnl0ZXMpOwogICAgIHZvaWQqIGZvcmNlQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKTsK
ICAgICBDb3BpZWRCbG9jayogcmVzZXRDdXJyZW50QmxvY2soKTsKQEAgLTkzLDYgKzk0LDE0IEBA
IGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnQKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAoraW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGVEdXJpbmdDb3B5aW5nKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKK3sKKyAgICBpZiAo
IXRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
bV9jdXJyZW50QmxvY2stPnJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcoYnl0ZXMpOworICAg
IHJldHVybiB0cnVlOworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVkQWxsb2NhdG9y
Ojp0cnlSZWFsbG9jYXRlKAogICAgIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZEJ5dGVzLCBzaXpl
X3QgbmV3Qnl0ZXMpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJs
b2NrLmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEyICs0NywxNiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGVOb1plcm9GaWxsKERlYWRCbG9jayopOwogCiAg
ICAgdm9pZCBwaW4oKTsKKyAgICB2b2lkIHVucGluKCk7CiAgICAgYm9vbCBpc1Bpbm5lZCgpOwog
CisgICAgYm9vbCBpc09sZCgpOwogICAgIGJvb2wgaXNPdmVyc2l6ZSgpOwogCiAgICAgdW5zaWdu
ZWQgbGl2ZUJ5dGVzKCk7CiAgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMoSlNDZWxsKiwgQ29weVRv
a2VuLCB1bnNpZ25lZCk7CisgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdXcml0ZUJhcnJp
ZXIodW5zaWduZWQpOworICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVzRHVyaW5nQ29weWluZyh1bnNp
Z25lZCk7CiAgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsKICAgICB2b2lkIGRpZEV2YWN1YXRlQnl0
ZXModW5zaWduZWQpOwogICAgIGJvb2wgc2hvdWxkRXZhY3VhdGUoKTsKQEAgLTk0LDcgKzk4LDgg
QEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q29weVdvcmtMaXN0PiBtX3dvcmtMaXN0OwogCiAgICAg
c2l6ZV90IG1fcmVtYWluaW5nOwotICAgIHVpbnRwdHJfdCBtX2lzUGlubmVkOworICAgIGJvb2wg
bV9pc1Bpbm5lZCA6IDE7CisgICAgYm9vbCBtX2lzT2xkIDogMTsKICAgICB1bnNpZ25lZCBtX2xp
dmVCeXRlczsKICNpZm5kZWYgTkRFQlVHCiAgICAgdW5zaWduZWQgbV9saXZlT2JqZWN0czsKQEAg
LTEwNCw3ICsxMDksNyBAQCBwcml2YXRlOgogaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRCbG9j
azo6Y3JlYXRlTm9aZXJvRmlsbChEZWFkQmxvY2sqIGJsb2NrKQogewogICAgIFJlZ2lvbiogcmVn
aW9uID0gYmxvY2stPnJlZ2lvbigpOwotICAgIHJldHVybiBuZXcoTm90TnVsbCwgYmxvY2spIENv
cGllZEJsb2NrKHJlZ2lvbik7CisgICAgcmV0dXJuIG5ldyAoTm90TnVsbCwgYmxvY2spIENvcGll
ZEJsb2NrKHJlZ2lvbik7CiB9CiAKIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkQmxvY2s6OmNy
ZWF0ZShEZWFkQmxvY2sqIGJsb2NrKQpAQCAtMTMwLDYgKzEzNSw3IEBAIGlubGluZSBDb3BpZWRC
bG9jazo6Q29waWVkQmxvY2soUmVnaW9uKiAKICAgICA6IEhlYXBCbG9jazxDb3BpZWRCbG9jaz4o
cmVnaW9uKQogICAgICwgbV9yZW1haW5pbmcocGF5bG9hZENhcGFjaXR5KCkpCiAgICAgLCBtX2lz
UGlubmVkKGZhbHNlKQorICAgICwgbV9pc09sZChmYWxzZSkKICAgICAsIG1fbGl2ZUJ5dGVzKDAp
CiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9saXZlT2JqZWN0cygwKQpAQCAtMTU2LDYgKzE2Miw3
IEBAIGlubGluZSB2b2lkIENvcGllZEJsb2NrOjpkaWRTdXJ2aXZlR0MoKQogaW5saW5lIHZvaWQg
Q29waWVkQmxvY2s6OmRpZEV2YWN1YXRlQnl0ZXModW5zaWduZWQgYnl0ZXMpCiB7CiAgICAgQVNT
RVJUKG1fbGl2ZUJ5dGVzID49IGJ5dGVzKTsKKyAgICBBU1NFUlQobV9saXZlT2JqZWN0cyk7CiAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIG1fbGl2ZUJ5dGVzIC09IGJ5dGVzOwogI2lmbmRl
ZiBOREVCVUcKQEAgLTE3OCwxNiArMTg1LDI3IEBAIGlubGluZSBib29sIENvcGllZEJsb2NrOjpz
aG91bGRFdmFjdWF0ZSgKIAogaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnBpbigpCiB7CisgICAg
bV9pc09sZCA9IHRydWU7CiAgICAgbV9pc1Bpbm5lZCA9IHRydWU7CiAgICAgaWYgKG1fd29ya0xp
c3QpCiAgICAgICAgIG1fd29ya0xpc3QuY2xlYXIoKTsKIH0KIAoraW5saW5lIHZvaWQgQ29waWVk
QmxvY2s6OnVucGluKCkKK3sKKyAgICBtX2lzUGlubmVkID0gZmFsc2U7Cit9CisKIGlubGluZSBi
b29sIENvcGllZEJsb2NrOjppc1Bpbm5lZCgpCiB7CiAgICAgcmV0dXJuIG1faXNQaW5uZWQ7CiB9
CiAKK2lubGluZSBib29sIENvcGllZEJsb2NrOjppc09sZCgpCit7CisgICAgcmV0dXJuIG1faXNP
bGQ7Cit9CisKIGlubGluZSBib29sIENvcGllZEJsb2NrOjppc092ZXJzaXplKCkKIHsKICAgICBy
ZXR1cm4gcmVnaW9uKCktPmlzQ3VzdG9tU2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1NTU4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxMSArMzYsMTggQEAgaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9y
dExpdmVCeXRlcwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICBTcGluTG9ja0hvbGRlciBs
b2NrZXIoJm1fd29ya0xpc3RMb2NrKTsKICNlbmRpZgotI2lmbmRlZiBOREVCVUcKKwogICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKyNpZm5kZWYgTkRFQlVHCiAgICAgbV9saXZlT2JqZWN0cysrOwog
I2VuZGlmCiAgICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgIG1faXNPbGQgPSB0cnVlOworICAgIEFTU0VSVChtX2xpdmVCeXRlcyA8PSBDb3BpZWRC
bG9jazo6YmxvY2tTaXplKTsKKworICAgIGlmIChpc1Bpbm5lZCgpKQorICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIXNob3VsZEV2YWN1YXRlKCkpIHsKICAgICAgICAgcGluKCk7CkBAIC01Myw2
ICs2MCwzMCBAQCBpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzCiAgICAg
bV93b3JrTGlzdC0+YXBwZW5kKENvcHlXb3JrbGlzdEl0ZW0ob3duZXIsIHRva2VuKSk7CiB9CiAK
K2lubGluZSB2b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXNEdXJpbmdXcml0ZUJhcnJp
ZXIodW5zaWduZWQgYnl0ZXMpCit7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworI2lmbmRlZiBO
REVCVUcKKyAgICBtX2xpdmVPYmplY3RzKys7CisjZW5kaWYKKyAgICBtX2xpdmVCeXRlcyArPSBi
eXRlczsKKyAgICBBU1NFUlQoISFtX2xpdmVCeXRlcyA9PSAhIW1fbGl2ZU9iamVjdHMpOworICAg
IEFTU0VSVChtX2xpdmVCeXRlcyA8PSBDb3BpZWRCbG9jazo6YmxvY2tTaXplKTsKK30KKworaW5s
aW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcodW5zaWdu
ZWQgYnl0ZXMpCit7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIC8vIFRoaXMgZG9lc24n
dCBuZWVkIHRvIGJlIGxvY2tlZCBiZWNhdXNlIHRoZSB0aHJlYWQgdGhhdCBjYWxscyB0aGlzIGZ1
bmN0aW9uIG93bnMgdGhlIGN1cnJlbnQgYmxvY2suCisgICAgbV9pc09sZCA9IHRydWU7CisjaWZu
ZGVmIE5ERUJVRworICAgIG1fbGl2ZU9iamVjdHMrKzsKKyNlbmRpZgorICAgIG1fbGl2ZUJ5dGVz
ICs9IGJ5dGVzOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBBU1NFUlQobV9saXZlQnl0
ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gQ29waWVkQmxvY2tJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgx
LDYgKzE4MSwxNyBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllCiAg
ICAgfQogfQogCit2b2lkIENvcGllZFNwYWNlOjpkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCkKK3sK
KyAgICBBU1NFUlQoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rp
b24pOworICAgIEFTU0VSVChtX2Zyb21TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICBmb3IgKENvcGll
ZEJsb2NrKiBibG9jayA9IG1fdG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+
bmV4dCgpKQorICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7CisKKyAgICBmb3IgKENvcGll
ZEJsb2NrKiBibG9jayA9IG1fb3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBi
bG9jay0+bmV4dCgpKQorICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7Cit9CisKIHZvaWQg
Q29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKIHsKICAgICBzdGQ6OnN3YXAobV9mcm9tU3Bh
Y2UsIG1fdG9TcGFjZSk7CkBAIC0xOTcsNiArMjA4LDcgQEAgdm9pZCBDb3BpZWRTcGFjZTo6c3Rh
cnRlZENvcHlpbmcoKQogICAgICAgICAgICAgcmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChibG9jay0+
bGl2ZUJ5dGVzKCkgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7CiAgICAgICAgIHRvdGFsTGl2
ZUJ5dGVzICs9IGJsb2NrLT5saXZlQnl0ZXMoKTsKICAgICAgICAgdG90YWxVc2FibGVCeXRlcyAr
PSBibG9jay0+cGF5bG9hZENhcGFjaXR5KCk7CiAgICAgfQpAQCAtMjA4LDcgKzIyMCw2IEBAIHZv
aWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKICAgICAgICAgICAgIG1fYmxvY2tGaWx0
ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICAgICAgICAgIHRvdGFs
TGl2ZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKICAgICAgICAgICAgIHRvdGFs
VXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwotICAgICAgICAgICAgYmxv
Y2stPmRpZFN1cnZpdmVHQygpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9vdmVy
c2l6ZUJsb2Nrcy5yZW1vdmUoYmxvY2spOwogICAgICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUo
YmxvY2spOwpAQCAtMjE5LDcgKzIzMCw3IEBAIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5
aW5nKCkKIAogICAgIGRvdWJsZSBtYXJrZWRTcGFjZUJ5dGVzID0gbV9oZWFwLT5vYmplY3RTcGFj
ZSgpLmNhcGFjaXR5KCk7CiAgICAgZG91YmxlIHRvdGFsRnJhZ21lbnRhdGlvbiA9ICgoZG91Ymxl
KXRvdGFsTGl2ZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcykgLyAoKGRvdWJsZSl0b3RhbFVzYWJs
ZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcyk7Ci0gICAgbV9zaG91bGREb0NvcHlQaGFzZSA9IHRv
dGFsRnJhZ21lbnRhdGlvbiA8PSBPcHRpb25zOjptaW5IZWFwVXRpbGl6YXRpb24oKTsKKyAgICBt
X3Nob3VsZERvQ29weVBoYXNlID0gbV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVs
bENvbGxlY3Rpb24gJiYgdG90YWxGcmFnbWVudGF0aW9uIDw9IE9wdGlvbnM6Om1pbkhlYXBVdGls
aXphdGlvbigpOwogICAgIGlmICghbV9zaG91bGREb0NvcHlQaGFzZSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0yNDIsOSArMjUzLDYgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQog
CiAgICAgd2hpbGUgKCFtX2Zyb21TcGFjZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgIENvcGllZEJs
b2NrKiBibG9jayA9IG1fZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCk7Ci0gICAgICAgIC8vIEFsbCBu
b24tcGlubmVkIGJsb2NrcyBpbiBmcm9tLXNwYWNlIHNob3VsZCBoYXZlIGJlZW4gcmVjbGFpbWVk
IGFzIHRoZXkgd2VyZSBldmFjdWF0ZWQuCi0gICAgICAgIEFTU0VSVChibG9jay0+aXNQaW5uZWQo
KSB8fCAhbV9zaG91bGREb0NvcHlQaGFzZSk7Ci0gICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZlR0Mo
KTsKICAgICAgICAgLy8gV2UgZG9uJ3QgYWRkIHRoZSBibG9jayB0byB0aGUgYmxvY2tTZXQgYmVj
YXVzZSBpdCB3YXMgbmV2ZXIgcmVtb3ZlZC4KICAgICAgICAgQVNTRVJUKG1fYmxvY2tTZXQuY29u
dGFpbnMoYmxvY2spKTsKICAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2Fz
dDxCaXRzPihibG9jaykpOwpAQCAtMzE2LDQgKzMyNCw0NCBAQCBib29sIENvcGllZFNwYWNlOjpp
c1BhZ2VkT3V0KGRvdWJsZSBkZWFkCiAgICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVh
ZGxpbmUsICZtX292ZXJzaXplQmxvY2tzKTsKIH0KIAordm9pZCBDb3BpZWRTcGFjZTo6d2lsbEFi
YW5kb25TdG9yYWdlKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmICghcHRyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDb3BpZWRCbG9jayogb2xkQmxvY2sgPSBibG9ja0Zvcihw
dHIpOworCisgICAgaWYgKG9sZEJsb2NrLT5pc092ZXJzaXplKCkpIHsKKyAgICAgICAgb2xkQmxv
Y2stPnVucGluKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgYmxv
Y2sgaXMgb2xkIChpLmUuIGl0IGhhcyBhbHJlYWR5IGJlZW4gdGhyb3VnaCBhdCBsZWFzdCBvbmUg
Y29sbGVjdGlvbikKKyAgICAvLyB0aGVuIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBieXRlcyB3ZSBh
bGxvY2F0ZWQgaGVyZSBwcmV2aW91c2x5IHNvIHRoYXQgdGhlIGJsb2NrJ3MKKyAgICAvLyBtX2xp
dmVCeXRlcyBjb3VudCByZW1haW5zIGFjY3VyYXRlIGFjcm9zcyBFZGVuQ29sbGVjdGlvbnMuIAor
ICAgIC8vCisgICAgLy8gQWRkaXRpb25hbGx5LCBpZiB0aGUgYmxvY2sgaXMgdGhlIGJsb2NrIHRo
YXQgaXMgY3VycmVudGx5IGJlaW5nIGFsbG9jYXRlZCBvdXQgb2YsIAorICAgIC8vIHdlIG5lZWQg
dG8gc3VidHJhY3QgdGhlIGJ5dGVzIGZyb20gdGhlIGJsb2NrIGluIGNhc2Ugd2UgZW5kIHVwIHJl
YWxsb2MtaW5nIGluIHRoZSAKKyAgICAvLyBzYW1lIGJsb2NrLiAKKyAgICBpZiAob2xkQmxvY2st
PmlzT2xkKCkgfHwgb2xkQmxvY2sgPT0gbV9hbGxvY2F0b3IuY3VycmVudEJsb2NrKCkpCisgICAg
ICAgIG9sZEJsb2NrLT5kaWRFdmFjdWF0ZUJ5dGVzKGJ5dGVzKTsKK30KKwordm9pZCBDb3BpZWRT
cGFjZTo6ZGlkQXNzaWduU3RvcmFnZSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBB
U1NFUlQocHRyKTsKKyAgICBDb3BpZWRCbG9jayogbmV3QmxvY2sgPSBibG9ja0ZvcihwdHIpOwor
CisgICAgaWYgKG5ld0Jsb2NrLT5pc092ZXJzaXplKCkpIHsKKyAgICAgICAgbmV3QmxvY2stPnBp
bigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBub3RpZnkg
dGhlIGJsb2NrIG9mIGFkZGl0aW9uYWwgbGl2ZSBieXRlcyBpbiBjYXNlIG91ciBuZXh0IGNvbGxl
Y3Rpb24gCisgICAgLy8gaXMgYW4gRWRlbkNvbGxlY3Rpb24uIFRoaXMgZnVuY3Rpb24gb25seSBn
ZXRzIGNhbGxlZCB3aGVuIGFzc2lnbmluZyBDb3BpZWRTcGFjZQorICAgIC8vIGFsbG9jYXRpb25z
IHRvIG9sZC1nZW5lcmF0aW9uIG9iamVjdHMsIGJlY2F1c2Ugd2Ugd29uJ3QgcmVwb3J0IHRoZXNl
IG5ldyBieXRlcyBpbiB0aGUgCisgICAgLy8gQ29waWVkQmxvY2sgZHVyaW5nIG1hcmtpbmcgb2Yg
YW4gRWRlbkNvbGxlY3Rpb24uCisgICAgbmV3QmxvY2stPnJlcG9ydExpdmVCeXRlc0R1cmluZ1dy
aXRlQmFycmllcihieXRlcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShyZXZpc2lvbiAxNTU1ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBDb3BpZWRBbGxvY2F0b3ImIGFsbG9j
YXRvcigpIHsgcmV0dXJuIG1fYWxsb2NhdG9yOyB9CiAKKyAgICB2b2lkIGRpZFN0YXJ0RnVsbENv
bGxlY3Rpb24oKTsKKwogICAgIHZvaWQgc3RhcnRlZENvcHlpbmcoKTsKICAgICB2b2lkIGRvbmVD
b3B5aW5nKCk7CiAgICAgYm9vbCBpc0luQ29weVBoYXNlKCkgeyByZXR1cm4gbV9pbkNvcHlpbmdQ
aGFzZTsgfQpAQCAtODAsNiArODIsMTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIENvcGllZEJs
b2NrKiBibG9ja0Zvcih2b2lkKik7CiAKKyAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4g
bV9oZWFwOyB9CisKKyAgICB2b2lkIGNvcHlXcml0ZUJhcnJpZXIodm9pZCogb2xkUHRyLCBzaXpl
X3Qgb2xkU2l6ZSk7CisgICAgdm9pZCB3aWxsQWJhbmRvblN0b3JhZ2Uodm9pZCogb2xkUHRyLCBz
aXplX3Qgb2xkU2l6ZSk7CisgICAgdm9pZCBkaWRBc3NpZ25TdG9yYWdlKHZvaWQqIG5ld1B0ciwg
c2l6ZV90IG5ld1NpemUpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzT3ZlcnNpemUo
c2l6ZV90KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZp
c2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3
IEBAIGlubGluZSBib29sIENvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ28KIGlubGluZSB2b2lk
KiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgdm9p
ZCogcmVzdWx0ID0gMDsgLy8gQ29tcGlsZXJzIGRvbid0IHJlYWxpemUgdGhhdCB0aGlzIHdpbGwg
YmUgYXNzaWduZWQuCi0gICAgaWYgKExJS0VMWShtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0
ZShieXRlcywgJnJlc3VsdCkpKQorICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5
QWxsb2NhdGVEdXJpbmdDb3B5aW5nKGJ5dGVzLCAmcmVzdWx0KSkpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgCiAgICAgcmVzdWx0ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0ZXMpOwpA
QCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3Bh
CiAgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG5ld0Jsb2NrKTsKIAogICAg
IHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IG1fY29w
aWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KTsKKyAgICBDaGVja2VkQm9v
bGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGVEdXJpbmdDb3B5
aW5nKGJ5dGVzLCAmcmVzdWx0KTsKICAgICBBU1NFUlQoZGlkU3VjY2VlZCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAxNTU1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgeyAKIHN0YXRpYyBjb25zdCBzaXpl
X3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ugd2Vi
cGFnZS4KIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxIZWFwU2l6ZSA9IDEgKiBNQjsgLy8gTWF0
Y2hlcyB0aGUgRmFzdE1hbGxvYyBwZXItdGhyZWFkIGNhY2hlLgogCi0jZGVmaW5lIEVOQUJMRV9H
Q19MT0dHSU5HIDAKKyNkZWZpbmUgRU5BQkxFX0dDX0xPR0dJTkcgMQogCiAjaWYgRU5BQkxFKEdD
X0xPR0dJTkcpCiAjaWYgQ09NUElMRVIoQ0xBTkcpCkBAIC0xNTEsNiArMTUxLDggQEAgc3RydWN0
IEdDQ291bnRlciB7CiAjZGVmaW5lIEdDQ09VTlRFUihuYW1lLCB2YWx1ZSkgZG8geyB9IHdoaWxl
IChmYWxzZSkKICNlbmRpZgogCisjdW5kZWYgRU5BQkxFX0dDX0xPR0dJTkcKKwogc3RhdGljIGlu
bGluZSBzaXplX3QgbWluSGVhcFNpemUoSGVhcFR5cGUgaGVhcFR5cGUsIHNpemVfdCByYW1TaXpl
KQogewogICAgIGlmIChoZWFwVHlwZSA9PSBMYXJnZUhlYXApCkBAIC0xNjIsNyArMTY0LDcgQEAg
c3RhdGljIGlubGluZSBzaXplX3QgcHJvcG9ydGlvbmFsSGVhcFNpegogewogICAgIC8vIFRyeSB0
byBzdGF5IHVuZGVyIDEvMiBSQU0gc2l6ZSB0byBsZWF2ZSByb29tIGZvciB0aGUgRE9NLCByZW5k
ZXJpbmcsIG5ldHdvcmtpbmcsIGV0Yy4KICAgICBpZiAoaGVhcFNpemUgPCByYW1TaXplIC8gNCkK
LSAgICAgICAgcmV0dXJuIDIgKiBoZWFwU2l6ZTsKKyAgICAgICAgcmV0dXJuIDMgKiBoZWFwU2l6
ZTsKICAgICBpZiAoaGVhcFNpemUgPCByYW1TaXplIC8gMikKICAgICAgICAgcmV0dXJuIDEuNSAq
IGhlYXBTaXplOwogICAgIHJldHVybiAxLjI1ICogaGVhcFNpemU7CkBAIC0yNTAsOSArMjUyLDEy
IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fcmFtU2l6
ZShyYW1TaXplKCkpCiAgICAgLCBtX21pbkJ5dGVzUGVyQ3ljbGUobWluSGVhcFNpemUobV9oZWFw
VHlwZSwgbV9yYW1TaXplKSkKICAgICAsIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QoMCkKLSAgICAs
IG1fYnl0ZXNBbGxvY2F0ZWRMaW1pdChtX21pbkJ5dGVzUGVyQ3ljbGUpCi0gICAgLCBtX2J5dGVz
QWxsb2NhdGVkKDApCi0gICAgLCBtX2J5dGVzQWJhbmRvbmVkKDApCisgICAgLCBtX21heEhlYXBT
aXplKG1fbWluQnl0ZXNQZXJDeWNsZSkKKyAgICAsIG1fbWF4RWRlblNpemUobV9tYXhIZWFwU2l6
ZSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1fYnl0ZXNBYmFu
ZG9uZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbihmYWxzZSkK
KyAgICAsIG1fbnVtQ29sbGVjdGlvbnNTaW5jZUxhc3RGdWxsKDApCiAgICAgLCBtX3RvdGFsQnl0
ZXNWaXNpdGVkKDApCiAgICAgLCBtX3RvdGFsQnl0ZXNDb3BpZWQoMCkKICAgICAsIG1fb3BlcmF0
aW9uSW5Qcm9ncmVzcyhOb09wZXJhdGlvbikKQEAgLTMzMiw4ICszMzcsOCBAQCB2b2lkIEhlYXA6
OnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCkKIAogdm9pZCBIZWFwOjpkaWRBYmFuZG9uKHNp
emVfdCBieXRlcykKIHsKLSAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0
ZXNBbGxvY2F0ZWQgKyBtX2J5dGVzQWJhbmRvbmVkKTsKLSAgICBtX2J5dGVzQWJhbmRvbmVkICs9
IGJ5dGVzOworICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZSArIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUpOworICAgIG1fYnl0ZXNB
YmFuZG9uZWRUaGlzQ3ljbGUgKz0gYnl0ZXM7CiB9CiAKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1Zh
bHVlIGspCkBAIC00ODEsNiArNDg2LDE2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB2
aXNpdG9yLnNldHVwKCk7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcih2aXNp
dG9yKTsKIAorICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24p
IHsKKyAgICAgICAgR0NQSEFTRShBZGRPbGRHZW5lcmF0aW9uRXhlY3V0YWJsZVRvUmVtZW1iZXJl
ZFNldCk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gcmUtcHJvY2VzcyBhbGwgb2xkLWdlbmVyYXRp
b24gZXhlY3V0YWJsZXMgc28gdGhhdCB0aGV5CisgICAgICAgIC8vIHVwZGF0ZSB0aGVpciBDb2Rl
QmxvY2tzLgorICAgICAgICBhZGRPbGRHZW5lcmF0aW9uRXhlY3V0YWJsZXNUb1JlbWVtYmVyZWRT
ZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Y29uc3QgSlNDZWxsKj4gcmVtZW1iZXJlZFNldCht
X3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygpLnNpemUoKSk7CisgICAgbV9zbG90VmlzaXRvci5tYXJr
U3RhY2soKS5maWxsVmVjdG9yKHJlbWVtYmVyZWRTZXQpOworCiAgICAgewogICAgICAgICBQYXJh
bGxlbE1vZGVFbmFibGVyIGVuYWJsZXIodmlzaXRvcik7CiAKQEAgLTU4NCw2ICs1OTksMTcgQEAg
dm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgICAgICB9CiAgICAgfQogCisgICAgeworICAgICAg
ICBHQ1BIQVNFKENsZWFyUmVtZW1iZXJlZFNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZW1lbWJlcmVkU2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBK
U0NlbGwqIGNlbGwgPSByZW1lbWJlcmVkU2V0W2ldOworICAgICAgICAgICAgTWFya2VkQmxvY2s6
OmJsb2NrRm9yKGNlbGwpLT5jbGVhclJlbWVtYmVyZWQoY2VsbCk7CisgICAgICAgIH0KKy8qCisg
ICAgICAgIG1fb2JqZWN0U3BhY2UuY2xlYXJSZW1lbWJlcmVkU2V0KCk7CisqLworICAgIH0KKwog
ICAgIEdDQ09VTlRFUihWaXNpdGVkVmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOwog
CiAgICAgbV9zaGFyZWREYXRhLmRpZEZpbmlzaE1hcmtpbmcoKTsKQEAgLTU5NSw4ICs2MjEsMTQg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIE1BUktfTE9HX01FU1NBR0UyKCJcbk51bWJl
ciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgZnVsbCBHQyAlbHUsIHRvb2sgJS42ZiBzZWNzXG4iLCB2
aXNpdENvdW50LCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRp
bWUpOwogI2VuZGlmCiAKLSAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0gdmlzaXRvci5ieXRlc1Zp
c2l0ZWQoKTsKLSAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7
CisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikgeworICAg
ICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IHZpc2l0b3IuYnl0ZXNWaXNpdGVkKCk7CisgICAg
ICAgIG1fdG90YWxCeXRlc0NvcGllZCArPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVj
dGlvbik7CisgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSB2aXNpdG9yLmJ5dGVzVmlzaXRl
ZCgpOworICAgICAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7
CisgICAgfQogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVk
ICs9IG1fc2hhcmVkRGF0YS5jaGlsZEJ5dGVzVmlzaXRlZCgpOwogICAgIG1fdG90YWxCeXRlc0Nv
cGllZCArPSBtX3NoYXJlZERhdGEuY2hpbGRCeXRlc0NvcGllZCgpOwpAQCAtNzE1LDExICs3NDcs
MzUgQEAgdm9pZCBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpCiAgICAgbV9qaXRT
dHViUm91dGluZXMuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAK
K3ZvaWQgSGVhcDo6YWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9SZW1lbWJlcmVkU2V0KCkK
K3sKKyAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKTsK
KyAgICBmb3IgKEV4ZWN1dGFibGVCYXNlKiBjdXJyZW50ID0gbV9jb21waWxlZENvZGUuaGVhZCgp
OyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKSB7CisgICAgICAgIGlmIChpc01h
cmtlZChjdXJyZW50KSkKKyAgICAgICAgICAgIGFkZFRvUmVtZW1iZXJlZFNldChjdXJyZW50KTsK
KyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBBU1NFUlQoY2VsbCk7CisgICAgQVNTRVJUKCFPcHRpb25zOjplbmFibGVD
b25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJUKGlz
TWFya2VkKGNlbGwpKTsKKyAgICBpZiAobV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGlzSW5SZW1lbWJlcmVkU2V0KGNlbGwpKQorICAgICAgICByZXR1
cm47CisgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRSZW1lbWJlcmVkKGNlbGwp
OworICAgIG1fc2xvdFZpc2l0b3IudW5jb25kaXRpb25hbGx5QXBwZW5kKGNvbnN0X2Nhc3Q8SlND
ZWxsKj4oY2VsbCkpOworfQorCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKIHsKICAg
ICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBt
X3Nob3VsZERvRnVsbENvbGxlY3Rpb24gPSB0cnVlOworICAgIG1fc2xvdFZpc2l0b3IuY2xlYXJN
YXJrU3RhY2soKTsgCiAgICAgY29sbGVjdChEb1N3ZWVwKTsKIH0KIApAQCAtNzUxLDcgKzgwNywx
OCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgbV92bS0+
cHJlcGFyZVRvRGlzY2FyZENvZGUoKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsgLy8gRGVjcmVt
ZW50IGRlZmVyYWwgbWFudWFsbHksIHNvIHdlIGRvbid0IEdDIHdoZW4gd2UgZG8gc28sIHNpbmNl
IHdlIGFyZSBhbHJlYWR5IEdDaW5nIS4KICAgICAKLSAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
PSBDb2xsZWN0aW9uOworICAgIGlmIChtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24pIHsKKyAgICAg
ICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gRnVsbENvbGxlY3Rpb247CisgICAgICAgIG1fc2hv
dWxkRG9GdWxsQ29sbGVjdGlvbiA9IGZhbHNlOworICAgICAgICBtX251bUNvbGxlY3Rpb25zU2lu
Y2VMYXN0RnVsbCA9IDA7CisgICAgICAgIGRhdGFMb2dGKCJGdWxsQ29sbGVjdGlvblxuIik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gRWRlbkNvbGxlY3Rp
b247CisvLyAgICAgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gRnVsbENvbGxlY3Rpb247Cisg
ICAgICAgIG1fbnVtQ29sbGVjdGlvbnNTaW5jZUxhc3RGdWxsKys7CisgICAgICAgIGRhdGFMb2dG
KCJFZGVuQ29sbGVjdGlvblxuIik7CisvLyAgICAgICAgZGF0YUxvZ0YoIkZ1bGxDb2xsZWN0aW9u
XG4iKTsKKyAgICB9CiAgICAgbV9leHRyYU1lbW9yeVVzYWdlID0gMDsKIAogICAgIG1fYWN0aXZp
dHlDYWxsYmFjay0+d2lsbENvbGxlY3QoKTsKQEAgLTc2NSw2ICs4MzIsOCBAQCB2b2lkIEhlYXA6
OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgewogICAgICAgICBHQ1BIQVNFKENh
bm9uaWNhbGl6ZSk7CiAgICAgICAgIG1fb2JqZWN0U3BhY2UuY2Fub25pY2FsaXplQ2VsbExpdmVu
ZXNzRGF0YSgpOworICAgICAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xs
ZWN0aW9uKQorICAgICAgICAgICAgbV9zdG9yYWdlU3BhY2UuZGlkU3RhcnRGdWxsQ29sbGVjdGlv
bigpOwogICAgIH0KIAogICAgIG1hcmtSb290cygpOwpAQCAtODEyLDcgKzg4MSw3IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB9CiAKICAgICBtX3N3ZWVw
ZXItPnN0YXJ0U3dlZXBpbmcobV9ibG9ja1NuYXBzaG90KTsKLSAgICBtX2J5dGVzQWJhbmRvbmVk
ID0gMDsKKyAgICBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlID0gMDsKIAogICAgIHsKICAgICAg
ICAgR0NQSEFTRShSZXNldEFsbG9jYXRvcnMpOwpAQCAtODI1LDE5ICs4OTQsMjcgQEAgdm9pZCBI
ZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogCiAgICAgbV9zaXplQWZ0ZXJMYXN0
Q29sbGVjdCA9IGN1cnJlbnRIZWFwU2l6ZTsKIAotICAgIC8vIFRvIGF2b2lkIHBhdGhvbG9naWNh
bCBHQyBjaHVybiBpbiB2ZXJ5IHNtYWxsIGFuZCB2ZXJ5IGxhcmdlIGhlYXBzLCB3ZSBzZXQKLSAg
ICAvLyB0aGUgbmV3IGFsbG9jYXRpb24gbGltaXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2l6ZSBv
ZiB0aGUgaGVhcCwgd2l0aCBhCi0gICAgLy8gZml4ZWQgbWluaW11bS4KLSAgICBzaXplX3QgbWF4
SGVhcFNpemUgPSBtYXgobWluSGVhcFNpemUobV9oZWFwVHlwZSwgbV9yYW1TaXplKSwgcHJvcG9y
dGlvbmFsSGVhcFNpemUoY3VycmVudEhlYXBTaXplLCBtX3JhbVNpemUpKTsKLSAgICBtX2J5dGVz
QWxsb2NhdGVkTGltaXQgPSBtYXhIZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsKKyAgICBpZiAo
bV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKSB7CisgICAgICAgIC8vIFRv
IGF2b2lkIHBhdGhvbG9naWNhbCBHQyBjaHVybiBpbiB2ZXJ5IHNtYWxsIGFuZCB2ZXJ5IGxhcmdl
IGhlYXBzLCB3ZSBzZXQKKyAgICAgICAgLy8gdGhlIG5ldyBhbGxvY2F0aW9uIGxpbWl0IGJhc2Vk
IG9uIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAsIHdpdGggYQorICAgICAgICAvLyBmaXhl
ZCBtaW5pbXVtLgorICAgICAgICBtX21heEhlYXBTaXplID0gbWF4KG1pbkhlYXBTaXplKG1faGVh
cFR5cGUsIG1fcmFtU2l6ZSksIHByb3BvcnRpb25hbEhlYXBTaXplKGN1cnJlbnRIZWFwU2l6ZSwg
bV9yYW1TaXplKSk7CisgICAgfQorCisvKgorICAgIG1fbWF4RWRlblNpemUgPSBtX21heEhlYXBT
aXplOworKi8KKyAgICBtX21heEVkZW5TaXplID0gbV9tYXhIZWFwU2l6ZSAtIGN1cnJlbnRIZWFw
U2l6ZTsKKyAgICBpZiAoKGRvdWJsZSltX21heEVkZW5TaXplIC8gKGRvdWJsZSltX21heEhlYXBT
aXplIDwgKDEuMCAvIDMuMCkpCisgICAgICAgIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbiA9IHRy
dWU7CiAKLSAgICBtX2J5dGVzQWxsb2NhdGVkID0gMDsKKyAgICBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlID0gMDsKICAgICBkb3VibGUgbGFzdEdDRW5kVGltZSA9IFdURjo6bW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCk7CiAgICAgbV9sYXN0R0NMZW5ndGggPSBsYXN0R0NFbmRUaW1lIC0g
bGFzdEdDU3RhcnRUaW1lOwogCiAgICAgaWYgKE9wdGlvbnM6OnJlY29yZEdDUGF1c2VUaW1lcygp
KQogICAgICAgICBIZWFwU3RhdGlzdGljczo6cmVjb3JkR0NQYXVzZVRpbWUobGFzdEdDU3RhcnRU
aW1lLCBsYXN0R0NFbmRUaW1lKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPT0gQ29sbGVjdGlvbik7CisgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25JblBy
b2dyZXNzID09IEVkZW5Db2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxs
Q29sbGVjdGlvbik7CiAKICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsK
ICAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKQEAgLTg1NSwxMCArOTMyLDYgQEAgdm9pZCBI
ZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBkb3VibGUgYWZ0ZXIg
PSBjdXJyZW50VGltZU1TKCk7CiAgICAgICAgIGRhdGFMb2coYWZ0ZXIgLSBiZWZvcmUsICIgbXMs
ICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICIga2JdXG4iKTsKICAgICB9Ci0KLSNpZiBFTkFC
TEUoQUxMT0NBVElPTl9MT0dHSU5HKQotICAgIGRhdGFMb2dGKCJKU0MgR0MgZmluaXNoaW5nIGNv
bGxlY3Rpb24uXG4iKTsKLSNlbmRpZgogfQogCiBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2Fy
eU9yRGVmZXIoKQpAQCAtODY4LDcgKzk0MSw3IEBAIGJvb2wgSGVhcDo6Y29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcigpCiAgICAgCiAgICAgaWYgKCFzaG91bGRDb2xsZWN0KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKKwogICAgIGNvbGxlY3QoRG9Ob3RTd2VlcCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC05MDAsOCArOTczLDggQEAgdm9pZCBIZWFwOjpzZXRHYXJiYWdlQ29sbGVj
dGlvblRpbWVyRW5hYgogCiB2b2lkIEhlYXA6OmRpZEFsbG9jYXRlKHNpemVfdCBieXRlcykKIHsK
LSAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWQgKyBt
X2J5dGVzQWJhbmRvbmVkKTsKLSAgICBtX2J5dGVzQWxsb2NhdGVkICs9IGJ5dGVzOworICAgIG1f
YWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAr
IG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUpOworICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUgKz0gYnl0ZXM7CiB9CiAKIGJvb2wgSGVhcDo6aXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KQpA
QCAtOTc3LDQgKzEwNTAsNDEgQEAgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5k
R0NJZgogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIAordm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
TE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7CisgICAgaWYgKCFmcm9tIHx8
ICFpc01hcmtlZChmcm9tKSkKKyAgICAgICAgcmV0dXJuOworICAgIEhlYXA6OmhlYXAoZnJvbSkt
PmFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwordm9pZCBIZWFwOjp3aWxsQWJhbmRvblN0
b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxsLCB2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAg
ICBpZiAoIWNlbGwgfHwgIWlzTWFya2VkKGNlbGwpKQorICAgICAgICByZXR1cm47CisgICAgbV9z
dG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9yYWdlKHB0ciwgYnl0ZXMpOworfQorCit2b2lkIEhl
YXA6OmRpZEFzc2lnblN0b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxsLCB2b2lkKiBwdHIsIHNpemVf
dCBieXRlcykKK3sKKyAgICBpZiAoIWNlbGwgfHwgIWlzTWFya2VkKGNlbGwpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zdG9yYWdlU3BhY2UuZGlkQXNzaWduU3RvcmFnZShwdHIsIGJ5dGVzKTsK
K30KKwordm9pZCBIZWFwOjpjb3B5V3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgdm9p
ZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRyLCBzaXplX3QgbmV3U2l6ZSkK
K3sKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0X2Nhc3Q8SlNDZWxsKj4o
ZnJvbSkpOworCisgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghbmV3UHRyKSB7CisgICAgICAgIEFTU0VSVCghbmV3U2l6ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAoZnJvbSk7Cisg
ICAgaGVhcC0+bV9zdG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9yYWdlKG9sZFB0ciwgb2xkU2l6
ZSk7CisgICAgaGVhcC0+bV9zdG9yYWdlU3BhY2UuZGlkQXNzaWduU3RvcmFnZShuZXdQdHIsIG5l
d1NpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RDb3VudFNldDsKICAg
ICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlQ291bnRTZXQ7CiAKLSAg
ICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgQ29s
bGVjdGlvbiB9OworICAgIGVudW0gT3BlcmF0aW9uSW5Qcm9ncmVzcyB7IE5vT3BlcmF0aW9uLCBB
bGxvY2F0aW9uLCBGdWxsQ29sbGVjdGlvbiwgRWRlbkNvbGxlY3Rpb24gfTsKIAogICAgIGVudW0g
SGVhcFR5cGUgeyBTbWFsbEhlYXAsIExhcmdlSGVhcCB9OwogCkBAIC05MywxMCArOTMsMjIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29u
c3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgdm9pZCBzZXRNYXJrZWQoY29uc3Qgdm9pZCopOwog
CisgICAgICAgIHZvaWQgYWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9SZW1lbWJlcmVkU2V0
KCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2VsbCopOworICAgICAgICBib29sIGlzSW5SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2Vs
bCogY2VsbCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNlbGwpOworICAg
ICAgICAgICAgQVNTRVJUKCFPcHRpb25zOjplbmFibGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSk7CisgICAgICAgICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJsb2Nr
Rm9yKGNlbGwpLT5pc1JlbWVtYmVyZWQoY2VsbCk7CisgICAgICAgIH0KICAgICAgICAgc3RhdGlj
IGJvb2wgaXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqKTsKICAgICAgICAgc3RhdGlj
IHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwogICAgICAgICBzdGF0
aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7Ci0gICAgICAgIHN0
YXRpYyB1aW50OF90KiBhZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCopOworCisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlXcml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwg
dm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRyLCBzaXplX3QgbmV3U2l6
ZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd2lsbEFiYW5kb25TdG9yYWdlKGNv
bnN0IEpTQ2VsbCosIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUpOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGRpZEFzc2lnblN0b3JhZ2UoY29uc3QgSlNDZWxsKiwgdm9pZCog
bmV3UHRyLCBzaXplX3QgbmV3U2l6ZSk7CiAKICAgICAgICAgSGVhcChWTSosIEhlYXBUeXBlKTsK
ICAgICAgICAgfkhlYXAoKTsKQEAgLTExNCw2ICsxMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICAvLyB0cnVlIGlmIGNvbGxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MKICAgICAgICAgaW5s
aW5lIGJvb2wgaXNDb2xsZWN0aW5nKCk7CisgICAgICAgIGlubGluZSBPcGVyYXRpb25JblByb2dy
ZXNzIG9wZXJhdGlvbkluUHJvZ3Jlc3MoKSB7IHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3M7
IH0KICAgICAgICAgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9uIG9yIGNvbGxlY3Rpb24gaXMgaW4g
cHJvZ3Jlc3MKICAgICAgICAgaW5saW5lIGJvb2wgaXNCdXN5KCk7CiAgICAgICAgIApAQCAtMjQ2
LDkgKzI1OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3Qgc2l6ZV90IG1fbWlu
Qnl0ZXNQZXJDeWNsZTsKICAgICAgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3Q7CiAK
LSAgICAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWRMaW1pdDsKLSAgICAgICAgc2l6ZV90IG1f
Ynl0ZXNBbGxvY2F0ZWQ7Ci0gICAgICAgIHNpemVfdCBtX2J5dGVzQWJhbmRvbmVkOworICAgICAg
ICBzaXplX3QgbV9tYXhIZWFwU2l6ZTsKKyAgICAgICAgc2l6ZV90IG1fbWF4RWRlblNpemU7Cisg
ICAgICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAgICAgICBzaXplX3Qg
bV9ieXRlc0FiYW5kb25lZFRoaXNDeWNsZTsKKyAgICAgICAgYm9vbCBtX3Nob3VsZERvRnVsbENv
bGxlY3Rpb247CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ29sbGVjdGlvbnNTaW5jZUxhc3RGdWxs
OwogCiAgICAgICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNWaXNpdGVkOwogICAgICAgICBzaXplX3Qg
bV90b3RhbEJ5dGVzQ29waWVkOwpAQCAtMjY0LDYgKzI4MCw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBWVGFibGVTcGVjdHJ1bSBtX2Rlc3Ryb3llZFR5cGVDb3VudHM7CiAjZW5kaWYKIAor
ICAgICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1fY29weWluZ1JlbWVtYmVyZWRTZXQ7CisK
ICAgICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwogICAgICAgICBWZWN0
b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+KiA+IG1f
dGVtcFNvcnRpbmdWZWN0b3JzOwogICAgICAgICBPd25QdHI8SGFzaFNldDxNYXJrZWRBcmd1bWVu
dEJ1ZmZlcio+ID4gbV9tYXJrTGlzdFNldDsKQEAgLTMxMyw4ICszMzEsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgaWYgKGlzRGVmZXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBtX2J5dGVzQWxsb2NhdGVkID4gT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpICYmIG1faXNT
YWZlVG9Db2xsZWN0ICYmIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbjsKLSAg
ICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQgPiBtX2J5dGVzQWxsb2NhdGVkTGltaXQgJiYg
bV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9u
OworICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBPcHRpb25z
OjpnY01heEhlYXBTaXplKCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblBy
b2dyZXNzID09IE5vT3BlcmF0aW9uOworICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSA+IG1fbWF4RWRlblNpemUgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRp
b25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uOwogICAgIH0KIAogICAgIGJvb2wgSGVhcDo6aXNC
dXN5KCkKQEAgLTMyNCw3ICszNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGJvb2wgSGVh
cDo6aXNDb2xsZWN0aW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPT0gQ29sbGVjdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxl
Y3Rpb247CiAgICAgfQogCiAgICAgaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxs
KiBjZWxsKQpAQCAtMzY0LDE4ICszODIsMzAgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxF
KFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICB9
CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlND
ZWxsKikKKyAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBm
cm9tLCBKU0NlbGwqIHRvKQogICAgIHsKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJ
TkcpCiAgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRlQmFycmllcigpOwor
I2VuZGlmCisgICAgICAgIGlmICghZnJvbSB8fCAhaXNNYXJrZWQoZnJvbSkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmICghdG8gfHwgaXNNYXJrZWQodG8pKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBIZWFwOjpoZWFwKGZyb20pLT5hZGRUb1JlbWVtYmVyZWRTZXQoZnJv
bSk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpT
Q2VsbCosIEpTVmFsdWUpCisgICAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0
IEpTQ2VsbCogZnJvbSwgSlNWYWx1ZSB0bykKICAgICB7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQogICAgICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJh
cnJpZXIoKTsKKyNlbmRpZgorICAgICAgICBpZiAoIXRvLmlzQ2VsbCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB3cml0ZUJhcnJpZXIoZnJvbSwgdG8uYXNDZWxsKCkpOwogICAgIH0K
IAogICAgIGlubGluZSB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29z
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNp
b24gMTU1NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY3LDQgKzE2NywyOCBAQCB2b2lkIE1hcmtTdGFja0FycmF5Ojpz
dGVhbFNvbWVDZWxsc0Zyb20oCiAgICAgICAgIGFwcGVuZChvdGhlci5yZW1vdmVMYXN0KCkpOwog
fQogCit2b2lkIE1hcmtTdGFja0FycmF5OjpmaWxsVmVjdG9yKFZlY3Rvcjxjb25zdCBKU0NlbGwq
PiYgdmVjdG9yKQoreworICAgIEFTU0VSVCh2ZWN0b3Iuc2l6ZSgpID09IHNpemUoKSk7CisKKyAg
ICBNYXJrU3RhY2tTZWdtZW50KiBjdXJyZW50U2VnbWVudCA9IG1fc2VnbWVudHMuaGVhZCgpOwor
ICAgIGlmICghY3VycmVudFNlZ21lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVk
IGNvdW50ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90b3A7ICsraSkgewor
ICAgICAgICBBU1NFUlQoY3VycmVudFNlZ21lbnQtPmRhdGEoKVtpXSk7CisgICAgICAgIHZlY3Rv
cltjb3VudCsrXSA9IGN1cnJlbnRTZWdtZW50LT5kYXRhKClbaV07CisgICAgfQorCisgICAgY3Vy
cmVudFNlZ21lbnQgPSBjdXJyZW50U2VnbWVudC0+bmV4dCgpOworICAgIHdoaWxlIChjdXJyZW50
U2VnbWVudCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc19zZWdtZW50Q2Fw
YWNpdHk7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRTZWdtZW50LT5kYXRhKClb
aV0pOworICAgICAgICAgICAgdmVjdG9yW2NvdW50KytdID0gY3VycmVudFNlZ21lbnQtPmRhdGEo
KVtpXTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50U2VnbWVudCA9IGN1cnJlbnRTZWdtZW50
LT5uZXh0KCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAxNTU1ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiAr
NTIsNyBAQAogCiAjaW5jbHVkZSAiSGVhcEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTEwMCw2ICsxMDEsOCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBib29sIGlz
RW1wdHkoKTsKIAorICAgIHZvaWQgZmlsbFZlY3RvcihWZWN0b3I8Y29uc3QgSlNDZWxsKj4mKTsK
KwogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8c2l6ZV90IHNpemU+IHN0cnVjdCBDYXBhY2l0eUZy
b21TaXplIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB2YWx1ZSA9IChzaXplIC0gc2l6
ZW9mKE1hcmtTdGFja1NlZ21lbnQpKSAvIHNpemVvZihjb25zdCBKU0NlbGwqKTsKQEAgLTEyMSw3
ICsxMjQsNiBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBjb25zdCBz
aXplX3Qgc19zZWdtZW50Q2FwYWNpdHkgPSBDYXBhY2l0eUZyb21TaXplPE1hcmtTdGFja1NlZ21l
bnQ6OmJsb2NrU2l6ZT46OnZhbHVlOwogICAgIHNpemVfdCBtX3RvcDsKICAgICBzaXplX3QgbV9u
dW1iZXJPZlNlZ21lbnRzOwotICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNp
b24gMTU1NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDE2IEBAIGJvb2wgTWFya2VkQWxsb2Nh
dG9yOjppc1BhZ2VkT3V0KGRvdWJsZSAKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlSGVscGVyKHNpemVfdCBieXRlcykKIHsKICAgICBpZiAoIW1fZnJlZUxpc3QuaGVh
ZCkgeworICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgIEFTU0VSVCht
X2N1cnJlbnRCbG9jayA9PSBtX2Jsb2Nrc1RvU3dlZXApOworICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgICAgICAgICAgbV9ibG9ja3NUb1N3ZWVw
ID0gbV9jdXJyZW50QmxvY2stPm5leHQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAoTWFy
a2VkQmxvY2sqJiBibG9jayA9IG1fYmxvY2tzVG9Td2VlcDsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkgewogICAgICAgICAgICAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IGZyZWVMaXN0ID0g
YmxvY2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpTd2VlcFRvRnJlZUxpc3QpOwogICAgICAgICAgICAg
aWYgKCFmcmVlTGlzdC5oZWFkKSB7Ci0gICAgICAgICAgICAgICAgYmxvY2stPmRpZENvbnN1bWVG
cmVlTGlzdCgpOworICAgICAgICAgICAgICAgIGJsb2NrLT5kaWRTd2VlcFRvTm9BdmFpbCgpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC01Niw2ICs2Miw3
IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKICAgICBNYXJrZWRC
bG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgbV9mcmVlTGlzdC5o
ZWFkID0gaGVhZC0+bmV4dDsKICAgICBBU1NFUlQoaGVhZCk7CisgICAgbV9tYXJrZWRTcGFjZS0+
ZGlkQWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2NrKTsKICAgICByZXR1cm4gaGVhZDsKIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJ
KHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDQgKzE5OSw0MCBAQCB2b2lkIE1hcmtlZEJs
b2NrOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lCiAgICAgbV9zdGF0ZSA9IE1hcmtlZDsKIH0KIAor
dm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJNYXJrcygpCit7CisgICAgaWYgKGhlYXAoKS0+b3BlcmF0
aW9uSW5Qcm9ncmVzcygpID09IEpTQzo6RWRlbkNvbGxlY3Rpb24pCisgICAgICAgIHRoaXMtPmNs
ZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGU8TWFya2VkQmxvY2s6OkVkZW5Db2xsZWN0aW9uPigp
OworICAgIGVsc2UKKyAgICAgICAgdGhpcy0+Y2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlwZTxN
YXJrZWRCbG9jazo6RnVsbENvbGxlY3Rpb24+KCk7Cit9CisKK3ZvaWQgTWFya2VkQmxvY2s6OmNs
ZWFyUmVtZW1iZXJlZFNldCgpCit7CisgICAgbV9yZW1lbWJlcmVkU2V0LmNsZWFyQWxsKCk7Cit9
CisKK3RlbXBsYXRlIDxNYXJrZWRCbG9jazo6Q29sbGVjdGlvblR5cGUgY29sbGVjdGlvblR5cGU+
Cit2b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlKCkKK3sKKyAg
ICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOworCisgICAgQVNTRVJUKG1f
c3RhdGUgIT0gTmV3ICYmIG1fc3RhdGUgIT0gRnJlZUxpc3RlZCk7CisgICAgaWYgKGNvbGxlY3Rp
b25UeXBlID09IE1hcmtlZEJsb2NrOjpGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgbV9tYXJrcy5j
bGVhckFsbCgpOworCisgICAgLy8gVGhpcyB3aWxsIGJlY29tZSB0cnVlIGF0IHRoZSBlbmQgb2Yg
dGhlIG1hcmsgcGhhc2UuIFdlIHNldCBpdCBub3cgdG8KKyAgICAvLyBhdm9pZCBhbiBleHRyYSBw
YXNzIHRvIGRvIHNvIGxhdGVyLgorICAgIG1fc3RhdGUgPSBNYXJrZWQ7Cit9CisKK3ZvaWQgTWFy
a2VkQmxvY2s6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKK3sKKyAgICBtX3dlYWtTZXQubGFzdENo
YW5jZVRvRmluYWxpemUoKTsKKworICAgIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKKyAgICBjbGVh
ck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlPEZ1bGxDb2xsZWN0aW9uPigpOworICAgIHN3ZWVwKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAxNTU1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw4ICs2OSw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIC8vIHNpemUuCiAKICAgICBjbGFzcyBNYXJrZWRCbG9jayA6IHB1
YmxpYyBIZWFwQmxvY2s8TWFya2VkQmxvY2s+IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgYXRvbVNpemUgPSA4OyAvLyBieXRlcworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0
b21TaXplID0gMTY7IC8vIGJ5dGVzCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tT
aXplID0gNjQgKiBLQjsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sgPSB+
KGJsb2NrU2l6ZSAtIDEpOyAvLyBibG9ja1NpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KIApA
QCAtMTMzLDExICsxMzQsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIG9mIHRoZXNl
IGZ1bmN0aW9uczoKICAgICAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsgLy8gQ2FsbCB0
aGlzIG9uY2UgeW91J3ZlIGFsbG9jYXRlZCBhbGwgdGhlIGl0ZW1zIGluIHRoZSBmcmVlIGxpc3Qu
CiAgICAgICAgIHZvaWQgY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YShjb25zdCBGcmVlTGlz
dCYpOworICAgICAgICB2b2lkIGRpZFN3ZWVwVG9Ob0F2YWlsKCk7IC8vIENhbGwgdGhpcyBpZiB5
b3Ugc3dlZXAgYSBibG9jayBhbmQgZ2V0IGFuIGVtcHR5IGZyZWUgbGlzdCBiYWNrLgogCiAgICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgIm5ld2x5IGFsbG9jYXRlZCIgYml0bWFwIHdhcyBu
b24tbnVsbCAKICAgICAgICAgLy8gYW5kIHdhcyBzdWNjZXNzZnVsbHkgY2xlYXJlZCBhbmQgZmFs
c2Ugb3RoZXJ3aXNlLgogICAgICAgICBib29sIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKKworICAg
ICAgICBlbnVtIENvbGxlY3Rpb25UeXBlIHsgRWRlbkNvbGxlY3Rpb24sIEZ1bGxDb2xsZWN0aW9u
IH07CiAgICAgICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAgICAgICB2b2lkIGNsZWFyUmVtZW1i
ZXJlZFNldCgpOworICAgICAgICB0ZW1wbGF0ZSA8Q29sbGVjdGlvblR5cGUgY29sbGVjdGlvblR5
cGU+CisgICAgICAgIHZvaWQgY2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlwZSgpOworCiAgICAg
ICAgIHNpemVfdCBtYXJrQ291bnQoKTsKICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAKQEAgLTE1
NCw2ICsxNjIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0TWFya2VkKGNv
bnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBjbGVhck1hcmtlZChjb25zdCB2b2lkKik7CiAKKyAg
ICAgICAgdm9pZCBzZXRSZW1lbWJlcmVkKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgdm9pZCBjbGVh
clJlbWVtYmVyZWQoY29uc3Qgdm9pZCopOworICAgICAgICB2b2lkIGF0b21pY0NsZWFyUmVtZW1i
ZXJlZChjb25zdCB2b2lkKik7CisgICAgICAgIGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZvaWQq
KTsKKwogICAgICAgICBib29sIGlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwogICAgICAg
ICB2b2lkIHNldE5ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBjbGVh
ck5ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKQEAgLTE2NCw2ICsxNzcsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aExpdmVDZWxsKEZ1bmN0b3ImKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaERlYWRDZWxsKEZ1bmN0b3ImKTsKIAorICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWFya3MoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWFya2VkQmxvY2ss
IG1fbWFya3MpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGF0b21BbGlnbm1lbnRNYXNrID0gYXRvbVNpemUgLSAxOyAvLyBhdG9tU2l6ZSBtdXN0IGJlIGEg
cG93ZXIgb2YgdHdvLgogCkBAIC0xODEsOSArMTk2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzaXplX3QgbV9hdG9tc1BlckNlbGw7CiAgICAgICAgIHNpemVfdCBtX2VuZEF0b207IC8v
IFRoaXMgaXMgYSBmdXp6eSBlbmQuIEFsd2F5cyB0ZXN0IGZvciA8IG1fZW5kQXRvbS4KICNpZiBF
TkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdU
Rjo6Qml0bWFwQXRvbWljPiBtX21hcmtzOworICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJs
b2NrLCB1aW50OF90LCBXVEY6OkJpdG1hcEF0b21pYz4gbV9tYXJrczsKKyAgICAgICAgV1RGOjpC
aXRtYXA8YXRvbXNQZXJCbG9jaywgdWludDhfdCwgV1RGOjpCaXRtYXBBdG9taWM+IG1fcmVtZW1i
ZXJlZFNldDsKICNlbHNlCi0gICAgICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6
Qml0bWFwTm90QXRvbWljPiBtX21hcmtzOworICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJs
b2NrLCB1aW50OF90LCBXVEY6OkJpdG1hcE5vdEF0b21pYz4gbV9tYXJrczsKKyAgICAgICAgV1RG
OjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgdWludDhfdCwgV1RGOjpCaXRtYXBOb3RBdG9taWM+IG1f
cmVtZW1iZXJlZFNldDsKICNlbmRpZgogICAgICAgICBPd25QdHI8V1RGOjpCaXRtYXA8YXRvbXNQ
ZXJCbG9jaz4gPiBtX25ld2x5QWxsb2NhdGVkOwogCkBAIC0yMjUsMTUgKzI0Miw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNYXJrZWRCbG9jayo+
KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBibG9ja01hc2spOwogICAgIH0KIAotICAgIGlu
bGluZSB2b2lkIE1hcmtlZEJsb2NrOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCi0gICAgewotICAg
ICAgICBtX3dlYWtTZXQubGFzdENoYW5jZVRvRmluYWxpemUoKTsKLQotICAgICAgICBjbGVhck5l
d2x5QWxsb2NhdGVkKCk7Ci0gICAgICAgIGNsZWFyTWFya3MoKTsKLSAgICAgICAgc3dlZXAoKTsK
LSAgICB9Ci0KICAgICBpbmxpbmUgTWFya2VkQWxsb2NhdG9yKiBNYXJrZWRCbG9jazo6YWxsb2Nh
dG9yKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKQEAgLTI3Nywx
NSArMjg1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtX3N0YXRlID0gQWxsb2NhdGVk
OwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKCkKKyAg
ICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6ZGlkU3dlZXBUb05vQXZhaWwoKQogICAgIHsKICAg
ICAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKIAotICAgICAgICBB
U1NFUlQobV9zdGF0ZSAhPSBOZXcgJiYgbV9zdGF0ZSAhPSBGcmVlTGlzdGVkKTsKLSAgICAgICAg
bV9tYXJrcy5jbGVhckFsbCgpOwotCi0gICAgICAgIC8vIFRoaXMgd2lsbCBiZWNvbWUgdHJ1ZSBh
dCB0aGUgZW5kIG9mIHRoZSBtYXJrIHBoYXNlLiBXZSBzZXQgaXQgbm93IHRvCi0gICAgICAgIC8v
IGF2b2lkIGFuIGV4dHJhIHBhc3MgdG8gZG8gc28gbGF0ZXIuCisgICAgICAgIEFTU0VSVChtX3N0
YXRlID09IEZyZWVMaXN0ZWQpOwogICAgICAgICBtX3N0YXRlID0gTWFya2VkOwogICAgIH0KIApA
QCAtMzI0LDYgKzMyOCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIChyZWlu
dGVycHJldF9jYXN0PEJpdHM+KHApIC0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPih0aGlzKSkgLyBh
dG9tU2l6ZTsKICAgICB9CiAKKyAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6c2V0UmVtZW1i
ZXJlZChjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgbV9yZW1lbWJlcmVkU2V0LnNldChh
dG9tTnVtYmVyKHApKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2xl
YXJSZW1lbWJlcmVkKGNvbnN0IHZvaWQqIHApCisgICAgeworICAgICAgICBtX3JlbWVtYmVyZWRT
ZXQuY2xlYXIoYXRvbU51bWJlcihwKSk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya2Vk
QmxvY2s6OmF0b21pY0NsZWFyUmVtZW1iZXJlZChjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAg
ICAgbV9yZW1lbWJlcmVkU2V0LmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIoYXRvbU51bWJlcihwKSk7
CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzUmVtZW1iZXJlZChjb25z
dCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVtZW1iZXJlZFNldC5nZXQoYXRv
bU51bWJlcihwKSk7CisgICAgfQorCiAgICAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFy
a2VkKGNvbnN0IHZvaWQqIHApCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRv
bU51bWJlcihwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3Bh
Y2UuY3BwCShyZXZpc2lvbiAxNTU1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNywxNyArMTM3LDI3IEBAIHZvaWQg
TWFya2VkU3BhY2U6OnJlc2V0QWxsb2NhdG9ycygpCiAgICAgbV9ub3JtYWxTcGFjZS5sYXJnZUFs
bG9jYXRvci5yZXNldCgpOwogICAgIG1fbm9ybWFsRGVzdHJ1Y3RvclNwYWNlLmxhcmdlQWxsb2Nh
dG9yLnJlc2V0KCk7CiAgICAgbV9pbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3JTcGFjZS5sYXJn
ZUFsbG9jYXRvci5yZXNldCgpOworCisgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0cy5jbGVhcigp
OwogfQogCiB2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKEhlYXBSb290VmlzaXRvciYg
aGVhcFJvb3RWaXNpdG9yKQogewogICAgIFZpc2l0V2Vha1NldCB2aXNpdFdlYWtTZXQoaGVhcFJv
b3RWaXNpdG9yKTsKLSAgICBmb3JFYWNoQmxvY2sodmlzaXRXZWFrU2V0KTsKKyAgICBpZiAobV9o
ZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24pIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tzV2l0aE5ld09iamVjdHMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICB2aXNpdFdlYWtTZXQobV9ibG9ja3NXaXRoTmV3T2JqZWN0c1tpXSk7
CisgICAgfSBlbHNlCisgICAgICAgIGZvckVhY2hCbG9jayh2aXNpdFdlYWtTZXQpOwogfQogCiB2
b2lkIE1hcmtlZFNwYWNlOjpyZWFwV2Vha1NldHMoKQogewotICAgIGZvckVhY2hCbG9jazxSZWFw
V2Vha1NldD4oKTsKKyAgICBpZiAobV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRl
bkNvbGxlY3Rpb24pIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tz
V2l0aE5ld09iamVjdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhOZXdP
YmplY3RzW2ldLT5yZWFwV2Vha1NldCgpOworICAgIH0gZWxzZQorICAgICAgICBmb3JFYWNoQmxv
Y2s8UmVhcFdlYWtTZXQ+KCk7CiB9CiAKIHZvaWQgTWFya2VkU3BhY2U6OmNhbm9uaWNhbGl6ZUNl
bGxMaXZlbmVzc0RhdGEoKQpAQCAtMjcwLDQgKzI4MCwyMiBAQCB2b2lkIE1hcmtlZFNwYWNlOjpj
bGVhck5ld2x5QWxsb2NhdGVkKCkKICNlbmRpZgogfQogCisjaWZuZGVmIE5ERUJVRworc3RydWN0
IFZlcmlmeU1hcmtlZCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAgdm9pZCBvcGVy
YXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykgeyBBU1NFUlQoYmxvY2stPm5lZWRzU3dlZXBpbmco
KSk7IH0KK307CisjZW5kaWYKKwordm9pZCBNYXJrZWRTcGFjZTo6Y2xlYXJNYXJrcygpCit7Cisg
ICAgaWYgKG1faGVhcC0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrc1dpdGhOZXdPYmplY3Rz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0c1tpXS0+Y2xl
YXJNYXJrcygpOworICAgIH0gZWxzZQorICAgICAgICBmb3JFYWNoQmxvY2s8Q2xlYXJNYXJrcz4o
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgZm9yRWFjaEJsb2NrPFZlcmlmeU1hcmtlZD4oKTsKKyNl
bmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTU1NTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsMTcg
QEAgY2xhc3MgV2Vha0dDSGFuZGxlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKIHN0cnVjdCBDbGVh
ck1hcmtzIDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAgICB2b2lkIG9wZXJhdG9yKCko
TWFya2VkQmxvY2sqIGJsb2NrKSB7IGJsb2NrLT5jbGVhck1hcmtzKCk7IH0KKyAgICB2b2lkIG9w
ZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgYmxvY2stPmNsZWFy
TWFya3MoKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2xlYXJSZW1lbWJlcmVkU2V0IDogTWFya2Vk
QmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJs
b2NrKQorICAgIHsKKyAgICAgICAgYmxvY2stPmNsZWFyUmVtZW1iZXJlZFNldCgpOworICAgIH0K
IH07CiAKIHN0cnVjdCBTd2VlcCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CkBAIC05OCw4
ICsxMDgsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRBZGRCbG9jayhNYXJrZWRCbG9jayop
OwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KE1hcmtlZEJsb2NrKik7CisgICAgdm9pZCBk
aWRBbGxvY2F0ZUluQmxvY2soTWFya2VkQmxvY2sqKTsKIAogICAgIHZvaWQgY2xlYXJNYXJrcygp
OworICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkU2V0KCk7CiAgICAgdm9pZCBjbGVhck5ld2x5QWxs
b2NhdGVkKCk7CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIHNpemVfdCBvYmplY3RDb3VudCgpOwpA
QCAtMTM0LDYgKzE0Niw3IEBAIHByaXZhdGU6CiAgICAgSGVhcCogbV9oZWFwOwogICAgIHNpemVf
dCBtX2NhcGFjaXR5OwogICAgIE1hcmtlZEJsb2NrU2V0IG1fYmxvY2tzOworICAgIFZlY3RvcjxN
YXJrZWRCbG9jayo+IG1fYmxvY2tzV2l0aE5ld09iamVjdHM7CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRT
cGFjZTo6Zm9yRWFjaExpdmVDZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC0yNDYsOSArMjU5LDE0
IEBAIGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpkaWRBZGRCbG9jayhNYXIKICAgICBtX2Jsb2Nr
cy5hZGQoYmxvY2spOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Y2xlYXJNYXJrcygp
CitpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGlkQWxsb2NhdGVJbkJsb2NrKE1hcmtlZEJsb2Nr
KiBibG9jaykKK3sKKyAgICBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzLmFwcGVuZChibG9jayk7Cit9
CisKK2lubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpjbGVhclJlbWVtYmVyZWRTZXQoKQogewotICAg
IGZvckVhY2hCbG9jazxDbGVhck1hcmtzPigpOworICAgIGZvckVhY2hCbG9jazxDbGVhclJlbWVt
YmVyZWRTZXQ+KCk7CiB9CiAKIGlubGluZSBzaXplX3QgTWFya2VkU3BhY2U6Om9iamVjdENvdW50
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJl
dmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBTbG90VmlzaXRvcjo6U2xvdFZp
c2l0b3IoR0NUaHJlYWRTaGFyZWRECiAKIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogewot
ICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CisgICAgY2xlYXJNYXJrU3RhY2soKTsKIH0K
IAogdm9pZCBTbG90VmlzaXRvcjo6c2V0dXAoKQpAQCAtNjMsNiArNjMsMTUgQEAgdm9pZCBTbG90
VmlzaXRvcjo6cmVzZXQoKQogICAgIH0KIH0KIAordm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJr
U3RhY2soKQoreworICAgIHdoaWxlICghbV9zdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9z
dGFjay5yZWZpbGwoKTsKKyAgICAgICAgd2hpbGUgKG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpKQor
ICAgICAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCiB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewog
ICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CkBAIC04MCw3ICs4OSw3IEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbigKICNlbmRpZgogCiAgICAgQVNTRVJUKEhlYXA6Omlz
TWFya2VkKGNlbGwpKTsKLSAgICAKKwogICAgIGlmIChpc0pTU3RyaW5nKGNlbGwpKSB7CiAgICAg
ICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZp
c2l0b3IpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1
YmxpYzoKICAgICBTbG90VmlzaXRvcihHQ1RocmVhZFNoYXJlZERhdGEmKTsKICAgICB+U2xvdFZp
c2l0b3IoKTsKIAorICAgIE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSB7IHJldHVybiBtX3N0
YWNrOyB9CisKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisKICAgICB2b2lkIGFwcGVuZChDb25z
ZXJ2YXRpdmVSb290cyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBw
ZW5kKEpJVFdyaXRlQmFycmllcjxUPiopOwpAQCAtNjAsMTcgKzY0LDE5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFwcGVuZFVuYmFycmllcmVkVmFsdWUoSlNWYWx1ZSopOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZFdlYWsoV2VhazxUPiopOworICAg
IHZvaWQgdW5jb25kaXRpb25hbGx5QXBwZW5kKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgYWRk
T3BhcXVlUm9vdCh2b2lkKik7CiAgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopOwog
ICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKTsKICAgICBpbnQg
b3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERhdGEo
KSB7IHJldHVybiBtX3NoYXJlZDsgfQorICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1
cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgc2V0dXAoKTsKICAgICB2b2lkIHJl
c2V0KCk7CisgICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlz
aXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9CiAgICAgc2l6ZV90IGJ5dGVz
Q29waWVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0NvcGllZDsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE1
NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDE0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6aW50ZXJuYWwKICAgICAgICAgCiAgICAgTUFSS19MT0dfQ0hJTEQoKnRoaXMs
IGNlbGwpOwogCisgICAgdW5jb25kaXRpb25hbGx5QXBwZW5kKGNlbGwpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnVuY29uZGl0aW9uYWxseUFwcGVuZChKU0NlbGwqIGNl
bGwpCit7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKKyAgICBtX3Zpc2l0Q291
bnQrKzsKKyAgICAgICAgCiAgICAgLy8gU2hvdWxkIG5ldmVyIGF0dGVtcHQgdG8gbWFyayBzb21l
dGhpbmcgdGhhdCBpcyB6YXBwZWQuCiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAg
ICAgICAgCkBAIC0yMTIsNyArMjIwLDkgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZUFuZERyYWluKAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbGwqIG93
bmVyLCBDb3B5VG9rZW4gdG9rZW4sIHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQogewogICAgIEFT
U0VSVChieXRlcyk7Ci0gICAgbV9ieXRlc0NvcGllZCArPSBieXRlczsKKyAgICBib29sIGlzUmVt
ZW1iZXJlZCA9IGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9u
ICYmIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lciktPmlzUmVtZW1iZXJlZChvd25lcik7Cisg
ICAgaWYgKCFpc1JlbWVtYmVyZWQpCisgICAgICAgIG1fYnl0ZXNDb3BpZWQgKz0gYnl0ZXM7CiAK
ICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKICAg
ICBpZiAoYmxvY2stPmlzT3ZlcnNpemUoKSkgewpAQCAtMjIwLDcgKzIzMCw3IEBAIGlubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIoSlNDZWwKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChibG9jay0+aXNQaW5uZWQoKSkKKyAgICBpZiAoaXNSZW1lbWJlcmVkKQogICAg
ICAgICByZXR1cm47CiAKICAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKG93bmVyLCB0b2tlbiwg
Ynl0ZXMpOwpAQCAtMjQxLDYgKzI1MSwxMSBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVw
b3J0RXh0cmFNZW1vCiAjZW5kaWYKIH0KIAoraW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFw
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gJnNoYXJlZERhdGEoKS5tX3ZtLT5oZWFwOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFNsb3RWaXNpdG9ySW5saW5lc19oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw4ICs0NTEsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMgfTsKICAgICAgICAgLy8g
dmFsdWUgcmVnaXN0ZXIgaW4gd3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRj
aCByZWdpc3RlcnMKICAgICAgICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRo
ZXIgb2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVnaXN0ZXJJRCBzY3Jh
dGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJV
c2VLaW5kKTsKLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJl
Z2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgV3Jp
dGVCYXJyaWVyVXNlS2luZCk7CisgICAgICAgIEp1bXAgY2hlY2tNYXJrV29yZChSZWdpc3RlcklE
IG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdpc3RlcklEIHNjcmF0Y2gyKTsKKyAgICAg
ICAgSnVtcCBjaGVja01hcmtXb3JkKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgc2NyYXRjaCk7
CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3Rl
cklEIHZhbHVlVGFnLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBX
cml0ZUJhcnJpZXJNb2RlKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVy
TW9kZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gLy8gU3Ry
dWN0dXJlVHlwZSBjYW4gYmUgUmVnaXN0ZXJJRCBvciBJbW1QdHIuCiAgICAgICAgIHZvaWQgZW1p
dEFsbG9jYXRlSlNPYmplY3QoUmVnaXN0ZXJJRCBhbGxvY2F0b3IsIFN0cnVjdHVyZVR5cGUsIFJl
Z2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODgsOCArMzg4
LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKAogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJ
bmRleGluZ1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOyAvLyBXZSBoYWQgZm91bmQgdGhpcyBz
Y3JhdGNoIHJlZ2lzdGVyIHVzZWZ1bCBoZXJlIGJlZm9yZSwgc28gSSB3aWxsIGtlZXAgaXQgZm9y
IG5vdy4KLSAgICAKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CiAgICAgUmVnaXN0ZXJJRCBz
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGU7CiAgICAgUmVnaXN0ZXJJRCBpbmRl
eGluZ1R5cGUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGU7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24g
MTU1NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3ICszNTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9k
ZSwgZG9uZSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCBy
ZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MpOwogfQogCiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCkBAIC0zNzQsNiArMzczLDcgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91cwogCiAgICAgTGFiZWwgc3RvcmVSZXN1
bHQgPSBsYWJlbCgpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsK
KwogICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewogICAgIGNhc2UgSW50MzJTaGFwZToKICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdU
MykpOwpAQCAtMzkyLDYgKzM5Miw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0Nv
bnRpZ3VvdXMKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ29udGlndW91c1NoYXBl
OgorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDIsIHJlZ1QyLCBT
aG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKICAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4
KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgpAQCAtNDMwLDYgKzQzMSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdl
UHV0QnkKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdU
MywgcmVnVDIsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKICAgICBzdG9yZTY0KHJl
Z1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAg
ICAKQEAgLTYwNyw2ICs2MDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1
Y3Rpb24qCiAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgdGhlIGJhc2Ugb2Jq
ZWN0IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2VzIG5vdCBtYXRjaC4K
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAorICAg
IGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRl
ckltbWVkaWF0ZXMpOworCiAgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5j
ZVB1dEJ5SWQpOwogCiAgICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMpOwpAQCAtNjIwLDggKzYy
NCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKIAogICAgIEVO
RF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiAKLSAgICBlbWl0V3Jp
dGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlh
dGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0KICAgICBtX3Byb3BlcnR5QWNj
ZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oUHJv
cGVydHlTdHViUHV0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgaG90UGF0aEJlZ2luLCBzdHJ1Y3R1
cmVUb0NvbXBhcmUsIHByb3BlcnR5U3RvcmFnZUxvYWQsIGRpc3BsYWNlbWVudExhYmVsKSk7CiB9
CiAKQEAgLTczMSwxMiArNzMzLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRU
cmFuc2l0aW8KICAgICAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMp
OwogICAgIH0KIAotICAgIC8vIFBsYW50aW5nIHRoZSBuZXcgc3RydWN0dXJlIHRyaWdnZXJzIHRo
ZSB3cml0ZSBiYXJyaWVyIHNvIHdlIG5lZWQKLSAgICAvLyBhbiB1bmNvbmRpdGlvbmFsIGJhcnJp
ZXIgaGVyZS4KLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1Qz
LCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vz
cyk7Ci0KICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVjdHVy
ZSksIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKKworICAgIGVt
aXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMywgcmVnVDMsIFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIpOwogICAgIGNvbXBpbGVQdXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QxLCBj
YWNoZWRPZmZzZXQpOwogCiAgICAgcmV0KCk7CkBAIC03NTEsOSArNzUxLDE2IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICBwYXRjaEJ1ZmZlci5saW5rKGZh
aWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9m
YWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAKICAgICBpZiAod2lsbE5lZWRTdG9yYWdl
UmVhbGxvYykgewotICAgICAgICBBU1NFUlQobV9jYWxscy5zaXplKCkgPT0gMSk7CisgICAgICAg
IEFTU0VSVChtX2NhbGxzLnNpemUoKSA9PSAyKTsKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayht
X2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9y
ZWFsbG9jKSk7CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbHNbMV0udG8gPT0gY3RpX2hlYXBfdW5j
b25kaXRpb25hbF93cml0ZV9iYXJyaWVyKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2Nh
bGxzWzFdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFy
cmllcikpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChtX2NhbGxzWzBdLnRvID09IGN0
aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfaGVhcF91bmNvbmRpdGlvbmFs
X3dyaXRlX2JhcnJpZXIpKTsKICAgICB9CisKICAgICAKICAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERSgKQEAgLTEz
NDMsMTAgKzEzNTAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKElu
cwogCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QsIGludCB2YWx1ZSkKIHsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDIsIHJlZ1QxLCByZWdUMSwgU2hv
dWxkRmlsdGVySW1tZWRpYXRlcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwg
cmVnVDEpOwogICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOwogICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKIH0KIApAQCAtMTM1NCwxMiArMTM2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdFB1
dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogICAgIHN0b3JlUHRyKHJlZ1QwLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihvcGVyYW5kKSk7CisgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQg
dmFsdWUpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJy
aWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVn
aXN0ZXJzKCkpLCByZWdUMCk7CiAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIG9w
ZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiB9CkBAIC0xNDE2LDcgKzE0MjYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0CiAKICAgICBzdG9yZTY0KHJlZ1Qw
LCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwogICAgIGlmIChIZWFw
Ojppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9i
YWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJy
aWVyRm9yVmFyaWFibGVBY2Nlc3MpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9i
amVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKIH0KIAogdm9pZCBK
SVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbykKQEAgLTE0MzksMzMgKzE0NDksMTQ0IEBAIHZvaWQgSklU
OjpyZXNldFBhdGNoUHV0QnlJZChSZXBhdGNoQnVmZmUKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVF
NjQpCiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lz
dGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3Jp
dGVCYXJyaWVyTW9kZSBtb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCitKSVQ6Okp1
bXAgSklUOjpjaGVja01hcmtXb3JkKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgc2NyYXRj
aDEsIFJlZ2lzdGVySUQgc2NyYXRjaDIpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKLSAg
ICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgbW92ZShvd25lciwgc2NyYXRjaDEpOworICAg
IG1vdmUob3duZXIsIHNjcmF0Y2gyKTsKKworICAgIGFuZFB0cihUcnVzdGVkSW1tMzIoTWFya2Vk
QmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gxKTsKKyAgICBhbmRQdHIoVHJ1c3RlZEltbTMyKH5N
YXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDIpOworCisgICAgcnNoaWZ0MzIoVHJ1c3Rl
ZEltbTMyKDMgKyA0KSwgc2NyYXRjaDIpOworCisgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KFplcm8s
IEJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIFRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zm
c2V0T2ZNYXJrcygpKSk7Cit9CisKK0pJVDo6SnVtcCBKSVQ6OmNoZWNrTWFya1dvcmQoSlNDZWxs
KiBvd25lciwgUmVnaXN0ZXJJRCBzY3JhdGNoKQoreworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9
IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lcik7CisgICAgc2l6ZV90IGluZGV4ID0gKHJlaW50
ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihvd25lcikgJiB+TWFya2VkQmxvY2s6OmJsb2NrTWFzaykgPj4g
KDMgKyA0KTsKKyAgICB1aW50MzJfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPigocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsgTWFya2VkQmxvY2s6Om9mZnNl
dE9mTWFya3MoKSkpICsgaW5kZXg7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyks
IHNjcmF0Y2gpOworICAgIHJldHVybiBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHNjcmF0Y2gp
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVn
aXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgQVNT
RVJUKG93bmVyICE9IHNjcmF0Y2gpOworICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMSk7CiAg
ICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKLSAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCi0gICAgZW1pdENvdW50KFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRD
b3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgorCisgICAgSnVtcCB2YWx1ZU5vdENlbGw7Cisg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykgCisgICAgICAgIHZhbHVlTm90
Q2VsbCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCB2YWx1ZSwgdGFnTWFza1JlZ2lzdGVyKTsKKwor
LyoKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVWYWx1ZSA9IGZhbHNlOworICAgIGlmIChzY3JhdGNo
MSA9PSBzY3JhdGNoMikgeworICAgICAgICBwdXNoKHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaDIg
PSB2YWx1ZTsKKyAgICAgICAgbmVlZFRvUmVzdG9yZVZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAg
SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gY2hlY2tNYXJrV29yZChvd25lciwgc2NyYXRjaDEs
IHNjcmF0Y2gyKTsKKyAgICBpZiAobmVlZFRvUmVzdG9yZVZhbHVlKQorICAgICAgICBwb3AodmFs
dWUpOworKi8KKworICAgIHB1c2gocmVnVDApOworICAgIHB1c2gocmVnVDEpOworICAgIHB1c2go
cmVnVDIpOworICAgIHB1c2gocmVnVDMpOworICAgIHB1c2gocmVnVDQpOworCisgICAgLy8gRklY
TUU6IEZpZ3VyZSBvdXQgd2h5IHdlIG5lZWQgdGhpcy4KKyAgICBwdXNoKHJlZ1Q0KTsKKyAgICBw
dXNoKHJlZ1Q0KTsKKworICAgIC8vIENhbGwgSGVhcDo6d3JpdGVCYXJyaWVyLgorICAgIGlmICht
b2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKTsKKyAg
ICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3duZXIpOworICAgICAgICBzdHViQ2FsbC5jYWxs
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X2hlYXBfd3JpdGVfYmFycmllcik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG93bmVy
KTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodmFsdWUpOworICAgICAgICBzdHViQ2Fs
bC5jYWxsKCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2h5IHdlIG5lZWQg
dGhpcy4KKyAgICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUNCk7CisKKyAgICBwb3AocmVnVDQp
OworICAgIHBvcChyZWdUMyk7CisgICAgcG9wKHJlZ1QyKTsKKyAgICBwb3AocmVnVDEpOworICAg
IHBvcChyZWdUMCk7CisKKy8qCisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIGRlZmluaXRl
bHlOb3RNYXJrZWQubGluayh0aGlzKTsKKyAgICBpZiAobmVlZFRvUmVzdG9yZVZhbHVlKQorICAg
ICAgICBwb3AodmFsdWUpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworKi8KKyAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKSAKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmso
dGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJl
Z2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
LCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdy
aXRlQmFycmllck1vZGUgbW9kZSkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXIpOwogICAgIFVO
VVNFRF9QQVJBTShzY3JhdGNoKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgCi0jaWYgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIGVtaXRDb3VudChXcml0ZUJhcnJpZXJD
b3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKKyAgICBKdW1wIHZhbHVl
Tm90Q2VsbDsgCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykgCisgICAg
ICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCB2YWx1ZSwgdGFnTWFza1Jl
Z2lzdGVyKTsKKworLyoKKyAgICBKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBjaGVja01hcmtX
b3JkKG93bmVyLCBzY3JhdGNoKTsKKyovCisKKyAgICBwdXNoKHJlZ1QwKTsKKyAgICBwdXNoKHJl
Z1QxKTsKKyAgICBwdXNoKHJlZ1QyKTsKKyAgICBwdXNoKHJlZ1QzKTsKKyAgICBwdXNoKHJlZ1Q0
KTsKKworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoeSB3ZSBuZWVkIHRoaXMuCisgICAgcHVz
aChyZWdUNCk7CisgICAgcHVzaChyZWdUNCk7CisKKyAgICBpZiAobW9kZSA9PSBVbmNvbmRpdGlv
bmFsV3JpdGVCYXJyaWVyKSB7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcik7CisgICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIob3duZXIpKTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9o
ZWFwX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tUHRyKG93bmVyKSk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHZhbHVlKTsKKyAg
ICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0
IHdoeSB3ZSBuZWVkIHRoaXMuCisgICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDQpOworCisg
ICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDMpOworICAgIHBvcChyZWdUMik7CisgICAgcG9w
KHJlZ1QxKTsKKyAgICBwb3AocmVnVDApOworCisvKgorICAgIGRlZmluaXRlbHlOb3RNYXJrZWQu
bGluayh0aGlzKTsKKyovCisKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJJbW1lZGlhdGVz
KSAKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIEpJVDo6SnVtcCBKSVQ6
OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUmVnaXN0ZXJJRCBzY3JhdGNo
KQpAQCAtMTU4Miw3ICsxNzAzLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbgogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgCisKKyAgICBib29sIG5lZWRzV3JpdGVCYXJyaWVyID0gZmFsc2U7IAog
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CiAgICAgY2FzZSBKSVRJbnQzMjoKICAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
QEAgLTE1OTEsOSArMTcxMywxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChC
eVZhbEluCiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVENvbnRpZ3Vv
dXM6CisgICAgICAgIG5lZWRzV3JpdGVCYXJyaWVyID0gdHJ1ZTsKICAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgbmVlZHNX
cml0ZUJhcnJpZXIgPSB0cnVlOwogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKQEAgLTE2MTEsNyArMTczNSwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChCeVZhbEluCiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBD
b2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRh
YmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9t
RXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChi
eVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgCisKKyAgICBpZiAobmVl
ZHNXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHNbMF0udG8gPT0gY3RpX2hl
YXBfd3JpdGVfYmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5m
cm9tLCBGdW5jdGlvblB0cihjdGlfaGVhcF93cml0ZV9iYXJyaWVyKSk7CisgICAgfQorCiAgICAg
cGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZz
ZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIAogICAgIGJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjc2LDYgKzIy
NzYsMTggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X3RvX3NjbwogICAgIH0K
IH0KIAorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgaGVhcF93cml0ZV9iYXJyaWVyKQorewor
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICBzdGFja0ZyYW1lLmNh
bGxGcmFtZS0+aGVhcCgpLT53cml0ZUJhcnJpZXIoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUo
KS5hc0NlbGwoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKSk7Cit9CisKK0RFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIGhlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKQorewor
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICBzdGFja0ZyYW1lLmNh
bGxGcmFtZS0+aGVhcCgpLT53cml0ZUJhcnJpZXIoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUo
KS5hc0NlbGwoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDE1
NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIxLDcgKzQyMSw4IEBAIHZvaWQqIEpJVF9TVFVCIGN0aV92bV90aHJvdyhTVFVC
X0FSR1NfREUKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX3Njb3BlKFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX1NU
VUIgY3RpX29wX2dldF9mcm9tX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVS
TkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X3RvX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOwotCit2b2lkIEpJVF9TVFVCIGN0aV9oZWFwX3dyaXRlX2JhcnJp
ZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9TVFVCIGN0
aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcihTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogRW5jb2RlZEV4Y2VwdGlvbkhh
bmRsZXIgSklUX1NUVUIgY3RpX3ZtX2hhbmRsZV9leGNlcHRpb24oQ2FsbEZyYW1lKikgUkVGRVJF
TkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBACiAjZW5kaWYKIAogLy8gRGlzYWJsZSBpbmxpbmUgY2FjaGluZyBvZiBnZXRfYnlf
aWQgYW5kIHB1dF9ieV9pZC4KLSNkZWZpbmUgTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XIDAKKyNk
ZWZpbmUgTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XIDEKIAogLy8gRW5hYmxlIE9TUiBpbnRvIHRo
ZSBKSVQuIERpc2FibGluZyB0aGlzIHdoaWxlIHRoZSBMTEludCBpcyBlbmFibGVkIGVmZmVjdGl2
ZWx5CiAvLyB0dXJucyBvZmYgYWxsIEpJVCdpbmcsIHNpbmNlIGluIExMSW50J3MgcGFybGFuY2Us
IE9TUiBzdWJzdW1lcyBhbnkgZm9ybSBvZiBKSVQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTU1NTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMzNiw2ICsxMzM2LDE4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
dXRfdG9fc2MKICAgICBMTElOVF9FTkQoKTsKIH0KIAorZXh0ZXJuICJDIiB2b2lkIGxsaW50X3dy
aXRlX2JhcnJpZXJfc2xvdyhKU0NlbGwqIG93bmVyLCBKU0NlbGwqIHZhbHVlKQoreworICAgIEhl
YXAqIGhlYXAgPSBIZWFwOjpoZWFwKG93bmVyKTsKKyAgICBoZWFwLT53cml0ZUJhcnJpZXIob3du
ZXIsIHZhbHVlKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIGxsaW50X3VuY29uZGl0aW9uYWxfd3Jp
dGVfYmFycmllcl9zbG93KEpTQ2VsbCogb3duZXIpCit7CisgICAgSGVhcCogaGVhcCA9IEhlYXA6
OmhlYXAob3duZXIpOworICAgIGhlYXAtPndyaXRlQmFycmllcihvd25lcik7Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpMTEludAogCiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHJldmlzaW9u
IDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIG5hbWVzcGFjZSBMTEludCB7CiAKIGV4
dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX29wZXJhbmQoRXhlY1N0YXRl
KiwgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJlLCBpbnQgb3BlcmFuZCk7CiBleHRlcm4gIkMi
IFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShFeGVjU3RhdGUqLCBJbnN0cnVj
dGlvbiosIGludCBmcm9tV2hlcmUsIGludCBvcGVyYW5kKTsKK2V4dGVybiAiQyIgdm9pZCBsbGlu
dF93cml0ZV9iYXJyaWVyX3Nsb3coSlNDZWxsKiwgSlNDZWxsKik7CitleHRlcm4gIkMiIHZvaWQg
bGxpbnRfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyX3Nsb3coSlNDZWxsKik7CiAKICNkZWZp
bmUgTExJTlRfU0xPV19QQVRIX0RFQ0wobmFtZSkgXAogICAgIGV4dGVybiAiQyIgU2xvd1BhdGhS
ZXR1cm5UeXBlIGxsaW50XyMjbmFtZShFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNTU1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTcy
LDggKzE3MiwxMDQgQEAgbWFjcm8gbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoaW5kZXgsIAog
ICAgIGJ0cW56IHZhbHVlLCB0YWdNYXNrLCBzbG93CiBlbmQKIAotbWFjcm8gd3JpdGVCYXJyaWVy
KHZhbHVlKQotICAgICMgTm90aGluZyB0byBkbywgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGdlbmVy
YXRpb25hbCBvciBpbmNyZW1lbnRhbCBjb2xsZWN0b3IuCitjb25zdCBNYXJrZWRCbG9ja1NpemUg
PSA2NCAqIDEwMjQKK2NvbnN0IE1hcmtlZEJsb2NrSGVhZGVyTWFzayA9IH4oTWFya2VkQmxvY2tT
aXplIC0gMSkKKyMgc2l6ZW9mKGF0b20pID09IDgKK2NvbnN0IEF0b21OdW1iZXJTaGlmdCA9IDMK
K2NvbnN0IEJpdE1hcFdvcmRTaGlmdCA9IDUKK2NvbnN0IEJpdE1hcFdvcmRTaXplID0gMzIKK2Nv
bnN0IEJpdE1hcFdvcmRNb2QgPSBCaXRNYXBXb3JkU2l6ZSAtIDEKKworIyBDbG9iYmVycyBib3Ro
IGNlbGwgYW5kIHNjcmF0Y2guCittYWNybyBpc01hcmtlZChjZWxsLCBzY3JhdGNoLCBjb250aW51
YXRpb24pCisgICAgbW92ZSBjZWxsLCBzY3JhdGNoCisKKyMgR2V0IHRoZSBpbmRleCBvZiB0aGUg
d29yZCBpbiB0aGUgYml0bWFwLgorICAgIGFuZHEgfk1hcmtlZEJsb2NrSGVhZGVyTWFzaywgY2Vs
bAorICAgIHB1c2hxIGNlbGwKKyAgICByc2hpZnRwIEF0b21OdW1iZXJTaGlmdCArIEJpdE1hcFdv
cmRTaGlmdCwgY2VsbAorCisjIExvYWQgdGhlIHdvcmQgZnJvbSB0aGUgYml0bWFwLgorICAgIGFu
ZHEgTWFya2VkQmxvY2tIZWFkZXJNYXNrLCBzY3JhdGNoCisgICAgbG9hZGkgTWFya2VkQmxvY2s6
Om1fbWFya3Nbc2NyYXRjaCwgY2VsbCwgNF0sIHNjcmF0Y2gKKworIyBHZXQgdGhlIGFtb3VudCB0
byByaWdodCBzaGlmdCB0aGUgcmVzdWx0IGJ5LgorICAgIHBvcHEgY2VsbAorICAgIHJzaGlmdHAg
QXRvbU51bWJlclNoaWZ0LCBjZWxsCisgICAgYW5kcSBCaXRNYXBXb3JkTW9kLCBjZWxsCisgICAg
cnNoaWZ0cCBjZWxsLCBzY3JhdGNoCisKKyMgQ2hlY2sgdGhlIHJpZ2h0LW1vc3QgYml0LgorICAg
IGFuZHEgMSwgc2NyYXRjaAorCisgICAgY29udGludWF0aW9uKHNjcmF0Y2gpCitlbmQKKworbWFj
cm8gdW5jb25kaXRpb25hbFdyaXRlQmFycmllcihvd25lcikKKyAgICBwdXNocSB0MAorICAgIHB1
c2hxIHQxCisgICAgcHVzaHEgdDIKKyAgICBwdXNocSB0MworICAgIHB1c2hxIHQ0CisgICAgcHVz
aHEgdDUKKyAgICBwdXNocSB0NgorICAgIGNDYWxsMihfbGxpbnRfdW5jb25kaXRpb25hbF93cml0
ZV9iYXJyaWVyX3Nsb3csIG93bmVyLCBvd25lcikKKyAgICBwb3BxIHQ2CisgICAgcG9wcSB0NQor
ICAgIHBvcHEgdDQKKyAgICBwb3BxIHQzCisgICAgcG9wcSB0MgorICAgIHBvcHEgdDEKKyAgICBw
b3BxIHQwCisjICAgIHN0b3JlcSAwLCBbc3BdCisjICAgIHN0b3JlcSAwLCA4W3NwXQorIyAgICBz
dG9yZXEgMCwgMTZbc3BdCisjICAgIHN0b3JlcSAwLCAyNFtzcF0KKyMgICAgc3RvcmVxIDAsIDMy
W3NwXQorIyAgICBzdG9yZXEgMCwgNDBbc3BdCisjICAgIHN0b3JlcSAwLCA0OFtzcF0KK2VuZAor
CittYWNybyB3cml0ZUJhcnJpZXJXaXRoVmFsdWUob3duZXIsIHZhbHVlKQorIyBTa2lwIGlmIHZh
bHVlIGlzIG51bGwgb3Igbm90IGEgY2VsbC4KKyAgICBidHB6IHZhbHVlLCAud3JpdGVCYXJyaWVy
RG9uZQorICAgIGJ0cW56IHZhbHVlLCB0YWdNYXNrLCAud3JpdGVCYXJyaWVyRG9uZQorIyAgICBw
dXNocSBvd25lcgorIyAgICBwdXNocSB2YWx1ZQorIyAgICBpc01hcmtlZChvd25lciwgdmFsdWUs
IAorIyAgICAgICAgbWFjcm8gKG1hcmtlZCkKKyMjIElmIG93bmVyIGlzbid0IG1hcmtlZCwgdGhl
biB3ZSdyZSBnb29kIHRvIGdvLgorIyAgICAgICAgICAgIGJ0YnogbWFya2VkLCAudmFsdWVJc05v
bk51bGxDZWxsCisjICAgICAgICAgICAgcG9wcSB2YWx1ZQorIyAgICAgICAgICAgIHBvcHEgb3du
ZXIKKyAgICAgICAgICAgIHB1c2hxIHQwCisgICAgICAgICAgICBwdXNocSB0MQorICAgICAgICAg
ICAgcHVzaHEgdDIKKyAgICAgICAgICAgIHB1c2hxIHQzCisgICAgICAgICAgICBwdXNocSB0NAor
ICAgICAgICAgICAgcHVzaHEgdDUKKyAgICAgICAgICAgIHB1c2hxIHQ2CisgICAgICAgICAgICBj
Q2FsbDIoX2xsaW50X3dyaXRlX2JhcnJpZXJfc2xvdywgb3duZXIsIHZhbHVlKQorICAgICAgICAg
ICAgcG9wcSB0NgorICAgICAgICAgICAgcG9wcSB0NQorICAgICAgICAgICAgcG9wcSB0NAorICAg
ICAgICAgICAgcG9wcSB0MworICAgICAgICAgICAgcG9wcSB0MgorICAgICAgICAgICAgcG9wcSB0
MQorICAgICAgICAgICAgcG9wcSB0MAorIyAgICBzdG9yZXEgMCwgW3NwXQorIyAgICBzdG9yZXEg
MCwgOFtzcF0KKyMgICAgc3RvcmVxIDAsIDE2W3NwXQorIyAgICBzdG9yZXEgMCwgMjRbc3BdCisj
ICAgIHN0b3JlcSAwLCAzMltzcF0KKyMgICAgc3RvcmVxIDAsIDQwW3NwXQorIyAgICBzdG9yZXEg
MCwgNDhbc3BdCisjICAgICAgICAgICAgam1wIC53cml0ZUJhcnJpZXJEb25lCisjICAgICAgICBl
bmQpCisjLnZhbHVlSXNOb25OdWxsQ2VsbDoKKyMgICAgcG9wcSB2YWx1ZQorIyAgICBwb3BxIG93
bmVyCisud3JpdGVCYXJyaWVyRG9uZToKIGVuZAogCiBtYWNybyB2YWx1ZVByb2ZpbGUodmFsdWUs
IG9wZXJhbmQsIHNjcmF0Y2gpCkBAIC04MjksMTEgKzkyNSwxMyBAQCBlbmQKIAogbWFjcm8gc3Rv
cmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5k
U3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9m
TGluZU9mZnNldCwgLmlzSW5saW5lCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKG9iamVjdEFu
ZFN0b3JhZ2UsIHZhbHVlKQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RB
bmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0lu
dAogICAgIHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAg
ICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6CisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKG9iamVj
dEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGFkZHAgc2l6ZW9mIEpTT2JqZWN0IC0gKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6CiAgICAgc3Rv
cmVxIHZhbHVlLCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFn
ZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0KQEAgLTg0NCw3ICs5NDIsOSBAQCBfbGxpbnRfb3Bf
aW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQogICAg
IGxvYWRwRnJvbUluc3RydWN0aW9uKDEsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
dDEsIHQyKQotICAgIHdyaXRlQmFycmllcih0MikKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDEKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QxXSwgdDEKKyAgICB3cml0
ZUJhcnJpZXJXaXRoVmFsdWUodDEsIHQyKQogICAgIHN0b3JlcSB0MiwgW3QwXQogICAgIGRpc3Bh
dGNoKDUpCiAKQEAgLTkzMywxMyArMTAzMywxNCBAQCBtYWNybyBwdXRCeUlkKGdldFByb3BlcnR5
U3RvcmFnZSkKICAgICBnZXRQcm9wZXJ0eVN0b3JhZ2UoCiAgICAgICAgIHQwLAogICAgICAgICB0
MywKLSAgICAgICAgbWFjcm8gKHByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaCkKLSAgICAgICAgICAg
IGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBdLCB0MSwgLm9wUHV0QnlJZFNsb3cKLSAgICAg
ICAgICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig1LCB0MSkKLSAgICAgICAgICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUodDIsIHNjcmF0Y2gpCi0gICAgICAgICAgICB3cml0ZUJhcnJpZXIodDAp
Ci0gICAgICAgICAgICBzdG9yZXEgc2NyYXRjaCwgW3Byb3BlcnR5U3RvcmFnZSwgdDFdCi0gICAg
ICAgICAgICBkaXNwYXRjaCg5KQorICAgICAgICBtYWNybyAocHJvcGVydHlTdG9yYWdlLCBzY3Jh
dGNoKSAgICAgICAgICAgICAgICAgICAgICAgICMgTGl2ZSB2YXJpYWJsZXMKKyAgICAgICAgICAg
IGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBdLCB0MSwgLm9wUHV0QnlJZFNsb3cgICAjIHQw
LCB0MSwgdDIsIHQzCisgICAgICAgICAgICBtb3ZlIHQwLCB0MSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyB0MCwgdDEsIHQyLCB0MworICAgICAgICAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZSh0Miwgc2NyYXRjaCkgICAgICAgICAgICAgICAgICMgdDAsIHQxLCB0
MiwgdDMKKyAgICAgICAgICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZSh0MSwgc2NyYXRjaCkgICAg
ICAgICAgICAgICAgICAjIHQwLCB0MSwgICAsIHQzCisgICAgICAgICAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oNSwgdDEpICAgICAgICAgICAgICAgICAgICAgICAgIyB0MCwgdDEsICAgLCB0Mwor
ICAgICAgICAgICAgc3RvcmVxIHNjcmF0Y2gsIFtwcm9wZXJ0eVN0b3JhZ2UsIHQxXSAgICAgICAg
ICAgICAgICMgdDAsIHQxLCAgICwgdDMKKyAgICAgICAgICAgIGRpc3BhdGNoKDkpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgLCAgICwgICAsICAKICAgICAgICAg
ZW5kKQogZW5kCiAKQEAgLTk3MCw5ICsxMDcxLDEwIEBAIG1hY3JvIHB1dEJ5SWRUcmFuc2l0aW9u
KGFkZGl0aW9uYWxDaGVja3MKICAgICAgICAgbWFjcm8gKHByb3BlcnR5U3RvcmFnZSwgc2NyYXRj
aCkKICAgICAgICAgICAgIGFkZHAgdDEsIHByb3BlcnR5U3RvcmFnZSwgdDMKICAgICAgICAgICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQxKQotICAgICAgICAgICAgd3JpdGVCYXJyaWVy
KHQxKQorICAgICAgICAgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQwLCB0MSkKICAgICAgICAg
ICAgIHN0b3JlcSB0MSwgW3QzXQogICAgICAgICAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwg
dDEpCisgICAgICAgICAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDAsIHQxKQogICAgICAgICAg
ICAgc3RvcmVwIHQxLCBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXQogICAgICAgICAgICAgZGlzcGF0
Y2goOSkKICAgICAgICAgZW5kKQpAQCAtMTEyOSw3ICsxMjMxLDggQEAgbWFjcm8gY29udGlndW91
c1B1dEJ5VmFsKHN0b3JlQ2FsbGJhY2spCiAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIC5vdXRP
ZkJvdW5kcwogLnN0b3JlUmVzdWx0OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MikK
LSAgICBzdG9yZUNhbGxiYWNrKHQyLCB0MSwgW3QwLCB0MywgOF0pCisgICAgbGVhcCBbdDAsIHQz
LCA4XSwgdDAKKyAgICBzdG9yZUNhbGxiYWNrKHQyLCB0MywgW3QwXSkKICAgICBkaXNwYXRjaCg1
KQogCiAub3V0T2ZCb3VuZHM6CkBAIC0xMTg0LDcgKzEyODcsNyBAQCBfbGxpbnRfb3BfcHV0X2J5
X3ZhbDoKICAgICBjb250aWd1b3VzUHV0QnlWYWwoCiAgICAgICAgIG1hY3JvIChvcGVyYW5kLCBz
Y3JhdGNoLCBhZGRyZXNzKQogICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShvcGVy
YW5kLCBzY3JhdGNoKQotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKHNjcmF0Y2gpCisgICAgICAg
ICAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDEsIHNjcmF0Y2gpCiAgICAgICAgICAgICBzdG9y
ZXAgc2NyYXRjaCwgYWRkcmVzcwogICAgICAgICBlbmQpCiAKQEAgLTExOTMsMjEgKzEyOTYsMjIg
QEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1
dEJ5VmFsT3V0T2ZCb3VuZHMKICAgICBidHF6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQz
LCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQogLm9wUHV0QnlWYWxBcnJheVN0b3Jh
Z2VTdG9yZVJlc3VsdDoKKyAgICBsZWFwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4
XSwgdDAKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDIpCi0gICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZSh0MiwgdDEpCi0gICAgd3JpdGVCYXJyaWVyKHQxKQotICAgIHN0b3JlcSB0MSwg
QXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdCisgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZSh0MiwgdDMpCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQxLCB0MykKKyAgICBzdG9y
ZXEgdDMsIFt0MF0KICAgICBkaXNwYXRjaCg1KQogCiAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVt
cHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0gICAgICAgIGxvYWRwRnJvbUluc3RydWN0aW9u
KDQsIHQxKQotICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xl
W3QxXQorICAgICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig0LCB0MikKKyAgICAgICAgc3RvcmVi
IDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KICAgICBlbmQKICAgICBhZGRp
IDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KICAgICBiaWIgdDMsIC1z
aXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xl
bmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKLSAgICBhZGRpIDEs
IHQzLCB0MQotICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXQorICAgIGFkZGkgMSwgdDMsIHQyCisg
ICAgc3RvcmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUu
bGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdl
U3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxPdXRPZkJvdW5kczoKQEAgLTE4MzIsMTIgKzE5MzYs
MTYgQEAgbWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywg
dDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEpCiAgICAgbG9hZHBGcm9tSW5z
dHJ1Y3Rpb24oNiwgdDApCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCisgICAgbG9hZHAg
Q29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0Ml0sIHQyCisgICAgd3JpdGVCYXJyaWVyV2l0aFZh
bHVlKHQyLCB0MSkKICAgICBzdG9yZXEgdDEsIFt0MF0KIGVuZAogCiBtYWNybyBwdXRDbG9zdXJl
VmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZSh0MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQwLCB0MikKICAg
ICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQwCiAgICAgbG9hZGlz
RnJvbUluc3RydWN0aW9uKDYsIHQxKQogICAgIHN0b3JlcSB0MiwgW3QwLCB0MSwgOF0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIJ
KHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2lu
c3RydWN0aW9ucy5yYgkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOSBAQCBNQUNST19JTlNU
UlVDVElPTlMgPQogICAgICAiYmNkMmkiLAogICAgICAibW92ZHoiLAogICAgICAicG9wIiwKKyAg
ICAgInBvcHEiLAogICAgICAicHVzaCIsCisgICAgICJwdXNocSIsCiAgICAgICJtb3ZlIiwKICAg
ICAgInN4aTJxIiwKICAgICAgInp4aTJxIiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9v
ZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2Zm
bGluZWFzbS94ODYucmIJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIGNs
YXNzIFJlZ2lzdGVySUQKICAgICAgICAgICAgIHdoZW4gOnF1YWQKICAgICAgICAgICAgICAgICBp
c1g2NCA/ICIlcmF4IiA6IHJhaXNlCiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cmFpc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiSW52YWxpZCBraW5kICN7a2luZH0gZm9yIG5h
bWUgI3tuYW1lfSIKICAgICAgICAgICAgIGVuZAogICAgICAgICB3aGVuICJ0MSIsICJhMSIsICJy
MSIKICAgICAgICAgICAgIGNhc2Uga2luZApAQCAtOTgyLDggKzk4MiwxMiBAQCBjbGFzcyBJbnN0
cnVjdGlvbgogICAgICAgICAgICAgZW5kCiAgICAgICAgIHdoZW4gInBvcCIKICAgICAgICAgICAg
ICRhc20ucHV0cyAicG9wICN7b3BlcmFuZHNbMF0ueDg2T3BlcmFuZCg6cHRyKX0iCisgICAgICAg
IHdoZW4gInBvcHEiCisgICAgICAgICAgICAkYXNtLnB1dHMgInBvcHEgI3tvcGVyYW5kc1swXS54
ODZPcGVyYW5kKDpwdHIpfSIKICAgICAgICAgd2hlbiAicHVzaCIKICAgICAgICAgICAgICRhc20u
cHV0cyAicHVzaCAje29wZXJhbmRzWzBdLng4Nk9wZXJhbmQoOnB0cil9IgorICAgICAgICB3aGVu
ICJwdXNocSIKKyAgICAgICAgICAgICRhc20ucHV0cyAicHVzaHEgI3tvcGVyYW5kc1swXS54ODZP
cGVyYW5kKDpwdHIpfSIKICAgICAgICAgd2hlbiAibW92ZSIKICAgICAgICAgICAgIGhhbmRsZU1v
dmUKICAgICAgICAgd2hlbiAic3hpMnEiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMTU1NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsOCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKKyAgICBzaXplX3QgdG90YWxT
aXplKFN0cnVjdHVyZSopOworCiAgICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQogICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJ
bmxpbmVzLmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsMjIgQEAg
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKK2lubGluZSBzaXplX3QgQnV0dGVyZmx5Ojp0b3RhbFNpemUoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCit7CisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0g
c3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpOworICAgIGlmIChVTkxJS0VMWSho
YXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBpbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0
cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAg
ICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHJldHVybiBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKwogaW5saW5lIHZvaWQq
IEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICByZXR1cm4gYmFz
ZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNTU1ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTcsNyArMjE3LDggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlz
KQogCiAgICAgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gcGNbM10udS5vcGVyYW5kOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gY29uc3RydWN0b3ItPmFsbG9jYXRpb25Qcm9maWxlKGV4ZWMs
IGlubGluZUNhcGFjaXR5KS0+c3RydWN0dXJlKCk7Ci0gICAgUkVUVVJOKGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSkpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpOworICAgIFJFVFVSTihyZXN1bHQpOwogfQog
CiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhpcykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMTU1NTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBi
ZQogICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4KLSAgICBzaXpl
X3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90
IHByZUNhcGFjaXR5KFN0cnVjdHVyZSopOwogICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyhTdHJ1Y3R1cmUqKTsKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTU1NTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NSw2ICsxNDUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogZHN0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8V3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPio+KAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dGhpcykgKyByZWdpc3RlcnNPZmZzZXQoc3ltYm9sVGFibGUoKSkpOworICAgICAgICBpZiAoc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkgPiAxKSB7CisgICAgICAgICAgICBkYXRhTG9nRigi
VGVhcmluZyBvZmYgSlNBY3RpdmF0aW9uIHdpdGggY2FwdHVyZVN0YXJ0KCkgPSAldVxuIiwgc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkpOworICAgICAgICAgICAgZGF0YUxvZ0YoInRoaXMg
PSAlcFxuIiwgdGhpcyk7CisgICAgICAgICAgICBkYXRhTG9nRigiZHN0ID0gJXBcbiIsIGRzdCk7
CisgICAgICAgIH0KICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogc3JjID0gbV9y
ZWdpc3RlcnM7CiAKICAgICAgICAgaW50IGNhcHR1cmVFbmQgPSBzeW1ib2xUYWJsZSgpLT5jYXB0
dXJlRW5kKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAkocmV2aXNpb24gMTU1NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw2ICsyNDUsOCBAQCBib29sIEpTQXJyYXk6
OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2
ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KICAgICBBU1NFUlQoIWFkZFRvRnJvbnQg
fHwgY291bnQgPiBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7CiAKKyAgICBkYXRhTG9nRigidW5zaGlm
dENvdW50U2xvd0Nhc2UgZm9yICVwIHdpdGggaW5kZXggYmlhcyAldVxuIiwgdGhpcywgc3RvcmFn
ZS0+bV9pbmRleEJpYXMpOworCiAgICAgLy8gU3RlcCAxOgogICAgIC8vIEdhdGhlciA0IGtleSBt
ZXRyaWNzOgogICAgIC8vICAqIHVzZWRWZWN0b3JMZW5ndGggLSBob3cgbWFueSBlbnRyaWVzIGFy
ZSBjdXJyZW50bHkgaW4gdGhlIHZlY3RvciAoY29uc2VydmF0aXZlIGVzdGltYXRlIC0gZmV3ZXIg
bWF5IGJlIGluIHVzZSBpbiBzcGFyc2UgdmVjdG9ycykuCkBAIC0yNzAsNiArMjcyLDcgQEAgYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIC8vIFdlJ3JlIGVpdGhl
ciBnb2luZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdlLCBvciB3ZSdy
ZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb25lLgogCiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwg
bV9idXR0ZXJmbHkpOwogICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7CiAgICAgdW5zaWduZWQg
bmV3U3RvcmFnZUNhcGFjaXR5OwogICAgIC8vIElmIHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkg
aXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVw
IHVzaW5nIGl0LgpAQCAtMzIxLDggKzMyNCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UoVk0mIHYKIAogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZl
Y3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotCi0gICAgbV9idXR0ZXJmbHkgPSBu
ZXdCdXR0ZXJmbHk7CisgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKG5l
d0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCks
IG5ld0J1dHRlcmZseSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY5Nyw5ICs3MDAsOSBA
QCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgCiAgICAgaWYg
KHN0YXJ0SW5kZXggKyBjb3VudCA+IHZlY3Rvckxlbmd0aCkKICAgICAgICAgY291bnQgPSB2ZWN0
b3JMZW5ndGggLSBzdGFydEluZGV4OwotICAgIAorCiAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IG1pbih2ZWN0b3JMZW5ndGgsIG9sZExlbmd0aCk7Ci0gICAgCisKICAgICB1bnNpZ25l
ZCBudW1FbGVtZW50c0JlZm9yZVNoaWZ0UmVnaW9uID0gc3RhcnRJbmRleDsKICAgICB1bnNpZ25l
ZCBmaXJzdEluZGV4QWZ0ZXJTaGlmdFJlZ2lvbiA9IHN0YXJ0SW5kZXggKyBjb3VudDsKICAgICB1
bnNpZ25lZCBudW1FbGVtZW50c0FmdGVyU2hpZnRSZWdpb24gPSB1c2VkVmVjdG9yTGVuZ3RoIC0g
Zmlyc3RJbmRleEFmdGVyU2hpZnRSZWdpb247CkBAIC03NDMsNyArNzQ2LDYgQEAgYm9vbCBKU0Fy
cmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZQogICAgICAgICAvLyBwb3J0aW9uIG9mIHRo
ZSB2ZWN0b3IuIFdlIGFsc28gZG9uJ3QgbW9kaWZ5IHRoZSB2ZWN0b3IgbGVuZ3RoIGJlY2F1c2Ug
d2UncmUgbm90IGFjdHVhbGx5IGNoYW5naW5nCiAgICAgICAgIC8vIGl0cyBsZW5ndGg7IHdlJ3Jl
IGp1c3QgdXNpbmcgbGVzcyBvZiBpdC4KICAgICB9Ci0gICAgCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTg1NiwxMSArODU4LDEzIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFy
cmF5U3RvcmEKIAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpOwogCisgICAgZGF0YUxvZ0YoInVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UgZm9y
ICVwIHdpdGggaW5kZXggYmlhcyAldVxuIiwgdGhpcywgc3RvcmFnZS0+bV9pbmRleEJpYXMpOwog
ICAgIGlmIChtb3ZlRnJvbnQgJiYgc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0gY291bnQpIHsKLSAg
ICAgICAgbV9idXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+dW5zaGlmdChzdHJ1Y3R1
cmUoKSwgY291bnQpOwotICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgIHN0b3JhZ2UgPSBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAt
PSBjb3VudDsKICAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCAr
IGNvdW50KTsKKyAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKG5l
d0J1dHRlcmZseSk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZyb250ICYmIHZlY3Rvckxlbmd0aCAt
IGxlbmd0aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgp
LT5hcnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIGlmICh1bnNoaWZ0Q291bnRTbG93Q2FzZShleGVj
LT52bSgpLCBtb3ZlRnJvbnQsIGNvdW50KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDEzICs1
NDcsMTUgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SQogICAgIH0K
IAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRl
cmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsgCiAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0
cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwogICAgIFJFTEVBU0VfQVNT
RVJUKG5ld0J1dHRlcmZseSk7Ci0gICAgCi0gICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7
CisKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IDA7CiAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKDApOwogICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldCh2bSwgdGhpcywg
bWFwKTsKKyAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUobmV3QnV0dGVy
Zmx5KTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0
dGVyZmx5KTsKICAgICAKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
IH0KQEAgLTYxMyw3ICs2MTUsMTEgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlh
bFVuZGVjaQogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVVbmRl
Y2lkZWQpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBt
X2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1
cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3Ry
dWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseTsKIH0KIApA
QCAtNjIyLDcgKzYyOCwxMSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUlu
aXRpCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUludDMyKTsK
KworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJm
bHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdC
dXR0ZXJmbHkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwg
bmV3QnV0dGVyZmx5KTsKKwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQz
MigpOwogfQogCkBAIC02MzMsNyArNjQzLDExIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0
OjpjcmVhdGVJbml0aWEKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KVtpXSA9IFFOYU47CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlRG91YmxlKTsKKwor
ICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkp
OwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
QnV0dGVyZmx5KTsKKwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KTsKIH0KIApAQCAtNjQyLDcgKzY1NiwxMSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6
OmNyZWF0ZUluaXRpCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgs
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0
ZUNvbnRpZ3VvdXMpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVy
ZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdT
dHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+
Y29udGlndW91cygpOwogfQogCkBAIC02NjMsNyArNjgxLDExIEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAwOwogICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgp
LCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKKworICAg
IHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwog
ICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJm
bHkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0
dGVyZmx5KTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTczMCw3ICs3NTIsMTEgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogICAgIC8vIE5vIG5lZWQg
dG8gY29weSBlbGVtZW50cy4KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlv
bik7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0
dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwg
c3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG5l
d1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOworCiAgICAgcmV0dXJuIHN0b3JhZ2U7
CiB9CiAKQEAgLTc4Nyw3ICs4MTMsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVy
dEludDMyVG9BcgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlv
bik7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0
dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwg
bmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0s
IG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworCiAgICAgcmV0dXJuIG5l
d1N0b3JhZ2U7CiB9CiAKQEAgLTg1Niw3ICs4ODYsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydERvdWJsZVRvQQogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwg
dHJhbnNpdGlvbik7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJl
KCksIG1fYnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0
cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworCiAgICAg
cmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTg4NSw3ICs5MTksMTEgQEAgQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwg
c3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
dm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIGRpZFJlcGxh
Y2VPbGRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkp
OworCiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTIzMjEsMTggKzIzNTksMjIgQEAg
Ym9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgIC8vIEZhc3QgY2Fz
ZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFr
ZXMgc2Vuc2UuCiAgICAgaWYgKExJS0VMWSghaW5kZXhCaWFzKSkgewogICAgICAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CisgICAgICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBz
dHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5ncm93QXJyYXlSaWdodCgKICAgICAgICAgICAgIHZt
LCB0aGlzLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRy
dWUsCiAgICAgICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgICAgICBpZiAoIW5ld0J1
dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9idXR0ZXJmbHkg
PSBuZXdCdXR0ZXJmbHk7CisKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIHNldEJ1dHRlcmZseVdp
dGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShuZXdCdXR0ZXJmbHkpOworICAgICAgICBkaWRSZXBsYWNl
T2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFsbCBv
ZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJmbG93
IGFycmF5IGxlbmd0aC4KICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgd2lsbFJl
cGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7IAogICAgIHVu
c2lnbmVkIG5ld0luZGV4QmlhcyA9IHN0ZDo6bWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSgKICAgICAgICAgdm0s
IHRoaXMsCkBAIC0yMzQwLDEwICsyMzgyLDExIEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVj
dG9yTGVuZ3RoKFZNJiAKICAgICAgICAgbmV3SW5kZXhCaWFzLCB0cnVlLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsK
KwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdW
ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhC
aWFzID0gbmV3SW5kZXhCaWFzOworICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVj
dHVyZShuZXdCdXR0ZXJmbHkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzU4LDE1
ICsyNDAxLDE5IEBAIHZvaWQgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKICAg
ICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgdW5zaWduZWQgb2xkVmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCks
IG1fYnV0dGVyZmx5KTsKICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlS
aWdodCgKICAgICAgICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKICAgICAgICAgb2xkVmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSwKICAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7CisKKyAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxl
bmd0aCk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0
dGVyZmx5KTsKKwogICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdW
ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKCkuZGF0YSgpW2ldID0gUU5hTjsKICAgICB9Ci0gICAgbV9idXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogfQogCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93
T3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MTU1NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiRGVmZXJHQy5oIgorI2luY2x1
ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklubGluZXMuaCIKICNpbmNsdWRl
ICJKU0NlbGwuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJQcm9wZXJ0
eVN0b3JhZ2UuaCIKQEAgLTYwNCwxMyArNjA2LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlaWZ5
U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4ZWNTdGF0ZSogZXhlYyk7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICB2b2lkIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZShCdXR0ZXJmbHkqKTsgLy8gWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8g
Y2FsbCB0aGlzLgorICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KEJ1dHRlcmZseSopOwogICAgICAgICAKICAgICB2b2lkIHNldFN0cnVjdHVyZShWTSYsIFN0cnVj
dHVyZSopOwogICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJl
KiwgQnV0dGVyZmx5Kik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KFZNJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAg
IHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYsIFN0
cnVjdHVyZSopOwogCisgICAgdm9pZCB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseShWTSYsIFN0cnVj
dHVyZSosIEJ1dHRlcmZseSopOworICAgIHZvaWQgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseShWTSYs
IFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOworCiAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9i
amVjdChWTSYgdm0pCiAgICAgewogICAgICAgICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25h
cnlTdHJ1Y3R1cmUodm0sIHRoaXMpOwpAQCAtMTEyMyw4ICsxMTI4LDI4IEBAIGlubGluZSBib29s
IEpTT2JqZWN0Ojppc0Vycm9ySW5zdGFuY2UoKSAKICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5
cGVJbmZvKCkudHlwZSgpID09IEVycm9ySW5zdGFuY2VUeXBlOwogfQogCitpbmxpbmUgdm9pZCBK
U09iamVjdDo6d2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHkpCit7CisgICAgaWYgKCFvbGRCdXR0ZXJm
bHkpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBvbGRCYXNlID0gb2xkQnV0dGVyZmx5ID8g
b2xkQnV0dGVyZmx5LT5iYXNlKG9sZFN0cnVjdHVyZSkgOiAwOworICAgIHNpemVfdCBvbGRTaXpl
ID0gb2xkQnV0dGVyZmx5ID8gb2xkQnV0dGVyZmx5LT50b3RhbFNpemUob2xkU3RydWN0dXJlKSA6
IDA7CisgICAgdm0uaGVhcC53aWxsQWJhbmRvblN0b3JhZ2UodGhpcywgb2xkQmFzZSwgb2xkU2l6
ZSk7Cit9CisKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KFZN
JiB2bSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5KQor
eworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICByZXR1cm47CisgICAgdm9pZCogbmV3
QmFzZSA9IG5ld0J1dHRlcmZseSA/IG5ld0J1dHRlcmZseS0+YmFzZShuZXdTdHJ1Y3R1cmUpIDog
MDsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld0J1dHRlcmZseSA/IG5ld0J1dHRlcmZseS0+dG90
YWxTaXplKG5ld1N0cnVjdHVyZSkgOiAwOworICAgIHZtLmhlYXAuZGlkQXNzaWduU3RvcmFnZSh0
aGlzLCBuZXdCYXNlLCBuZXdTaXplKTsKK30KKwogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSkKIHsKKyAgICBBU1NFUlQoc3RydWN0dXJlKTsKKyAgICBBU1NFUlQoIWJ1
dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhc3RydWN0dXJl
LT5oYXNJbmRleGluZ0hlYWRlcih0aGlzKSkpOwogICAgIG1fYnV0dGVyZmx5ID0gYnV0dGVyZmx5
OwogICAgIHNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKIH0KQEAgLTEyOTMsMTAgKzEzMTgs
MTYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBtX2J1dHRlcmZseTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091
dE9mTGluZVN0b3JhZ2UoKSkKKyAgICAgICAgYm9vbCBkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSA9
IGZhbHNlOworICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3Rv
cmFnZSgpKSB7CisgICAgICAgICAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0
dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRP
ZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0
dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAg
ICAgIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBv
ZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKICAgICAgICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKKyAgICAg
ICAgaWYgKGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5KQorICAgICAgICAgICAgZGlkUmVwbGFjZU9s
ZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CiAKICAgICAgICAgdmFs
aWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpOwpAQCAtMTMxNCwxMiArMTM0NSwxOSBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0g
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMt
PnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24s
IG9mZnNldCkpIHsKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwotICAgICAgICBpZiAoY3VycmVu
dENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgYm9v
bCBkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSA9IGZhbHNlOworICAgICAgICBpZiAoY3VycmVudENh
cGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICB3aWxs
UmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgdGhpcy0+c3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsK
ICAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJy
ZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAg
ICBkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSA9IHRydWU7CisgICAgICAgIH0KIAogICAgICAgICB2
YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgaWYgKGRpZEFsbG9jYXRlTmV3QnV0dGVy
Zmx5KQorICAgICAgICAgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBu
ZXdCdXR0ZXJmbHkpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAg
ICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmlj
IHZhbHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJsZSwKICAgICAgICAgLy8gc28gbGVhdmUg
dGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KQEAgLTEzODksOSArMTQyNywxMSBAQCBp
bmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhCiAgICAgfQogCiAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOyAKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwg
c3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAogICAgICAgICB2bSwgb2xkQ2FwYWNpdHksIG5ld1N0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogfQogCiBpbmxpbmUgdm9pZCBK
U09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYg
dm0sIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQpAQCAtMTQyNywxMCArMTQ2NywxNiBAQCBpbmxp
bmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJp
YnV0ZXMgJiBBY2Nlc3NvcikpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHk7Ci0gICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2Uo
KSkKKyAgICBib29sIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gZmFsc2U7CisgICAgaWYgKHN0
cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkgeworICAgICAgICB3aWxs
UmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICAg
ICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3Rv
cmFnZUNhcGFjaXR5KCkpOworICAgICAgICBkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSA9IHRydWU7
CisgICAgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGdldENh
bGxhYmxlT2JqZWN0KHZhbHVlKSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBz
dHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKKyAgICBpZiAoZGlkQWxsb2NhdGVOZXdCdXR0ZXJm
bHkpCisgICAgICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdC
dXR0ZXJmbHkpOwogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDkg
KzEwOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9lbnVtZXJhdGlvbkNh
Y2hlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0
YTo6c2V0RW51bWVyYXRpb25DYWNoZShWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZSogb3duZXIsIEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVlKQorICAgIGlubGluZSB2b2lkIFN0cnVjdHVyZVJh
cmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiB2bSwgY29uc3QgU3RydWN0dXJlKiwgSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpCiAgICAgewotICAgICAgICBtX2VudW1lcmF0aW9u
Q2FjaGUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgICAgICBtX2VudW1lcmF0aW9uQ2FjaGUu
c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCShyZXZpc2lvbiAxNTU1
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk3LDE2ICsxOTcsMTggQEAgQ2hlY2tlZEJvb2xlYW4gTWFwRGF0YTo6ZW5z
dXJlU3BhY2VGb3JBcAogCiAgICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6bWF4KG1fY2Fw
YWNpdHkgKyAobV9jYXBhY2l0eSAvIDIpICsgMSwgbWluaW11bU1hcFNpemUpOwogICAgIHZvaWQq
IG5ld1N0b3JhZ2UgPSAwOworICAgIERlZmVyR0MgZGVmZXIoKmNhbGxGcmFtZS0+aGVhcCgpKTsK
KyAgICBjYWxsRnJhbWUtPmhlYXAoKS0+d2lsbEFiYW5kb25TdG9yYWdlKHRoaXMsIG1fZW50cmll
cywgbV9jYXBhY2l0eSAqIHNpemVvZihFbnRyeSkpOwogICAgIGlmICghY2FsbEZyYW1lLT5oZWFw
KCktPnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCByZXF1aXJlZFNpemUgKiBzaXplb2YoRW50cnkp
LCAmbmV3U3RvcmFnZSkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFt
ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgRGVmZXJHQyBkZWZlcigqY2Fs
bEZyYW1lLT5oZWFwKCkpOwogICAgIEVudHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50
cnkqPihuZXdTdG9yYWdlKTsKICAgICBpZiAoc2hvdWxkUGFjaygpKQogICAgICAgICByZXBsYWNl
QW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwogICAgIGVsc2UK
ICAgICAgICAgcmVwbGFjZUJhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwor
ICAgIGNhbGxGcmFtZS0+aGVhcCgpLT5kaWRBc3NpZ25TdG9yYWdlKHRoaXMsIG1fZW50cmllcywg
cmVxdWlyZWRTaXplICogc2l6ZW9mKEVudHJ5KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAx
NTU1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgp
CiAjaWYgIUVOQUJMRShZQVJSX0pJVCkKICAgICB1c2VSZWdFeHBKSVQoKSA9IGZhbHNlOwogI2Vu
ZGlmCi0gICAgCisKICAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFuZCBtYWtl
IGNvcnJlY3Rpb25zIHRvIHRoZSBvcHRpb25zOgogICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAo
KSk7CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSA+PSB0aHJl
c2hvbGRGb3JPcHRpbWl6ZVNvb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNSw4ICs3
MDUsMTEgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogCiAgICAg
Ly8gSWYgdGhlIG9iamVjdCBoYWQgYSBCdXR0ZXJmbHkgYnV0IGFmdGVyIGZsYXR0ZW5pbmcvY29t
cGFjdGluZyB3ZSBubyBsb25nZXIgaGF2ZSBuZWVkIG9mIGl0LAogICAgIC8vIHdlIG5lZWQgdG8g
emVybyBpdCBvdXQgYmVjYXVzZSB0aGUgY29sbGVjdG9yIGRlcGVuZHMgb24gdGhlIFN0cnVjdHVy
ZSB0byBrbm93IHRoZSBzaXplIGZvciBjb3B5aW5nLgotICAgIGlmIChvYmplY3QtPmJ1dHRlcmZs
eSgpICYmICF0aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICF0aGlzLT5oYXNJbmRleGluZ0hl
YWRlcihvYmplY3QpKQorICAgIGlmIChvYmplY3QtPmJ1dHRlcmZseSgpICYmICF0aGlzLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICYmICF0aGlzLT5oYXNJbmRleGluZ0hlYWRlcihvYmplY3QpKSB7Cisg
ICAgICAgIG9iamVjdC0+d2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0
dXJlKCksIG9iamVjdC0+YnV0dGVyZmx5KCkpOwogICAgICAgICBvYmplY3QtPnNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgdGhpcywgMCk7CisgICAgICAgIG9iamVjdC0+ZGlkUmVwbGFjZU9s
ZEJ1dHRlcmZseSh2bSwgdGhpcywgMCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRoaXM7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YUlubGluZXMuaAkocmV2aXNpb24gMTU1NTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDkgKzM1LDkgQEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlUmFyZURhdGE6OnBy
ZQogICAgIHJldHVybiBtX3ByZXZpb3VzLmdldCgpOwogfQogCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1
cmVSYXJlRGF0YTo6c2V0UHJldmlvdXNJRChWTSYgdm0sIFN0cnVjdHVyZSogdHJhbnNpdGlvbiwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0
UHJldmlvdXNJRChWTSYgdm0sIFN0cnVjdHVyZSosIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewot
ICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOworICAgIG1fcHJl
dmlvdXMuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwogfQogCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1
cmVSYXJlRGF0YTo6Y2xlYXJQcmV2aW91c0lEKCkKQEAgLTUwLDkgKzUwLDkgQEAgaW5saW5lIEpT
U3RyaW5nKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6b2JqZQogICAgIHJldHVybiBtX29iamVjdFRvU3Ry
aW5nVmFsdWUuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRP
YmplY3RUb1N0cmluZ1ZhbHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNTdHJpbmcq
IHZhbHVlKQoraW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5n
VmFsdWUoVk0mIHZtLCBjb25zdCBKU0NlbGwqLCBKU1N0cmluZyogdmFsdWUpCiB7Ci0gICAgbV9v
YmplY3RUb1N0cmluZ1ZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKKyAgICBtX29iamVjdFRv
U3RyaW5nVmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE1NTU4OSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTMtMDktMTEgIE1hcmsgSGFobmVuYmVyZyAg
PG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBnZW5l
cmF0aW9uYWwgZ2FyYmFnZSBjb2xsZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMTA3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjo6OkJpdG1h
cCk6CisgICAgICAgIChXVEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6OjpzZXQpOgorICAgICAg
ICAoV1RGOjo6OnRlc3RBbmRTZXQpOgorICAgICAgICAoV1RGOjo6OnRlc3RBbmRDbGVhcik6Cisg
ICAgICAgIChXVEY6Ojo6Y29uY3VycmVudFRlc3RBbmRTZXQpOgorICAgICAgICAoV1RGOjo6OmNv
bmN1cnJlbnRUZXN0QW5kQ2xlYXIpOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAg
KFdURjo6OjpjbGVhckFsbCk6CisgICAgICAgIChXVEY6Ojo6bmV4dFBvc3NpYmx5VW5zZXQpOgor
ICAgICAgICAoV1RGOjo6OmZpbmRSdW5PZlplcm9zKToKKyAgICAgICAgKFdURjo6Ojpjb3VudCk6
CisgICAgICAgIChXVEY6Ojo6aXNFbXB0eSk6CisgICAgICAgIChXVEY6Ojo6aXNGdWxsKToKKwog
MjAxMy0wOS0xMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVzZSB0aGUgbmV3IEMrKzExIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHN5bnRheCB0aHJvdWdo
b3V0IG91ciBoYXNoIGNvbGxlY3Rpb24gY2xhc3NlcwpJbmRleDogU291cmNlL1dURi93dGYvQml0
bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDE1
NTU4OSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
MSArMzYsOCBAQCBlbnVtIEJpdG1hcEF0b21pY01vZGUgewogICAgIEJpdG1hcEF0b21pYwogfTsK
IAotdGVtcGxhdGU8c2l6ZV90IHNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZSA9IEJp
dG1hcE5vdEF0b21pYz4KK3RlbXBsYXRlPHNpemVfdCBzaXplLCB0eXBlbmFtZSBXb3JkVHlwZSA9
IHVpbnQzMl90LCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGUgPSBCaXRtYXBOb3RBdG9taWM+
CiBjbGFzcyBCaXRtYXAgewotcHJpdmF0ZToKLSAgICB0eXBlZGVmIHVpbnQzMl90IFdvcmRUeXBl
OwotCiBwdWJsaWM6CiAgICAgQml0bWFwKCk7CiAKQEAgLTU5LDggKzU2LDggQEAgcHVibGljOgog
ICAgIHNpemVfdCBpc0Z1bGwoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Qg
V29yZFR5cGUgd29yZFNpemUgPSBzaXplb2YoV29yZFR5cGUpICogODsKLSAgICBzdGF0aWMgY29u
c3QgV29yZFR5cGUgd29yZHMgPSAoc2l6ZSArIHdvcmRTaXplIC0gMSkgLyB3b3JkU2l6ZTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgd29yZFNpemUgPSBzaXplb2YoV29yZFR5cGUpICogODsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgd29yZHMgPSAoc2l6ZSArIHdvcmRTaXplIC0gMSkg
LyB3b3JkU2l6ZTsKIAogICAgIC8vIHRoZSBsaXRlcmFsICcxJyBpcyBvZiB0eXBlIHNpZ25lZCBp
bnQuICBXZSB3YW50IHRvIHVzZSBhbiB1bnNpZ25lZAogICAgIC8vIHZlcnNpb24gb2YgdGhlIGNv
cnJlY3Qgc2l6ZSB3aGVuIGRvaW5nIHRoZSBjYWxjdWxhdGlvbnMgYmVjYXVzZSBpZgpAQCAtNzIs
MjYgKzY5LDI2IEBAIHByaXZhdGU6CiAgICAgRml4ZWRBcnJheTxXb3JkVHlwZSwgd29yZHM+IGJp
dHM7CiB9OwogCi10ZW1wbGF0ZTxzaXplX3Qgc2l6ZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNN
b2RlPgotaW5saW5lIEJpdG1hcDxzaXplLCBhdG9taWNNb2RlPjo6Qml0bWFwKCkKK3RlbXBsYXRl
PHNpemVfdCBzaXplLCB0eXBlbmFtZSBXb3JkVHlwZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNN
b2RlPgoraW5saW5lIEJpdG1hcDxzaXplLCBXb3JkVHlwZSwgYXRvbWljTW9kZT46OkJpdG1hcCgp
CiB7CiAgICAgY2xlYXJBbGwoKTsKIH0KIAotdGVtcGxhdGU8c2l6ZV90IHNpemUsIEJpdG1hcEF0
b21pY01vZGUgYXRvbWljTW9kZT4KLWlubGluZSBib29sIEJpdG1hcDxzaXplLCBhdG9taWNNb2Rl
Pjo6Z2V0KHNpemVfdCBuKSBjb25zdAordGVtcGxhdGU8c2l6ZV90IHNpemUsIHR5cGVuYW1lIFdv
cmRUeXBlLCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGU+CitpbmxpbmUgYm9vbCBCaXRtYXA8
c2l6ZSwgV29yZFR5cGUsIGF0b21pY01vZGU+OjpnZXQoc2l6ZV90IG4pIGNvbnN0CiB7CiAgICAg
cmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplXSAmIChvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpKTsK
IH0KIAotdGVtcGxhdGU8c2l6ZV90IHNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZT4K
LWlubGluZSB2b2lkIEJpdG1hcDxzaXplLCBhdG9taWNNb2RlPjo6c2V0KHNpemVfdCBuKQordGVt
cGxhdGU8c2l6ZV90IHNpemUsIHR5cGVuYW1lIFdvcmRUeXBlLCBCaXRtYXBBdG9taWNNb2RlIGF0
b21pY01vZGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8c2l6ZSwgV29yZFR5cGUsIGF0b21pY01vZGU+
OjpzZXQoc2l6ZV90IG4pCiB7CiAgICAgYml0c1tuIC8gd29yZFNpemVdIHw9IChvbmUgPDwgKG4g
JSB3b3JkU2l6ZSkpOwogfQogCi10ZW1wbGF0ZTxzaXplX3Qgc2l6ZSwgQml0bWFwQXRvbWljTW9k
ZSBhdG9taWNNb2RlPgotaW5saW5lIGJvb2wgQml0bWFwPHNpemUsIGF0b21pY01vZGU+Ojp0ZXN0
QW5kU2V0KHNpemVfdCBuKQordGVtcGxhdGU8c2l6ZV90IHNpemUsIHR5cGVuYW1lIFdvcmRUeXBl
LCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGU+CitpbmxpbmUgYm9vbCBCaXRtYXA8c2l6ZSwg
V29yZFR5cGUsIGF0b21pY01vZGU+Ojp0ZXN0QW5kU2V0KHNpemVfdCBuKQogewogICAgIFdvcmRU
eXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7CiAgICAgc2l6ZV90IGluZGV4ID0gbiAv
IHdvcmRTaXplOwpAQCAtMTAwLDggKzk3LDggQEAgaW5saW5lIGJvb2wgQml0bWFwPHNpemUsIGF0
b21pY01vZGU+Ojp0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHNpemVfdCBz
aXplLCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGU+Ci1pbmxpbmUgYm9vbCBCaXRtYXA8c2l6
ZSwgYXRvbWljTW9kZT46OnRlc3RBbmRDbGVhcihzaXplX3QgbikKK3RlbXBsYXRlPHNpemVfdCBz
aXplLCB0eXBlbmFtZSBXb3JkVHlwZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2RlPgoraW5s
aW5lIGJvb2wgQml0bWFwPHNpemUsIFdvcmRUeXBlLCBhdG9taWNNb2RlPjo6dGVzdEFuZENsZWFy
KHNpemVfdCBuKQogewogICAgIFdvcmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7
CiAgICAgc2l6ZV90IGluZGV4ID0gbiAvIHdvcmRTaXplOwpAQCAtMTEwLDggKzEwNyw4IEBAIGlu
bGluZSBib29sIEJpdG1hcDxzaXplLCBhdG9taWNNb2RlPjo6dGUKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi10ZW1wbGF0ZTxzaXplX3Qgc2l6ZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2Rl
PgotaW5saW5lIGJvb2wgQml0bWFwPHNpemUsIGF0b21pY01vZGU+Ojpjb25jdXJyZW50VGVzdEFu
ZFNldChzaXplX3QgbikKK3RlbXBsYXRlPHNpemVfdCBzaXplLCB0eXBlbmFtZSBXb3JkVHlwZSwg
Qml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2RlPgoraW5saW5lIGJvb2wgQml0bWFwPHNpemUsIFdv
cmRUeXBlLCBhdG9taWNNb2RlPjo6Y29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90IG4pCiB7CiAg
ICAgaWYgKGF0b21pY01vZGUgPT0gQml0bWFwTm90QXRvbWljKQogICAgICAgICByZXR1cm4gdGVz
dEFuZFNldChuKTsKQEAgLTEzMCw4ICsxMjcsOCBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8c2l6ZSwg
YXRvbWljTW9kZT46OmNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10ZW1wbGF0ZTxzaXplX3Qg
c2l6ZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2RlPgotaW5saW5lIGJvb2wgQml0bWFwPHNp
emUsIGF0b21pY01vZGU+Ojpjb25jdXJyZW50VGVzdEFuZENsZWFyKHNpemVfdCBuKQordGVtcGxh
dGU8c2l6ZV90IHNpemUsIHR5cGVuYW1lIFdvcmRUeXBlLCBCaXRtYXBBdG9taWNNb2RlIGF0b21p
Y01vZGU+CitpbmxpbmUgYm9vbCBCaXRtYXA8c2l6ZSwgV29yZFR5cGUsIGF0b21pY01vZGU+Ojpj
b25jdXJyZW50VGVzdEFuZENsZWFyKHNpemVfdCBuKQogewogICAgIGlmIChhdG9taWNNb2RlID09
IEJpdG1hcE5vdEF0b21pYykKICAgICAgICAgcmV0dXJuIHRlc3RBbmRDbGVhcihuKTsKQEAgLTE1
MCwyOCArMTQ3LDI4IEBAIGlubGluZSBib29sIEJpdG1hcDxzaXplLCBhdG9taWNNb2RlPjo6Y28K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8c2l6ZV90IHNpemUsIEJpdG1hcEF0b21p
Y01vZGUgYXRvbWljTW9kZT4KLWlubGluZSB2b2lkIEJpdG1hcDxzaXplLCBhdG9taWNNb2RlPjo6
Y2xlYXIoc2l6ZV90IG4pCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZSwgdHlwZW5hbWUgV29yZFR5cGUs
IEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZT4KK2lubGluZSB2b2lkIEJpdG1hcDxzaXplLCBX
b3JkVHlwZSwgYXRvbWljTW9kZT46OmNsZWFyKHNpemVfdCBuKQogewogICAgIGJpdHNbbiAvIHdv
cmRTaXplXSAmPSB+KG9uZSA8PCAobiAlIHdvcmRTaXplKSk7CiB9CiAKLXRlbXBsYXRlPHNpemVf
dCBzaXplLCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGU+Ci1pbmxpbmUgdm9pZCBCaXRtYXA8
c2l6ZSwgYXRvbWljTW9kZT46OmNsZWFyQWxsKCkKK3RlbXBsYXRlPHNpemVfdCBzaXplLCB0eXBl
bmFtZSBXb3JkVHlwZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2RlPgoraW5saW5lIHZvaWQg
Qml0bWFwPHNpemUsIFdvcmRUeXBlLCBhdG9taWNNb2RlPjo6Y2xlYXJBbGwoKQogewogICAgIG1l
bXNldChiaXRzLmRhdGEoKSwgMCwgc2l6ZW9mKGJpdHMpKTsKIH0KIAotdGVtcGxhdGU8c2l6ZV90
IHNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZT4KLWlubGluZSBzaXplX3QgQml0bWFw
PHNpemUsIGF0b21pY01vZGU+OjpuZXh0UG9zc2libHlVbnNldChzaXplX3Qgc3RhcnQpIGNvbnN0
Cit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZSwgdHlwZW5hbWUgV29yZFR5cGUsIEJpdG1hcEF0b21pY01v
ZGUgYXRvbWljTW9kZT4KK2lubGluZSBzaXplX3QgQml0bWFwPHNpemUsIFdvcmRUeXBlLCBhdG9t
aWNNb2RlPjo6bmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewogICAgIGlm
ICghfmJpdHNbc3RhcnQgLyB3b3JkU2l6ZV0pCiAgICAgICAgIHJldHVybiAoKHN0YXJ0IC8gd29y
ZFNpemUpICsgMSkgKiB3b3JkU2l6ZTsKICAgICByZXR1cm4gc3RhcnQgKyAxOwogfQogCi10ZW1w
bGF0ZTxzaXplX3Qgc2l6ZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2RlPgotaW5saW5lIGlu
dDY0X3QgQml0bWFwPHNpemUsIGF0b21pY01vZGU+OjpmaW5kUnVuT2ZaZXJvcyhzaXplX3QgcnVu
TGVuZ3RoKSBjb25zdAordGVtcGxhdGU8c2l6ZV90IHNpemUsIHR5cGVuYW1lIFdvcmRUeXBlLCBC
aXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGU+CitpbmxpbmUgaW50NjRfdCBCaXRtYXA8c2l6ZSwg
V29yZFR5cGUsIGF0b21pY01vZGU+OjpmaW5kUnVuT2ZaZXJvcyhzaXplX3QgcnVuTGVuZ3RoKSBj
b25zdAogewogICAgIGlmICghcnVuTGVuZ3RoKSAKICAgICAgICAgcnVuTGVuZ3RoID0gMTsgCkBA
IC0xOTAsOCArMTg3LDggQEAgaW5saW5lIGludDY0X3QgQml0bWFwPHNpemUsIGF0b21pY01vZGU+
OgogICAgIHJldHVybiAtMTsKIH0KIAotdGVtcGxhdGU8c2l6ZV90IHNpemUsIEJpdG1hcEF0b21p
Y01vZGUgYXRvbWljTW9kZT4KLWlubGluZSBzaXplX3QgQml0bWFwPHNpemUsIGF0b21pY01vZGU+
Ojpjb3VudChzaXplX3Qgc3RhcnQpIGNvbnN0Cit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZSwgdHlwZW5h
bWUgV29yZFR5cGUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZT4KK2lubGluZSBzaXplX3Qg
Qml0bWFwPHNpemUsIFdvcmRUeXBlLCBhdG9taWNNb2RlPjo6Y291bnQoc2l6ZV90IHN0YXJ0KSBj
b25zdAogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIGZvciAoIDsgKHN0YXJ0ICUgd29y
ZFNpemUpOyArK3N0YXJ0KSB7CkBAIC0yMDMsOCArMjAwLDggQEAgaW5saW5lIHNpemVfdCBCaXRt
YXA8c2l6ZSwgYXRvbWljTW9kZT46OgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRl
PHNpemVfdCBzaXplLCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGU+Ci1pbmxpbmUgc2l6ZV90
IEJpdG1hcDxzaXplLCBhdG9taWNNb2RlPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTxzaXpl
X3Qgc2l6ZSwgdHlwZW5hbWUgV29yZFR5cGUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZT4K
K2lubGluZSBzaXplX3QgQml0bWFwPHNpemUsIFdvcmRUeXBlLCBhdG9taWNNb2RlPjo6aXNFbXB0
eSgpIGNvbnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQogICAg
ICAgICBpZiAoYml0c1tpXSkKQEAgLTIxMiw4ICsyMDksOCBAQCBpbmxpbmUgc2l6ZV90IEJpdG1h
cDxzaXplLCBhdG9taWNNb2RlPjo6CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHNp
emVfdCBzaXplLCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGU+Ci1pbmxpbmUgc2l6ZV90IEJp
dG1hcDxzaXplLCBhdG9taWNNb2RlPjo6aXNGdWxsKCkgY29uc3QKK3RlbXBsYXRlPHNpemVfdCBz
aXplLCB0eXBlbmFtZSBXb3JkVHlwZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2RlPgoraW5s
aW5lIHNpemVfdCBCaXRtYXA8c2l6ZSwgV29yZFR5cGUsIGF0b21pY01vZGU+Ojppc0Z1bGwoKSBj
b25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKICAgICAgICAg
aWYgKH5iaXRzW2ldKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211960</attachid>
            <date>2013-09-17 18:20:42 -0700</date>
            <delta_ts>2013-09-19 12:56:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121074-20130917181941.patch</filename>
            <type>text/plain</type>
            <size>171596</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MDE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNyBA
QAorMjAxMy0wOS0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIGdlbmVyYXRpb25hbCBnYXJiYWdlIGNvbGxlY3Rv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMDc0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRy
OjpGdW5jdGlvblB0cik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6CisgICAg
ICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmls
ZUJhc2U6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1
dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJhbnNpdGlvblN0dWIp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Z2VuZXJpY1dyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvcHlXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
Z2VuZXJpY0FkZFNwYW4pOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToK
KyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZUR1cmluZ0NvcHlpbmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6Q29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6Q29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6ZGlkRXZh
Y3VhdGVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpwaW4pOgorICAgICAgICAo
SlNDOjpDb3BpZWRCbG9jazo6dW5waW4pOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6aXNP
bGQpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9j
azo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nV3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6Q29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcpOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZGlkU3RhcnRGdWxs
Q29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZyk6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6
OkNvcGllZFNwYWNlOjp3aWxsQWJhbmRvblN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6ZGlkQXNzaWduU3RvcmFnZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgor
ICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6aGVhcCk6CisgICAgICAgICogaGVhcC9Db3B5Vmlz
aXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3Bh
Y2UpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3cpOgor
ICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAg
ICAgICAoSlNDOjpIZWFwOjpkaWRBYmFuZG9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jv
b3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9S
ZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JE
ZWZlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmRpZEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d2lsbEFiYW5kb25TdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkQXNzaWduU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvcHlXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAg
ICAgICAoSlNDOjpIZWFwOjppc0luUmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6
Om9wZXJhdGlvbkluUHJvZ3Jlc3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpzaG91bGRDb2xsZWN0
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBoZWFwL01hcmtTdGFjay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtT
dGFja0FycmF5OjpmaWxsVmVjdG9yKToKKyAgICAgICAgKiBoZWFwL01hcmtTdGFjay5oOgorICAg
ICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6aXNMaXN0UGFn
ZWRPdXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKToKKyAgICAgICAg
KEpTQzo6TWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6cmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJl
c2V0KToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpN
YXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6Zm9yRWFjaEJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNsZWFyTWFya3MpOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6Y2xlYXJSZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OmNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2su
aDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6ZGlkQ29uc3VtZUVtcHR5RnJlZUxpc3QpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6c2V0UmVtZW1iZXJlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpjbGVhclJlbWVtYmVyZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXRvbWljQ2xl
YXJSZW1lbWJlcmVkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzUmVtZW1iZXJlZCk6
CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjpyZXNldEFsbG9jYXRvcnMpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6dmlzaXRX
ZWFrU2V0cyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpyZWFwV2Vha1NldHMpOgorICAg
ICAgICAoSlNDOjpWZXJpZnlNYXJrZWQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRTcGFjZTo6Y2xlYXJNYXJrcyk6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5oOgorICAg
ICAgICAoSlNDOjpDbGVhck1hcmtzOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6Q2xlYXJS
ZW1lbWJlcmVkU2V0OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmRp
ZEFsbG9jYXRlSW5CbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpjbGVhclJlbWVt
YmVyZWRTZXQpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmNsZWFyTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
ICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya1N0
YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNoYXJlZERhdGEpOgorICAgICAgICAq
IGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpp
bnRlcm5hbEFwcGVuZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1bmNvbmRpdGlvbmFs
bHlBcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29weUxhdGVyKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmhlYXApOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVByb2Zp
bGluZ1NpdGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0
R2xvYmFsUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2Nv
bnN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbml0X2dsb2JhbF9jb25zdCk6
CisgICAgICAgIChKU0M6OkpJVDo6Y2hlY2tNYXJrV29yZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5F
X1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxs
aW50L0xMSW50Q29tbW9uLmg6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfd3JpdGVfYmFycmllcl9zbG93KToKKyAgICAgICAg
KEpTQzo6TExJbnQ6OmxsaW50X3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcl9zbG93KToKKyAg
ICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmI6
CisgICAgICAgICogb2ZmbGluZWFzbS94ODYucmI6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJm
bHkuaDoKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5Ojp0b3RhbFNpemUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRp
bWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0
aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1
b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6d2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0
U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVE
YXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKiBydW50aW1lL01hcERhdGEuY3Bw
OgorICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVuZCk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0
YTo6c2V0UHJldmlvdXNJRCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRP
YmplY3RUb1N0cmluZ1ZhbHVlKToKKwogMjAxMy0wOS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBDaGVja1N0cnVjdHVyZSBmb3IgY2hlY2tpbmcgdGhl
IHR5cGVzIG9mIHR5cGVkIGFycmF5cyB3aGVuZXZlciBwb3NzaWJsZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCShyZXZpc2lvbiAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSByZXR1cm5UeXBlLCB0eXBlbmFtZSBhcmdU
eXBlMSwgdHlwZW5hbWUgYXJnVHlwZTIsIHR5cGVuYW1lIGFyZ1R5cGUzLCB0eXBlbmFtZSBhcmdU
eXBlNCwgdHlwZW5hbWUgYXJnVHlwZTUsIHR5cGVuYW1lIGFyZ1R5cGU2PgorICAgIEZ1bmN0aW9u
UHRyKHJldHVyblR5cGUoKnZhbHVlKShhcmdUeXBlMSwgYXJnVHlwZTIsIGFyZ1R5cGUzLCBhcmdU
eXBlNCwgYXJnVHlwZTUsIGFyZ1R5cGU2KSkKKyAgICAgICAgOiBtX3ZhbHVlKCh2b2lkKil2YWx1
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7Cisg
ICAgfQorCiAvLyBNU1ZDIGRvZXNuJ3Qgc2VlbSB0byB0cmVhdCBmdW5jdGlvbnMgd2l0aCBkaWZm
ZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucyBhcwogLy8gZGlmZmVyZW50IHR5cGVzOyB0aGVzZSBt
ZXRob2RzIGFscmVhZHkgZGVmaW5lZCBmb3IgZmFzdGNhbGwsIGJlbG93LgogI2lmIENBTExJTkdf
Q09OVkVOVElPTl9JU19TVERDQUxMICYmICFPUyhXSU5ET1dTKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1NTg5NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDIwLDcgKzI0MjAsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0
cm9uZ1JlZmVyCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVzLnNpemUoKTsgKytpKQogICAgICAgICBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
c1tpXS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIAotICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25z
KENvbGxlY3Rpb24pOworICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKHZpc2l0b3IuaGVhcCgpLT5v
cGVyYXRpb25JblByb2dyZXNzKCkpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMTU1ODk1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAg
ICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChvcGVyYXRpb24gPT0gQ29sbGVjdGlvbgorICAg
ICAgICBpZiAoKG9wZXJhdGlvbiA9PSBGdWxsQ29sbGVjdGlvbiB8fCBvcGVyYXRpb24gPT0gRWRl
bkNvbGxlY3Rpb24pCiAgICAgICAgICAgICAmJiAhbV9zaW5nbGV0b25WYWx1ZUlzVG9wCiAgICAg
ICAgICAgICAmJiAhIW1fc2luZ2xldG9uVmFsdWUKICAgICAgICAgICAgICYmIG1fc2luZ2xldG9u
VmFsdWUuaXNDZWxsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NTg5NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2OCw3ICsxMjY4LDYgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSk7Ci0KICAgICAgICAgZmlsdGVyKHZhbHVlLCBub2RlLT5zdHJ1
Y3R1cmUoKSk7CiAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3
ICsyNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQ
UlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcg
YXJnNCwgR1BSUmVnIGFyZzUpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJS
ZWcgYXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwogICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMjczLDEwICsy
NzMsOSBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKICAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7Ci0g
ICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcg
YXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCiAgICAgewogICAgICAgICByZXNldENhbGxBcmd1bWVu
dHMoKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKQEAgLTI4Niw3ICsyODUsMTYgQEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQo
YXJnNCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVk
SW1tMzIgYXJnNCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIEdQUlJlZyBhcmcz
KQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxB
cmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRD
YWxsQXJndW1lbnQoYXJnMyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBh
cmczLCBUcnVzdGVkSW1tUHRyIGFyZzQpCiAgICAgewogICAgICAgICByZXNldENhbGxBcmd1bWVu
dHMoKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKQEAgLTI5NiwxNiArMzA0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzQpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgR1BSUmVn
IGFyZzMpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBUcnVzdGVkSW1t
MzIgYXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwogICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBhZGRD
YWxsQXJndW1lbnQoYXJnMSk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKICAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7
CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVkSW1tUHRy
IGFyZzQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tMzIgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJS
ZWcgYXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwogICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMzE1LDcgKzMy
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQp
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJS
ZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFy
ZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRz
KCk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CkBAIC0zMjMsOSArMzMyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzIpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CiAgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmc0KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOwogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bTMyIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3Rl
ZEltbTMyIGFyZzUpCiAgICAgewogICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKICAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTMzMyw2
ICszNDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKICAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7
CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0LCBHUFJSZWcgYXJnNSkKQEAgLTk1OCw2ICs5
NjksMjAgQEAgcHVibGljOgogICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMiwgYXJnMyk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVz
dGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAg
ICAgICAgcG9rZShhcmc1LCBQT0tFX0FSR1VNRU5UX09GRlNFVCArIDEpOworICAgICAgICBwb2tl
KGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAg
IHsKKyAgICAgICAgcG9rZShhcmc1LCBQT0tFX0FSR1VNRU5UX09GRlNFVCArIDEpOworICAgICAg
ICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKwogICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCiAgICAgewogICAg
ICAgICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKQEAgLTEwNjYsNiArMTA5MSwy
OSBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsK
ICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICB9CisKKyNlbmRpZgorCisjaWYgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lT
VEVSUyA9PSA2CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywg
R1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgc2V0dXBUd29T
dHViQXJnczxHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSND4oYXJn
MSwgYXJnNCk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAg
ICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBtb3ZlKGFy
ZzUsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFy
ZzUpCisgICAgeworICAgICAgICBwdXNoKGFyZzEpOworICAgICAgICBzZXR1cFR3b1N0dWJBcmdz
PEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFI0PihhcmcyLCBhcmc0
KTsKKyAgICAgICAgcG9wKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBtb3ZlKGFy
ZzUsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQogI2VuZGlmCiAKICAg
ICB2b2lkIHNldHVwUmVzdWx0cyhHUFJSZWcgZGVzdEEsIEdQUlJlZyBkZXN0QikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU1
ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc0NCw4ICsxNzQ0LDExIEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUmVhbGxvY2F0ZUIKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBvYmplY3QtPndpbGxS
ZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLCBvYmplY3QtPmJ1dHRl
cmZseSgpKTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0
b3JhZ2Uodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CiAgICAgb2JqZWN0LT5zZXRC
dXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAgICBvYmplY3QtPmRp
ZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0dXJlKCksIHJlc3VsdCk7CiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKQEAgLTE3NTQs
OCArMTc1NywxMSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CiAKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgb2JqZWN0
LT53aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgb2JqZWN0
LT5idXR0ZXJmbHkoKSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRP
ZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBuZXdTaXplKTsKICAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVj
dHVyZShyZXN1bHQpOworICAgIG9iamVjdC0+ZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMTk1Miw2ICsxOTU4LDMwIEBAIHNpemVfdCBERkdfT1BF
UkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCit2b2lkIERGR19PUEVSQVRJT04gZGZnQ29w
eVdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgdm9pZCogb2xkUHRy
LCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRyLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKworICAgIGV4ZWMtPmhlYXAoKS0+Y29weVdyaXRlQmFycmllcihjZWxsLCBvbGRQ
dHIsIG9sZFNpemUsIG5ld1B0ciwgbmV3U2l6ZSk7Cit9CisKK3ZvaWQgREZHX09QRVJBVElPTiBk
ZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxs
KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIoY2Vs
bCk7Cit9CisKK3ZvaWQgREZHX09QRVJBVElPTiBkZmdXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIG93bmVkKQoreworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisg
ICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIsIG93bmVkKTsKK30KKwogdm9pZCBE
RkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0
YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCB0eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50
MzJfdCwgZG91YmxlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRp
b25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7
CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3Rh
dGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRp
b25fRUNCKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBCdXR0ZXJmbHkqKTsKIHR5cGVkZWYgdm9pZCBE
RkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09w
ZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNhbGxG
cmFtZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0pK
KShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpA
QCAtMTMwLDcgKzEzMSw4IEBAIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmEKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VaWikoRXhl
Y1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIFN0cmluZ0ltcGwqIERGR19PUEVS
QVRJT04gKCpJX0RGR09wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwogdHlw
ZWRlZiBKU1N0cmluZyogREZHX09QRVJBVElPTiAoKkpzc19ERkdPcGVyYXRpb25fRVopKEV4ZWNT
dGF0ZSosIGludDMyX3QpOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zy
b21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKK3R5cGVkZWYg
dm9pZCBERkdfT1BFUkFUSU9OIChWX0RGR09wZXJhdGlvbl9FQ1BTUFMpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOworSlNDZWxsKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RG
X0lOVEVSTkFMOwogCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mgb3V0
IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBKSVQu
CiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKQEAgLTMxNyw2ICszMTksMTAgQEAgdm9pZCBERkdfT1BF
UkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2Vy
T1NSRW50cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0
cmVhbUluZGV4KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKK3Zv
aWQgREZHX09QRVJBVElPTiBkZmdDb3B5V3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOwordm9pZCBERkdfT1BFUkFUSU9OIGRmZ1dy
aXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3ZvaWQgREZHX09QRVJB
VElPTiBkZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwor
CiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9u
TmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNTU4OTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NDcsNzAgKzY0Nyw1NSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIo
CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5kZmcudmFsdWVUYWdHUFIpOwogI2VuZGlmCiAgICAgR1BSUmVnIHZhbHVlR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3Rl
cnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7
Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEdQUlJlZyBzY3JhdGNo
R1BSMjsKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IHRydWU7Ci0jZWxzZQot
ICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAK
LSAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwogICAgIAotICAgIGlmIChzY3JhdGNoR1BSID09
IEludmFsaWRHUFJSZWcgJiYgKHdyaXRlQmFycmllck5lZWRlZCB8fCBpc091dE9mTGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBz
Y3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFs
dWVHUFIpOwotI2Vsc2UKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxl
Y3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7CisgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lz
dGVycyk7CisgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7CiAjZW5kaWYKLSAgICAgICAgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQ
Uik7Ci0gICAgfQorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKKyAgICAKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogCisgICAg
Q0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpKTsKKworICAgIGFsbG9j
YXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKKyAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHViSml0LmJyYW5jaFB0cigK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgCi0jaWYgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2Ny
YXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1
ZUdQUiwgc2NyYXRjaEdQUik7Ci0jZWxzZQotICAgIHNjcmF0Y2hHUFIyID0gU3BlY3VsYXRpdmVK
SVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSLCBzY3Jh
dGNoR1BSKTsKLSNlbmRpZgotICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSMik7Ci0gICAgU3Bl
Y3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotICAgIHN0dWJKaXQu
cG9wKHNjcmF0Y2hHUFIyKTsKLSNlbmRpZgorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgd3Jp
dGVCYXJyaWVyT3BlcmF0aW9uID0gU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0
LCBiYXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpOwogICAgIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAg
ICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5l
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVs
c2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
IHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAg
ICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChp
c0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogICAgICAgICBzdHViSml0LnN0
b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2UgewotICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5C
dXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnRhZykpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsK
KyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAg
CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmYWlsdXJlOwogICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAg
ICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNl
UmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoc3R1YkppdCk7CiAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKICAg
ICAgICAgCiAgICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgc3R1
YkppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVn
aXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwogICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1w
KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwpAQCAt
NzE4LDYgKzcwMyw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICB9CiAg
ICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2Rl
QmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJpZXJPcGVyYXRpb24sIGRm
Z1VuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwg
ZmFpbHVyZUxhYmVsKTsKICAgICAgICAgICAgIApAQCAtNzYyLDM1ICs3NDgsMzQgQEAgc3RhdGlj
IHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBi
YXNlR1BSKTsKICAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gdmFsdWVHUFIpOwogICAgIAotICAg
IGJvb2wgbmVlZFNlY29uZFNjcmF0Y2ggPSBmYWxzZTsKLSAgICBib29sIG5lZWRUaGlyZFNjcmF0
Y2ggPSBmYWxzZTsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgbmVl
ZFNlY29uZFNjcmF0Y2ggPSB0cnVlOwotI2VuZGlmCisgICAgYm9vbCBuZWVkRm91cnRoU2NyYXRj
aCA9IGZhbHNlOwogICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7
Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOworICAgICAgICBuZWVkRm91cnRoU2Ny
YXRjaCA9IHRydWU7CiAgICAgfQogCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIyOwotICAgIGlmIChu
ZWVkU2Vjb25kU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IGJhc2VHUFIp
OwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIpOwotICAgICAgICBBU1NF
UlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIg
IT0gYmFzZUdQUik7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKKyAgICBB
U1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOworCisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIEFTU0VSVChzY3JhdGNo
R1BSMyAhPSBiYXNlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOwor
ICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7CisgICAgQVNTRVJUKHNjcmF0
Y2hHUFIzICE9IHNjcmF0Y2hHUFIyKTsKKyAgICAKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjQ7Cisg
ICAgaWYgKG5lZWRGb3VydGhTY3JhdGNoKSB7CisgICAgICAgIHNjcmF0Y2hHUFI0ID0gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjQgIT0g
YmFzZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSB2YWx1ZUdQUik7CisgICAg
ICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMSk7CisgICAgICAgIEFTU0VSVChz
Y3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAh
PSBzY3JhdGNoR1BSMyk7CiAgICAgfSBlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIyID0gSW52YWxp
ZEdQUlJlZzsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjM7Ci0gICAgaWYgKG5lZWRUaGlyZFNjcmF0
Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNT
RVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIz
ICE9IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hH
UFIyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOwot
ICAgICAgICAgICAgCisgICAgICAgIHNjcmF0Y2hHUFI0ID0gSW52YWxpZEdQUlJlZzsKKwogICAg
IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CkBAIC04MTEsMTIgKzc5
Niw5IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgfQogICAg
IH0KIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBBU1NFUlQobmVl
ZFNlY29uZFNjcmF0Y2gpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBJbnZhbGlkR1BSUmVn
KTsKICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3Ry
dWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAgU3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSNlbmRpZgorICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIHdyaXRlQmFycmllck9wZXJhdGlvbiA9IFNwZWN1bGF0aXZlSklUOjp3cml0ZUJh
cnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjb3B5V3JpdGVCYXJyaWVyT3BlcmF0aW9uOwogICAgIAogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKQEAgLTgzMiw2ICs4MTQs
NyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwogICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwogICAgICAg
ICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29w
aWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOworICAgICAg
ICAgICAgY29weVdyaXRlQmFycmllck9wZXJhdGlvbiA9IFNwZWN1bGF0aXZlSklUOjpjb3B5V3Jp
dGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIDAsIDAsIHNjcmF0Y2hHUFIxLCBuZXdTaXplLCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKQEAgLTg0Myw2ICs4
MjYsOCBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICBz
dHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcpOwogICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwogICAg
ICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOworICAg
ICAgICAgICAgLy8gVE9ETzogR2V0IHRoZSByZWFsIGJhc2Ugb2YgdGhlIG9sZCBCdXR0ZXJmbHku
CisgICAgICAgICAgICBjb3B5V3JpdGVCYXJyaWVyT3BlcmF0aW9uID0gU3BlY3VsYXRpdmVKSVQ6
OmNvcHlXcml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjMsIG9sZFNpemUs
IHNjcmF0Y2hHUFIxLCBuZXdTaXplLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjQpOwogICAgICAg
ICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yo
SlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hH
UFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIy
ID0gYXZhaWxhYmxlCiAgICAgICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZz
ZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZv
aWQqKSkgewpAQCAtOTA5LDYgKzg5NCw5IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9u
U3R1YigKICAgICB9CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHVi
Sml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJp
ZXJPcGVyYXRpb24sIGRmZ1VuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpOworICAgIGlmIChzY3Jh
dGNoR1BSMUhhc1N0b3JhZ2UpCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY29weVdyaXRlQmFy
cmllck9wZXJhdGlvbiwgZGZnQ29weVdyaXRlQmFycmllcik7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRS
ZXVzZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1
cmVMYWJlbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwx
NyArMTk0LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVn
IGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hH
UFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRC
eUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQ
UiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6
Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJl
bFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAg
c3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSkpOwogCi0gICAg
d3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2
YWx1ZUdQUiwgdmFsdWVVc2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMik7CiAKICAgICBKSVRD
b21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAg
ICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTY0V2l0aEFkZHJl
c3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
MCkpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwor
ICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3Jl
NjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSMSwgMCkpOwogCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1f
aml0LmxhYmVsKCk7CiAgICAgCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlm
aWVyTnVtYmVyKSk7CiAgICAgfQogICAgIFJlZ2lzdGVyU2V0IGN1cnJlbnRseVVzZWRSZWdpc3Rl
cnMgPSB1c2VkUmVnaXN0ZXJzKCk7Ci0gICAgY3VycmVudGx5VXNlZFJlZ2lzdGVycy5jbGVhcihz
Y3JhdGNoR1BSKTsKKyAgICBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2hHUFIx
KTsKICAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQoYmFzZUdQUikpOwogICAg
IEFTU0VSVChjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmdldCh2YWx1ZUdQUikpOwogICAgIG1faml0
LmFkZFByb3BlcnR5QWNjZXNzKApAQCAtMjU5MSw4ICsyNTkxLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzICYmIEhlYXA6
OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZh
bHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNo
LmdwcigpKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Cisg
ICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgICAgICAgICAg
ICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBzY3JhdGNoMS5n
cHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CkBAIC0yNjY1LDggKzI2NjYsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVu
YWJsZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwot
ICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQz
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIo
YmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdw
cigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBjaGlsZDQpOwpAQCAtMjc2Miw3ICsyNzY0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
CiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJndW1l
bnRzLCBtX3Nsb3dBcmd1bWVudHMpKSkpOwotICAgIAorCisgICAgICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZVJlZywgdmFsdWVSZWcsIGNoaWxkMywgc2NyYXRjaFJlZywgc2NyYXRjaDJSZWcpOwor
CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHByb3BlcnR5UmVnLCBzY3JhdGNoMlJlZyk7CiAgICAg
ICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMlJlZywgc2NyYXRjaDJSZWcp
OwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTI4NjUsNyArMjg2OSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6SW50MzIgJiYgSGVhcDo6aXNXcml0ZUJh
cnJpZXJFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5v
ZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIo
KSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VH
UFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0
aEdQUik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTI5MTQsNyArMjkxOCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICAg
ICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVy
KGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVy
dHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAg
ICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0
Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwpAQCAtMzY3OCwxNCAr
MzY4MiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHJlZ2lzdGVycyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2hSZWdpc3RlcjIodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2Nv
cGUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7
CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hSZWdpc3Rlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIyID0gc2NyYXRjaFJlZ2lzdGVyMi5ncHIoKTsKIAogICAgICAgICBtX2ppdC5zdG9yZTY0
KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51
bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICB3cml0ZUJhcnJpZXIoc2NvcGVH
UFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nl
c3MsIHNjcmF0Y2hHUFIpOworICAgICAgICB3cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlR1BS
LCBub2RlLT5jaGlsZDMoKSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIpOwogICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzg4MSwxMyArMzg4NywxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG1faml0
LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9q
aXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsKIAogICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDIodGhpcyk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAg
Ci0gICAgICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAg
Ly8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0
cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQ
Uiwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUsIFdyaXRlQmFy
cmllckZvckdlbmVyaWNBY2Nlc3MpOwotI2VuZGlmCisgICAgICAgIHdyaXRlQmFycmllcihiYXNl
R1BSLCBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgc2NyYXRj
aDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3Jl
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkubmV3U3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogICAgICAgICAKQEAgLTM5NDIsMTggKzM5NDcs
MTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7Ci0jZW5kaWYKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKICAgICAgICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAg
ICAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMygp
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKKyAgICAgICAgd3JpdGVC
YXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDMoKSwgc2NyYXRjaDEu
Z3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKIAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3Rv
cmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+
c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCkBAIC0zOTY2LDM2ICszOTY5LDM0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFB1
dEJ5SWQ6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRo
aXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBzY3Jh
dGNoMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7
CiAgICAgICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsKKyAg
ICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwg
bm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgbm9kZS0+aWRlbnRpZmll
ck51bWJlcigpLCBOb3REaXJlY3QpOwogCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29k
ZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNoR1BSLCBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7Ci0gICAgICAgIAotICAgICAgICBu
b1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkRGly
ZWN0OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlz
KTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRj
aDEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwog
ICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7Ci0KLSAg
ICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwg
bm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGly
ZWN0KTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2
YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgbm9kZS0+
aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwogCi0gICAgICAgIG5vUmVzdWx0KG5vZGUsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTQwMTIsMTAgKzQwMTMsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB3cml0
ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCB2YWx1ZS5n
cHIoKSwgbm9kZS0+Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3Jh
dGNoUmVnKTsKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDEoKSwgc2NyYXRjaDEu
Z3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9q
aXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpOwpAQCAtNDI5
Niw5ICs0Mjk3LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KTsKIAogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhY3RpdmF0aW9uVmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDIodGhpcyk7CiAgICAgICAgIEdQUlJlZyBhY3RpdmF0aW9uVmFsdWVHUFIgPSBhY3RpdmF0aW9u
VmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwogCiAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8s
IGFjdGl2YXRpb25WYWx1ZUdQUik7CiAKQEAgLTQzMDksMTMgKzQzMTIsMTQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBmb3IgKGludCBpID0gc3lt
Ym9sVGFibGUtPmNhcHR1cmVTdGFydCgpOyBpID4gY2FwdHVyZUVuZDsgLS1pKSB7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkNjQoCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
Ci0gICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgaSAqIHNpemVvZihSZWdpc3RlcikpLCBzY3JhdGNoR1BSMSk7
CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIs
IEpJVENvbXBpbGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxLCBKSVRD
b21waWxlcjo6QWRkcmVzcygKICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGlvblZhbHVlR1BS
LCByZWdpc3RlcnNPZmZzZXQgKyBpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICB9Ci0g
ICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJzT2Zmc2V0KSwgYWN0aXZh
dGlvblZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYWN0aXZhdGlvblZhbHVlR1BSLCBKU0FjdGl2YXRp
b246Om9mZnNldE9mUmVnaXN0ZXJzKCkpKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJ
bW0zMihyZWdpc3RlcnNPZmZzZXQpLCBhY3RpdmF0aW9uVmFsdWVHUFIsIHNjcmF0Y2hHUFIxKTsK
KyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KGFjdGl2YXRpb25WYWx1ZUdQUiwgSlNBY3RpdmF0aW9uOjpvZmZzZXRPZlJlZ2lzdGVycygpKSk7
CisgICAgICAgIHdyaXRlQmFycmllcihhY3RpdmF0aW9uVmFsdWVHUFIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMik7CiAKICAgICAgICAgbm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7CiAgICAgICAg
IG5vUmVzdWx0KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzMs
NjcgKzgzMywyMDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSogbgog
ICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1i
bGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIs
IFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKK3N0YXRpYyBKSVRDb21waWxlcjo6SnVtcCBn
ZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIC8vIENvcHkgb3duZXIgdG8gc2Ny
YXRjaDEKKyAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDEpOworICAgIC8vIENvcHkgb3duZXIg
dG8gc2NyYXRjaDIKKyAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDIpOworCisgICAgLy8gTWFz
ayBzY3JhdGNoMSB0byBibG9jaworICAgIGppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDEpOworICAgIC8vIE1hc2sg
c2NyYXRjaDIgdG8gaW5kZXgKKyAgICBqaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIofk1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMik7CisKKyAgICAvLyBTaGlm
dCBpbmRleAorICAgIGppdC5yc2hpZnQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMg
KyA0KSwgc2NyYXRjaDIpOworCisgICAgLy8gRW1pdCBsb2FkIGFuZCBicmFuY2gKKyAgICByZXR1
cm4gaml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBN
YXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSk7Cit9CisKK3N0YXRpYyBKSVRDb21waWxlcjo6
SnVtcCBnZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBKU0NlbGwqIG93bmVy
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyAvKnNjcmF0Y2gyKi8pCit7CisgICAgTWFya2VkQmxv
Y2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKTsKKyAgICBzaXplX3QgbWFy
a0luZGV4ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihvd25lcikgJiB+TWFya2VkQmxvY2s6
OmJsb2NrTWFzaykgPj4gKDMgKyA0KTsKKyAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsgTWFya2Vk
QmxvY2s6Om9mZnNldE9mTWFya3MoKSkgKyBtYXJrSW5kZXg7CisKKyAgICAvLyBFbWl0IGxvYWQg
YW5kIGJyYW5jaAorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGFk
ZHJlc3MpLCBzY3JhdGNoMSk7CisgICAgcmV0dXJuIGppdC5icmFuY2hUZXN0OChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEpKTsKK30KKworTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJhcnJpZXIoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIG9sZFN0b3JhZ2UsIHNpemVfdCBvbGRT
aXplLCBHUFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RN
YXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKGppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNo
Mik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7ICsraSkKKyAgICAgICAgaml0LnB1c2goR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Cisg
ICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvd25lciwgb2xkU3RvcmFnZSwgVHJ1
c3RlZEltbTMyKG9sZFNpemUpLCBuZXdTdG9yYWdlLCBUcnVzdGVkSW1tMzIobmV3U2l6ZSkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBqaXQu
cG9wKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5s
aW5rKCZqaXQpOworICAgIHJldHVybiBjYWxsOworfQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBT
cGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IG93bmVyLCB2b2lkKiBvbGRTdG9yYWdlLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1N0b3Jh
Z2UsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRl
QmFycmllcihqaXQsIG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAg
IGppdC5wdXNoKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUob3duZXIsIFRydXN0ZWRJbW1QdHIob2xkU3RvcmFnZSksIFRydXN0ZWRJ
bW0zMihvbGRTaXplKSwgbmV3U3RvcmFnZSwgVHJ1c3RlZEltbTMyKG5ld1NpemUpKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgaml0LnBvcChH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygm
aml0KTsKKyAgICByZXR1cm4gY2FsbDsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29weVdy
aXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBvbGRTdG9yYWdlLCBzaXplX3Qgb2xkU2l6
ZSwgR1BSUmVnIG5ld1N0b3JhZ2UsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFy
a2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNo
Mik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBj
YWxsT3BlcmF0aW9uKGRmZ0NvcHlXcml0ZUJhcnJpZXIsIG93bmVyLCBvbGRTdG9yYWdlLCBvbGRT
aXplLCBuZXdTdG9yYWdlLCBuZXdTaXplKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKElu
dmFsaWRHUFJSZWcpOworICAgIC8vIE5lZWQgdG8gcmVsb2FkIHRoZSBidXR0ZXJmbHkgcG9pbnRl
ciBzaW5jZSBmaWxsaW5nIHdvbid0IHJlbG9hZCBpdCBzaW5jZSBpdCdzIGEgdGVtcG9yYXJ5Lgor
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3duZXIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIG5ld1N0b3JhZ2UpOworCisgICAgZGVmaW5pdGVseU5vdE1h
cmtlZC5saW5rKCZtX2ppdCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJh
cnJpZXIoR1BSUmVnIG93bmVyLCB2b2lkKiBvbGRTdG9yYWdlLCBzaXplX3Qgb2xkU2l6ZSwgR1BS
UmVnIG5ld1N0b3JhZ2UsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0g
Z2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisK
KyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKGRmZ0NvcHlXcml0ZUJhcnJpZXIsIG93bmVyLCBvbGRTdG9yYWdlLCBvbGRTaXplLCBu
ZXdTdG9yYWdlLCBuZXdTaXplKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRH
UFJSZWcpOworICAgIC8vIE5lZWQgdG8gcmVsb2FkIHRoZSBidXR0ZXJmbHkgcG9pbnRlciBzaW5j
ZSBmaWxsaW5nIHdvbid0IHJlbG9hZCBpdCBzaW5jZSBpdCdzIGEgdGVtcG9yYXJ5LgorICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3duZXIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIG5ld1N0b3JhZ2UpOworCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5s
aW5rKCZtX2ppdCk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjp3
cml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGppdCk7Ci0gICAgVU5V
U0VEX1BBUkFNKG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNF
RF9QQVJBTShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwogICAgIEFTU0VS
VChvd25lciAhPSBzY3JhdGNoMSk7CiAgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKLSAg
ICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQoaml0LCBXcml0ZUJhcnJp
ZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihqaXQs
IG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGppdC5wdXNoKEdQ
UkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUob3duZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KQor
ICAgICAgICBqaXQucG9wKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworCisgICAgZGVmaW5pdGVs
eU5vdE1hcmtlZC5saW5rKCZqaXQpOworICAgIHJldHVybiBjYWxsOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIs
IEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIo
R1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsKLSAg
ICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwot
ICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0
ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXJHUFIsIHNjcmF0
Y2gxLCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ1VuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93
bmVyR1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisj
aWZuZGVmIE5ERUJVRyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvd25lck5vdE51bGwg
PSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG93bmVyR1BSKTsK
KyAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgb3duZXJOb3ROdWxsLmxpbmsoJm1faml0KTsK
KyNlbmRpZgorCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7Cit9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2
YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIp
Cit7CiAgICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlVXNlLm5vZGUoKSkpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21w
aWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZv
cih1c2VLaW5kKSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOworICAgIGlmICgh
aXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQu
YnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJr
ZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0
Y2gyKTsKKworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAg
IGNhbGxPcGVyYXRpb24oZGZnV3JpdGVCYXJyaWVyLCBvd25lckdQUiwgdmFsdWVHUFIpOworICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisKKyNpZm5kZWYgTkRFQlVH
IAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG93bmVyTm90TnVsbCA9IG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3duZXJHUFIpOworICAgIG1faml0LmJyZWFr
cG9pbnQoKTsKKyAgICBvd25lck5vdE51bGwubGluaygmbV9qaXQpOworI2VuZGlmCisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdmFsdWVOb3ROdWxsID0gbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUik7CisgICAgbV9q
aXQuYnJlYWtwb2ludCgpOworICAgIHZhbHVlTm90TnVsbC5saW5rKCZtX2ppdCk7CiAjZW5kaWYK
KworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOworICAgIGlmICghaXNLbm93
bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwg
SlNDZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRj
aDEsIEdQUlJlZyBzY3JhdGNoMikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihH
UFJSZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFsdWUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
cmF0Y2gyKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7Ci0gICAgVU5VU0VEX1BBUkFN
KHZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJBTShz
Y3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotICAgIAogICAgIGlmIChIZWFw
Ojppc01hcmtlZCh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0
ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisgICAgSklUQ29tcGls
ZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQs
IG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihkZmdXcml0ZUJhcnJpZXIs
IG93bmVyR1BSLCB2YWx1ZSk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvd25lck5v
dE51bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG93bmVy
R1BSKTsKKyAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgb3duZXJOb3ROdWxsLmxpbmsoJm1f
aml0KTsKICNlbmRpZgorCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7CiB9
CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJS
ZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwg
R1BSUmVnIHNjcmF0Y2gpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY3JhdGNoMikKIHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXIpOwotICAgIFVOVVNF
RF9QQVJBTSh2YWx1ZUdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotICAgIFVOVVNF
RF9QQVJBTSh1c2VLaW5kKTsKLQogICAgIGlmIChpc0tub3duTm90Q2VsbCh2YWx1ZVVzZS5ub2Rl
KCkpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJ
TkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChtX2ppdCwgV3JpdGVCYXJyaWVyQ291bnRl
cnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90
Q2VsbDsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlz
Tm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVH
UFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVm
aW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVyLCBzY3Jh
dGNoMSwgc2NyYXRjaDIpOworCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQ
UlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihkZmdXcml0ZUJhcnJpZXIsIG93bmVyLCB2YWx1ZUdQ
Uik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKworI2lmbmRl
ZiBOREVCVUcKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB2YWx1ZU5vdE51bGwgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSKTsKKyAgICBtX2pp
dC5icmVha3BvaW50KCk7CisgICAgdmFsdWVOb3ROdWxsLmxpbmsoJm1faml0KTsKICNlbmRpZgor
CisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7CisgICAgaWYgKCFpc0tub3du
Q2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwog
fQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9kZSkKQEAgLTQyMTgs
NiArNDM1Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAg
ICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAgICAKICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOwpAQCAtNDIzNSw2ICs0MzcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2Ny
YXRjaEdQUikpOwogICAgICAgICAKICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsK
KyAgICBjb3B5V3JpdGVCYXJyaWVyKGJhc2VHUFIsIDAsIDAsIHNjcmF0Y2hHUFIsIGluaXRpYWxP
dXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSwgc2NyYXRjaDIuZ3ByKCksIHNjcmF0
Y2gzLmdwcigpKTsKICAgICAgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSLCBub2Rl
KTsKIH0KQEAgLTQyNjMsNiArNDQwMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVS
ZWFsbG9jYXRlUHIKICAgICBTdG9yYWdlT3BlcmFuZCBvbGRTdG9yYWdlKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsKICAg
ICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBvbGRT
dG9yYWdlR1BSID0gb2xkU3RvcmFnZS5ncHIoKTsKQEAgLTQyODIsNyArNDQyMSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIyLCAtKG9mZnNl
dCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CiAgICAgfQogICAgIG1faml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAKKyAgICBjb3B5V3JpdGVCYXJyaWVyKGJh
c2VHUFIsIG9sZFN0b3JhZ2VHUFIsIG9sZFNpemUsIHNjcmF0Y2hHUFIyLCBuZXdTaXplLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaDMuZ3ByKCkpOworCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BS
Miwgbm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDExICszMTgs
MTYgQEAgcHVibGljOgogICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25lckdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllclVzZUtp
bmQpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFs
dWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNo
R1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcp
OwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwg
V3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywg
R1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7Ci0gICAgdm9pZCB3cml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJh
cnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY29weVdyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgb3duZXIsIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUsIEdQUlJlZyBuZXdQ
dHIsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7Cisg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNvcHlXcml0ZUJhcnJpZXIoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIG93bmVyLCBHUFJSZWcgb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVn
IG5ld1B0ciwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gy
KTsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgd3JpdGVCYXJyaWVyKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwor
CisgICAgdm9pZCBjb3B5V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIG9sZFB0
ciwgc2l6ZV90IG9sZFNpemUsIEdQUlJlZyBuZXdQdHIsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCBjb3B5V3JpdGVCYXJyaWVyKEdQ
UlJlZyBvd25lckdQUiwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1B0
ciwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAg
ICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyB2
YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwor
ICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgSlNDZWxsKiB2YWx1ZSwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpOwogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQ
UlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxp
ZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2
ZTQgPSBJbnZhbGlkR1BSUmVnKQogICAgIHsKQEAgLTcyNCw3ICs3MjksNyBAQCBwdWJsaWM6CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBH
UFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgp
LCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7Ci0gICAgdm9pZCBjYWNoZWRQdXRC
eUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2Us
IEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwor
ICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHZh
bHVlLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BS
MiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFn
R1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVn
aXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKICAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9y
aWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2
YWx1ZVBheWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRh
cmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwpAQCAtMTAxOSw2ICsxMDI0LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ1BTUFMgb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHNpemVfdCBhcmczLCBHUFJSZWcgYXJnNCwgc2l6
ZV90IGFyZzUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0LCBUcnVzdGVkSW1tMzIoYXJn
NSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VDUFNQUyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCB2b2lkKiBhcmcyLCBzaXplX3Qg
YXJnMywgR1BSUmVnIGFyZzQsIHNpemVfdCBhcmc1KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMiksIFRydXN0
ZWRJbW0zMihhcmczKSwgYXJnNCwgVHJ1c3RlZEltbTMyKGFyZzUpKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9CiAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNzSnNzIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAt
MTA1Myw2ICsxMDY4LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9
CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VD
Q0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpKTsK
QEAgLTEwNzEsNiArMTA4NywzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Igb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
SlNDZWxsKiBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKworICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgSlND
ZWxsKiBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBhcmcyKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9CisKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkQgb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmczKQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fVyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhUcnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQp
KTsKQEAgLTEzMDIsMTIgKzEzNDIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VP
WkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmczKQotICAg
IHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIs
IGFyZzMpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24pOwotICAgIH0KLQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9E
RkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9p
ZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHJldmlzaW9u
IDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIENvbnNlcnZhdGl2ZVJv
b3RzOjpncm93KCkKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE1hcmtIb29rPgordGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2ssIEpTQzo6T3BlcmF0aW9u
SW5Qcm9ncmVzcyBvcGVyYXRpb24+CiBpbmxpbmUgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2Vu
ZXJpY0FkZFBvaW50ZXIodm9pZCogcCwgVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya0hvb2sm
IG1hcmtIb29rKQogewogICAgIG1hcmtIb29rLm1hcmsocCk7CkBAIC05MCw3ICs5MCw3IEBAIGlu
bGluZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWQKICAgICBtX3Jvb3RzW21fc2l6
ZSsrXSA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBN
YXJrSG9vaz4KK3RlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rLCBKU0M6Ok9wZXJhdGlvbkluUHJv
Z3Jlc3Mgb3BlcmF0aW9uPgogdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4o
dm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgTWFya0hvb2smIG1hcmtIb29rKQogewogICAgIGlmIChi
ZWdpbiA+IGVuZCkgewpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmdlbmVyaWNBZGRTcGFuKHYKIAogICAgIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIgPSBtX2Jsb2Nr
cy0+ZmlsdGVyKCk7IC8vIE1ha2UgYSBsb2NhbCBjb3B5IG9mIGZpbHRlciB0byBzaG93IHRoZSBj
b21waWxlciBpdCB3b24ndCBhbGlhcywgYW5kIGNhbiBiZSByZWdpc3Rlci1hbGxvY2F0ZWQuCiAg
ICAgZm9yIChjaGFyKiogaXQgPSBzdGF0aWNfY2FzdDxjaGFyKio+KGJlZ2luKTsgaXQgIT0gc3Rh
dGljX2Nhc3Q8Y2hhcioqPihlbmQpOyArK2l0KQotICAgICAgICBnZW5lcmljQWRkUG9pbnRlcigq
aXQsIGZpbHRlciwgbWFya0hvb2spOworICAgICAgICBnZW5lcmljQWRkUG9pbnRlcjxNYXJrSG9v
aywgb3BlcmF0aW9uPigqaXQsIGZpbHRlciwgbWFya0hvb2spOwogfQogCiBjbGFzcyBEdW1teU1h
cmtIb29rIHsKQEAgLTExNSwxMyArMTE1LDIxIEBAIHB1YmxpYzoKIAogdm9pZCBDb25zZXJ2YXRp
dmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQpCiB7CisgICAgT3BlcmF0aW9uSW5Q
cm9ncmVzcyBvcGVyYXRpb24gPSBtX2NvcGllZFNwYWNlLT5oZWFwKCktPm9wZXJhdGlvbkluUHJv
Z3Jlc3MoKTsKICAgICBEdW1teU1hcmtIb29rIGR1bW15OwotICAgIGdlbmVyaWNBZGRTcGFuKGJl
Z2luLCBlbmQsIGR1bW15KTsKKyAgICBpZiAob3BlcmF0aW9uID09IEZ1bGxDb2xsZWN0aW9uKQor
ICAgICAgICBnZW5lcmljQWRkU3BhbjxEdW1teU1hcmtIb29rLCBGdWxsQ29sbGVjdGlvbj4oYmVn
aW4sIGVuZCwgZHVtbXkpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48RHVtbXlN
YXJrSG9vaywgRWRlbkNvbGxlY3Rpb24+KGJlZ2luLCBlbmQsIGR1bW15KTsKIH0KIAogdm9pZCBD
b25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0
aW5lU2V0JiBqaXRTdHViUm91dGluZXMpCiB7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVu
ZCwgaml0U3R1YlJvdXRpbmVzKTsKKyAgICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiA9
IG1fY29waWVkU3BhY2UtPmhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpOworICAgIGlmIChv
cGVyYXRpb24gPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgIGdlbmVyaWNBZGRTcGFuPEpJVFN0
dWJSb3V0aW5lU2V0LCBGdWxsQ29sbGVjdGlvbj4oYmVnaW4sIGVuZCwgaml0U3R1YlJvdXRpbmVz
KTsKKyAgICBlbHNlCisgICAgICAgIGdlbmVyaWNBZGRTcGFuPEpJVFN0dWJSb3V0aW5lU2V0LCBF
ZGVuQ29sbGVjdGlvbj4oYmVnaW4sIGVuZCwgaml0U3R1YlJvdXRpbmVzKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KQEAgLTE0Nyw4ICsxNTUsMTIgQEAgcHJpdmF0ZToK
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCgKICAgICB2b2lkKiBiZWdpbiwgdm9pZCogZW5k
LCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVC
bG9ja3MpCiB7CisgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24gPSBtX2NvcGllZFNw
YWNlLT5oZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKTsKICAgICBDb21wb3NpdGVNYXJrSG9v
azxKSVRTdHViUm91dGluZVNldCwgQ29kZUJsb2NrU2V0PiBtYXJrSG9vayhqaXRTdHViUm91dGlu
ZXMsIGNvZGVCbG9ja3MpOwotICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIG1hcmtIb29r
KTsKKyAgICBpZiAob3BlcmF0aW9uID09IEZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBnZW5lcmlj
QWRkU3BhbjxDb21wb3NpdGVNYXJrSG9vazxKSVRTdHViUm91dGluZVNldCwgQ29kZUJsb2NrU2V0
PiwgRnVsbENvbGxlY3Rpb24+KGJlZ2luLCBlbmQsIG1hcmtIb29rKTsKKyAgICBlbHNlCisgICAg
ICAgIGdlbmVyaWNBZGRTcGFuPENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBD
b2RlQmxvY2tTZXQ+LCBFZGVuQ29sbGVjdGlvbj4oYmVnaW4sIGVuZCwgbWFya0hvb2spOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
MTAgKzUzLDEwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSA9IDEyODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNhcGFjaXR5ID0g
ODE5MiAvIHNpemVvZihKU0NlbGwqKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJr
SG9vaz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaywgSlNDOjpPcGVyYXRpb25JblBy
b2dyZXNzPgogICAgIHZvaWQgZ2VuZXJpY0FkZFBvaW50ZXIodm9pZCosIFRpbnlCbG9vbUZpbHRl
ciwgTWFya0hvb2smKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rLCBKU0M6Ok9wZXJhdGlvbkluUHJvZ3Jlc3M+CiAgICAg
dm9pZCBnZW5lcmljQWRkU3Bhbih2b2lkKiwgdm9pZCogZW5kLCBNYXJrSG9vayYpOwogICAgIAog
ICAgIHZvaWQgZ3JvdygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIGZhc3RQYXRoU2hvdWxkU3VjY2VlZChzaXplX3QgYnl0
ZXMpIGNvbnN0OwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywg
dm9pZCoqIG91dFB0cik7CisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVEdXJpbmdDb3B5
aW5nKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5
UmVhbGxvY2F0ZSh2b2lkICpvbGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVz
KTsKICAgICB2b2lkKiBmb3JjZUFsbG9jYXRlKHNpemVfdCBieXRlcyk7CiAgICAgQ29waWVkQmxv
Y2sqIHJlc2V0Q3VycmVudEJsb2NrKCk7CkBAIC05Myw2ICs5NCwxNCBAQCBpbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gQ29waWVkQWxsb2NhdG9yOjp0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGlu
ZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlRHVyaW5nQ29weWlu
ZyhzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAgaWYgKCF0cnlBbGxvY2F0ZShi
eXRlcywgb3V0UHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fY3VycmVudEJsb2Nr
LT5yZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKGJ5dGVzKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogaW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5UmVhbGxvY2F0
ZSgKICAgICB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVzKQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCShyZXZpc2lv
biAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NywxMiArNDcsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyBDb3Bp
ZWRCbG9jayogY3JlYXRlTm9aZXJvRmlsbChEZWFkQmxvY2sqKTsKIAogICAgIHZvaWQgcGluKCk7
CisgICAgdm9pZCB1bnBpbigpOwogICAgIGJvb2wgaXNQaW5uZWQoKTsKIAorICAgIGJvb2wgaXNP
bGQoKTsKICAgICBib29sIGlzT3ZlcnNpemUoKTsKIAogICAgIHVuc2lnbmVkIGxpdmVCeXRlcygp
OwogICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVzKEpTQ2VsbCosIENvcHlUb2tlbiwgdW5zaWduZWQp
OworICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVzRHVyaW5nV3JpdGVCYXJyaWVyKHVuc2lnbmVkKTsK
KyAgICB2b2lkIHJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcodW5zaWduZWQpOwogICAgIHZv
aWQgZGlkU3Vydml2ZUdDKCk7CiAgICAgdm9pZCBkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsK
ICAgICBib29sIHNob3VsZEV2YWN1YXRlKCk7CkBAIC05NCw3ICs5OCw4IEBAIHByaXZhdGU6CiAg
ICAgT3duUHRyPENvcHlXb3JrTGlzdD4gbV93b3JrTGlzdDsKIAogICAgIHNpemVfdCBtX3JlbWFp
bmluZzsKLSAgICB1aW50cHRyX3QgbV9pc1Bpbm5lZDsKKyAgICBib29sIG1faXNQaW5uZWQgOiAx
OworICAgIGJvb2wgbV9pc09sZCA6IDE7CiAgICAgdW5zaWduZWQgbV9saXZlQnl0ZXM7CiAjaWZu
ZGVmIE5ERUJVRwogICAgIHVuc2lnbmVkIG1fbGl2ZU9iamVjdHM7CkBAIC0xMDQsNyArMTA5LDcg
QEAgcHJpdmF0ZToKIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVy
b0ZpbGwoRGVhZEJsb2NrKiBibG9jaykKIHsKICAgICBSZWdpb24qIHJlZ2lvbiA9IGJsb2NrLT5y
ZWdpb24oKTsKLSAgICByZXR1cm4gbmV3KE5vdE51bGwsIGJsb2NrKSBDb3BpZWRCbG9jayhyZWdp
b24pOworICAgIHJldHVybiBuZXcgKE5vdE51bGwsIGJsb2NrKSBDb3BpZWRCbG9jayhyZWdpb24p
OwogfQogCiBpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZEJsb2NrOjpjcmVhdGUoRGVhZEJsb2Nr
KiBibG9jaykKQEAgLTEzMCw2ICsxMzUsNyBAQCBpbmxpbmUgQ29waWVkQmxvY2s6OkNvcGllZEJs
b2NrKFJlZ2lvbiogCiAgICAgOiBIZWFwQmxvY2s8Q29waWVkQmxvY2s+KHJlZ2lvbikKICAgICAs
IG1fcmVtYWluaW5nKHBheWxvYWRDYXBhY2l0eSgpKQogICAgICwgbV9pc1Bpbm5lZChmYWxzZSkK
KyAgICAsIG1faXNPbGQoZmFsc2UpCiAgICAgLCBtX2xpdmVCeXRlcygwKQogI2lmbmRlZiBOREVC
VUcKICAgICAsIG1fbGl2ZU9iamVjdHMoMCkKQEAgLTE1Niw2ICsxNjIsNyBAQCBpbmxpbmUgdm9p
ZCBDb3BpZWRCbG9jazo6ZGlkU3Vydml2ZUdDKCkKIGlubGluZSB2b2lkIENvcGllZEJsb2NrOjpk
aWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkIGJ5dGVzKQogewogICAgIEFTU0VSVChtX2xpdmVCeXRl
cyA+PSBieXRlcyk7CisgICAgQVNTRVJUKG1fbGl2ZU9iamVjdHMpOwogICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKICAgICBtX2xpdmVCeXRlcyAtPSBieXRlczsKICNpZm5kZWYgTkRFQlVHCkBAIC0x
NzgsMTYgKzE4NSwyNyBAQCBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkRXZhY3VhdGUo
CiAKIGlubGluZSB2b2lkIENvcGllZEJsb2NrOjpwaW4oKQogeworICAgIG1faXNPbGQgPSB0cnVl
OwogICAgIG1faXNQaW5uZWQgPSB0cnVlOwogICAgIGlmIChtX3dvcmtMaXN0KQogICAgICAgICBt
X3dvcmtMaXN0LmNsZWFyKCk7CiB9CiAKK2lubGluZSB2b2lkIENvcGllZEJsb2NrOjp1bnBpbigp
Cit7CisgICAgbV9pc1Bpbm5lZCA9IGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBDb3BpZWRCbG9j
azo6aXNQaW5uZWQoKQogewogICAgIHJldHVybiBtX2lzUGlubmVkOwogfQogCitpbmxpbmUgYm9v
bCBDb3BpZWRCbG9jazo6aXNPbGQoKQoreworICAgIHJldHVybiBtX2lzT2xkOworfQorCiBpbmxp
bmUgYm9vbCBDb3BpZWRCbG9jazo6aXNPdmVyc2l6ZSgpCiB7CiAgICAgcmV0dXJuIHJlZ2lvbigp
LT5pc0N1c3RvbVNpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
MTEgKzM2LDE4IEBAIGlubGluZSB2b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMKICNp
ZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3dvcmtM
aXN0TG9jayk7CiAjZW5kaWYKLSNpZm5kZWYgTkRFQlVHCisKICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisjaWZuZGVmIE5ERUJVRwogICAgIG1fbGl2ZU9iamVjdHMrKzsKICNlbmRpZgogICAgIG1f
bGl2ZUJ5dGVzICs9IGJ5dGVzOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBtX2lzT2xk
ID0gdHJ1ZTsKKyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6
ZSk7CisKKyAgICBpZiAoaXNQaW5uZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFz
aG91bGRFdmFjdWF0ZSgpKSB7CiAgICAgICAgIHBpbigpOwpAQCAtNTMsNiArNjAsMzAgQEAgaW5s
aW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcwogICAgIG1fd29ya0xpc3QtPmFw
cGVuZChDb3B5V29ya2xpc3RJdGVtKG93bmVyLCB0b2tlbikpOwogfQogCitpbmxpbmUgdm9pZCBD
b3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nV3JpdGVCYXJyaWVyKHVuc2lnbmVkIGJ5
dGVzKQoreworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9s
aXZlT2JqZWN0cysrOworI2VuZGlmCisgICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7CisgICAgQVNT
RVJUKCEhbV9saXZlQnl0ZXMgPT0gISFtX2xpdmVPYmplY3RzKTsKKyAgICBBU1NFUlQobV9saXZl
Qnl0ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7Cit9CisKK2lubGluZSB2b2lkIENvcGll
ZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkIGJ5dGVzKQorewor
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAvLyBUaGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBs
b2NrZWQgYmVjYXVzZSB0aGUgdGhyZWFkIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbiBvd25zIHRo
ZSBjdXJyZW50IGJsb2NrLgorICAgIG1faXNPbGQgPSB0cnVlOworI2lmbmRlZiBOREVCVUcKKyAg
ICBtX2xpdmVPYmplY3RzKys7CisjZW5kaWYKKyAgICBtX2xpdmVCeXRlcyArPSBieXRlczsKKyAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDw9IENvcGllZEJs
b2NrOjpibG9ja1NpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIENv
cGllZEJsb2NrSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2ICsxODEsMTcgQEAg
dm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIH0KIH0KIAordm9p
ZCBDb3BpZWRTcGFjZTo6ZGlkU3RhcnRGdWxsQ29sbGVjdGlvbigpCit7CisgICAgQVNTRVJUKGhl
YXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uKTsKKyAgICBBU1NF
UlQobV9mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sg
PSBtX3RvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAg
ICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOworCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sg
PSBtX292ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkK
KyAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOworfQorCiB2b2lkIENvcGllZFNwYWNlOjpz
dGFydGVkQ29weWluZygpCiB7CiAgICAgc3RkOjpzd2FwKG1fZnJvbVNwYWNlLCBtX3RvU3BhY2Up
OwpAQCAtMTk3LDYgKzIwOCw3IEBAIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkK
ICAgICAgICAgICAgIHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhibG9jayk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQorICAgICAgICBBU1NFUlQoYmxvY2stPmxpdmVCeXRlcygpIDw9
IENvcGllZEJsb2NrOjpibG9ja1NpemUpOwogICAgICAgICB0b3RhbExpdmVCeXRlcyArPSBibG9j
ay0+bGl2ZUJ5dGVzKCk7CiAgICAgICAgIHRvdGFsVXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxv
YWRDYXBhY2l0eSgpOwogICAgIH0KQEAgLTIwOCw3ICsyMjAsNiBAQCB2b2lkIENvcGllZFNwYWNl
OjpzdGFydGVkQ29weWluZygpCiAgICAgICAgICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVy
cHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CiAgICAgICAgICAgICB0b3RhbExpdmVCeXRlcyArPSBi
bG9jay0+cGF5bG9hZENhcGFjaXR5KCk7CiAgICAgICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9
IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKLSAgICAgICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZl
R0MoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVt
b3ZlKGJsb2NrKTsKICAgICAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKQEAgLTIx
OSw3ICsyMzAsNyBAQCB2b2lkIENvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZygpCiAKICAgICBk
b3VibGUgbWFya2VkU3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0U3BhY2UoKS5jYXBhY2l0eSgp
OwogICAgIGRvdWJsZSB0b3RhbEZyYWdtZW50YXRpb24gPSAoKGRvdWJsZSl0b3RhbExpdmVCeXRl
cyArIG1hcmtlZFNwYWNlQnl0ZXMpIC8gKChkb3VibGUpdG90YWxVc2FibGVCeXRlcyArIG1hcmtl
ZFNwYWNlQnl0ZXMpOwotICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSB0b3RhbEZyYWdtZW50YXRp
b24gPD0gT3B0aW9uczo6bWluSGVhcFV0aWxpemF0aW9uKCk7CisgICAgbV9zaG91bGREb0NvcHlQ
aGFzZSA9IG1faGVhcC0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uICYm
IHRvdGFsRnJhZ21lbnRhdGlvbiA8PSBPcHRpb25zOjptaW5IZWFwVXRpbGl6YXRpb24oKTsKICAg
ICBpZiAoIW1fc2hvdWxkRG9Db3B5UGhhc2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQyLDkg
KzI1Myw2IEBAIHZvaWQgQ29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKCkKIAogICAgIHdoaWxlICgh
bV9mcm9tU3BhY2UtPmlzRW1wdHkoKSkgewogICAgICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBt
X2Zyb21TcGFjZS0+cmVtb3ZlSGVhZCgpOwotICAgICAgICAvLyBBbGwgbm9uLXBpbm5lZCBibG9j
a3MgaW4gZnJvbS1zcGFjZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2xhaW1lZCBhcyB0aGV5IHdlcmUg
ZXZhY3VhdGVkLgotICAgICAgICBBU1NFUlQoYmxvY2stPmlzUGlubmVkKCkgfHwgIW1fc2hvdWxk
RG9Db3B5UGhhc2UpOwotICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7CiAgICAgICAgIC8v
IFdlIGRvbid0IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQgd2FzIG5l
dmVyIHJlbW92ZWQuCiAgICAgICAgIEFTU0VSVChtX2Jsb2NrU2V0LmNvbnRhaW5zKGJsb2NrKSk7
CiAgICAgICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2sp
KTsKQEAgLTMxNiw0ICszMjQsNDQgQEAgYm9vbCBDb3BpZWRTcGFjZTo6aXNQYWdlZE91dChkb3Vi
bGUgZGVhZAogICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCAmbV9vdmVy
c2l6ZUJsb2Nrcyk7CiB9CiAKK3ZvaWQgQ29waWVkU3BhY2U6OndpbGxBYmFuZG9uU3RvcmFnZSh2
b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ29waWVkQmxvY2sqIG9sZEJsb2NrID0gYmxvY2tGb3IocHRyKTsKKworICAgIGlm
IChvbGRCbG9jay0+aXNPdmVyc2l6ZSgpKSB7CisgICAgICAgIG9sZEJsb2NrLT51bnBpbigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlIGJsb2NrIGlzIG9sZCAoaS5l
LiBpdCBoYXMgYWxyZWFkeSBiZWVuIHRocm91Z2ggYXQgbGVhc3Qgb25lIGNvbGxlY3Rpb24pCisg
ICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgYnl0ZXMgd2UgYWxsb2NhdGVkIGhlcmUg
cHJldmlvdXNseSBzbyB0aGF0IHRoZSBibG9jaydzCisgICAgLy8gbV9saXZlQnl0ZXMgY291bnQg
cmVtYWlucyBhY2N1cmF0ZSBhY3Jvc3MgRWRlbkNvbGxlY3Rpb25zLiAKKyAgICAvLworICAgIC8v
IEFkZGl0aW9uYWxseSwgaWYgdGhlIGJsb2NrIGlzIHRoZSBibG9jayB0aGF0IGlzIGN1cnJlbnRs
eSBiZWluZyBhbGxvY2F0ZWQgb3V0IG9mLCAKKyAgICAvLyB3ZSBuZWVkIHRvIHN1YnRyYWN0IHRo
ZSBieXRlcyBmcm9tIHRoZSBibG9jayBpbiBjYXNlIHdlIGVuZCB1cCByZWFsbG9jLWluZyBpbiB0
aGUgCisgICAgLy8gc2FtZSBibG9jay4gCisgICAgaWYgKG9sZEJsb2NrLT5pc09sZCgpIHx8IG9s
ZEJsb2NrID09IG1fYWxsb2NhdG9yLmN1cnJlbnRCbG9jaygpKQorICAgICAgICBvbGRCbG9jay0+
ZGlkRXZhY3VhdGVCeXRlcyhieXRlcyk7Cit9CisKK3ZvaWQgQ29waWVkU3BhY2U6OmRpZEFzc2ln
blN0b3JhZ2Uodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKHB0cik7Cisg
ICAgQ29waWVkQmxvY2sqIG5ld0Jsb2NrID0gYmxvY2tGb3IocHRyKTsKKworICAgIGlmIChuZXdC
bG9jay0+aXNPdmVyc2l6ZSgpKSB7CisgICAgICAgIG5ld0Jsb2NrLT5waW4oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gbm90aWZ5IHRoZSBibG9jayBvZiBh
ZGRpdGlvbmFsIGxpdmUgYnl0ZXMgaW4gY2FzZSBvdXIgbmV4dCBjb2xsZWN0aW9uIAorICAgIC8v
IGlzIGFuIEVkZW5Db2xsZWN0aW9uLiBUaGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyBjYWxsZWQgd2hl
biBhc3NpZ25pbmcgQ29waWVkU3BhY2UKKyAgICAvLyBhbGxvY2F0aW9ucyB0byBvbGQtZ2VuZXJh
dGlvbiBvYmplY3RzLCBiZWNhdXNlIHdlIHdvbid0IHJlcG9ydCB0aGVzZSBuZXcgYnl0ZXMgaW4g
dGhlIAorICAgIC8vIENvcGllZEJsb2NrIGR1cmluZyBtYXJraW5nIG9mIGFuIEVkZW5Db2xsZWN0
aW9uLgorICAgIG5ld0Jsb2NrLT5yZXBvcnRMaXZlQnl0ZXNEdXJpbmdXcml0ZUJhcnJpZXIoYnl0
ZXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2UuaAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgQ29waWVkQWxsb2NhdG9yJiBhbGxvY2F0b3IoKSB7IHJldHVy
biBtX2FsbG9jYXRvcjsgfQogCisgICAgdm9pZCBkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCk7CisK
ICAgICB2b2lkIHN0YXJ0ZWRDb3B5aW5nKCk7CiAgICAgdm9pZCBkb25lQ29weWluZygpOwogICAg
IGJvb2wgaXNJbkNvcHlQaGFzZSgpIHsgcmV0dXJuIG1faW5Db3B5aW5nUGhhc2U7IH0KQEAgLTgw
LDYgKzgyLDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogYmxvY2tGb3Io
dm9pZCopOwogCisgICAgSGVhcCogaGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcDsgfQorCisg
ICAgdm9pZCBjb3B5V3JpdGVCYXJyaWVyKHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUpOwor
ICAgIHZvaWQgd2lsbEFiYW5kb25TdG9yYWdlKHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUp
OworICAgIHZvaWQgZGlkQXNzaWduU3RvcmFnZSh2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXpl
KTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc092ZXJzaXplKHNpemVfdCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5o
CShyZXZpc2lvbiAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5Vmlz
aXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBpbmxpbmUgYm9v
bCBDb3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvCiBpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6
OmFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQogewogICAgIHZvaWQqIHJlc3VsdCA9IDA7
IC8vIENvbXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgot
ICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1
bHQpKSkKKyAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlRHVyaW5n
Q29weWluZyhieXRlcywgJnJlc3VsdCkpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAog
ICAgIHJlc3VsdCA9IGFsbG9jYXRlTmV3U3BhY2VTbG93KGJ5dGVzKTsKQEAgLTcwLDcgKzcwLDcg
QEAgaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYQogICAgIG1fY29waWVk
QWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7CiAKICAgICB2b2lkKiByZXN1bHQg
PSAwOwotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50
cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7CisgICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2Vl
ZCA9IG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyhieXRlcywgJnJl
c3VsdCk7CiAgICAgQVNTRVJUKGRpZFN1Y2NlZWQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTU1ODk1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDcgQEAgbmFtZXNwYWNlIHsgCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlSGVhcFNp
emUgPSAzMiAqIE1COyAvLyBBYm91dCAxLjVYIHRoZSBhdmVyYWdlIHdlYnBhZ2UuCiBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNtYWxsSGVhcFNpemUgPSAxICogTUI7IC8vIE1hdGNoZXMgdGhlIEZhc3RN
YWxsb2MgcGVyLXRocmVhZCBjYWNoZS4KIAotI2RlZmluZSBFTkFCTEVfR0NfTE9HR0lORyAwCisj
ZGVmaW5lIEVOQUJMRV9HQ19MT0dHSU5HIDEKIAogI2lmIEVOQUJMRShHQ19MT0dHSU5HKQogI2lm
IENPTVBJTEVSKENMQU5HKQpAQCAtMTUyLDYgKzE1MiwxMCBAQCBzdHJ1Y3QgR0NDb3VudGVyIHsK
ICNkZWZpbmUgR0NDT1VOVEVSKG5hbWUsIHZhbHVlKSBkbyB7IH0gd2hpbGUgKGZhbHNlKQogI2Vu
ZGlmCiAKKyN1bmRlZiBFTkFCTEVfR0NfTE9HR0lORworCisjZGVmaW5lIEVOQUJMRV9HRU5FUkFU
SU9OQUxfQ09MTEVDVE9SIDEKKwogc3RhdGljIGlubGluZSBzaXplX3QgbWluSGVhcFNpemUoSGVh
cFR5cGUgaGVhcFR5cGUsIHNpemVfdCByYW1TaXplKQogewogICAgIGlmIChoZWFwVHlwZSA9PSBM
YXJnZUhlYXApCkBAIC0xNjMsNyArMTY3LDExIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHByb3Bv
cnRpb25hbEhlYXBTaXoKIHsKICAgICAvLyBUcnkgdG8gc3RheSB1bmRlciAxLzIgUkFNIHNpemUg
dG8gbGVhdmUgcm9vbSBmb3IgdGhlIERPTSwgcmVuZGVyaW5nLCBuZXR3b3JraW5nLCBldGMuCiAg
ICAgaWYgKGhlYXBTaXplIDwgcmFtU2l6ZSAvIDQpCisjaWYgRU5BQkxFKEdFTkVSQVRJT05BTF9D
T0xMRUNUT1IpCisgICAgICAgIHJldHVybiAzICogaGVhcFNpemU7CisjZWxzZQogICAgICAgICBy
ZXR1cm4gMiAqIGhlYXBTaXplOworI2VuZGlmCiAgICAgaWYgKGhlYXBTaXplIDwgcmFtU2l6ZSAv
IDIpCiAgICAgICAgIHJldHVybiAxLjUgKiBoZWFwU2l6ZTsKICAgICByZXR1cm4gMS4yNSAqIGhl
YXBTaXplOwpAQCAtMjUxLDkgKzI1OSwxMCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgLCBtX3JhbVNpemUocmFtU2l6ZSgpKQogICAgICwgbV9taW5CeXRlc1Bl
ckN5Y2xlKG1pbkhlYXBTaXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSkpCiAgICAgLCBtX3NpemVB
ZnRlckxhc3RDb2xsZWN0KDApCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkTGltaXQobV9taW5CeXRl
c1BlckN5Y2xlKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQotICAgICwgbV9ieXRlc0FiYW5k
b25lZCgwKQorICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSgwKQorICAgICwgbV9ieXRl
c0FiYW5kb25lZFRoaXNDeWNsZSgwKQorICAgICwgbV9mdWxsQ29sbGVjdFRocmVzaG9sZChtX21p
bkJ5dGVzUGVyQ3ljbGUpCisgICAgLCBtX2NvbGxlY3RUaHJlc2hvbGQoMC4yNSAqIG1fZnVsbENv
bGxlY3RUaHJlc2hvbGQpCiAgICAgLCBtX3RvdGFsQnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX3Rv
dGFsQnl0ZXNDb3BpZWQoMCkKICAgICAsIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyhOb09wZXJhdGlv
bikKQEAgLTMzMyw4ICszNDIsOCBAQCB2b2lkIEhlYXA6OnJlcG9ydEFiYW5kb25lZE9iamVjdEdy
YXBoKCkKIAogdm9pZCBIZWFwOjpkaWRBYmFuZG9uKHNpemVfdCBieXRlcykKIHsKLSAgICBtX2Fj
dGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWQgKyBtX2J5dGVzQWJh
bmRvbmVkKTsKLSAgICBtX2J5dGVzQWJhbmRvbmVkICs9IGJ5dGVzOworICAgIG1fYWN0aXZpdHlD
YWxsYmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSArIG1fYnl0ZXNB
YmFuZG9uZWRUaGlzQ3ljbGUpOworICAgIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUgKz0gYnl0
ZXM7CiB9CiAKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCkBAIC00ODcsNiArNDk2LDE2
IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB2aXNpdG9yLnNldHVwKCk7CiAgICAgSGVh
cFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKIAorICAgIGlmIChtX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24pIHsKKyAgICAgICAgR0NQSEFTRShBZGRP
bGRHZW5lcmF0aW9uRXhlY3V0YWJsZVRvUmVtZW1iZXJlZFNldCk7CisgICAgICAgIC8vIFdlIG5l
ZWQgdG8gcmUtcHJvY2VzcyBhbGwgb2xkLWdlbmVyYXRpb24gZXhlY3V0YWJsZXMgc28gdGhhdCB0
aGV5CisgICAgICAgIC8vIHVwZGF0ZSB0aGVpciBDb2RlQmxvY2tzLgorICAgICAgICBhZGRPbGRH
ZW5lcmF0aW9uRXhlY3V0YWJsZXNUb1JlbWVtYmVyZWRTZXQoKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8Y29uc3QgSlNDZWxsKj4gcmVtZW1iZXJlZFNldChtX3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygp
LnNpemUoKSk7CisgICAgbV9zbG90VmlzaXRvci5tYXJrU3RhY2soKS5maWxsVmVjdG9yKHJlbWVt
YmVyZWRTZXQpOworCiAgICAgewogICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIo
dmlzaXRvcik7CiAKQEAgLTU5MCw2ICs2MDksMTcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQog
ICAgICAgICB9CiAgICAgfQogCisgICAgeworICAgICAgICBHQ1BIQVNFKENsZWFyUmVtZW1iZXJl
ZFNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZW1lbWJlcmVkU2V0LnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBKU0NlbGwqIGNlbGwgPSByZW1lbWJlcmVk
U2V0W2ldOworICAgICAgICAgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5jbGVhclJl
bWVtYmVyZWQoY2VsbCk7CisgICAgICAgIH0KKy8qCisgICAgICAgIG1fb2JqZWN0U3BhY2UuY2xl
YXJSZW1lbWJlcmVkU2V0KCk7CisqLworICAgIH0KKwogICAgIEdDQ09VTlRFUihWaXNpdGVkVmFs
dWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOwogCiAgICAgbV9zaGFyZWREYXRhLmRpZEZp
bmlzaE1hcmtpbmcoKTsKQEAgLTYwMSw4ICs2MzEsMTQgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMo
KQogICAgIE1BUktfTE9HX01FU1NBR0UyKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIg
ZnVsbCBHQyAlbHUsIHRvb2sgJS42ZiBzZWNzXG4iLCB2aXNpdENvdW50LCBXVEY6Om1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRpbWUpOwogI2VuZGlmCiAKLSAgICBtX3Rv
dGFsQnl0ZXNWaXNpdGVkID0gdmlzaXRvci5ieXRlc1Zpc2l0ZWQoKTsKLSAgICBtX3RvdGFsQnl0
ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgaWYgKG1fb3BlcmF0aW9uSW5Q
cm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVk
ICs9IHZpc2l0b3IuYnl0ZXNWaXNpdGVkKCk7CisgICAgICAgIG1fdG90YWxCeXRlc0NvcGllZCAr
PSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbik7CisgICAgICAgIG1fdG90YWxC
eXRlc1Zpc2l0ZWQgPSB2aXNpdG9yLmJ5dGVzVmlzaXRlZCgpOworICAgICAgICBtX3RvdGFsQnl0
ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgfQogI2lmIEVOQUJMRShQQVJB
TExFTF9HQykKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fc2hhcmVkRGF0YS5jaGlsZEJ5
dGVzVmlzaXRlZCgpOwogICAgIG1fdG90YWxCeXRlc0NvcGllZCArPSBtX3NoYXJlZERhdGEuY2hp
bGRCeXRlc0NvcGllZCgpOwpAQCAtNzIzLDExICs3NTksMzQgQEAgdm9pZCBIZWFwOjpkZWxldGVV
bm1hcmtlZENvbXBpbGVkQ29kZSgpCiAgICAgbV9qaXRTdHViUm91dGluZXMuZGVsZXRlVW5tYXJr
ZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKK3ZvaWQgSGVhcDo6YWRkT2xkR2VuZXJh
dGlvbkV4ZWN1dGFibGVzVG9SZW1lbWJlcmVkU2V0KCkKK3sKKyAgICBBU1NFUlQobV9vcGVyYXRp
b25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKTsKKyAgICBmb3IgKEV4ZWN1dGFibGVCYXNl
KiBjdXJyZW50ID0gbV9jb21waWxlZENvZGUuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dCgpKSB7CisgICAgICAgIGlmIChpc01hcmtlZChjdXJyZW50KSkKKyAgICAgICAg
ICAgIGFkZFRvUmVtZW1iZXJlZFNldChjdXJyZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoY2Vs
bCk7CisgICAgQVNTRVJUKCFPcHRpb25zOjplbmFibGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzTWFya2VkKGNlbGwpKTsKKyAgICBpZiAo
aXNJblJlbWVtYmVyZWRTZXQoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICBNYXJrZWRCbG9j
azo6YmxvY2tGb3IoY2VsbCktPnNldFJlbWVtYmVyZWQoY2VsbCk7CisjaWYgRU5BQkxFKEdFTkVS
QVRJT05BTF9DT0xMRUNUT1IpCisgICAgbV9zbG90VmlzaXRvci51bmNvbmRpdGlvbmFsbHlBcHBl
bmQoY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CisjZW5kaWYKK30KKwogdm9pZCBIZWFwOjpj
b2xsZWN0QWxsR2FyYmFnZSgpCiB7CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKICAgICAg
ICAgcmV0dXJuOwotICAgIAorCisgICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOyAK
ICAgICBjb2xsZWN0KERvU3dlZXApOwogfQogCkBAIC03NTksNyArODE4LDE5IEBAIHZvaWQgSGVh
cDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBtX3ZtLT5wcmVwYXJlVG9EaXNj
YXJkQ29kZSgpOwogICAgIG1fZGVmZXJyYWxEZXB0aC0tOyAvLyBEZWNyZW1lbnQgZGVmZXJhbCBt
YW51YWxseSwgc28gd2UgZG9uJ3QgR0Mgd2hlbiB3ZSBkbyBzbywgc2luY2Ugd2UgYXJlIGFscmVh
ZHkgR0NpbmchLgogICAgIAotICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247
CisgICAgYm9vbCBpc0Z1bGxDb2xsZWN0aW9uID0gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAr
IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QgPiBtX2Z1bGxDb2xsZWN0VGhyZXNob2xkIHx8IHN3ZWVw
VG9nZ2xlID09IERvU3dlZXA7CisgICAgaWYgKGlzRnVsbENvbGxlY3Rpb24pIHsKKyAgICAgICAg
bV9vcGVyYXRpb25JblByb2dyZXNzID0gRnVsbENvbGxlY3Rpb247CisgICAgICAgIGRhdGFMb2dG
KCJGdWxsQ29sbGVjdGlvblxuIik7CisgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoR0VORVJBVElP
TkFMX0NPTExFQ1RPUikKKyAgICAgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gRWRlbkNvbGxl
Y3Rpb247CisgICAgICAgIGRhdGFMb2dGKCJFZGVuQ29sbGVjdGlvblxuIik7CisjZWxzZQorICAg
ICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBGdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgZGF0
YUxvZ0YoIkZ1bGxDb2xsZWN0aW9uXG4iKTsKKyNlbmRpZgorICAgIH0KICAgICBtX2V4dHJhTWVt
b3J5VXNhZ2UgPSAwOwogCiAgICAgbV9hY3Rpdml0eUNhbGxiYWNrLT53aWxsQ29sbGVjdCgpOwpA
QCAtNzczLDYgKzg0NCw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKICAgICB7CiAgICAgICAgIEdDUEhBU0UoU3RvcEFsbG9jYXRpb24pOwogICAgICAgICBtX29i
amVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgICAgIGlmIChtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgICAgICBtX3N0b3JhZ2VTcGFjZS5kaWRT
dGFydEZ1bGxDb2xsZWN0aW9uKCk7CiAgICAgfQogCiAgICAgbWFya1Jvb3RzKCk7CkBAIC03ODks
NyArODYyLDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAg
ICAgICBtX2FycmF5QnVmZmVycy5zd2VlcCgpOwogICAgIH0KIAotICAgIHsKKyAgICBpZiAobV9v
cGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKSB7CiAgICAgICAgIG1fYmxvY2tT
bmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwogICAg
ICAgICBNYXJrZWRCbG9ja1NuYXBzaG90RnVuY3RvciBmdW5jdG9yKG1fYmxvY2tTbmFwc2hvdCk7
CiAgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwpAQCAtODIwLDcg
Kzg5Myw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB9
CiAKICAgICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBpbmcobV9ibG9ja1NuYXBzaG90KTsKLSAgICBt
X2J5dGVzQWJhbmRvbmVkID0gMDsKKyAgICBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlID0gMDsK
IAogICAgIHsKICAgICAgICAgR0NQSEFTRShSZXNldEFsbG9jYXRvcnMpOwpAQCAtODMxLDIxICs5
MDQsNDYgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIGlm
IChPcHRpb25zOjpnY01heEhlYXBTaXplKCkgJiYgY3VycmVudEhlYXBTaXplID4gT3B0aW9uczo6
Z2NNYXhIZWFwU2l6ZSgpKQogICAgICAgICBIZWFwU3RhdGlzdGljczo6ZXhpdFdpdGhGYWlsdXJl
KCk7CiAKLSAgICBtX3NpemVBZnRlckxhc3RDb2xsZWN0ID0gY3VycmVudEhlYXBTaXplOworICAg
IHNpemVfdCBvbGRDb2xsZWN0VGhyZXNob2xkID0gbV9jb2xsZWN0VGhyZXNob2xkOworICAgIG1f
Y29sbGVjdFRocmVzaG9sZCA9IDAuMjUgKiBjdXJyZW50SGVhcFNpemU7CisgICAgaWYgKGN1cnJl
bnRIZWFwU2l6ZSA+IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QpCisgICAgICAgIG1fY29sbGVjdFRo
cmVzaG9sZCA9IG1heChtX2NvbGxlY3RUaHJlc2hvbGQsIGN1cnJlbnRIZWFwU2l6ZSAtIG1fc2l6
ZUFmdGVyTGFzdENvbGxlY3QpOworICAgIG1fY29sbGVjdFRocmVzaG9sZCA9IG1heChtX2NvbGxl
Y3RUaHJlc2hvbGQsIHNpemVfdChvbGRDb2xsZWN0VGhyZXNob2xkICogKDIuMCAvIDMuMCkpKTsK
KyAgICBtX2NvbGxlY3RUaHJlc2hvbGQgPSBtYXgobV9jb2xsZWN0VGhyZXNob2xkLCBzaXplX3Qo
MC4yNSAqIG1fbWluQnl0ZXNQZXJDeWNsZSkpOworCisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgbV9mdWxsQ29sbGVjdFRocmVzaG9sZCA9
IDMgKiBjdXJyZW50SGVhcFNpemU7CisvKgorICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
PT0gRnVsbENvbGxlY3Rpb24pIHsKKyAgICAgICAgLy8gVG8gYXZvaWQgcGF0aG9sb2dpY2FsIEdD
IGNodXJuIGluIHZlcnkgc21hbGwgYW5kIHZlcnkgbGFyZ2UgaGVhcHMsIHdlIHNldAorICAgICAg
ICAvLyB0aGUgbmV3IGFsbG9jYXRpb24gbGltaXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2l6ZSBv
ZiB0aGUgaGVhcCwgd2l0aCBhCisgICAgICAgIC8vIGZpeGVkIG1pbmltdW0uCisgICAgICAgIG1f
bWF4SGVhcFNpemUgPSBtYXgobWluSGVhcFNpemUobV9oZWFwVHlwZSwgbV9yYW1TaXplKSwgcHJv
cG9ydGlvbmFsSGVhcFNpemUoY3VycmVudEhlYXBTaXplLCBtX3JhbVNpemUpKTsKKyAgICAgICAg
bV9tYXhFZGVuU2l6ZSA9IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRIZWFwU2l6ZSA+PSBtX3NpemVBZnRlckxhc3RD
b2xsZWN0KTsKKyAgICAgICAgbV9tYXhFZGVuU2l6ZSA9IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50
SGVhcFNpemU7CisgICAgICAgIGlmICgoZG91YmxlKW1fbWF4RWRlblNpemUgLyAoZG91YmxlKW1f
bWF4SGVhcFNpemUgPCAoMS4wIC8gMy4wKSkKKyAgICAgICAgICAgIG1fc2hvdWxkRG9GdWxsQ29s
bGVjdGlvbiA9IHRydWU7CisgICAgICAgIG1fbWF4SGVhcFNpemUgKz0gY3VycmVudEhlYXBTaXpl
IC0gbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdDsKKyAgICAgICAgbV9tYXhFZGVuU2l6ZSA9IG1fbWF4
SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgfQorI2lmICFFTkFCTEUoR0VORVJBVElP
TkFMX0NPTExFQ1RPUikKKyAgICBtX21heEVkZW5TaXplID0gbV9tYXhIZWFwU2l6ZTsKKyNlbmRp
ZgorCisgICAgZGF0YUxvZ0YoInNpemUgb2YgZWRlbjogJWx1IGJ5dGVzXG4iLCBtX21heEVkZW5T
aXplKTsKKyovCiAKLSAgICAvLyBUbyBhdm9pZCBwYXRob2xvZ2ljYWwgR0MgY2h1cm4gaW4gdmVy
eSBzbWFsbCBhbmQgdmVyeSBsYXJnZSBoZWFwcywgd2Ugc2V0Ci0gICAgLy8gdGhlIG5ldyBhbGxv
Y2F0aW9uIGxpbWl0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAsIHdpdGgg
YQotICAgIC8vIGZpeGVkIG1pbmltdW0uCi0gICAgc2l6ZV90IG1heEhlYXBTaXplID0gbWF4KG1p
bkhlYXBTaXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSksIHByb3BvcnRpb25hbEhlYXBTaXplKGN1
cnJlbnRIZWFwU2l6ZSwgbV9yYW1TaXplKSk7Ci0gICAgbV9ieXRlc0FsbG9jYXRlZExpbWl0ID0g
bWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgbV9zaXplQWZ0ZXJMYXN0Q29sbGVj
dCA9IGN1cnJlbnRIZWFwU2l6ZTsKIAotICAgIG1fYnl0ZXNBbGxvY2F0ZWQgPSAwOworICAgIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAwOwogICAgIGRvdWJsZSBsYXN0R0NFbmRUaW1lID0g
V1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICBtX2xhc3RHQ0xlbmd0aCA9
IGxhc3RHQ0VuZFRpbWUgLSBsYXN0R0NTdGFydFRpbWU7CiAKICAgICBpZiAoT3B0aW9uczo6cmVj
b3JkR0NQYXVzZVRpbWVzKCkpCiAgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpyZWNvcmRHQ1BhdXNl
VGltZShsYXN0R0NTdGFydFRpbWUsIGxhc3RHQ0VuZFRpbWUpOwotICAgIFJFTEVBU0VfQVNTRVJU
KG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBDb2xsZWN0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24gfHwgbV9vcGVyYXRpb25J
blByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKTsKIAogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9IE5vT3BlcmF0aW9uOwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwpAQCAtODYzLDEw
ICs5NjEsNiBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAg
ICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICAgICAgZGF0YUxvZyhhZnRl
ciAtIGJlZm9yZSwgIiBtcywgIiwgY3VycmVudEhlYXBTaXplIC8gMTAyNCwgIiBrYl1cbiIpOwog
ICAgIH0KLQotI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgZGF0YUxvZ0YoIkpT
QyBHQyBmaW5pc2hpbmcgY29sbGVjdGlvbi5cbiIpOwotI2VuZGlmCiB9CiAKIGJvb2wgSGVhcDo6
Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpCkBAIC04NzYsNyArOTcwLDcgQEAgYm9vbCBIZWFw
Ojpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkKICAgICAKICAgICBpZiAoIXNob3VsZENvbGxl
Y3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgY29sbGVjdChEb05vdFN3
ZWVwKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTkwOSw4ICsxMDAzLDggQEAgdm9pZCBIZWFw
OjpzZXRHYXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYgogCiB2b2lkIEhlYXA6OmRpZEFsbG9jYXRl
KHNpemVfdCBieXRlcykKIHsKLSAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1f
Ynl0ZXNBbGxvY2F0ZWQgKyBtX2J5dGVzQWJhbmRvbmVkKTsKLSAgICBtX2J5dGVzQWxsb2NhdGVk
ICs9IGJ5dGVzOworICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZSArIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUpOworICAgIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgKz0gYnl0ZXM7CiB9CiAKIGJvb2wgSGVhcDo6aXNWYWxpZEFs
bG9jYXRpb24oc2l6ZV90KQpAQCAtOTg3LDQgKzEwODEsNDEgQEAgdm9pZCBIZWFwOjpkZWNyZW1l
bnREZWZlcnJhbERlcHRoQW5kR0NJZgogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsK
IH0KIAordm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7
CisgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAgICAgICAgcmV0dXJuOworICAg
IEhlYXA6OmhlYXAoZnJvbSktPmFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwordm9pZCBI
ZWFwOjp3aWxsQWJhbmRvblN0b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxsLCB2b2lkKiBwdHIsIHNp
emVfdCBieXRlcykKK3sKKyAgICBpZiAoIWNlbGwgfHwgIWlzTWFya2VkKGNlbGwpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9zdG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9yYWdlKHB0ciwgYnl0
ZXMpOworfQorCit2b2lkIEhlYXA6OmRpZEFzc2lnblN0b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxs
LCB2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBpZiAoIWNlbGwgfHwgIWlzTWFya2Vk
KGNlbGwpKQorICAgICAgICByZXR1cm47CisgICAgbV9zdG9yYWdlU3BhY2UuZGlkQXNzaWduU3Rv
cmFnZShwdHIsIGJ5dGVzKTsKK30KKwordm9pZCBIZWFwOjpjb3B5V3JpdGVCYXJyaWVyKGNvbnN0
IEpTQ2VsbCogZnJvbSwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRy
LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNv
bnN0X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOworCisgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChm
cm9tKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbmV3UHRyKSB7CisgICAgICAgIEFTU0VS
VCghbmV3U2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSGVhcCogaGVhcCA9IEhl
YXA6OmhlYXAoZnJvbSk7CisgICAgaGVhcC0+bV9zdG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9y
YWdlKG9sZFB0ciwgb2xkU2l6ZSk7CisgICAgaGVhcC0+bV9zdG9yYWdlU3BhY2UuZGlkQXNzaWdu
U3RvcmFnZShuZXdQdHIsIG5ld1NpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFBy
b3RlY3RDb3VudFNldDsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBU
eXBlQ291bnRTZXQ7CiAKLSAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlv
biwgQWxsb2NhdGlvbiwgQ29sbGVjdGlvbiB9OworICAgIGVudW0gT3BlcmF0aW9uSW5Qcm9ncmVz
cyB7IE5vT3BlcmF0aW9uLCBBbGxvY2F0aW9uLCBGdWxsQ29sbGVjdGlvbiwgRWRlbkNvbGxlY3Rp
b24gfTsKIAogICAgIGVudW0gSGVhcFR5cGUgeyBTbWFsbEhlYXAsIExhcmdlSGVhcCB9OwogCkBA
IC05MywxMCArOTMsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIHRl
c3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgdm9pZCBzZXRNYXJr
ZWQoY29uc3Qgdm9pZCopOwogCisgICAgICAgIHZvaWQgYWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFi
bGVzVG9SZW1lbWJlcmVkU2V0KCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRk
VG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCopOworICAgICAgICBib29sIGlzSW5SZW1lbWJl
cmVkU2V0KGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKGNlbGwpOworICAgICAgICAgICAgQVNTRVJUKCFPcHRpb25zOjplbmFibGVDb25jdXJy
ZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgICAgICAgICByZXR1cm4g
TWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5pc1JlbWVtYmVyZWQoY2VsbCk7CisgICAgICAg
IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwq
KTsKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFs
dWUpOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlND
ZWxsKik7Ci0gICAgICAgIHN0YXRpYyB1aW50OF90KiBhZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCop
OworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlXcml0ZUJhcnJp
ZXIoY29uc3QgSlNDZWxsKiwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3
UHRyLCBzaXplX3QgbmV3U2l6ZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd2ls
bEFiYW5kb25TdG9yYWdlKGNvbnN0IEpTQ2VsbCosIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNp
emUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpZEFzc2lnblN0b3JhZ2UoY29u
c3QgSlNDZWxsKiwgdm9pZCogbmV3UHRyLCBzaXplX3QgbmV3U2l6ZSk7CiAKICAgICAgICAgSGVh
cChWTSosIEhlYXBUeXBlKTsKICAgICAgICAgfkhlYXAoKTsKQEAgLTExNCw2ICsxMjYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyB0cnVlIGlmIGNvbGxlY3Rpb24gaXMgaW4gcHJv
Z3Jlc3MKICAgICAgICAgaW5saW5lIGJvb2wgaXNDb2xsZWN0aW5nKCk7CisgICAgICAgIGlubGlu
ZSBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbkluUHJvZ3Jlc3MoKSB7IHJldHVybiBtX29w
ZXJhdGlvbkluUHJvZ3Jlc3M7IH0KICAgICAgICAgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9uIG9y
IGNvbGxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MKICAgICAgICAgaW5saW5lIGJvb2wgaXNCdXN5KCk7
CiAgICAgICAgIApAQCAtMjQ3LDkgKzI2MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Y29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKICAgICAgICAgc2l6ZV90IG1fc2l6ZUFm
dGVyTGFzdENvbGxlY3Q7CiAKLSAgICAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWRMaW1pdDsK
LSAgICAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWQ7Ci0gICAgICAgIHNpemVfdCBtX2J5dGVz
QWJhbmRvbmVkOworICAgICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAg
ICAgICAgc2l6ZV90IG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGU7CisgICAgICAgIHNpemVfdCBt
X2Z1bGxDb2xsZWN0VGhyZXNob2xkOworICAgICAgICBzaXplX3QgbV9jb2xsZWN0VGhyZXNob2xk
OwogCiAgICAgICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNWaXNpdGVkOwogICAgICAgICBzaXplX3Qg
bV90b3RhbEJ5dGVzQ29waWVkOwpAQCAtMjY1LDYgKzI3OSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBWVGFibGVTcGVjdHJ1bSBtX2Rlc3Ryb3llZFR5cGVDb3VudHM7CiAjZW5kaWYKIAor
ICAgICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1fY29weWluZ1JlbWVtYmVyZWRTZXQ7CisK
ICAgICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwogICAgICAgICBWZWN0
b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+KiA+IG1f
dGVtcFNvcnRpbmdWZWN0b3JzOwogICAgICAgICBPd25QdHI8SGFzaFNldDxNYXJrZWRBcmd1bWVu
dEJ1ZmZlcio+ID4gbV9tYXJrTGlzdFNldDsKQEAgLTMxNCw4ICszMzAsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgaWYgKGlzRGVmZXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBtX2J5dGVzQWxsb2NhdGVkID4gT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpICYmIG1faXNT
YWZlVG9Db2xsZWN0ICYmIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbjsKLSAg
ICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQgPiBtX2J5dGVzQWxsb2NhdGVkTGltaXQgJiYg
bV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9u
OworICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBPcHRpb25z
OjpnY01heEhlYXBTaXplKCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblBy
b2dyZXNzID09IE5vT3BlcmF0aW9uOworICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSA+IG1fY29sbGVjdFRocmVzaG9sZCAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBtX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb247CiAgICAgfQogCiAgICAgYm9vbCBIZWFw
Ojppc0J1c3koKQpAQCAtMzI1LDcgKzM0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgYm9v
bCBIZWFwOjppc0NvbGxlY3RpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9PSBDb2xsZWN0aW9uOworICAgICAgICByZXR1cm4gbV9vcGVyYXRpb25JblBy
b2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVu
Q29sbGVjdGlvbjsKICAgICB9CiAKICAgICBpbmxpbmUgSGVhcCogSGVhcDo6aGVhcChjb25zdCBK
U0NlbGwqIGNlbGwpCkBAIC0zNjUsMTggKzM4MSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBF
TkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2Vs
c2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgog
ICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwq
LCBKU0NlbGwqKQorICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0Nl
bGwqIGZyb20sIEpTQ2VsbCogdG8pCiAgICAgeworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BS
T0ZJTElORykKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVy
KCk7CisjZW5kaWYKKyAgICAgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCF0byB8fCBpc01hcmtlZCh0bykpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIEhlYXA6OmhlYXAoZnJvbSktPmFkZFRvUmVtZW1iZXJlZFNl
dChmcm9tKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29u
c3QgSlNDZWxsKiwgSlNWYWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKQogICAgIHsKKyNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpCiAgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdy
aXRlQmFycmllcigpOworI2VuZGlmCisgICAgICAgIGlmICghdG8uaXNDZWxsKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHdyaXRlQmFycmllcihmcm9tLCB0by5hc0NlbGwoKSk7CiAg
ICAgfQogCiAgICAgaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVf
dCBjb3N0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShy
ZXZpc2lvbiAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNCArMTY3LDI4IEBAIHZvaWQgTWFya1N0YWNrQXJy
YXk6OnN0ZWFsU29tZUNlbGxzRnJvbSgKICAgICAgICAgYXBwZW5kKG90aGVyLnJlbW92ZUxhc3Qo
KSk7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OmZpbGxWZWN0b3IoVmVjdG9yPGNvbnN0IEpT
Q2VsbCo+JiB2ZWN0b3IpCit7CisgICAgQVNTRVJUKHZlY3Rvci5zaXplKCkgPT0gc2l6ZSgpKTsK
KworICAgIE1hcmtTdGFja1NlZ21lbnQqIGN1cnJlbnRTZWdtZW50ID0gbV9zZWdtZW50cy5oZWFk
KCk7CisgICAgaWYgKCFjdXJyZW50U2VnbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgY291bnQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RvcDsgKytp
KSB7CisgICAgICAgIEFTU0VSVChjdXJyZW50U2VnbWVudC0+ZGF0YSgpW2ldKTsKKyAgICAgICAg
dmVjdG9yW2NvdW50KytdID0gY3VycmVudFNlZ21lbnQtPmRhdGEoKVtpXTsKKyAgICB9CisKKyAg
ICBjdXJyZW50U2VnbWVudCA9IGN1cnJlbnRTZWdtZW50LT5uZXh0KCk7CisgICAgd2hpbGUgKGN1
cnJlbnRTZWdtZW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzX3NlZ21l
bnRDYXBhY2l0eTsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFNlZ21lbnQtPmRh
dGEoKVtpXSk7CisgICAgICAgICAgICB2ZWN0b3JbY291bnQrK10gPSBjdXJyZW50U2VnbWVudC0+
ZGF0YSgpW2ldOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRTZWdtZW50ID0gY3VycmVudFNl
Z21lbnQtPm5leHQoKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw2ICs1Miw3IEBACiAKICNpbmNsdWRlICJIZWFwQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMTAwLDYgKzEwMSw4IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIGJv
b2wgaXNFbXB0eSgpOwogCisgICAgdm9pZCBmaWxsVmVjdG9yKFZlY3Rvcjxjb25zdCBKU0NlbGwq
PiYpOworCiBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxzaXplX3Qgc2l6ZT4gc3RydWN0IENhcGFj
aXR5RnJvbVNpemUgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZhbHVlID0gKHNpemUg
LSBzaXplb2YoTWFya1N0YWNrU2VnbWVudCkpIC8gc2l6ZW9mKGNvbnN0IEpTQ2VsbCopOwpAQCAt
MTIxLDcgKzEyNCw2IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGNv
bnN0IHNpemVfdCBzX3NlZ21lbnRDYXBhY2l0eSA9IENhcGFjaXR5RnJvbVNpemU8TWFya1N0YWNr
U2VnbWVudDo6YmxvY2tTaXplPjo6dmFsdWU7CiAgICAgc2l6ZV90IG1fdG9wOwogICAgIHNpemVf
dCBtX251bWJlck9mU2VnbWVudHM7Ci0gICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDEwICs5LDEwIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1ib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUp
CitzdGF0aWMgYm9vbCBpc0xpc3RQYWdlZE91dChkb3VibGUgZGVhZGxpbmUsIERvdWJseUxpbmtl
ZExpc3Q8TWFya2VkQmxvY2s+JiBsaXN0KQogewogICAgIHVuc2lnbmVkIGl0ZXJzU2luY2VMYXN0
VGltZUNoZWNrID0gMDsKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBtX2Jsb2NrTGlzdC5oZWFk
KCk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbGlzdC5oZWFkKCk7CiAgICAgd2hpbGUgKGJs
b2NrKSB7CiAgICAgICAgIGJsb2NrID0gYmxvY2stPm5leHQoKTsKICAgICAgICAgKytpdGVyc1Np
bmNlTGFzdFRpbWVDaGVjazsKQEAgLTIzLDYgKzIzLDE2IEBAIGJvb2wgTWFya2VkQWxsb2NhdG9y
Ojppc1BhZ2VkT3V0KGRvdWJsZSAKICAgICAgICAgICAgIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNr
ID0gMDsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTWFy
a2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKK3sKKyAgICBpZiAoaXNM
aXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fYmxvY2tMaXN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoaXNMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fZnVsbEJsb2NrcykpCisgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMzEsMTUgKzQxLDMx
IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKIHsKICAgICBpZiAo
IW1fZnJlZUxpc3QuaGVhZCkgewogICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayA9PSBtX2Jsb2Nrc1RvU3dlZXApOworICAgICAg
ICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrID09IG1fbmV4dEJsb2NrVG9Td2VlcCk7CiAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7Ci0gICAgICAgICAg
ICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2N1cnJlbnRCbG9jay0+bmV4dCgpOworICAgICAgICAgICAg
bV9uZXh0QmxvY2tUb1N3ZWVwID0gbV9jdXJyZW50QmxvY2stPm5leHQoKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGZvciAoTWFya2VkQmxvY2sqJiBibG9jayA9IG1fYmxvY2tzVG9Td2VlcDsgYmxv
Y2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkgeworICAgICAgICBNYXJrZWRCbG9jayogbmV4dDsK
KyAgICAgICAgZm9yIChNYXJrZWRCbG9jayomIGJsb2NrID0gbV9uZXh0QmxvY2tUb1N3ZWVwOyBi
bG9jazsgYmxvY2sgPSBuZXh0KSB7CisgICAgICAgICAgICBuZXh0ID0gYmxvY2stPm5leHQoKTsK
KwogICAgICAgICAgICAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3
ZWVwKE1hcmtlZEJsb2NrOjpTd2VlcFRvRnJlZUxpc3QpOwotICAgICAgICAgICAgaWYgKCFmcmVl
TGlzdC5oZWFkKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBmcmVlTGlzdExlbmd0aCA9IGZyZWVM
aXN0LmJ5dGVzIC8gYmxvY2stPmNlbGxTaXplKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBtYXhO
dW1PYmplY3RzID0gKGJsb2NrLT5jYXBhY2l0eSgpIC0gc2l6ZW9mKE1hcmtlZEJsb2NrKSkgLyBi
bG9jay0+Y2VsbFNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGRvdWJsZSht
YXhOdW1PYmplY3RzIC0gZnJlZUxpc3RMZW5ndGgpIC8gZG91YmxlKG1heE51bU9iamVjdHMpID4g
MC43NSkgeworICAgICAgICAgICAgLy8gaWYgKCFmcmVlTGlzdC5oZWFkKSB7CisgICAgICAgICAg
ICAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBuZXh0OworICAgICAgICAgICAgICAgIGZvciAo
TWFya2VkQmxvY2s6OkZyZWVDZWxsKiBjdXJyZW50ID0gZnJlZUxpc3QuaGVhZDsgY3VycmVudDsg
Y3VycmVudCA9IG5leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5l
eHQ7CisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oY3VycmVu
dCktPnphcCgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBibG9jay0+ZGlk
Q29uc3VtZUVtcHR5RnJlZUxpc3QoKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrTGlzdC5yZW1v
dmUoYmxvY2spOworICAgICAgICAgICAgICAgIG1fYmxvY2tMaXN0LnB1c2goYmxvY2spOworICAg
ICAgICAgICAgICAgIGlmICghbV9sYXN0RnVsbEJsb2NrKQorICAgICAgICAgICAgICAgICAgICBt
X2xhc3RGdWxsQmxvY2sgPSBibG9jazsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KIApAQCAtNDgsNiArNzQsNyBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAK
KyAgICAKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAgICAgICAgICBt
X2ZyZWVMaXN0ID0gZnJlZUxpc3Q7CiAgICAgICAgICAgICBicmVhazsKQEAgLTYyLDYgKzg5LDcg
QEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdAogICAgIE1hcmtlZEJs
b2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBtX2ZyZWVMaXN0Lmhl
YWQgPSBoZWFkLT5uZXh0OwogICAgIEFTU0VSVChoZWFkKTsKKyAgICBtX21hcmtlZFNwYWNlLT5k
aWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOwogICAgIHJldHVybiBoZWFkOwogfQog
ICAgIApAQCAtMTI3LDcgKzE1NSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhN
YXJrZWRCbG8KICAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAgCiAgICAgbV9ibG9j
a0xpc3QuYXBwZW5kKGJsb2NrKTsKLSAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2N1cnJlbnRCbG9j
ayA9IGJsb2NrOworICAgIG1fbmV4dEJsb2NrVG9Td2VlcCA9IG1fY3VycmVudEJsb2NrID0gYmxv
Y2s7CiAgICAgbV9mcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6U3dlZXBUb0Zy
ZWVMaXN0KTsKICAgICBtX21hcmtlZFNwYWNlLT5kaWRBZGRCbG9jayhibG9jayk7CiB9CkBAIC0x
MzgsOSArMTY2LDI3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayhNYXJrZWQK
ICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2N1cnJlbnRCbG9jay0+bmV4dCgpOwogICAgICAg
ICBtX2ZyZWVMaXN0ID0gTWFya2VkQmxvY2s6OkZyZWVMaXN0KCk7CiAgICAgfQotICAgIGlmICht
X2Jsb2Nrc1RvU3dlZXAgPT0gYmxvY2spCi0gICAgICAgIG1fYmxvY2tzVG9Td2VlcCA9IG1fYmxv
Y2tzVG9Td2VlcC0+bmV4dCgpOworICAgIGlmIChtX25leHRCbG9ja1RvU3dlZXAgPT0gYmxvY2sp
CisgICAgICAgIG1fbmV4dEJsb2NrVG9Td2VlcCA9IG1fbmV4dEJsb2NrVG9Td2VlcC0+bmV4dCgp
OworCisgICAgaWYgKGJsb2NrID09IG1fbGFzdEZ1bGxCbG9jaykKKyAgICAgICAgbV9sYXN0RnVs
bEJsb2NrID0gbV9sYXN0RnVsbEJsb2NrLT5wcmV2KCk7CisgICAgCiAgICAgbV9ibG9ja0xpc3Qu
cmVtb3ZlKGJsb2NrKTsKIH0KIAordm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAg
ICBtX2xhc3RBY3RpdmVCbG9jayA9IDA7CisgICAgbV9jdXJyZW50QmxvY2sgPSAwOworICAgIG1f
ZnJlZUxpc3QgPSBNYXJrZWRCbG9jazo6RnJlZUxpc3QoKTsKKyAgICBpZiAobV9oZWFwLT5vcGVy
YXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgIG1fbGFzdEZ1bGxC
bG9jayA9IDA7CisKKyAgICBpZiAobV9sYXN0RnVsbEJsb2NrKQorICAgICAgICBtX25leHRCbG9j
a1RvU3dlZXAgPSBtX2xhc3RGdWxsQmxvY2stPm5leHQoKSA/IG1fbGFzdEZ1bGxCbG9jay0+bmV4
dCgpIDogbV9sYXN0RnVsbEJsb2NrOworICAgIGVsc2UKKyAgICAgICAgbV9uZXh0QmxvY2tUb1N3
ZWVwID0gbV9ibG9ja0xpc3QuaGVhZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lv
biAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsMTAgQEAgcHJpdmF0ZToKICAgICBNYXJrZWRC
bG9jazo6RnJlZUxpc3QgbV9mcmVlTGlzdDsKICAgICBNYXJrZWRCbG9jayogbV9jdXJyZW50Qmxv
Y2s7CiAgICAgTWFya2VkQmxvY2sqIG1fbGFzdEFjdGl2ZUJsb2NrOwotICAgIE1hcmtlZEJsb2Nr
KiBtX2Jsb2Nrc1RvU3dlZXA7CisgICAgTWFya2VkQmxvY2sqIG1fbmV4dEJsb2NrVG9Td2VlcDsK
KyAgICBNYXJrZWRCbG9jayogbV9sYXN0RnVsbEJsb2NrOwogICAgIERvdWJseUxpbmtlZExpc3Q8
TWFya2VkQmxvY2s+IG1fYmxvY2tMaXN0OworICAgIERvdWJseUxpbmtlZExpc3Q8TWFya2VkQmxv
Y2s+IG1fZnVsbEJsb2NrczsKICAgICBzaXplX3QgbV9jZWxsU2l6ZTsKICAgICBNYXJrZWRCbG9j
azo6RGVzdHJ1Y3RvclR5cGUgbV9kZXN0cnVjdG9yVHlwZTsKICAgICBIZWFwKiBtX2hlYXA7CkBA
IC02OCw3ICs3MCw4IEBAIGlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXQK
IGlubGluZSBNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcigpCiAgICAgOiBtX2N1cnJl
bnRCbG9jaygwKQogICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKLSAgICAsIG1fYmxvY2tzVG9T
d2VlcCgwKQorICAgICwgbV9uZXh0QmxvY2tUb1N3ZWVwKDApCisgICAgLCBtX2xhc3RGdWxsQmxv
Y2soMCkKICAgICAsIG1fY2VsbFNpemUoMCkKICAgICAsIG1fZGVzdHJ1Y3RvclR5cGUoTWFya2Vk
QmxvY2s6Ok5vbmUpCiAgICAgLCBtX2hlYXAoMCkKQEAgLTEwMiwxNCArMTA1LDYgQEAgaW5saW5l
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUocwogICAgIHJldHVybiBoZWFkOwogfQog
Ci1pbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc2V0KCkKLXsKLSAgICBtX2xhc3RBY3Rp
dmVCbG9jayA9IDA7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAgIG1fZnJlZUxpc3QgPSBN
YXJrZWRCbG9jazo6RnJlZUxpc3QoKTsKLSAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2Jsb2NrTGlz
dC5oZWFkKCk7Ci19Ci0KIGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRp
bmcoKQogewogICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOwpAQCAtMTQxLDYgKzEzNiwx
MSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgCiAgICAgICAgIG5l
eHQgPSBibG9jay0+bmV4dCgpOwogICAgICAgICBmdW5jdG9yKGJsb2NrKTsKICAgICB9CisKKyAg
ICBmb3IgKE1hcmtlZEJsb2NrKiBibG9jayA9IG1fZnVsbEJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBi
bG9jayA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IGJsb2NrLT5uZXh0KCk7CisgICAgICAgIGZ1
bmN0b3IoYmxvY2spOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAxNTU4OTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5OSw2ICsxOTksNDIgQEAgdm9pZCBNYXJrZWRCbG9jazo6c3RvcEFsbG9jYXRp
bmcoY29uc3QgRgogICAgIG1fc3RhdGUgPSBNYXJrZWQ7CiB9CiAKK3ZvaWQgTWFya2VkQmxvY2s6
OmNsZWFyTWFya3MoKQoreworICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9
PSBKU0M6OkVkZW5Db2xsZWN0aW9uKQorICAgICAgICB0aGlzLT5jbGVhck1hcmtzV2l0aENvbGxl
Y3Rpb25UeXBlPE1hcmtlZEJsb2NrOjpFZGVuQ29sbGVjdGlvbj4oKTsKKyAgICBlbHNlCisgICAg
ICAgIHRoaXMtPmNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGU8TWFya2VkQmxvY2s6OkZ1bGxD
b2xsZWN0aW9uPigpOworfQorCit2b2lkIE1hcmtlZEJsb2NrOjpjbGVhclJlbWVtYmVyZWRTZXQo
KQoreworICAgIG1fcmVtZW1iZXJlZFNldC5jbGVhckFsbCgpOworfQorCit0ZW1wbGF0ZSA8TWFy
a2VkQmxvY2s6OkNvbGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBlPgordm9pZCBNYXJrZWRCbG9j
azo6Y2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlwZSgpCit7CisgICAgSEVBUF9MT0dfQkxPQ0tf
U1RBVEVfVFJBTlNJVElPTih0aGlzKTsKKworICAgIEFTU0VSVChtX3N0YXRlICE9IE5ldyAmJiBt
X3N0YXRlICE9IEZyZWVMaXN0ZWQpOworICAgIGlmIChjb2xsZWN0aW9uVHlwZSA9PSBNYXJrZWRC
bG9jazo6RnVsbENvbGxlY3Rpb24pCisgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKKworICAg
IC8vIFRoaXMgd2lsbCBiZWNvbWUgdHJ1ZSBhdCB0aGUgZW5kIG9mIHRoZSBtYXJrIHBoYXNlLiBX
ZSBzZXQgaXQgbm93IHRvCisgICAgLy8gYXZvaWQgYW4gZXh0cmEgcGFzcyB0byBkbyBzbyBsYXRl
ci4KKyAgICBtX3N0YXRlID0gTWFya2VkOworfQorCit2b2lkIE1hcmtlZEJsb2NrOjpsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSgpCit7CisgICAgbV93ZWFrU2V0Lmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7
CisKKyAgICBjbGVhck5ld2x5QWxsb2NhdGVkKCk7CisgICAgY2xlYXJNYXJrc1dpdGhDb2xsZWN0
aW9uVHlwZTxGdWxsQ29sbGVjdGlvbj4oKTsKKyAgICBzd2VlcCgpOworfQorCiBNYXJrZWRCbG9j
azo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnJlc3VtZUFsbG9jYXRpbmcoKQogewogICAgIEhFQVBf
TE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gc2l6ZS4KIAogICAgIGNsYXNzIE1hcmtlZEJs
b2NrIDogcHVibGljIEhlYXBCbG9jazxNYXJrZWRCbG9jaz4geworICAgICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBhdG9tU2l6ZSA9IDg7IC8vIGJ5dGVzCisgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgYXRvbVNpemUgPSAxNjsgLy8gYnl0ZXMKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBibG9ja1NpemUgPSA2NCAqIEtCOwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJsb2Nr
TWFzayA9IH4oYmxvY2tTaXplIC0gMSk7IC8vIGJsb2NrU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2Yg
dHdvLgogCkBAIC0xMzUsMTEgKzEzNiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYpOwogICAgICAgICBGcmVlTGlzdCByZXN1
bWVBbGxvY2F0aW5nKCk7IC8vIENhbGwgdGhpcyBpZiB5b3UgY2Fub25pY2FsaXplZCBhIGJsb2Nr
IGZvciBzb21lIG5vbi1jb2xsZWN0aW9uIHJlbGF0ZWQgcHVycG9zZS4KICAgICAgICAgdm9pZCBk
aWRDb25zdW1lRW1wdHlGcmVlTGlzdCgpOyAvLyBDYWxsIHRoaXMgaWYgeW91IHN3ZWVwIGEgYmxv
Y2ssIGJ1dCB0aGUgcmV0dXJuZWQgRnJlZUxpc3QgaXMgZW1wdHkuCisgICAgICAgIHZvaWQgZGlk
U3dlZXBUb05vQXZhaWwoKTsgLy8gQ2FsbCB0aGlzIGlmIHlvdSBzd2VlcCBhIGJsb2NrIGFuZCBn
ZXQgYW4gZW1wdHkgZnJlZSBsaXN0IGJhY2suCiAKICAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSAibmV3bHkgYWxsb2NhdGVkIiBiaXRtYXAgd2FzIG5vbi1udWxsIAogICAgICAgICAvLyBh
bmQgd2FzIHN1Y2Nlc3NmdWxseSBjbGVhcmVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICAg
IGJvb2wgY2xlYXJOZXdseUFsbG9jYXRlZCgpOworCisgICAgICAgIGVudW0gQ29sbGVjdGlvblR5
cGUgeyBFZGVuQ29sbGVjdGlvbiwgRnVsbENvbGxlY3Rpb24gfTsKICAgICAgICAgdm9pZCBjbGVh
ck1hcmtzKCk7CisgICAgICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkU2V0KCk7CisgICAgICAgIHRl
bXBsYXRlIDxDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBjbGVh
ck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlKCk7CisKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgp
OwogICAgICAgICBib29sIGlzRW1wdHkoKTsKIApAQCAtMTU2LDYgKzE2NCwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgICAgICB2
b2lkIGNsZWFyTWFya2VkKGNvbnN0IHZvaWQqKTsKIAorICAgICAgICB2b2lkIHNldFJlbWVtYmVy
ZWQoY29uc3Qgdm9pZCopOworICAgICAgICB2b2lkIGNsZWFyUmVtZW1iZXJlZChjb25zdCB2b2lk
Kik7CisgICAgICAgIHZvaWQgYXRvbWljQ2xlYXJSZW1lbWJlcmVkKGNvbnN0IHZvaWQqKTsKKyAg
ICAgICAgYm9vbCBpc1JlbWVtYmVyZWQoY29uc3Qgdm9pZCopOworCiAgICAgICAgIGJvb2wgaXNO
ZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgc2V0TmV3bHlBbGxvY2F0
ZWQoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoY29uc3Qg
dm9pZCopOwpAQCAtMTY2LDYgKzE3OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwoRnVuY3RvciYpOwog
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoRGVhZENlbGwo
RnVuY3RvciYpOwogCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXJrcygpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXJrZWRCbG9jaywgbV9tYXJrcyk7IH0KKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbUFsaWdubWVudE1hc2sgPSBh
dG9tU2l6ZSAtIDE7IC8vIGF0b21TaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCiAKQEAgLTE4
Myw5ICsxOTgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCBtX2F0b21zUGVy
Q2VsbDsKICAgICAgICAgc2l6ZV90IG1fZW5kQXRvbTsgLy8gVGhpcyBpcyBhIGZ1enp5IGVuZC4g
QWx3YXlzIHRlc3QgZm9yIDwgbV9lbmRBdG9tLgogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAg
ICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RGOjpCaXRtYXBBdG9taWM+IG1fbWFy
a3M7CisgICAgICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwQXRvbWlj
LCB1aW50OF90PiBtX21hcmtzOworICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBX
VEY6OkJpdG1hcEF0b21pYywgdWludDhfdD4gbV9yZW1lbWJlcmVkU2V0OwogI2Vsc2UKLSAgICAg
ICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RGOjpCaXRtYXBOb3RBdG9taWM+IG1fbWFy
a3M7CisgICAgICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwTm90QXRv
bWljLCB1aW50OF90PiBtX21hcmtzOworICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2Nr
LCBXVEY6OkJpdG1hcE5vdEF0b21pYywgdWludDhfdD4gbV9yZW1lbWJlcmVkU2V0OwogI2VuZGlm
CiAgICAgICAgIE93blB0cjxXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrPiA+IG1fbmV3bHlBbGxv
Y2F0ZWQ7CiAKQEAgLTIyNywxNSArMjQ0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PE1hcmtlZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxCaXRz
PihwKSAmIGJsb2NrTWFzayk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6
Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKLSAgICB7Ci0gICAgICAgIG1fd2Vha1NldC5sYXN0Q2hh
bmNlVG9GaW5hbGl6ZSgpOwotCi0gICAgICAgIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKLSAgICAg
ICAgY2xlYXJNYXJrcygpOwotICAgICAgICBzd2VlcCgpOwotICAgIH0KLQogICAgIGlubGluZSBN
YXJrZWRBbGxvY2F0b3IqIE1hcmtlZEJsb2NrOjphbGxvY2F0b3IoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwpAQCAtMjg0LDI2ICsyOTIsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7CiAK
ICAgICAgICAgQVNTRVJUKCFtX25ld2x5QWxsb2NhdGVkKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0
b21zUGVyQ2VsbCkKLSAgICAgICAgICAgIEFTU0VSVChtX21hcmtzLmdldChpKSk7Ci0jZW5kaWYK
ICAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gRnJlZUxpc3RlZCk7CiAgICAgICAgIG1fc3RhdGUg
PSBNYXJrZWQ7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmNsZWFyTWFy
a3MoKQotICAgIHsKLSAgICAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlz
KTsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSAhPSBOZXcgJiYgbV9zdGF0ZSAhPSBGcmVlTGlz
dGVkKTsKLSAgICAgICAgbV9tYXJrcy5jbGVhckFsbCgpOwotCi0gICAgICAgIC8vIFRoaXMgd2ls
bCBiZWNvbWUgdHJ1ZSBhdCB0aGUgZW5kIG9mIHRoZSBtYXJrIHBoYXNlLiBXZSBzZXQgaXQgbm93
IHRvCi0gICAgICAgIC8vIGF2b2lkIGFuIGV4dHJhIHBhc3MgdG8gZG8gc28gbGF0ZXIuCi0gICAg
ICAgIG1fc3RhdGUgPSBNYXJrZWQ7Ci0gICAgfQotCiAgICAgaW5saW5lIHNpemVfdCBNYXJrZWRC
bG9jazo6bWFya0NvdW50KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21hcmtzLmNvdW50KCk7
CkBAIC0zMzksNiArMzMxLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gKHJl
aW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgLSByZWludGVycHJldF9jYXN0PEJpdHM+KHRoaXMpKSAv
IGF0b21TaXplOwogICAgIH0KIAorICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpzZXRSZW1l
bWJlcmVkKGNvbnN0IHZvaWQqIHApCisgICAgeworICAgICAgICBtX3JlbWVtYmVyZWRTZXQuc2V0
KGF0b21OdW1iZXIocCkpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpj
bGVhclJlbWVtYmVyZWQoY29uc3Qgdm9pZCogcCkKKyAgICB7CisgICAgICAgIG1fcmVtZW1iZXJl
ZFNldC5jbGVhcihhdG9tTnVtYmVyKHApKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBNYXJr
ZWRCbG9jazo6YXRvbWljQ2xlYXJSZW1lbWJlcmVkKGNvbnN0IHZvaWQqIHApCisgICAgeworICAg
ICAgICBtX3JlbWVtYmVyZWRTZXQuY29uY3VycmVudFRlc3RBbmRDbGVhcihhdG9tTnVtYmVyKHAp
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNSZW1lbWJlcmVkKGNv
bnN0IHZvaWQqIHApCisgICAgeworICAgICAgICByZXR1cm4gbV9yZW1lbWJlcmVkU2V0LmdldChh
dG9tTnVtYmVyKHApKTsKKyAgICB9CisKICAgICBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNN
YXJrZWQoY29uc3Qgdm9pZCogcCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21hcmtzLmdldChh
dG9tTnVtYmVyKHApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5jcHAJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDE3ICsxMzgsMjcgQEAgdm9p
ZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKCkKICAgICBtX25vcm1hbFNwYWNlLmxhcmdl
QWxsb2NhdG9yLnJlc2V0KCk7CiAgICAgbV9ub3JtYWxEZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxv
Y2F0b3IucmVzZXQoKTsKICAgICBtX2ltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvclNwYWNlLmxh
cmdlQWxsb2NhdG9yLnJlc2V0KCk7CisKKyAgICBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzLmNsZWFy
KCk7CiB9CiAKIHZvaWQgTWFya2VkU3BhY2U6OnZpc2l0V2Vha1NldHMoSGVhcFJvb3RWaXNpdG9y
JiBoZWFwUm9vdFZpc2l0b3IpCiB7CiAgICAgVmlzaXRXZWFrU2V0IHZpc2l0V2Vha1NldChoZWFw
Um9vdFZpc2l0b3IpOwotICAgIGZvckVhY2hCbG9jayh2aXNpdFdlYWtTZXQpOworICAgIGlmICht
X2hlYXAtPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ibG9ja3NXaXRoTmV3T2JqZWN0cy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIHZpc2l0V2Vha1NldChtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzW2ld
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZm9yRWFjaEJsb2NrKHZpc2l0V2Vha1NldCk7CiB9CiAK
IHZvaWQgTWFya2VkU3BhY2U6OnJlYXBXZWFrU2V0cygpCiB7Ci0gICAgZm9yRWFjaEJsb2NrPFJl
YXBXZWFrU2V0PigpOworICAgIGlmIChtX2hlYXAtPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBF
ZGVuQ29sbGVjdGlvbikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ibG9j
a3NXaXRoTmV3T2JqZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fYmxvY2tzV2l0aE5l
d09iamVjdHNbaV0tPnJlYXBXZWFrU2V0KCk7CisgICAgfSBlbHNlCisgICAgICAgIGZvckVhY2hC
bG9jazxSZWFwV2Vha1NldD4oKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CkBA
IC0yOTksNiArMzA5LDI1IEBAIHZvaWQgTWFya2VkU3BhY2U6OmNsZWFyTmV3bHlBbGxvY2F0ZWQo
KQogI2VuZGlmCiB9CiAKKyNpZm5kZWYgTkRFQlVHCitzdHJ1Y3QgVmVyaWZ5TWFya2VkIDogTWFy
a2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sq
IGJsb2NrKSB7IEFTU0VSVChibG9jay0+bmVlZHNTd2VlcGluZygpKTsgfQorfTsKKyNlbmRpZgor
Cit2b2lkIE1hcmtlZFNwYWNlOjpjbGVhck1hcmtzKCkKK3sKKyAgICBpZiAobV9oZWFwLT5vcGVy
YXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24pIHsKKyAgICAgICAgZGF0YUxvZ0Yo
Im51bWJlciBvZiBibG9ja3Mgd2l0aCBuZXcgb2JqZWN0cyA9ICVsdVxuIiwgbV9ibG9ja3NXaXRo
TmV3T2JqZWN0cy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9i
bG9ja3NXaXRoTmV3T2JqZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fYmxvY2tzV2l0
aE5ld09iamVjdHNbaV0tPmNsZWFyTWFya3MoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZm9yRWFj
aEJsb2NrPENsZWFyTWFya3M+KCk7CisjaWZuZGVmIE5ERUJVRworICAgIGZvckVhY2hCbG9jazxW
ZXJpZnlNYXJrZWQ+KCk7CisjZW5kaWYKK30KKwogdm9pZCBNYXJrZWRTcGFjZTo6d2lsbFN0YXJ0
SXRlcmF0aW5nKCkKIHsKICAgICBBU1NFUlQoIWlzSXRlcmF0aW5nKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAxNTU4OTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSwxNyBAQCBjbGFzcyBXZWFrR0NIYW5kbGU7CiBjbGFzcyBTbG90VmlzaXRvcjsK
IAogc3RydWN0IENsZWFyTWFya3MgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotICAgIHZv
aWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgYmxvY2stPmNsZWFyTWFya3MoKTsg
fQorICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spCisgICAgeworICAgICAg
ICBibG9jay0+Y2xlYXJNYXJrcygpOworICAgIH0KK307CisKK3N0cnVjdCBDbGVhclJlbWVtYmVy
ZWRTZXQgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgeworICAgIHZvaWQgb3BlcmF0b3IoKShN
YXJrZWRCbG9jayogYmxvY2spCisgICAgeworICAgICAgICBibG9jay0+Y2xlYXJSZW1lbWJlcmVk
U2V0KCk7CisgICAgfQogfTsKIAogc3RydWN0IFN3ZWVwIDogTWFya2VkQmxvY2s6OlZvaWRGdW5j
dG9yIHsKQEAgLTEwNCw4ICsxMTQsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRBZGRCbG9j
ayhNYXJrZWRCbG9jayopOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KE1hcmtlZEJsb2Nr
Kik7CisgICAgdm9pZCBkaWRBbGxvY2F0ZUluQmxvY2soTWFya2VkQmxvY2sqKTsKIAogICAgIHZv
aWQgY2xlYXJNYXJrcygpOworICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkU2V0KCk7CiAgICAgdm9p
ZCBjbGVhck5ld2x5QWxsb2NhdGVkKCk7CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIHNpemVfdCBv
YmplY3RDb3VudCgpOwpAQCAtMTQ0LDYgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1f
Y2FwYWNpdHk7CiAgICAgYm9vbCBtX2lzSXRlcmF0aW5nOwogICAgIE1hcmtlZEJsb2NrU2V0IG1f
YmxvY2tzOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+IG1fYmxvY2tzV2l0aE5ld09iamVjdHM7
CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rv
cjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFjaExpdmVDZWxsKEhlYXBJdGVyYXRpb25T
Y29wZSYsIEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC0yNTQsOSArMjY3LDE0IEBAIGlubGluZSB2b2lk
IE1hcmtlZFNwYWNlOjpkaWRBZGRCbG9jayhNYXIKICAgICBtX2Jsb2Nrcy5hZGQoYmxvY2spOwog
fQogCi1pbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Y2xlYXJNYXJrcygpCitpbmxpbmUgdm9pZCBN
YXJrZWRTcGFjZTo6ZGlkQWxsb2NhdGVJbkJsb2NrKE1hcmtlZEJsb2NrKiBibG9jaykKK3sKKyAg
ICBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzLmFwcGVuZChibG9jayk7Cit9CisKK2lubGluZSB2b2lk
IE1hcmtlZFNwYWNlOjpjbGVhclJlbWVtYmVyZWRTZXQoKQogewotICAgIGZvckVhY2hCbG9jazxD
bGVhck1hcmtzPigpOworICAgIGZvckVhY2hCbG9jazxDbGVhclJlbWVtYmVyZWRTZXQ+KCk7CiB9
CiAKIGlubGluZSBzaXplX3QgTWFya2VkU3BhY2U6Om9iamVjdENvdW50KCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDE1NTg5NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQCBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoR0NUaHJlYWRT
aGFyZWRECiAKIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogewotICAgIEFTU0VSVChtX3N0
YWNrLmlzRW1wdHkoKSk7CisgICAgY2xlYXJNYXJrU3RhY2soKTsKIH0KIAogdm9pZCBTbG90Vmlz
aXRvcjo6c2V0dXAoKQpAQCAtNjMsNiArNjMsMTUgQEAgdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQo
KQogICAgIH0KIH0KIAordm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2soKQoreworICAg
IHdoaWxlICghbV9zdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsK
KyAgICAgICAgd2hpbGUgKG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpKQorICAgICAgICAgICAgbV9z
dGFjay5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQo
Q29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewogICAgIFN0YWNrU3RhdHM6
OnByb2JlKCk7CkBAIC04MCw3ICs4OSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbigKICNlbmRpZgogCiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsK
LSAgICAKKwogICAgIGlmIChpc0pTU3RyaW5nKGNlbGwpKSB7CiAgICAgICAgIEpTU3RyaW5nOjp2
aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZpc2l0b3IpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJ
KHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICBTbG90
VmlzaXRvcihHQ1RocmVhZFNoYXJlZERhdGEmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAorICAg
IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSB7IHJldHVybiBtX3N0YWNrOyB9CisKKyAgICBI
ZWFwKiBoZWFwKCkgY29uc3Q7CisKICAgICB2b2lkIGFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYp
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kKEpJVFdyaXRlQmFy
cmllcjxUPiopOwpAQCAtNjAsMTcgKzY0LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFVu
YmFycmllcmVkVmFsdWUoSlNWYWx1ZSopOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAg
dm9pZCBhcHBlbmRVbmJhcnJpZXJlZFdlYWsoV2VhazxUPiopOworICAgIHZvaWQgdW5jb25kaXRp
b25hbGx5QXBwZW5kKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lk
Kik7CiAgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopOwogICAgIFRyaVN0YXRlIGNv
bnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKTsKICAgICBpbnQgb3BhcXVlUm9vdENvdW50
KCk7CiAKLSAgICBHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERhdGEoKSB7IHJldHVybiBtX3No
YXJlZDsgfQorICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcmVkOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9zdGFjay5pc0Vt
cHR5KCk7IH0KIAogICAgIHZvaWQgc2V0dXAoKTsKICAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9p
ZCBjbGVhck1hcmtTdGFjaygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9CiAgICAgc2l6ZV90IGJ5dGVzQ29waWVkKCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlc0NvcGllZDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsNiArMTA1LDE0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6aW50
ZXJuYWwKICAgICAgICAgCiAgICAgTUFSS19MT0dfQ0hJTEQoKnRoaXMsIGNlbGwpOwogCisgICAg
dW5jb25kaXRpb25hbGx5QXBwZW5kKGNlbGwpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OnVuY29uZGl0aW9uYWxseUFwcGVuZChKU0NlbGwqIGNlbGwpCit7CisgICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICAgICAg
CiAgICAgLy8gU2hvdWxkIG5ldmVyIGF0dGVtcHQgdG8gbWFyayBzb21ldGhpbmcgdGhhdCBpcyB6
YXBwZWQuCiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAgICAgCkBAIC0yMTIs
NyArMjIwLDkgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKAogaW5s
aW5lIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4g
dG9rZW4sIHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChieXRlcyk7Ci0g
ICAgbV9ieXRlc0NvcGllZCArPSBieXRlczsKKyAgICBib29sIGlzUmVtZW1iZXJlZCA9IGhlYXAo
KS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uICYmIE1hcmtlZEJsb2Nr
OjpibG9ja0Zvcihvd25lciktPmlzUmVtZW1iZXJlZChvd25lcik7CisgICAgaWYgKCFpc1JlbWVt
YmVyZWQpCisgICAgICAgIG1fYnl0ZXNDb3BpZWQgKz0gYnl0ZXM7CiAKICAgICBDb3BpZWRCbG9j
ayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKICAgICBpZiAoYmxvY2stPmlz
T3ZlcnNpemUoKSkgewpAQCAtMjIwLDcgKzIzMCw3IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9y
Ojpjb3B5TGF0ZXIoSlNDZWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChibG9j
ay0+aXNQaW5uZWQoKSkKKyAgICBpZiAoaXNSZW1lbWJlcmVkKQogICAgICAgICByZXR1cm47CiAK
ICAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKG93bmVyLCB0b2tlbiwgYnl0ZXMpOwpAQCAtMjQx
LDYgKzI1MSwxMSBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vCiAj
ZW5kaWYKIH0KIAoraW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gJnNoYXJlZERhdGEoKS5tX3ZtLT5oZWFwOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIFNsb3RWaXNpdG9ySW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw4ICs0NTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMgfTsKICAgICAgICAgLy8gdmFsdWUgcmVnaXN0ZXIg
aW4gd3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRjaCByZWdpc3RlcnMKICAg
ICAgICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRoZXIgb2YgdGhlIHNjcmF0
Y2ggcmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBv
d25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVnaXN0ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklE
IHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKLSAgICAg
ICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUs
IFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2lu
ZCk7CisgICAgICAgIEp1bXAgY2hlY2tNYXJrV29yZChSZWdpc3RlcklEIG93bmVyLCBSZWdpc3Rl
cklEIHNjcmF0Y2gxLCBSZWdpc3RlcklEIHNjcmF0Y2gyKTsKKyAgICAgICAgSnVtcCBjaGVja01h
cmtXb3JkKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlVGFnLCBS
ZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2Rl
LCBKdW1wTGlzdCYgc2xvd0Nhc2VzKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpT
Q2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVC
YXJyaWVyTW9kZSwgSnVtcExpc3QmIHNsb3dDYXNlcyk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgU3RydWN0dXJlVHlwZT4gLy8gU3RydWN0dXJlVHlwZSBjYW4gYmUgUmVnaXN0ZXJJRCBv
ciBJbW1QdHIuCiAgICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoUmVnaXN0ZXJJRCBh
bGxvY2F0b3IsIFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNj
cmF0Y2gpOwpAQCAtNzUyLDYgKzc1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X3BuYW1lKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX2hhc19pbnN0YW5jZShJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pmYWxzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDggKzM4OCw3
IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgKIAogaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5k
ZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
KQogewotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsgLy8gV2UgaGFkIGZvdW5kIHRoaXMgc2Ny
YXRjaCByZWdpc3RlciB1c2VmdWwgaGVyZSBiZWZvcmUsIHNvIEkgd2lsbCBrZWVwIGl0IGZvciBu
b3cuCi0gICAgCisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgIFJlZ2lzdGVySUQgc3Ry
dWN0dXJlID0gc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlOwogICAgIFJlZ2lzdGVySUQgaW5kZXhp
bmdUeXBlID0gc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1
NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCisKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNo
b29zZUFycmF5TW9kZShwcm9maWxlKTsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIEpJ
VEludDMyOgpAQCAtMzU3LDcgKzM1Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
SW5zdHJ1Y3Rpb24KICAgICAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZh
bENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7
CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91
bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CiB9CiAK
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdTaGFwZSkKQEAgLTM3NCw2ICszNzMsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzCiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVs
KCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOworCiAgICAgc3dp
dGNoIChpbmRleGluZ1NoYXBlKSB7CiAgICAgY2FzZSBJbnQzMlNoYXBlOgogICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QzKSk7CkBAIC0z
OTIsNiArMzkyLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91cwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMiwgcmVnVDIsIFNob3VsZEZpbHRl
ckltbWVkaWF0ZXMsIHNsb3dDYXNlcyk7CiAgICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKQEAgLTQzMCw2ICs0MzEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVn
VDMsIHJlZ1QyLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgc2xvd0Nhc2VzKTsKICAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICBKdW1wIGVuZCA9
IGp1bXAoKTsKICAgICAKQEAgLTQ2NSw2ICs0NjcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGNhc2UgSklURG91YmxlOgogICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIHZhbHVlIHR5cGUgY2hlY2sKICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBKSVRDb250aWd1b3VzOgorICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTYwNyw2ICs2MTMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKEluc3RydWN0aW9uKgogICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2UgaWYgZWl0aGVyIHRo
ZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBu
b3QgbWF0Y2guCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7CiAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdU
MCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgc2xvd0Nhc2Vz
KTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworCiAgICAgQkVHSU5fVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwogCiAgICAgTGFiZWwgaG90UGF0aEJlZ2luKHRo
aXMpOwpAQCAtNjIwLDggKzYzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0
cnVjdGlvbioKIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJ
ZCk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBT
aG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0K
ICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJD
b21waWxhdGlvbkluZm8oUHJvcGVydHlTdHViUHV0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgaG90
UGF0aEJlZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHByb3BlcnR5U3RvcmFnZUxvYWQsIGRpc3Bs
YWNlbWVudExhYmVsKSk7CiB9CiAKQEAgLTYzMyw2ICs2NDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiAKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
dGVyLCBiYXNlVlJlZyk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGRpcmVjdCA/IGN0aV9v
cF9wdXRfYnlfaWRfZGlyZWN0IDogY3RpX29wX3B1dF9ieV9pZCk7CiAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQocmVnVDApOwpAQCAtNzMxLDEyICs3NDAsMjkgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihyZWdUMyk7CiAgICAgfQogCi0gICAgLy8gUGxhbnRpbmcgdGhlIG5ldyBzdHJ1Y3R1
cmUgdHJpZ2dlcnMgdGhlIHdyaXRlIGJhcnJpZXIgc28gd2UgbmVlZAotICAgIC8vIGFuIHVuY29u
ZGl0aW9uYWwgYmFycmllciBoZXJlLgotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1Qx
LCByZWdUMiwgcmVnVDMsIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzKTsKLQogICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
ID09IG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIobmV3U3RydWN0dXJlKSwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSkpOworCisgICAgSnVtcExpc3Qgd3JpdGVCYXJyaWVyU2xvd0Nhc2VzOworICAgIGVtaXRXcml0
ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMywgcmVnVDMsIFVuY29uZGl0aW9uYWxXcml0ZUJh
cnJpZXIsIHdyaXRlQmFycmllclNsb3dDYXNlcyk7CisgICAgSnVtcCB3cml0ZUJhcnJpZXJOb3RU
YWtlbiA9IGp1bXAoKTsKKyAgICB3cml0ZUJhcnJpZXJTbG93Q2FzZXMubGluayh0aGlzKTsKKwor
ICAgIHB1c2gocmVnVDApOworICAgIHB1c2gocmVnVDEpOworICAgIHB1c2gocmVnVDIpOworICAg
IHB1c2gocmVnVDMpOworICAgIHB1c2gocmVnVDQpOworICAgIEpJVFN0dWJDYWxsIHdyaXRlQmFy
cmllclN0dWJDYWxsKHRoaXMsIGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcik7
CisgICAgd3JpdGVCYXJyaWVyU3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOworICAgIHdyaXRl
QmFycmllclN0dWJDYWxsLmNhbGwoKTsKKyAgICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUMyk7
CisgICAgcG9wKHJlZ1QyKTsKKyAgICBwb3AocmVnVDEpOworICAgIHBvcChyZWdUMCk7CisKKyAg
ICB3cml0ZUJhcnJpZXJOb3RUYWtlbi5saW5rKHRoaXMpOwogICAgIGNvbXBpbGVQdXREaXJlY3RP
ZmZzZXQocmVnVDAsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwogCiAgICAgcmV0KCk7CkBAIC03NTEs
OSArNzc3LDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlf
b3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAKICAg
ICBpZiAod2lsbE5lZWRTdG9yYWdlUmVhbGxvYykgewotICAgICAgICBBU1NFUlQobV9jYWxscy5z
aXplKCkgPT0gMSk7CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9tLCBG
dW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOwotICAgIH0K
KyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzFdLmZyb20sIEZ1bmN0aW9uUHRyKGN0
aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcikpOworICAgIH0gZWxzZQorICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBf
dW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKSk7CiAgICAgCiAgICAgc3R1YkluZm8tPnN0dWJS
b3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREUoCkBA
IC0xMzQzLDE2ICsxMzcwLDI2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShJbnMKIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3QqIG9wZXJh
bmRTbG90LCBpbnQgdmFsdWUpCiB7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGVtaXRXcml0ZUJhcnJpZXIo
cmVnVDAsIHJlZ1QyLCByZWdUMSwgcmVnVDEsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIHNsb3dD
YXNlcyk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwogICAgIGxvYWRQ
dHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAgICBuZWdQdHIocmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFs
VmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJl
Z1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBzbG93Q2FzZXMpOworICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7CisKICAgICBzdG9yZVB0cihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ob3BlcmFuZCkpOwogfQogCkBAIC0xMzYwLDYgKzEzOTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKGludCBzY29wZSwgdQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwg
cmVnVDEsIHJlZ1QyLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgc2xvd0Nhc2VzKTsK
KyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDApOwogICAgIHN0
b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OwogfQpAQCAtMTM5MywxNSArMTQzNSwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoSW5zdHJ1Y3RpCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBSZXNvbHZlTW9kZUFu
ZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkudHlwZSgpOwotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIC8vIEZvciB2YXIg
aW5qZWN0aW9uIGNoZWNrcyBvciBzdHJ1Y3R1cmUgY2hlY2tzLgorICAgIGlmIChuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVy
dHkpCisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIC8vIEZvciB0aGUgd3JpdGUg
YmFycmllci4KKyAgICBpZiAocmVzb2x2ZVR5cGUgIT0gRHluYW1pYykKKyAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1
dF90b19zY29wZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjdXJy
ZW50SW5zdHJ1Y3Rpb24pKTsKQEAgLTE0MTQsOSArMTQ2MCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbml0X2dsb2JhbF9jb25zdChJbnN0CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKIAorICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1Qy
LCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBzbG93Q2FzZXMpOworICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CisKICAgICBzdG9yZTY0KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5y
ZWdpc3RlclBvaW50ZXIpOwotICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkK
LSAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hv
dWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOworfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5pdF9nbG9iYWxfY29uc3QoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfaW5pdF9nbG9iYWxfY29uc3QpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9uKSk7CisgICAgc3R1YkNhbGwuY2FsbCgp
OwogfQogCiB2b2lkIEpJVDo6cmVzZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRj
aEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQpAQCAtMTQzOSwzMyArMTQ5Niwx
ODYgQEAgdm9pZCBKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZQogCiAjZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJ
RCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklE
IHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNl
S2luZCkKK0pJVDo6SnVtcCBKSVQ6OmNoZWNrTWFya1dvcmQoUmVnaXN0ZXJJRCBvd25lciwgUmVn
aXN0ZXJJRCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3JhdGNoMikKK3sKKyAgICBtb3ZlKG93bmVy
LCBzY3JhdGNoMSk7CisgICAgbW92ZShvd25lciwgc2NyYXRjaDIpOworCisgICAgYW5kUHRyKFRy
dXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDEpOworICAgIGFuZFB0
cihUcnVzdGVkSW1tMzIofk1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMik7CisKKyAg
ICByc2hpZnQzMihUcnVzdGVkSW1tMzIoMyArIDQpLCBzY3JhdGNoMik7CisKKyAgICByZXR1cm4g
YnJhbmNoVGVzdDgoWmVybywgQmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgVGltZXNPbmUs
IE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpKTsKK30KKworSklUOjpKdW1wIEpJVDo6Y2hl
Y2tNYXJrV29yZChKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCit7CisgICAgTWFy
a2VkQmxvY2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKTsKKyAgICBzaXpl
X3QgaW5kZXggPSAocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG93bmVyKSAmIH5NYXJrZWRCbG9j
azo6YmxvY2tNYXNrKSA+PiAoMyArIDQpOworICAgIHVpbnQzMl90KiBhZGRyZXNzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KChyZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBN
YXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSkgKyBpbmRleDsKKworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihhZGRyZXNzKSwgc2NyYXRjaCk7CisgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3Moc2NyYXRjaCkpOworfQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdp
c3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdp
c3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIEp1bXBMaXN0JiBzbG93Q2Fz
ZXMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKICAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUp
OwotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaCk7
CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gxKTsKICAgICBBU1NFUlQob3duZXIgIT0gc2Ny
YXRjaDIpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBl
bWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwot
I2VuZGlmCisKKy8qCisgICAgdW5zaWduZWQgbnVtQ2FsbHNCZWZvcmUgPSBtX2NhbGxzLnNpemUo
KTsKKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyovCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVySW1tZWRpYXRlcykgCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0KFpl
cm8sIHZhbHVlLCB0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoanVtcCgpKTsKKworLyoKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVWYWx1ZSA9IGZh
bHNlOworICAgIGlmIChzY3JhdGNoMSA9PSBzY3JhdGNoMikgeworICAgICAgICBwdXNoKHZhbHVl
KTsKKyAgICAgICAgc2NyYXRjaDIgPSB2YWx1ZTsKKyAgICAgICAgbmVlZFRvUmVzdG9yZVZhbHVl
ID0gdHJ1ZTsKKyAgICB9CisgICAgSnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gY2hlY2tNYXJr
V29yZChvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBpZiAobmVlZFRvUmVzdG9yZVZh
bHVlKQorICAgICAgICBwb3AodmFsdWUpOworKi8KKworLyoKKyAgICBwdXNoKHJlZ1QwKTsKKyAg
ICBwdXNoKHJlZ1QxKTsKKyAgICBwdXNoKHJlZ1QyKTsKKyAgICBwdXNoKHJlZ1QzKTsKKyAgICBw
dXNoKHJlZ1Q0KTsKKworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoeSB3ZSBuZWVkIHRoaXMu
CisgICAgcHVzaChyZWdUNCk7CisgICAgcHVzaChyZWdUNCk7CisKKyAgICAvLyBDYWxsIEhlYXA6
OndyaXRlQmFycmllci4KKyAgICBpZiAobW9kZSA9PSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVy
KSB7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9oZWFwX3VuY29uZGl0
aW9uYWxfd3JpdGVfYmFycmllcik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG93bmVy
KTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChvd25lcik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KHZhbHVlKTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBGaWd1cmUgb3V0IHdoeSB3ZSBuZWVkIHRoaXMuCisgICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3Ao
cmVnVDQpOworCisgICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDMpOworICAgIHBvcChyZWdU
Mik7CisgICAgcG9wKHJlZ1QxKTsKKyAgICBwb3AocmVnVDApOworKi8KKy8qCisgICAgSnVtcCBk
b25lID0ganVtcCgpOworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluayh0aGlzKTsKKyAgICBp
ZiAobmVlZFRvUmVzdG9yZVZhbHVlKQorICAgICAgICBwb3AodmFsdWUpOworCisgICAgZG9uZS5s
aW5rKHRoaXMpOworKi8KKy8qCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRl
cykgCisgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIGlmIChtb2RlID09IFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHNbbnVtQ2Fs
bHNCZWZvcmVdLnRvID09IGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcik7Cisg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tudW1DYWxsc0JlZm9yZV0uZnJvbSwgRnVu
Y3Rpb25QdHIoY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHNbbnVtQ2FsbHNCZWZvcmVdLnRvID09IGN0aV9o
ZWFwX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbbnVt
Q2FsbHNCZWZvcmVdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIpKTsK
KyAgICB9CisqLwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1vZGUg
bW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNo
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKG93bmVyKTsKICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHVzZUtpbmQpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKG1vZGUpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAg
ICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkp
OwotI2VuZGlmCisvKgorICAgIEp1bXAgdmFsdWVOb3RDZWxsOworICAgIHVuc2lnbmVkIG51bUNh
bGxzQmVmb3JlID0gbV9jYWxscy5zaXplKCk7CisqLworCisgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVySW1tZWRpYXRlcykgCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0
KFplcm8sIHZhbHVlLCB0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoanVtcCgpKTsKKworLyoKKyAgICBKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQg
PSBjaGVja01hcmtXb3JkKG93bmVyLCBzY3JhdGNoKTsKKyovCisKKy8qCisgICAgcHVzaChyZWdU
MCk7CisgICAgcHVzaChyZWdUMSk7CisgICAgcHVzaChyZWdUMik7CisgICAgcHVzaChyZWdUMyk7
CisgICAgcHVzaChyZWdUNCk7CisqLworCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2h5IHdl
IG5lZWQgdGhpcy4KKy8qCisgICAgcHVzaChyZWdUNCk7CisgICAgcHVzaChyZWdUNCk7CisqLwor
CisvKgorICAgIGlmIChtb2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpIHsKKyAgICAg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0
ZV9iYXJyaWVyKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihv
d25lcikpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX2hlYXBfd3JpdGVfYmFycmllcik7CisgICAg
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIob3duZXIpKTsKKyAgICAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQodmFsdWUpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Cisg
ICAgfQorKi8KKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aHkgd2UgbmVlZCB0aGlzLgorLyoK
KyAgICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUNCk7CisqLworLyoKKyAgICBwb3AocmVnVDQp
OworICAgIHBvcChyZWdUMyk7CisgICAgcG9wKHJlZ1QyKTsKKyAgICBwb3AocmVnVDEpOworICAg
IHBvcChyZWdUMCk7CisqLworLyoKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsodGhpcyk7
CisqLworLyoKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKSAKKyAgICAg
ICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgaWYgKG1vZGUgPT0gVW5jb25kaXRpb25h
bFdyaXRlQmFycmllcikgeworICAgICAgICBBU1NFUlQobV9jYWxsc1tudW1DYWxsc0JlZm9yZV0u
dG8gPT0gY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKTsKKyAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2NhbGxzW251bUNhbGxzQmVmb3JlXS5mcm9tLCBGdW5jdGlvblB0cihj
dGlfaGVhcF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXIpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBBU1NFUlQobV9jYWxsc1tudW1DYWxsc0JlZm9yZV0udG8gPT0gY3RpX2hlYXBfd3JpdGVf
YmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tudW1DYWxsc0JlZm9y
ZV0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBfd3JpdGVfYmFycmllcikpOworICAgIH0KKyov
CiB9CiAKIEpJVDo6SnVtcCBKSVQ6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwq
IG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgUmVnaXN0ZXJJRCBzY3JhdGNoKQpAQCAtMTU4Miw3ICsxNzkyLDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFk
VHlwZTsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCisKICAgICBzd2l0Y2ggKGFycmF5
TW9kZSkgewogICAgIGNhc2UgSklUSW50MzI6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQz
MlB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CkBAIC0xNjA4LDEwICsxODE4
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMs
IG1fY29kZUJsb2NrKTsKLSAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVM
b2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAgICAKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9
IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNzcsNiArMjI3NywyOSBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfdG9fc2NvCiAgICAgfQogfQogCitERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBoZWFwX3dyaXRlX2JhcnJpZXIpCit7CisgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5oZWFw
KCktPndyaXRlQmFycmllcihzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLmFzQ2VsbCgpLCBz
dGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgaGVhcF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXIpCit7CisgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5oZWFw
KCktPndyaXRlQmFycmllcihzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLmFzQ2VsbCgpKTsK
K30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfaW5pdF9nbG9iYWxfY29uc3QpCit7
CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIEluc3RydWN0aW9uKiBwYyA9IHN0YWNr
RnJhbWUuYXJnc1swXS5wYygpOworCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3Rl
clBvaW50ZXIgPSBwY1sxXS51LnJlZ2lzdGVyUG9pbnRlcjsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
ZXhlYy0+cihwY1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICByZWdpc3RlclBvaW50ZXIt
PnNldChleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHZhbHVlKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNiAr
Mzg1LDcgQEAgdm9pZCBKSVRfU1RVQiBjdGlfaGFuZGxlX3dhdGNoZG9nX3RpbWVyKAogaW50IEpJ
VF9TVFVCIGN0aV9oYXNfcHJvcGVydHkoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9kZWJ1ZyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX2VuZChTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX1NUVUIgY3RpX29wX2luaXRfZ2xvYmFsX2NvbnN0
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlf
b3BfcG9wX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBK
SVRfU1RVQiBjdGlfb3BfcHJvZmlsZV9kaWRfY2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX3Byb2ZpbGVfd2lsbF9jYWxsKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpAQCAtNDIxLDcgKzQyMiw4IEBAIHZvaWQq
IEpJVF9TVFVCIGN0aV92bV90aHJvdyhTVFVCX0FSR1NfREUKIEVuY29kZWRKU1ZhbHVlIEpJVF9T
VFVCIGN0aV9vcF9yZXNvbHZlX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVS
TkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9mcm9tX3Njb3BlKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0
X3RvX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotCit2b2lkIEpJ
VF9TVFVCIGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7Cit2b2lkIEpJVF9TVFVCIGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFy
cmllcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICNpZiBVU0UoSlNWQUxV
RTMyXzY0KQogRW5jb2RlZEV4Y2VwdGlvbkhhbmRsZXIgSklUX1NUVUIgY3RpX3ZtX2hhbmRsZV9l
eGNlcHRpb24oQ2FsbEZyYW1lKikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiAj
ZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmgJKHJl
dmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1v
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAjZW5kaWYKIAogLy8gRGlzYWJs
ZSBpbmxpbmUgY2FjaGluZyBvZiBnZXRfYnlfaWQgYW5kIHB1dF9ieV9pZC4KLSNkZWZpbmUgTExJ
TlRfQUxXQVlTX0FDQ0VTU19TTE9XIDAKKyNkZWZpbmUgTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9X
IDEKIAogLy8gRW5hYmxlIE9TUiBpbnRvIHRoZSBKSVQuIERpc2FibGluZyB0aGlzIHdoaWxlIHRo
ZSBMTEludCBpcyBlbmFibGVkIGVmZmVjdGl2ZWx5CiAvLyB0dXJucyBvZmYgYWxsIEpJVCdpbmcs
IHNpbmNlIGluIExMSW50J3MgcGFybGFuY2UsIE9TUiBzdWJzdW1lcyBhbnkgZm9ybSBvZiBKSVQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzNiw2ICsxMzM2LDE4IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2MKICAgICBMTElOVF9FTkQoKTsKIH0K
IAorZXh0ZXJuICJDIiB2b2lkIGxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyhKU0NlbGwqIG93bmVy
LCBKU0NlbGwqIHZhbHVlKQoreworICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKG93bmVyKTsK
KyAgICBoZWFwLT53cml0ZUJhcnJpZXIob3duZXIsIHZhbHVlKTsKK30KKworZXh0ZXJuICJDIiB2
b2lkIGxsaW50X3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcl9zbG93KEpTQ2VsbCogb3duZXIp
Cit7CisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAob3duZXIpOworICAgIGhlYXAtPndyaXRl
QmFycmllcihvd25lcik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludAogCiAjZW5k
aWYgLy8gRU5BQkxFKExMSU5UKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmgJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4
IEBAIG5hbWVzcGFjZSBMTEludCB7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxs
aW50X3RyYWNlX29wZXJhbmQoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJl
LCBpbnQgb3BlcmFuZCk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFj
ZV92YWx1ZShFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIGludCBvcGVy
YW5kKTsKK2V4dGVybiAiQyIgdm9pZCBsbGludF93cml0ZV9iYXJyaWVyX3Nsb3coSlNDZWxsKiwg
SlNDZWxsKik7CitleHRlcm4gIkMiIHZvaWQgbGxpbnRfdW5jb25kaXRpb25hbF93cml0ZV9iYXJy
aWVyX3Nsb3coSlNDZWxsKik7CiAKICNkZWZpbmUgTExJTlRfU0xPV19QQVRIX0RFQ0wobmFtZSkg
XAogICAgIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50XyMjbmFtZShFeGVjU3Rh
dGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNTU4
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTcyLDggKzE3MiwxMDQgQEAgbWFjcm8gbG9hZENvbnN0
YW50T3JWYXJpYWJsZUNlbGwoaW5kZXgsIAogICAgIGJ0cW56IHZhbHVlLCB0YWdNYXNrLCBzbG93
CiBlbmQKIAotbWFjcm8gd3JpdGVCYXJyaWVyKHZhbHVlKQotICAgICMgTm90aGluZyB0byBkbywg
c2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGdlbmVyYXRpb25hbCBvciBpbmNyZW1lbnRhbCBjb2xsZWN0
b3IuCitjb25zdCBNYXJrZWRCbG9ja1NpemUgPSA2NCAqIDEwMjQKK2NvbnN0IE1hcmtlZEJsb2Nr
SGVhZGVyTWFzayA9IH4oTWFya2VkQmxvY2tTaXplIC0gMSkKKyMgc2l6ZW9mKGF0b20pID09IDgK
K2NvbnN0IEF0b21OdW1iZXJTaGlmdCA9IDMKK2NvbnN0IEJpdE1hcFdvcmRTaGlmdCA9IDUKK2Nv
bnN0IEJpdE1hcFdvcmRTaXplID0gMzIKK2NvbnN0IEJpdE1hcFdvcmRNb2QgPSBCaXRNYXBXb3Jk
U2l6ZSAtIDEKKworIyBDbG9iYmVycyBib3RoIGNlbGwgYW5kIHNjcmF0Y2guCittYWNybyBpc01h
cmtlZChjZWxsLCBzY3JhdGNoLCBjb250aW51YXRpb24pCisgICAgbW92ZSBjZWxsLCBzY3JhdGNo
CisKKyMgR2V0IHRoZSBpbmRleCBvZiB0aGUgd29yZCBpbiB0aGUgYml0bWFwLgorICAgIGFuZHEg
fk1hcmtlZEJsb2NrSGVhZGVyTWFzaywgY2VsbAorICAgIHB1c2hxIGNlbGwKKyAgICByc2hpZnRw
IEF0b21OdW1iZXJTaGlmdCArIEJpdE1hcFdvcmRTaGlmdCwgY2VsbAorCisjIExvYWQgdGhlIHdv
cmQgZnJvbSB0aGUgYml0bWFwLgorICAgIGFuZHEgTWFya2VkQmxvY2tIZWFkZXJNYXNrLCBzY3Jh
dGNoCisgICAgbG9hZGkgTWFya2VkQmxvY2s6Om1fbWFya3Nbc2NyYXRjaCwgY2VsbCwgNF0sIHNj
cmF0Y2gKKworIyBHZXQgdGhlIGFtb3VudCB0byByaWdodCBzaGlmdCB0aGUgcmVzdWx0IGJ5Lgor
ICAgIHBvcHEgY2VsbAorICAgIHJzaGlmdHAgQXRvbU51bWJlclNoaWZ0LCBjZWxsCisgICAgYW5k
cSBCaXRNYXBXb3JkTW9kLCBjZWxsCisgICAgcnNoaWZ0cCBjZWxsLCBzY3JhdGNoCisKKyMgQ2hl
Y2sgdGhlIHJpZ2h0LW1vc3QgYml0LgorICAgIGFuZHEgMSwgc2NyYXRjaAorCisgICAgY29udGlu
dWF0aW9uKHNjcmF0Y2gpCitlbmQKKworbWFjcm8gdW5jb25kaXRpb25hbFdyaXRlQmFycmllcihv
d25lcikKKyAgICBwdXNocSB0MAorICAgIHB1c2hxIHQxCisgICAgcHVzaHEgdDIKKyAgICBwdXNo
cSB0MworICAgIHB1c2hxIHQ0CisgICAgcHVzaHEgdDUKKyAgICBwdXNocSB0NgorICAgIGNDYWxs
MihfbGxpbnRfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyX3Nsb3csIG93bmVyLCBvd25lcikK
KyAgICBwb3BxIHQ2CisgICAgcG9wcSB0NQorICAgIHBvcHEgdDQKKyAgICBwb3BxIHQzCisgICAg
cG9wcSB0MgorICAgIHBvcHEgdDEKKyAgICBwb3BxIHQwCisjICAgIHN0b3JlcSAwLCBbc3BdCisj
ICAgIHN0b3JlcSAwLCA4W3NwXQorIyAgICBzdG9yZXEgMCwgMTZbc3BdCisjICAgIHN0b3JlcSAw
LCAyNFtzcF0KKyMgICAgc3RvcmVxIDAsIDMyW3NwXQorIyAgICBzdG9yZXEgMCwgNDBbc3BdCisj
ICAgIHN0b3JlcSAwLCA0OFtzcF0KK2VuZAorCittYWNybyB3cml0ZUJhcnJpZXJXaXRoVmFsdWUo
b3duZXIsIHZhbHVlKQorIyBTa2lwIGlmIHZhbHVlIGlzIG51bGwgb3Igbm90IGEgY2VsbC4KKyAg
ICBidHB6IHZhbHVlLCAud3JpdGVCYXJyaWVyRG9uZQorICAgIGJ0cW56IHZhbHVlLCB0YWdNYXNr
LCAud3JpdGVCYXJyaWVyRG9uZQorIyAgICBwdXNocSBvd25lcgorIyAgICBwdXNocSB2YWx1ZQor
IyAgICBpc01hcmtlZChvd25lciwgdmFsdWUsIAorIyAgICAgICAgbWFjcm8gKG1hcmtlZCkKKyMj
IElmIG93bmVyIGlzbid0IG1hcmtlZCwgdGhlbiB3ZSdyZSBnb29kIHRvIGdvLgorIyAgICAgICAg
ICAgIGJ0YnogbWFya2VkLCAudmFsdWVJc05vbk51bGxDZWxsCisjICAgICAgICAgICAgcG9wcSB2
YWx1ZQorIyAgICAgICAgICAgIHBvcHEgb3duZXIKKyAgICAgICAgICAgIHB1c2hxIHQwCisgICAg
ICAgICAgICBwdXNocSB0MQorICAgICAgICAgICAgcHVzaHEgdDIKKyAgICAgICAgICAgIHB1c2hx
IHQzCisgICAgICAgICAgICBwdXNocSB0NAorICAgICAgICAgICAgcHVzaHEgdDUKKyAgICAgICAg
ICAgIHB1c2hxIHQ2CisgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X3dyaXRlX2JhcnJpZXJfc2xv
dywgb3duZXIsIHZhbHVlKQorICAgICAgICAgICAgcG9wcSB0NgorICAgICAgICAgICAgcG9wcSB0
NQorICAgICAgICAgICAgcG9wcSB0NAorICAgICAgICAgICAgcG9wcSB0MworICAgICAgICAgICAg
cG9wcSB0MgorICAgICAgICAgICAgcG9wcSB0MQorICAgICAgICAgICAgcG9wcSB0MAorIyAgICBz
dG9yZXEgMCwgW3NwXQorIyAgICBzdG9yZXEgMCwgOFtzcF0KKyMgICAgc3RvcmVxIDAsIDE2W3Nw
XQorIyAgICBzdG9yZXEgMCwgMjRbc3BdCisjICAgIHN0b3JlcSAwLCAzMltzcF0KKyMgICAgc3Rv
cmVxIDAsIDQwW3NwXQorIyAgICBzdG9yZXEgMCwgNDhbc3BdCisjICAgICAgICAgICAgam1wIC53
cml0ZUJhcnJpZXJEb25lCisjICAgICAgICBlbmQpCisjLnZhbHVlSXNOb25OdWxsQ2VsbDoKKyMg
ICAgcG9wcSB2YWx1ZQorIyAgICBwb3BxIG93bmVyCisud3JpdGVCYXJyaWVyRG9uZToKIGVuZAog
CiBtYWNybyB2YWx1ZVByb2ZpbGUodmFsdWUsIG9wZXJhbmQsIHNjcmF0Y2gpCkBAIC04MzIsMTEg
KzkyOCwxMyBAQCBlbmQKIAogbWFjcm8gc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJv
cGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9w
ZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5lCisgICAgd3Jp
dGVCYXJyaWVyV2l0aFZhbHVlKG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGxvYWRwIEpT
T2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQog
ICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJ
bnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6CisgICAg
d3JpdGVCYXJyaWVyV2l0aFZhbHVlKG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGFkZHAg
c2l6ZW9mIEpTT2JqZWN0IC0gKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiA4LCBvYmplY3RB
bmRTdG9yYWdlCiAucmVhZHk6CiAgICAgc3RvcmVxIHZhbHVlLCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0KQEAg
LTg0Nyw3ICs5NDUsOSBAQCBfbGxpbnRfb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgbG9hZGlz
RnJvbUluc3RydWN0aW9uKDIsIHQxKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDEsIHQwKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQotICAgIHdyaXRlQmFycmllcih0MikK
KyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xv
YmFsT2JqZWN0W3QxXSwgdDEKKyAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDEsIHQyKQogICAg
IHN0b3JlcSB0MiwgW3QwXQogICAgIGRpc3BhdGNoKDUpCiAKQEAgLTkzNiwxMyArMTAzNiwxNCBA
QCBtYWNybyBwdXRCeUlkKGdldFByb3BlcnR5U3RvcmFnZSkKICAgICBnZXRQcm9wZXJ0eVN0b3Jh
Z2UoCiAgICAgICAgIHQwLAogICAgICAgICB0MywKLSAgICAgICAgbWFjcm8gKHByb3BlcnR5U3Rv
cmFnZSwgc2NyYXRjaCkKLSAgICAgICAgICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBd
LCB0MSwgLm9wUHV0QnlJZFNsb3cKLSAgICAgICAgICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig1
LCB0MSkKLSAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHNjcmF0Y2gpCi0g
ICAgICAgICAgICB3cml0ZUJhcnJpZXIodDApCi0gICAgICAgICAgICBzdG9yZXEgc2NyYXRjaCwg
W3Byb3BlcnR5U3RvcmFnZSwgdDFdCi0gICAgICAgICAgICBkaXNwYXRjaCg5KQorICAgICAgICBt
YWNybyAocHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoKSAgICAgICAgICAgICAgICAgICAgICAgICMg
TGl2ZSB2YXJpYWJsZXMKKyAgICAgICAgICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBd
LCB0MSwgLm9wUHV0QnlJZFNsb3cgICAjIHQwLCB0MSwgdDIsIHQzCisgICAgICAgICAgICBtb3Zl
IHQwLCB0MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0MCwgdDEs
IHQyLCB0MworICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0Miwgc2NyYXRjaCkg
ICAgICAgICAgICAgICAgICMgdDAsIHQxLCB0MiwgdDMKKyAgICAgICAgICAgIHdyaXRlQmFycmll
cldpdGhWYWx1ZSh0MSwgc2NyYXRjaCkgICAgICAgICAgICAgICAgICAjIHQwLCB0MSwgICAsIHQz
CisgICAgICAgICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNSwgdDEpICAgICAgICAgICAgICAg
ICAgICAgICAgIyB0MCwgdDEsICAgLCB0MworICAgICAgICAgICAgc3RvcmVxIHNjcmF0Y2gsIFtw
cm9wZXJ0eVN0b3JhZ2UsIHQxXSAgICAgICAgICAgICAgICMgdDAsIHQxLCAgICwgdDMKKyAgICAg
ICAgICAgIGRpc3BhdGNoKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjICAgLCAgICwgICAsICAKICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTk3Myw5ICsxMDc0LDEw
IEBAIG1hY3JvIHB1dEJ5SWRUcmFuc2l0aW9uKGFkZGl0aW9uYWxDaGVja3MKICAgICAgICAgbWFj
cm8gKHByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaCkKICAgICAgICAgICAgIGFkZHAgdDEsIHByb3Bl
cnR5U3RvcmFnZSwgdDMKICAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQx
KQotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKHQxKQorICAgICAgICAgICAgd3JpdGVCYXJyaWVy
V2l0aFZhbHVlKHQwLCB0MSkKICAgICAgICAgICAgIHN0b3JlcSB0MSwgW3QzXQogICAgICAgICAg
ICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCisgICAgICAgICAgICB3cml0ZUJhcnJpZXJX
aXRoVmFsdWUodDAsIHQxKQogICAgICAgICAgICAgc3RvcmVwIHQxLCBKU0NlbGw6Om1fc3RydWN0
dXJlW3QwXQogICAgICAgICAgICAgZGlzcGF0Y2goOSkKICAgICAgICAgZW5kKQpAQCAtMTEzMCw3
ICsxMjMyLDggQEAgbWFjcm8gY29udGlndW91c1B1dEJ5VmFsKHN0b3JlQ2FsbGJhY2spCiAgICAg
YmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5n
dGhzLnB1YmxpY0xlbmd0aFt0MF0sIC5vdXRPZkJvdW5kcwogLnN0b3JlUmVzdWx0OgogICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MikKLSAgICBzdG9yZUNhbGxiYWNrKHQyLCB0MSwgW3Qw
LCB0MywgOF0pCisgICAgbGVhcCBbdDAsIHQzLCA4XSwgdDAKKyAgICBzdG9yZUNhbGxiYWNrKHQy
LCB0MywgW3QwXSkKICAgICBkaXNwYXRjaCg1KQogCiAub3V0T2ZCb3VuZHM6CkBAIC0xMTg1LDcg
KzEyODgsNyBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAgICBjb250aWd1b3VzUHV0QnlWYWwo
CiAgICAgICAgIG1hY3JvIChvcGVyYW5kLCBzY3JhdGNoLCBhZGRyZXNzKQogICAgICAgICAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShvcGVyYW5kLCBzY3JhdGNoKQotICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKHNjcmF0Y2gpCisgICAgICAgICAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDEs
IHNjcmF0Y2gpCiAgICAgICAgICAgICBzdG9yZXAgc2NyYXRjaCwgYWRkcmVzcwogICAgICAgICBl
bmQpCiAKQEAgLTExOTQsMjEgKzEyOTcsMjIgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAg
YmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5n
dGhzLnZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsT3V0T2ZCb3VuZHMKICAgICBidHF6IEFy
cmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VF
bXB0eQogLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdDoKKyAgICBsZWFwIEFycmF5
U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgdDAKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oMywgdDIpCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCi0gICAgd3JpdGVC
YXJyaWVyKHQxKQotICAgIHN0b3JlcSB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMs
IDhdCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDMpCisgICAgd3JpdGVCYXJyaWVy
V2l0aFZhbHVlKHQxLCB0MykKKyAgICBzdG9yZXEgdDMsIFt0MF0KICAgICBkaXNwYXRjaCg1KQog
CiAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0g
ICAgICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDQsIHQxKQotICAgICAgICBzdG9yZWIgMSwgQXJy
YXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QxXQorICAgICAgICBsb2FkcEZyb21JbnN0cnVj
dGlvbig0LCB0MikKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRv
SG9sZVt0Ml0KICAgICBlbmQKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJ
blZlY3Rvclt0MF0KICAgICBiaWIgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9y
YWdlU3RvcmVSZXN1bHQKLSAgICBhZGRpIDEsIHQzLCB0MQotICAgIHN0b3JlaSB0MSwgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3Ro
W3QwXQorICAgIGFkZGkgMSwgdDMsIHQyCisgICAgc3RvcmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdCiAgICAg
am1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxPdXRP
ZkJvdW5kczoKQEAgLTE4MzUsMTIgKzE5MzksMTYgQEAgbWFjcm8gcHV0R2xvYmFsVmFyKCkKICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZSh0MCwgdDEpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDApCisgICAgbG9hZHAgQ29k
ZUJsb2NrW2Nmcl0sIHQyCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0Ml0s
IHQyCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQyLCB0MSkKICAgICBzdG9yZXEgdDEsIFt0
MF0KIGVuZAogCiBtYWNybyBwdXRDbG9zdXJlVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oMywgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIpCisgICAgd3JpdGVC
YXJyaWVyV2l0aFZhbHVlKHQwLCB0MikKICAgICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3Jl
Z2lzdGVyc1t0MF0sIHQwCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQogICAgIHN0
b3JlcSB0MiwgW3QwLCB0MSwgOF0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5l
YXNtL2luc3RydWN0aW9ucy5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
b2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIJKHJldmlzaW9uIDE1NTg5NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgkod29ya2luZyBjb3B5KQpA
QCAtODYsNyArODYsOSBAQCBNQUNST19JTlNUUlVDVElPTlMgPQogICAgICAiYmNkMmkiLAogICAg
ICAibW92ZHoiLAogICAgICAicG9wIiwKKyAgICAgInBvcHEiLAogICAgICAicHVzaCIsCisgICAg
ICJwdXNocSIsCiAgICAgICJtb3ZlIiwKICAgICAgInN4aTJxIiwKICAgICAgInp4aTJxIiwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDE1NTg5
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIGNsYXNzIFJlZ2lzdGVySUQKICAgICAgICAgICAgIHdo
ZW4gOnF1YWQKICAgICAgICAgICAgICAgICBpc1g2NCA/ICIlcmF4IiA6IHJhaXNlCiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICByYWlzZSAi
SW52YWxpZCBraW5kICN7a2luZH0gZm9yIG5hbWUgI3tuYW1lfSIKICAgICAgICAgICAgIGVuZAog
ICAgICAgICB3aGVuICJ0MSIsICJhMSIsICJyMSIKICAgICAgICAgICAgIGNhc2Uga2luZApAQCAt
OTgyLDggKzk4MiwxMiBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICAgICAgZW5kCiAgICAg
ICAgIHdoZW4gInBvcCIKICAgICAgICAgICAgICRhc20ucHV0cyAicG9wICN7b3BlcmFuZHNbMF0u
eDg2T3BlcmFuZCg6cHRyKX0iCisgICAgICAgIHdoZW4gInBvcHEiCisgICAgICAgICAgICAkYXNt
LnB1dHMgInBvcHEgI3tvcGVyYW5kc1swXS54ODZPcGVyYW5kKDpwdHIpfSIKICAgICAgICAgd2hl
biAicHVzaCIKICAgICAgICAgICAgICRhc20ucHV0cyAicHVzaCAje29wZXJhbmRzWzBdLng4Nk9w
ZXJhbmQoOnB0cil9IgorICAgICAgICB3aGVuICJwdXNocSIKKyAgICAgICAgICAgICRhc20ucHV0
cyAicHVzaHEgI3tvcGVyYW5kc1swXS54ODZPcGVyYW5kKDpwdHIpfSIKICAgICAgICAgd2hlbiAi
bW92ZSIKICAgICAgICAgICAgIGhhbmRsZU1vdmUKICAgICAgICAgd2hlbiAic3hpMnEiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMTU1
ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NSw2ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAtMTsK
ICAgICB9CiAKKyAgICBzaXplX3QgdG90YWxTaXplKFN0cnVjdHVyZSopOworCiAgICAgdm9pZCog
YmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVy
biBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQog
ICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDE1NTg5NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNiArNzAsMjIgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSBzaXplX3QgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90
IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAg
ICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gc3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hl
YWRlcigpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAg
cHJlQ2FwYWNpdHkgPSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOwor
ICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGluZGV4aW5nSGVhZGVyKCktPmlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9
IDA7CisgICAgfQorICAgIHJldHVybiBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKK30KKwogaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKICAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0
eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDggQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogCiAgICAgc2l6ZV90IGlubGluZUNhcGFjaXR5
ID0gcGNbM10udS5vcGVyYW5kOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uc3RydWN0
b3ItPmFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+c3RydWN0dXJlKCk7
Ci0gICAgUkVUVVJOKGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSkpOworICAg
IEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUp
OworICAgIFJFVFVSTihyZXN1bHQpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9f
dGhpcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdI
ZWFkZXIuaAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHB1
YmxpYzoKICAgICAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0
aGUgc2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBiZQogICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRo
ZSBJbmRleGluZ0hlYWRlci4KLSAgICBzaXplX3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByZUNhcGFjaXR5KFN0cnVjdHVyZSopOwogICAg
IHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqKTsKICAgICAKIHBy
aXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
cmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsyNzAsNyBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRvIGNo
b29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJl
dXNlIHRoZSBleGlzdGluZyBvbmUuCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Cisg
ICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7
CiAgICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKICAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2Fw
YWNpdHk7CiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZmaWNpZW50
bHkgbGFyZ2UgKGJ1dCBub3QgdG9vIGxhcmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQuCkBA
IC0zMjEsOCArMzIyLDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYg
dgogCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5l
d1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRl
eEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0KLSAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsK
KyAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUobmV3QnV0dGVyZmx5KTsK
KyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5
KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNjk3LDkgKzY5OCw5IEBAIGJvb2wgSlNBcnJh
eTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKICAgICAKICAgICBpZiAoc3RhcnRJbmRleCAr
IGNvdW50ID4gdmVjdG9yTGVuZ3RoKQogICAgICAgICBjb3VudCA9IHZlY3Rvckxlbmd0aCAtIHN0
YXJ0SW5kZXg7Ci0gICAgCisKICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHZl
Y3Rvckxlbmd0aCwgb2xkTGVuZ3RoKTsKLSAgICAKKwogICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
QmVmb3JlU2hpZnRSZWdpb24gPSBzdGFydEluZGV4OwogICAgIHVuc2lnbmVkIGZpcnN0SW5kZXhB
ZnRlclNoaWZ0UmVnaW9uID0gc3RhcnRJbmRleCArIGNvdW50OwogICAgIHVuc2lnbmVkIG51bUVs
ZW1lbnRzQWZ0ZXJTaGlmdFJlZ2lvbiA9IHVzZWRWZWN0b3JMZW5ndGggLSBmaXJzdEluZGV4QWZ0
ZXJTaGlmdFJlZ2lvbjsKQEAgLTc0Myw3ICs3NDQsNiBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291
bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgICAgIC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4gV2Ug
YWxzbyBkb24ndCBtb2RpZnkgdGhlIHZlY3RvciBsZW5ndGggYmVjYXVzZSB3ZSdyZSBub3QgYWN0
dWFsbHkgY2hhbmdpbmcKICAgICAgICAgLy8gaXRzIGxlbmd0aDsgd2UncmUganVzdCB1c2luZyBs
ZXNzIG9mIGl0LgogICAgIH0KLSAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODU3LDEw
ICs4NTcsMTEgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOwogCiAgICAg
aWYgKG1vdmVGcm9udCAmJiBzdG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3VudCkgewotICAgICAg
ICBtX2J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgp
LCBjb3VudCk7Ci0gICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCkt
PnVuc2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAgc3RvcmFnZSA9IG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNv
dW50OwogICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoICsgY291
bnQpOworICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUobmV3QnV0
dGVyZmx5KTsKICAgICB9IGVsc2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVu
Z3RoID49IGNvdW50KQogICAgICAgICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmFy
cmF5U3RvcmFnZSgpOwogICAgIGVsc2UgaWYgKHVuc2hpZnRDb3VudFNsb3dDYXNlKGV4ZWMtPnZt
KCksIG1vdmVGcm9udCwgY291bnQpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDcsMTMgKzU0Nywx
NSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiAgICAgfQogCiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOyAKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0
dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bmV3QnV0dGVyZmx5KTsKLSAgICAKLSAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKwog
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gMDsKICAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7CiAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KHZtLCB0aGlzLCBtYXAp
OworICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShuZXdCdXR0ZXJmbHkp
OworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJm
bHkpOwogICAgIAogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQpA
QCAtNjEzLDcgKzYxNSwxMSBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5k
ZWNpCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZVVuZGVjaWRl
ZCk7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0
dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwg
bmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1
cmUsIG5ld0J1dHRlcmZseSk7CisKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5OwogfQogCkBAIC02
MjIsNyArNjI4LDExIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlSW50MzIpOworCisg
ICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7
CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRl
cmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdC
dXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7
CiB9CiAKQEAgLTYzMyw3ICs2NDMsMTEgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ld
ID0gUU5hTjsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVEb3VibGUpOworCisgICAg
d2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAg
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwog
fQogCkBAIC02NDIsNyArNjU2LDExIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3Jl
YXRlSW5pdGkKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29u
dGlndW91cyk7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCks
IG1fYnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVj
dHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdT
dHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250
aWd1b3VzKCk7CiB9CiAKQEAgLTY2Myw3ICs2ODEsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7
CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHN0
cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworCisgICAgd2ls
bFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJm
bHkpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzMwLDcgKzc1MiwxMSBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAgICAgLy8gTm8gbmVlZCB0byBj
b3B5IGVsZW1lbnRzLgogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsK
KworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJm
bHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9y
YWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3Ry
dWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gc3RvcmFnZTsKIH0K
IApAQCAtNzg3LDcgKzgxMywxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50
MzJUb0FyCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsK
KworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJm
bHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdT
dG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3
U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3Rv
cmFnZTsKIH0KIApAQCAtODU2LDcgKzg4NiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
b252ZXJ0RG91YmxlVG9BCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFu
c2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwg
bV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0
dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZs
eSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1
cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtODg1LDcgKzkxOSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1
Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9s
ZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisK
ICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtMjMyMSwxOCArMjM1OSwyMiBAQCBib29s
IEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgLy8gRmFzdCBjYXNlIC0g
dGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBz
ZW5zZS4KICAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMpKSB7CiAgICAgICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
c3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KAogICAgICAgICAgICAgdm0sIHRo
aXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwK
ICAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVy
Zmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2J1dHRlcmZseSA9IG5l
d0J1dHRlcmZseTsKKwogICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRW
ZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91
dENoYW5naW5nU3RydWN0dXJlKG5ld0J1dHRlcmZseSk7CisgICAgICAgIGRpZFJlcGxhY2VPbGRC
dXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCiAgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRo
ZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJy
YXkgbGVuZ3RoLgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICB3aWxsUmVwbGFj
ZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsgCiAgICAgdW5zaWdu
ZWQgbmV3SW5kZXhCaWFzID0gc3RkOjptaW4oaW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFycmF5KAogICAgICAgICB2bSwgdGhp
cywKQEAgLTIzNDAsMTAgKzIzODIsMTEgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JM
ZW5ndGgoVk0mIAogICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworCiAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMg
PSBuZXdJbmRleEJpYXM7CisgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJl
KCksIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzNTgsMTUgKzI0
MDEsMTkgQEAgdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIAogICAgICAg
ICBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5n
dGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9i
dXR0ZXJmbHkpOwogICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0
KAogICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCB0cnVlLAogICAgICAgICBvbGRWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpLAogICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKTsKKworICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3Ro
KTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJm
bHkpOworCiAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rv
ckxlbmd0aDsgKytpKQogICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KS5kYXRhKClbaV0gPSBRTmFOOwogICAgIH0KLSAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVu
Z3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiB9CiAKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRP
ZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNTU4
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
Q2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U3Rv
cmFnZS5oIgpAQCAtNjA0LDEzICs2MDYsMTYgQEAgcHVibGljOgogICAgIHZvaWQgcmVpZnlTdGF0
aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6
ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5n
U3RydWN0dXJlKEJ1dHRlcmZseSopOyAvLyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxs
IHRoaXMuCisgICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0
dGVyZmx5Kik7CiAgICAgICAgIAogICAgIHZvaWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJl
Kik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBC
dXR0ZXJmbHkqKTsKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZO
ZWNlc3NhcnkoVk0mLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgdm9p
ZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiwgU3RydWN0
dXJlKik7CiAKKyAgICB2b2lkIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJl
KiwgQnV0dGVyZmx5Kik7CisgICAgdm9pZCBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KFZNJiwgU3Ry
dWN0dXJlKiwgQnV0dGVyZmx5Kik7CisKICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0
cnVjdHVyZSh2bSwgdGhpcyk7CkBAIC0xMTIzLDggKzExMjgsMjggQEAgaW5saW5lIGJvb2wgSlNP
YmplY3Q6OmlzRXJyb3JJbnN0YW5jZSgpIAogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS50eXBlKCkgPT0gRXJyb3JJbnN0YW5jZVR5cGU7CiB9CiAKK2lubGluZSB2b2lkIEpTT2Jq
ZWN0Ojp3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseShWTSYgdm0sIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBCdXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSkKK3sKKyAgICBpZiAoIW9sZEJ1dHRlcmZseSkK
KyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIG9sZEJhc2UgPSBvbGRCdXR0ZXJmbHkgPyBvbGRC
dXR0ZXJmbHktPmJhc2Uob2xkU3RydWN0dXJlKSA6IDA7CisgICAgc2l6ZV90IG9sZFNpemUgPSBv
bGRCdXR0ZXJmbHkgPyBvbGRCdXR0ZXJmbHktPnRvdGFsU2l6ZShvbGRTdHJ1Y3R1cmUpIDogMDsK
KyAgICB2bS5oZWFwLndpbGxBYmFuZG9uU3RvcmFnZSh0aGlzLCBvbGRCYXNlLCBvbGRTaXplKTsK
K30KKworaW5saW5lIHZvaWQgSlNPYmplY3Q6OmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkoVk0mIHZt
LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkpCit7Cisg
ICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBuZXdCYXNl
ID0gbmV3QnV0dGVyZmx5ID8gbmV3QnV0dGVyZmx5LT5iYXNlKG5ld1N0cnVjdHVyZSkgOiAwOwor
ICAgIHNpemVfdCBuZXdTaXplID0gbmV3QnV0dGVyZmx5ID8gbmV3QnV0dGVyZmx5LT50b3RhbFNp
emUobmV3U3RydWN0dXJlKSA6IDA7CisgICAgdm0uaGVhcC5kaWRBc3NpZ25TdG9yYWdlKHRoaXMs
IG5ld0Jhc2UsIG5ld1NpemUpOworfQorCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0
dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSog
YnV0dGVyZmx5KQogeworICAgIEFTU0VSVChzdHJ1Y3R1cmUpOworICAgIEFTU0VSVCghYnV0dGVy
Zmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhh
c0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7CiAgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiAg
ICAgc2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogfQpAQCAtMTI5MywxMCArMTMxOCwxNiBA
QCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IG1fYnV0dGVyZmx5OwotICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZM
aW5lU3RvcmFnZSgpKQorICAgICAgICBib29sIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gZmFs
c2U7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KCkpIHsKKyAgICAgICAgICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUo
KSwgbV9idXR0ZXJmbHkpOwogICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGlu
ZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUo
KS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICAgICAg
ZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIG9mZnNl
dCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24pOwogICAgICAgICBzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBp
ZiAoZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICBkaWRSZXBsYWNlT2xkQnV0
dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKIAogICAgICAgICB2YWxpZGF0
ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSk7CkBAIC0xMzE0LDEyICsxMzQ1LDE5IEBAIGlubGluZSBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3Ry
dWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zm
c2V0KSkgewogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7Ci0gICAgICAgIGlmIChjdXJyZW50Q2Fw
YWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICBib29sIGRp
ZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gZmFsc2U7CisgICAgICAgIGlmIChjdXJyZW50Q2FwYWNp
dHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBBU1NF
UlQoc3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHdpbGxSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAg
ICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRD
YXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIGRp
ZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gdHJ1ZTsKKyAgICAgICAgfQogCiAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSk7CiAgICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0
dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBpZiAoZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkp
CisgICAgICAgICAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1
dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAg
IC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFs
dWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAogICAgICAgICAvLyBzbyBsZWF2ZSB0aGUg
c2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgpAQCAtMTM4OSw5ICsxNDI3LDExIEBAIGlubGlu
ZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWEKICAgICB9CiAKICAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7IAorICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1
Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jv
d091dE9mTGluZVN0b3JhZ2UoCiAgICAgICAgIHZtLCBvbGRDYXBhY2l0eSwgbmV3U3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2Jq
ZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCkBAIC0xNDI3LDEwICsxNDY3LDE2IEBAIGlubGluZSB2
b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRl
cyAmIEFjY2Vzc29yKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eTsKLSAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQor
ICAgIGJvb2wgZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSBmYWxzZTsKKyAgICBpZiAoc3RydWN0
dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKSB7CisgICAgICAgIHdpbGxSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgICAgICBu
ZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdl
Q2FwYWNpdHkoKSk7CisgICAgICAgIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gdHJ1ZTsKKyAg
ICB9CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFi
bGVPYmplY3QodmFsdWUpKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgIGlmIChkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSkK
KyAgICAgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRl
cmZseSk7CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRl
cmF0b3IuaAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOSArMTA4
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2VudW1lcmF0aW9uQ2FjaGUu
Z2V0KCk7CiAgICAgfQogICAgIAotICAgIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpz
ZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiB2bSwgY29uc3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpCisgICAgaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURh
dGE6OnNldEVudW1lcmF0aW9uQ2FjaGUoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmUqLCBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fZW51bWVyYXRpb25DYWNo
ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CisgICAgICAgIG1fZW51bWVyYXRpb25DYWNoZS5zZXQo
dm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAJKHJldmlzaW9uIDE1NTg5NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTcsMTYgKzE5NywxOCBAQCBDaGVja2VkQm9vbGVhbiBNYXBEYXRhOjplbnN1cmVT
cGFjZUZvckFwCiAKICAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gc3RkOjptYXgobV9jYXBhY2l0
eSArIChtX2NhcGFjaXR5IC8gMikgKyAxLCBtaW5pbXVtTWFwU2l6ZSk7CiAgICAgdm9pZCogbmV3
U3RvcmFnZSA9IDA7CisgICAgRGVmZXJHQyBkZWZlcigqY2FsbEZyYW1lLT5oZWFwKCkpOworICAg
IGNhbGxGcmFtZS0+aGVhcCgpLT53aWxsQWJhbmRvblN0b3JhZ2UodGhpcywgbV9lbnRyaWVzLCBt
X2NhcGFjaXR5ICogc2l6ZW9mKEVudHJ5KSk7CiAgICAgaWYgKCFjYWxsRnJhbWUtPmhlYXAoKS0+
dHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIHJlcXVpcmVkU2l6ZSAqIHNpemVvZihFbnRyeSksICZu
ZXdTdG9yYWdlKSkgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBEZWZlckdDIGRlZmVyKCpjYWxsRnJh
bWUtPmhlYXAoKSk7CiAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+
KG5ld1N0b3JhZ2UpOwogICAgIGlmIChzaG91bGRQYWNrKCkpCiAgICAgICAgIHJlcGxhY2VBbmRQ
YWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CiAgICAgZWxzZQogICAg
ICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CisgICAg
Y2FsbEZyYW1lLT5oZWFwKCktPmRpZEFzc2lnblN0b3JhZ2UodGhpcywgbV9lbnRyaWVzLCByZXF1
aXJlZFNpemUgKiBzaXplb2YoRW50cnkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDE1NTg5
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICNp
ZiAhRU5BQkxFKFlBUlJfSklUKQogICAgIHVzZVJlZ0V4cEpJVCgpID0gZmFsc2U7CiAjZW5kaWYK
LSAgICAKKwogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29y
cmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsK
ICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVzaG9s
ZEZvck9wdGltaXplU29vbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTU1ODk1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA1LDggKzcwNSwx
MSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAKICAgICAvLyBJ
ZiB0aGUgb2JqZWN0IGhhZCBhIEJ1dHRlcmZseSBidXQgYWZ0ZXIgZmxhdHRlbmluZy9jb21wYWN0
aW5nIHdlIG5vIGxvbmdlciBoYXZlIG5lZWQgb2YgaXQsCiAgICAgLy8gd2UgbmVlZCB0byB6ZXJv
IGl0IG91dCBiZWNhdXNlIHRoZSBjb2xsZWN0b3IgZGVwZW5kcyBvbiB0aGUgU3RydWN0dXJlIHRv
IGtub3cgdGhlIHNpemUgZm9yIGNvcHlpbmcuCi0gICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkg
JiYgIXRoaXMtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIXRoaXMtPmhhc0luZGV4aW5nSGVhZGVy
KG9iamVjdCkpCisgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkgJiYgIXRoaXMtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgJiYgIXRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKG9iamVjdCkpIHsKKyAgICAg
ICAgb2JqZWN0LT53aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUo
KSwgb2JqZWN0LT5idXR0ZXJmbHkoKSk7CiAgICAgICAgIG9iamVjdC0+c2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCB0aGlzLCAwKTsKKyAgICAgICAgb2JqZWN0LT5kaWRSZXBsYWNlT2xkQnV0
dGVyZmx5KHZtLCB0aGlzLCAwKTsKKyAgICB9CiAKICAgICByZXR1cm4gdGhpczsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJh
cmVEYXRhSW5saW5lcy5oCShyZXZpc2lvbiAxNTU4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsOSArMzUsOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6cHJlCiAg
ICAgcmV0dXJuIG1fcHJldmlvdXMuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZVJh
cmVEYXRhOjpzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRQcmV2
aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAg
bV9wcmV2aW91cy5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CisgICAgbV9wcmV2aW91
cy5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CiB9CiAKIGlubGluZSB2b2lkIFN0cnVjdHVyZVJh
cmVEYXRhOjpjbGVhclByZXZpb3VzSUQoKQpAQCAtNTAsOSArNTAsOSBAQCBpbmxpbmUgSlNTdHJp
bmcqIFN0cnVjdHVyZVJhcmVEYXRhOjpvYmplCiAgICAgcmV0dXJuIG1fb2JqZWN0VG9TdHJpbmdW
YWx1ZS5nZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVj
dFRvU3RyaW5nVmFsdWUoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFs
dWUpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1
ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCosIEpTU3RyaW5nKiB2YWx1ZSkKIHsKLSAgICBtX29iamVj
dFRvU3RyaW5nVmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgIG1fb2JqZWN0VG9TdHJp
bmdWYWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTU2MDE4KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wOS0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhh
aG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIGdlbmVyYXRp
b25hbCBnYXJiYWdlIGNvbGxlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIxMDc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB3dGYvRG91Ymx5TGlua2VkTGlzdC5oOgorICAgICAgICAoV1RGOjo6
OnRha2VBbmRQcmVwZW5kKToKKwogMjAxMy0wOS0xNyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3AgZXhwbGljaXRseSB1c2luZyBQYXNzT3duUHRy
IGluIFdlYkNvcmUvaHRtbApJbmRleDogU291cmNlL1dURi93dGYvRG91Ymx5TGlua2VkTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RvdWJseUxpbmtlZExpc3QuaAkocmV2aXNp
b24gMTU1ODk1KQorKysgU291cmNlL1dURi93dGYvRG91Ymx5TGlua2VkTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZChUKik7CiAg
ICAgdm9pZCByZW1vdmUoVCopOwogCisgICAgdm9pZCB0YWtlQW5kUHJlcGVuZChEb3VibHlMaW5r
ZWRMaXN0PFQ+Jik7CisKIHByaXZhdGU6CiAgICAgVCogbV9oZWFkOwogICAgIFQqIG1fdGFpbDsK
QEAgLTE4Niw2ICsxODgsMjkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIERvdWJs
eUxpbgogICAgIHJldHVybiBub2RlOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dm9pZCBEb3VibHlMaW5rZWRMaXN0PFQ+Ojp0YWtlQW5kUHJlcGVuZChEb3VibHlMaW5rZWRMaXN0
PFQ+JiBvdGhlcikKK3sKKyAgICBpZiAoIW90aGVyLmhlYWQoKSkgeworICAgICAgICBBU1NFUlQo
IW90aGVyLnRhaWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1faGVh
ZCkgeworICAgICAgICBBU1NFUlQoIW1fdGFpbCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLmhl
YWQoKTsKKyAgICAgICAgbV90YWlsID0gb3RoZXIudGFpbCgpOworICAgICAgICBvdGhlci5jbGVh
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1faGVhZCk7CisgICAg
QVNTRVJUKG1fdGFpbCk7CisgICAgbV9oZWFkLT5zZXRQcmV2KG90aGVyLnRhaWwoKSk7CisgICAg
b3RoZXIudGFpbCgpLT5zZXROZXh0KG1faGVhZCk7CisgICAgbV9oZWFkID0gb3RoZXIudGFpbCgp
OworICAgIG90aGVyLmNsZWFyKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBX
VEY6OkRvdWJseUxpbmtlZExpc3ROb2RlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212090</attachid>
            <date>2013-09-19 12:56:17 -0700</date>
            <delta_ts>2013-09-19 18:56:24 -0700</delta_ts>
            <desc>checkpoint</desc>
            <filename>bug-121074-20130919125542.patch</filename>
            <type>text/plain</type>
            <size>182737</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNyBA
QAorMjAxMy0wOS0xOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIGdlbmVyYXRpb25hbCBnYXJiYWdlIGNvbGxlY3Rv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMDc0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6OkZ1
bmN0aW9uUHRyKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFz
ZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjo6OmV4ZWN1dGVFZmZlY3Rz
KToKKyAgICAgICAgKiBkZmcvREZHQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Q0NhbGxIZWxwZXJzOjpzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0UmVw
bGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRUcmFuc2l0aW9uU3R1Yik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpn
ZW5lcmljV3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29weVdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Ondy
aXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2Fs
bE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHA6CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5l
cmljQWRkU3Bhbik6CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAg
ICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuaDoKKyAgICAgICAgKiBoZWFwL0NvcGllZEFs
bG9jYXRvci5oOgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlRHVy
aW5nQ29weWluZyk6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgorICAgICAgICAoSlND
OjpDb3BpZWRCbG9jazo6Y3JlYXRlTm9aZXJvRmlsbCk6CisgICAgICAgIChKU0M6OkNvcGllZEJs
b2NrOjpDb3BpZWRCbG9jayk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkaWRFdmFjdWF0
ZUJ5dGVzKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnBpbik6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjp1bnBpbik6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjppc09sZCk6
CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpy
ZXBvcnRMaXZlQnl0ZXNEdXJpbmdXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpDb3BpZWRC
bG9jazo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nQ29weWluZyk6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3BpZWRTcGFjZSk6Cisg
ICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp+Q29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpD
b3BpZWRTcGFjZTo6aW5pdCk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0
ZU92ZXJzaXplKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGVPdmVy
c2l6ZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKToKKyAg
ICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRpZFN0YXJ0RnVsbENvbGxlY3Rpb24pOgorICAgICAg
ICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6ZG9uZUNvcHlpbmcpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c2l6ZSk6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpjYXBhY2l0eSk6CisgICAgICAgIChKU0M6OkNv
cGllZFNwYWNlOjppc1BhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OndpbGxB
YmFuZG9uU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkaWRBc3NpZ25TdG9y
YWdlKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmg6CisgICAgICAgIChKU0M6OkNvcGll
ZFNwYWNlOjpoZWFwKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OkNvcGllZEdlbmVyYXRp
b246OkNvcGllZEdlbmVyYXRpb24pOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2spOgor
ICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9jayk6CisgICAgICAgICogaGVh
cC9Db3B5VmlzaXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9j
YXRlTmV3U3BhY2UpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFj
ZVNsb3cpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Okhl
YXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRBYmFuZG9uKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkT2xkR2VuZXJhdGlvbkV4ZWN1
dGFibGVzVG9SZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkVG9SZW1lbWJl
cmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdElmTmVj
ZXNzYXJ5T3JEZWZlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmRpZEFsbG9jYXRlKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d2lsbEFi
YW5kb25TdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkQXNzaWduU3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmNvcHlXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAoSlNDOjpIZWFwOjppc0luUmVtZW1iZXJlZFNldCk6CisgICAgICAgIChK
U0M6OkhlYXA6Om9wZXJhdGlvbkluUHJvZ3Jlc3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpzaG91
bGRDb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBoZWFwL0hlYXBPcGVyYXRpb24uaDoKKyAgICAgICAg
KiBoZWFwL01hcmtTdGFjay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5Ojp+TWFy
a1N0YWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6Y2xlYXIpOgorICAg
ICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6ZmlsbFZlY3Rvcik6CisgICAgICAgICogaGVhcC9N
YXJrU3RhY2suaDoKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAg
IChKU0M6OmlzTGlzdFBhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpp
c1BhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhl
bHBlcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjpyZXNldCk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2xl
YXJNYXJrcyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhclJlbWVtYmVyZWRTZXQp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlw
ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6Cisg
ICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
b2Zmc2V0T2ZNYXJrcyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpkaWRDb25zdW1lRW1w
dHlGcmVlTGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzZXRSZW1lbWJlcmVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNsZWFyUmVtZW1iZXJlZCk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjphdG9taWNDbGVhclJlbWVtYmVyZWQpOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6aXNSZW1lbWJlcmVkKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmNw
cDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6On5NYXJrZWRTcGFjZSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMpOgorICAgICAgICAoSlNDOjpNYXJrZWRT
cGFjZTo6dmlzaXRXZWFrU2V0cyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpyZWFwV2Vh
a1NldHMpOgorICAgICAgICAoSlNDOjpWZXJpZnlNYXJrZWQ6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2xlYXJNYXJrcyk6CisgICAgICAgICogaGVhcC9NYXJrZWRT
cGFjZS5oOgorICAgICAgICAoSlNDOjpDbGVhck1hcmtzOjpvcGVyYXRvcigpKToKKyAgICAgICAg
KEpTQzo6Q2xlYXJSZW1lbWJlcmVkU2V0OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmRpZEFsbG9jYXRlSW5CbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpjbGVhclJlbWVtYmVyZWRTZXQpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6bWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNoYXJlZERhdGEp
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1
bmNvbmRpdGlvbmFsbHlBcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29weUxh
dGVyKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmhlYXApOgorICAgICAgICAqIGppdC9K
SVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRBcnJheVByb2ZpbGluZ1NpdGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRH
bG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
aXRfZ2xvYmFsX2NvbnN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbml0X2ds
b2JhbF9jb25zdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hlY2tNYXJrV29yZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAg
KEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgor
ICAgICAgICAqIGxsaW50L0xMSW50Q29tbW9uLmg6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfd3JpdGVfYmFycmllcl9zbG93
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50X3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmll
cl9zbG93KToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5oOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2ZmbGluZWFzbS9pbnN0
cnVjdGlvbnMucmI6CisgICAgICAgICogb2ZmbGluZWFzbS94ODYucmI6CisgICAgICAgICogcnVu
dGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0b3RhbFNpemUpOgorICAgICAgICAqIHJ1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6d2lsbFJlcGxhY2VPbGRCdXR0
ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVJhcmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKiBydW50aW1l
L01hcERhdGEuY3BwOgorICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVu
ZCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9u
czo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldFByZXZpb3VzSUQp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRQcmV2aW91c0lEKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUpOgorCiAyMDEzLTA5LTE5
ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgbmFt
ZXMgb2YgdW51c2VkIGFyZ3VtZW50cyBmcm9tIHRoZSB4ODYveDg2LTY0IGZ1bmN0aW9uIHByb3Rv
dHlwZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NjExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NDgsNiArNjQ4LDcgQEAKIAkJMUFDRjczNzcx
NzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFDRjczNzYxNzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwICov
OyB9OwogCQkyNjAwQjVBNjE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTQxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLzsgfTsKIAkJMjYwMEI1QTcxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJp
bmdKb2luZXIuaCAqLzsgfTsKKwkJMkEwRDkwMjYxN0U5NEM2ODAwRUNBNTQ2IC8qIEhlYXBPcGVy
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJB
MEQ5MDI1MTdFOTRDNjgwMEVDQTU0NiAvKiBIZWFwT3BlcmF0aW9uLmggKi87IH07CiAJCTJBNDhE
MTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExQjU3NDE3NkEyMjREMDAwRTJB
MjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OwogCQkyQTZGNDYyNjE3RTk1OUNFMDBD
NDVDOTggLyogSGVhcE9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkE2RjQ2MjUxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQUQ4
OTMyQjE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4NjhGMDA2Njgy
NzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi87IH07CkBAIC00MDM4LDYgKzQwMzksNyBAQAog
CQkJCTJBRDg5MzJCMTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVj
dXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQxMDE3RjE3OURBRjgwMDAyRUI4QkEgLyogREZH
U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTJBMEQ5MDI2MTdFOTRDNjgwMEVDQTU0NiAvKiBIZWFwT3BlcmF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJ
KHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTMgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAg
IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIHJldHVyblR5cGUsIHR5cGVuYW1lIGFyZ1R5cGUx
LCB0eXBlbmFtZSBhcmdUeXBlMiwgdHlwZW5hbWUgYXJnVHlwZTMsIHR5cGVuYW1lIGFyZ1R5cGU0
LCB0eXBlbmFtZSBhcmdUeXBlNSwgdHlwZW5hbWUgYXJnVHlwZTY+CisgICAgRnVuY3Rpb25QdHIo
cmV0dXJuVHlwZSgqdmFsdWUpKGFyZ1R5cGUxLCBhcmdUeXBlMiwgYXJnVHlwZTMsIGFyZ1R5cGU0
LCBhcmdUeXBlNSwgYXJnVHlwZTYpKQorICAgICAgICA6IG1fdmFsdWUoKHZvaWQqKXZhbHVlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKKyAgICB9
CisKIC8vIE1TVkMgZG9lc24ndCBzZWVtIHRvIHRyZWF0IGZ1bmN0aW9ucyB3aXRoIGRpZmZlcmVu
dCBjYWxsaW5nIGNvbnZlbnRpb25zIGFzCiAvLyBkaWZmZXJlbnQgdHlwZXM7IHRoZXNlIG1ldGhv
ZHMgYWxyZWFkeSBkZWZpbmVkIGZvciBmYXN0Y2FsbCwgYmVsb3cuCiAjaWYgQ0FMTElOR19DT05W
RU5USU9OX0lTX1NURENBTEwgJiYgIU9TKFdJTkRPV1MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU2MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0MjAsNyArMjQyMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25n
UmVmZXIKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzW2ld
LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogCi0gICAgdXBkYXRlQWxsUHJlZGljdGlvbnMoQ29s
bGVjdGlvbik7CisgICAgdXBkYXRlQWxsUHJlZGljdGlvbnModmlzaXRvci5oZWFwKCktPm9wZXJh
dGlvbkluUHJvZ3Jlc3MoKSk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAxNTYxMTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
ICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBDb2xsZWN0aW9uCisgICAgICAg
IGlmICgob3BlcmF0aW9uID09IEZ1bGxDb2xsZWN0aW9uIHx8IG9wZXJhdGlvbiA9PSBFZGVuQ29s
bGVjdGlvbikKICAgICAgICAgICAgICYmICFtX3NpbmdsZXRvblZhbHVlSXNUb3AKICAgICAgICAg
ICAgICYmICEhbV9zaW5nbGV0b25WYWx1ZQogICAgICAgICAgICAgJiYgbV9zaW5nbGV0b25WYWx1
ZS5pc0NlbGwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTU2MTEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzE2LDcgKzEzMTYsNiBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKLQogICAgICAgICBmaWx0ZXIodmFsdWUsIG5vZGUtPnN0cnVjdHVy
ZSgpKTsKICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjY1LDcgKzI2
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVn
IGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0
LCBHUFJSZWcgYXJnNSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBh
cmc0KQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CiAgICAgICAgIGFkZENh
bGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC0yNzMsMTAgKzI3Myw5
IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOwogICAgICAgICBhZGRD
YWxsQXJndW1lbnQoYXJnMyk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKLSAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBH
UFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmcz
LCBUcnVzdGVkSW1tMzIgYXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygp
OwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpA
QCAtMjg2LDcgKzI4NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0
KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW0z
MiBhcmc0KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgR1BSUmVnIGFyZzMpCisg
ICAgeworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3Vt
ZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxB
cmd1bWVudChhcmczKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMs
IFRydXN0ZWRJbW1QdHIgYXJnNCkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygp
OwogICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpA
QCAtMjk2LDE2ICszMDQsMTcgQEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJn
NCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBHUFJSZWcgYXJn
MykKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIFRydXN0ZWRJbW0zMiBh
cmc0KQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CiAgICAgICAgIGFkZENh
bGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIGFkZENhbGxB
cmd1bWVudChhcmcxKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOwogICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKICAg
ICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW1QdHIgYXJn
NCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW0zMiBhcmcxLCBUcnVzdGVkSW1tMzIgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBh
cmc0KQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CiAgICAgICAgIGFkZENh
bGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC0zMTUsNyArMzI0LDcg
QEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CiAgICAgfQogCi0gICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBUcnVzdGVkSW1tMzIgYXJnNCkKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBh
cmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwg
VHJ1c3RlZEltbTMyIGFyZzUpCiAgICAgewogICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsK
ICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAg
LTMyMyw5ICszMzIsMTAgQEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7
CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzQpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNSk7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIg
YXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCkKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1t
MzIgYXJnNSkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwogICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMzMzLDYgKzM0
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOwogICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoYXJnMyk7CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAg
ICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQsIEdQUlJlZyBhcmc1KQpAQCAtOTU4LDYgKzk2OSwy
MCBAQCBwdWJsaWM6CiAgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyLCBhcmczKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJ
bW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCisgICAgeworICAgICAg
ICBwb2tlKGFyZzUsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUICsgMSk7CisgICAgICAgIHBva2UoYXJn
NCwgUE9LRV9BUkdVTUVOVF9PRkZTRVQpOworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRy
dXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCisgICAgewor
ICAgICAgICBwb2tlKGFyZzUsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUICsgMSk7CisgICAgICAgIHBv
a2UoYXJnNCwgUE9LRV9BUkdVTUVOVF9PRkZTRVQpOworICAgICAgICBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBUcnVzdGVkSW1tMzIgYXJnNCkKICAgICB7CiAgICAgICAg
IHBva2UoYXJnNCwgUE9LRV9BUkdVTUVOVF9PRkZTRVQpOwpAQCAtMTA2Niw2ICsxMDkxLDI5IEBA
IHB1YmxpYzoKICAgICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAg
ICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogICAgIH0KKworI2VuZGlmCisKKyNpZiBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJT
ID09IDYKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJS
ZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCisgICAgeworICAgICAgICBzZXR1cFR3b1N0dWJB
cmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFI0PihhcmcxLCBh
cmc0KTsKKyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAg
ICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgIG1vdmUoYXJnNSwg
R1BSSW5mbzo6YXJndW1lbnRHUFI1KTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkK
KyAgICB7CisgICAgICAgIHB1c2goYXJnMSk7CisgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BS
SW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjQ+KGFyZzIsIGFyZzQpOwor
ICAgICAgICBwb3AoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIAorICAgICAg
ICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgIG1vdmUoYXJnNSwg
R1BSSW5mbzo6YXJndW1lbnRHUFI1KTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHZv
aWQgc2V0dXBSZXN1bHRzKEdQUlJlZyBkZXN0QSwgR1BSUmVnIGRlc3RCKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTYxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzQ0LDggKzE3NDQsMTEgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25SZWFsbG9jYXRlQgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKIAogICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIG9iamVjdC0+d2lsbFJlcGxh
Y2VPbGRCdXR0ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0dXJlKCksIG9iamVjdC0+YnV0dGVyZmx5
KCkpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFn
ZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKICAgICBvYmplY3QtPnNldEJ1dHRl
cmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIG9iamVjdC0+ZGlkUmVw
bGFjZU9sZEJ1dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcmVzdWx0KTsKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMTc1NCw4ICsx
NzU3LDExIEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKIAorICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBvYmplY3QtPndp
bGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLCBvYmplY3QtPmJ1
dHRlcmZseSgpKTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGlu
ZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5l
d1NpemUpOwogICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KHJlc3VsdCk7CisgICAgb2JqZWN0LT5kaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBvYmplY3Qt
PnN0cnVjdHVyZSgpLCByZXN1bHQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZXN1bHQpOwogfQogCkBAIC0xOTUyLDYgKzE5NTgsMzAgQEAgc2l6ZV90IERGR19PUEVSQVRJ
T04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wKS50b0Jvb2xlYW4oZXhlYyk7CiB9CiAKK3ZvaWQgREZHX09QRVJBVElPTiBkZmdDb3B5V3Jp
dGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCB2b2lkKiBvbGRQdHIsIHNp
emVfdCBvbGRTaXplLCB2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKQoreworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworCisgICAgZXhlYy0+aGVhcCgpLT5jb3B5V3JpdGVCYXJyaWVyKGNlbGwsIG9sZFB0ciwg
b2xkU2l6ZSwgbmV3UHRyLCBuZXdTaXplKTsKK30KKwordm9pZCBERkdfT1BFUkFUSU9OIGRmZ1Vu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisKKyAgICBleGVjLT5oZWFwKCktPndyaXRlQmFycmllcihjZWxsKTsK
K30KKwordm9pZCBERkdfT1BFUkFUSU9OIGRmZ1dyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogb3duZWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBl
eGVjLT5oZWFwKCktPndyaXRlQmFycmllcihvd25lciwgb3duZWQpOworfQorCiB2b2lkIERGR19P
UEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUq
IGV4ZWMsIHZvaWQqIGRlYnVnSW5mb1Jhdywgdm9pZCogc2NyYXRjaCkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBAIHR5cGVkZWYg
dm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFU
SU9OICgqVl9ERkdPcGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90
LCBkb3VibGUpOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9F
T1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5
cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwordHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9F
Q0IpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEJ1dHRlcmZseSopOwogdHlwZWRlZiB2b2lkIERGR19P
UEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5s
aW5lQ2FsbEZyYW1lKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1l
Kik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0x
MzAsNyArMTMxLDggQEAgdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYQog
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3Rh
dGUqLCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgU3RyaW5nSW1wbCogREZHX09QRVJBVElP
TiAoKklfREZHT3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CiB0eXBlZGVm
IEpTU3RyaW5nKiBERkdfT1BFUkFUSU9OICgqSnNzX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRl
KiwgaW50MzJfdCk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNo
YXJDb2RlKEV4ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5URVJOQUw7IAordHlwZWRlZiB2b2lk
IERGR19PUEVSQVRJT04gKFZfREZHT3BlcmF0aW9uX0VDUFNQUykoRXhlY1N0YXRlKiwgSlNDZWxs
Kiwgdm9pZCosIHNpemVfdCwgdm9pZCosIHNpemVfdCk7CitKU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5U
RVJOQUw7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8g
QysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25zIHRvbyBjb21wbGV4IHRvIEpJVC4KIEpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKikgV1RGX0lOVEVSTkFMOwpAQCAtMzE3LDYgKzMxOSwxMCBAQCB2b2lkIERGR19PUEVSQVRJ
T04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjCiBjaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JF
bnRyeU5vdyhFeGVjU3RhdGUqLCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIGludDMyX3Qgc3RyZWFt
SW5kZXgpIFdURl9JTlRFUk5BTDsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAordm9pZCBE
RkdfT1BFUkFUSU9OIGRmZ0NvcHlXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgdm9p
ZCosIHNpemVfdCwgdm9pZCosIHNpemVfdCk7Cit2b2lkIERGR19PUEVSQVRJT04gZGZnV3JpdGVC
YXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordm9pZCBERkdfT1BFUkFUSU9O
IGRmZ1VuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CisKIH0g
Ly8gZXh0ZXJuICJDIgogCiBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdU
eXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1NjExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0Nyw3MCArNjQ3LDU1IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAg
ICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LmRmZy52YWx1ZVRhZ0dQUik7CiAjZW5kaWYKICAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyku
Z2V0RnJlZUdQUigpOwotICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSNp
ZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIy
OwotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gdHJ1ZTsKLSNlbHNlCi0gICAg
Y29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSBmYWxzZTsKLSNlbmRpZgotICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CiAgICAgCi0gICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52
YWxpZEdQUlJlZyAmJiAod3JpdGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHNjcmF0
Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQ
Uik7Ci0jZWxzZQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNj
cmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKKyAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJz
KTsKKyAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsKICNlbmRpZgotICAgICAgICBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsK
LSAgICB9CisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOworICAgIAorICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKKyAgICBDQ2Fs
bEhlbHBlcnMgc3R1YkppdCh2bSwgZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgYWxsb2NhdG9y
LnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOworICAgIAogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0dWJKaXQuYnJhbmNoUHRyKAogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKLSAgICAKLSNpZiBFTkFCTEUo
V1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzY3JhdGNo
R1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BS
LCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6
c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIsIHNjcmF0Y2hH
UFIpOwotI2VuZGlmCi0gICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIyKTsKLSAgICBTcGVjdWxh
dGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0
Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgc3R1YkppdC5wb3Ao
c2NyYXRjaEdQUjIpOwotI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCB3cml0ZUJh
cnJpZXJPcGVyYXRpb24gPSBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJh
c2VHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMik7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAgICAg
IHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSkpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAg
ICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSkpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9CiAjZW5kaWYKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGZhaWx1cmU7CiAgICAgCi0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAg
IHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkgeworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhzdHViSml0KTsKICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwogICAgICAg
ICAKICAgICAgICAgYmFkU3RydWN0dXJlLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBzdHViSml0
LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoc3R1YkppdCk7CiAgICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CkBAIC03MTgs
NiArNzAzLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIH0KICAgICAK
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9j
aygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHdyaXRlQmFycmllck9wZXJhdGlvbiwgZGZnVW5j
b25kaXRpb25hbFdyaXRlQmFycmllcik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWls
dXJlTGFiZWwpOwogICAgICAgICAgICAgCkBAIC03NjIsMzUgKzc0OCwzNCBAQCBzdGF0aWMgdm9p
ZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IGJhc2VH
UFIpOwogICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSB2YWx1ZUdQUik7CiAgICAgCi0gICAgYm9v
bCBuZWVkU2Vjb25kU2NyYXRjaCA9IGZhbHNlOwotICAgIGJvb2wgbmVlZFRoaXJkU2NyYXRjaCA9
IGZhbHNlOwotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBuZWVkU2Vj
b25kU2NyYXRjaCA9IHRydWU7Ci0jZW5kaWYKKyAgICBib29sIG5lZWRGb3VydGhTY3JhdGNoID0g
ZmFsc2U7CiAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSAg
ICAgICAgbmVlZFRoaXJkU2NyYXRjaCA9IHRydWU7CisgICAgICAgIG5lZWRGb3VydGhTY3JhdGNo
ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjI7Ci0gICAgaWYgKG5lZWRT
ZWNvbmRTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQUik7Ci0g
ICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Ci0gICAgICAgIEFTU0VSVChz
Y3JhdGNoR1BSMiAhPSBzY3JhdGNoR1BSMSk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBi
YXNlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIpOworICAgIEFTU0VS
VChzY3JhdGNoR1BSMiAhPSBzY3JhdGNoR1BSMSk7CisKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIz
ICE9IGJhc2VHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2YWx1ZUdQUik7CisgICAg
QVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIxKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQ
UjMgIT0gc2NyYXRjaEdQUjIpOworICAgIAorICAgIEdQUlJlZyBzY3JhdGNoR1BSNDsKKyAgICBp
ZiAobmVlZEZvdXJ0aFNjcmF0Y2gpIHsKKyAgICAgICAgc2NyYXRjaEdQUjQgPSBhbGxvY2F0b3Iu
YWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSBiYXNl
R1BSKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFI0ICE9IHZhbHVlR1BSKTsKKyAgICAgICAg
QVNTRVJUKHNjcmF0Y2hHUFI0ICE9IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFI0ICE9IHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFI0ICE9IHNj
cmF0Y2hHUFIzKTsKICAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BS
UmVnOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkg
ewotICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQo
c2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0g
c2NyYXRjaEdQUjEpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIp
OwotICAgIH0gZWxzZQotICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAg
ICAgICAgICAKKyAgICAgICAgc2NyYXRjaEdQUjQgPSBJbnZhbGlkR1BSUmVnOworCiAgICAgYWxs
b2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwogCiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKQEAgLTgxMSwxMiArNzk2LDkg
QEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICB9CiAgICAgfQog
Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEFTU0VSVChuZWVkU2Vj
b25kU2NyYXRjaCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IEludmFsaWRHUFJSZWcpOwog
ICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1
cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAgICBTcGVjdWxhdGl2ZUpJVDo6d3Jp
dGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotI2VuZGlmCisgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgd3JpdGVCYXJyaWVyT3BlcmF0aW9uID0gU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmll
cihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNvcHlXcml0ZUJhcnJpZXJPcGVyYXRpb247CiAgICAgCiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIApAQCAtODMyLDYgKzgxNCw3IEBA
IHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmlu
Zyk7CiAgICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CiAgICAgICAgICAg
ICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRB
bGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAg
ICBjb3B5V3JpdGVCYXJyaWVyT3BlcmF0aW9uID0gU3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJh
cnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgMCwgMCwgc2NyYXRjaEdQUjEsIG5ld1NpemUsIHNjcmF0
Y2hHUFIyLCBzY3JhdGNoR1BSMyk7CiAgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwpAQCAtODQzLDYgKzgyNiw4
IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFp
bmluZyk7CiAgICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CiAgICAgICAg
ICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAg
ICAgICAvLyBUT0RPOiBHZXQgdGhlIHJlYWwgYmFzZSBvZiB0aGUgb2xkIEJ1dHRlcmZseS4KKyAg
ICAgICAgICAgIGNvcHlXcml0ZUJhcnJpZXJPcGVyYXRpb24gPSBTcGVjdWxhdGl2ZUpJVDo6Y29w
eVdyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMywgb2xkU2l6ZSwgc2Ny
YXRjaEdQUjEsIG5ld1NpemUsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSNCk7CiAgICAgICAgICAg
ICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1Zh
bHVlKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjEg
PSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwgc2NyYXRjaEdQUjIgPSBh
dmFpbGFibGUKICAgICAgICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8
IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCop
KSB7CkBAIC05MDksNiArODk0LDkgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHVi
KAogICAgIH0KICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQs
IGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHdyaXRlQmFycmllck9w
ZXJhdGlvbiwgZGZnVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7CisgICAgaWYgKHNjcmF0Y2hH
UFIxSGFzU3RvcmFnZSkKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjb3B5V3JpdGVCYXJyaWVy
T3BlcmF0aW9uLCBkZmdDb3B5V3JpdGVCYXJyaWVyKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNl
UmVnaXN0ZXJzKCkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxh
YmVsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDE3ICsy
MzksMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFz
ZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aFRhcmdldCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBF
ZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVt
cCBzbG93UGF0aFRhcmdldCkKIHsKICAgICAKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRy
IHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1
Y3R1cmVDaGVjayA9IG1faml0LnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxl
cjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7CiAKLSAgICB3cml0
ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9w
ZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7CisgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVl
R1BSLCB2YWx1ZVVzZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyKTsKIAogICAgIEpJVENvbXBp
bGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAg
bV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIEpJVENvbXBpbGVy
OjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlNjRXaXRoQWRkcmVzc09m
ZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7
CisgICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAg
SklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmU2NFdp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIxLCAwKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQu
bGFiZWwoKTsKICAgICAKQEAgLTI3OSw3ICsyNzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKENvZGVPCiAgICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJO
dW1iZXIpKTsKICAgICB9CiAgICAgUmVnaXN0ZXJTZXQgY3VycmVudGx5VXNlZFJlZ2lzdGVycyA9
IHVzZWRSZWdpc3RlcnMoKTsKLSAgICBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0
Y2hHUFIpOworICAgIGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaEdQUjEpOwog
ICAgIEFTU0VSVChjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmdldChiYXNlR1BSKSk7CiAgICAgQVNT
RVJUKGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuZ2V0KHZhbHVlR1BSKSk7CiAgICAgbV9qaXQuYWRk
UHJvcGVydHlBY2Nlc3MoCkBAIC0yOTgyLDggKzI5ODIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMgJiYgSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUu
Z3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3By
KCkpOworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIHNjcmF0Y2gxLmdwcigp
LCBzY3JhdGNoMi5ncHIoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKQEAgLTMwNTYsOCArMzA1Nyw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAg
ICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdy
aXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNl
UmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIGNoaWxkNCk7CkBAIC0zMTUzLDcgKzMxNTUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcmd1bWVudHMs
IG1fc2xvd0FyZ3VtZW50cykpKSk7Ci0gICAgCisKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihi
YXNlUmVnLCB2YWx1ZVJlZywgY2hpbGQzLCBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZyk7CisKICAg
ICAgICAgICAgIG1faml0Lm1vdmUocHJvcGVydHlSZWcsIHNjcmF0Y2gyUmVnKTsKICAgICAgICAg
ICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyUmVnLCBzY3JhdGNoMlJlZyk7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKApAQCAtMzI1Niw3ICszMjYwLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpJbnQzMiAmJiBIZWFwOjppc1dyaXRlQmFycmll
ckVuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+
Y2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwg
dmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNoLmdwcigpLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwpAQCAtMzMwNSw3ICszMzA5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgICAgICBp
ZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFz
ZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgc2NyYXRjaC5n
cHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CkBAIC00MDY5LDE0ICs0MDcz
LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaFJlZ2lzdGVyKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaFJlZ2lzdGVyMih0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHJlZ2lzdGVyc0dQUiA9IHJlZ2lzdGVycy5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaFJlZ2lzdGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBzY3JhdGNoUmVnaXN0ZXIyLmdwcigpOwogCiAgICAgICAgIG1faml0LnN0b3JlNjQodmFs
dWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVtYmVy
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwg
dmFsdWVHUFIsIG5vZGUtPmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywg
c2NyYXRjaEdQUik7CisgICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVHUFIsIG5v
ZGUtPmNoaWxkMygpLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMik7CiAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00MjcyLDEzICs0Mjc4LDEyIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQuaml0
Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2ppdC5n
cmFwaCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5vZGUpOwogCiAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0
aGlzKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICAKLSAg
ICAgICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAgICAvLyBN
dXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5z
aXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCBu
b2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgV3JpdGVCYXJyaWVy
Rm9yR2VuZXJpY0FjY2Vzcyk7Ci0jZW5kaWYKKyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIs
IG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLCBzY3JhdGNoMS5n
cHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAgICAgICAgIApAQCAtNDMzMywxOCArNDMzOCwxNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJP
RklMSU5HKQogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKLSNlbmRpZgogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQ
UiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OwogICAgICAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAg
IHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQzKCksIFdy
aXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSNlbmRpZgorICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMygpLCBzY3JhdGNoMS5ncHIo
KSwgc2NyYXRjaDIuZ3ByKCkpOwogCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdl
QWNjZXNzRGF0YSA9IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YUluZGV4KCldOwogICAgICAgICAKQEAgLTQzNTcsMzYgKzQzNjAsMzQgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0QnlJ
ZDogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7
CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gx
LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOworICAgICAg
ICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBub2Rl
LT5jaGlsZDIoKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCksIE5vdERpcmVjdCk7CiAKLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3Jp
Z2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKLSAgICAgICAgCi0gICAgICAgIG5vUmVz
dWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6
IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwog
ICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7CiAgICAg
ICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsKLQotICAgICAg
ICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBub2Rl
LT5jaGlsZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3Qp
OworICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVl
R1BSLCBub2RlLT5jaGlsZDIoKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CiAKLSAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtNDQwMywxMCArNDQwNCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChIZWFwOjppc1dyaXRl
QmFycmllckVuYWJsZWQoKSkgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHdyaXRlQmFy
cmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksIHZhbHVlLmdwcigp
LCBub2RlLT5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hS
ZWcpOworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMSgpLCBzY3JhdGNoMS5ncHIo
KSwgc2NyYXRjaDIuZ3ByKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2ppdC5z
dG9yZTY0KHZhbHVlLmdwcigpLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSk7CkBAIC00Njg3LDkg
KzQ2ODgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwog
CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFjdGl2YXRpb25WYWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0
aGlzKTsKICAgICAgICAgR1BSUmVnIGFjdGl2YXRpb25WYWx1ZUdQUiA9IGFjdGl2YXRpb25WYWx1
ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgYWN0
aXZhdGlvblZhbHVlR1BSKTsKIApAQCAtNDcwMCwxMyArNDcwMywxNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGZvciAoaW50IGkgPSBzeW1ib2xU
YWJsZS0+Y2FwdHVyZVN0YXJ0KCk7IGkgPiBjYXB0dXJlRW5kOyAtLWkpIHsKICAgICAgICAgICAg
IG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcygKLSAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHNjcmF0Y2hHUFIxKTsKICAg
ICAgICAgICAgIG1faml0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKAogICAgICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uVmFsdWVHUFIsIHJl
Z2lzdGVyc09mZnNldCArIGkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3RlcnNPZmZzZXQpLCBhY3RpdmF0aW9u
VmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhhY3RpdmF0aW9uVmFsdWVHUFIsIEpTQWN0aXZhdGlvbjo6
b2Zmc2V0T2ZSZWdpc3RlcnMoKSkpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMy
KHJlZ2lzdGVyc09mZnNldCksIGFjdGl2YXRpb25WYWx1ZUdQUiwgc2NyYXRjaEdQUjEpOworICAg
ICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYWN0
aXZhdGlvblZhbHVlR1BSLCBKU0FjdGl2YXRpb246Om9mZnNldE9mUmVnaXN0ZXJzKCkpKTsKKyAg
ICAgICAgd3JpdGVCYXJyaWVyKGFjdGl2YXRpb25WYWx1ZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyKTsKIAogICAgICAgICBub3RDcmVhdGVkLmxpbmsoJm1faml0KTsKICAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NSw2NyAr
ODk1LDIwMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlKiBuCiAgICAg
fQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXIm
IGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgV3Jp
dGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQorc3RhdGljIEpJVENvbXBpbGVyOjpKdW1wIGdlbmVy
aWNXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgLy8gQ29weSBvd25lciB0byBzY3JhdGNo
MQorICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMSk7CisgICAgLy8gQ29weSBvd25lciB0byBz
Y3JhdGNoMgorICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMik7CisKKyAgICAvLyBNYXNrIHNj
cmF0Y2gxIHRvIGJsb2NrCisgICAgaml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMSk7CisgICAgLy8gTWFzayBzY3Jh
dGNoMiB0byBpbmRleAorICAgIGppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mih+TWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gyKTsKKworICAgIC8vIFNoaWZ0IGlu
ZGV4CisgICAgaml0LnJzaGlmdDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMyArIDQp
LCBzY3JhdGNoMik7CisKKyAgICAvLyBFbWl0IGxvYWQgYW5kIGJyYW5jaAorICAgIHJldHVybiBq
aXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIE1hcmtl
ZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpKTsKK30KKworc3RhdGljIEpJVENvbXBpbGVyOjpKdW1w
IGdlbmVyaWNXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTQ2VsbCogb3duZXIsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIC8qc2NyYXRjaDIqLykKK3sKKyAgICBNYXJrZWRCbG9jayog
YmxvY2sgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3Iob3duZXIpOworICAgIHNpemVfdCBtYXJrSW5k
ZXggPSAocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG93bmVyKSAmIH5NYXJrZWRCbG9jazo6Ymxv
Y2tNYXNrKSA+PiAoMyArIDQpOworICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBNYXJrZWRCbG9j
azo6b2Zmc2V0T2ZNYXJrcygpKSArIG1hcmtJbmRleDsKKworICAgIC8vIEVtaXQgbG9hZCBhbmQg
YnJhbmNoCisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYWRkcmVz
cyksIHNjcmF0Y2gxKTsKKyAgICByZXR1cm4gaml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSkpOworfQorCitNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmllcihDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgb2xkU3RvcmFnZSwgc2l6ZV90IG9sZFNpemUs
IEdQUlJlZyBuZXdTdG9yYWdlLCBzaXplX3QgbmV3U2l6ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpCit7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1hcmtl
ZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIoaml0LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKQorICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICBq
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG93bmVyLCBvbGRTdG9yYWdlLCBUcnVzdGVk
SW1tMzIob2xkU2l6ZSksIG5ld1N0b3JhZ2UsIFRydXN0ZWRJbW0zMihuZXdTaXplKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspCisgICAgICAgIGppdC5wb3Ao
R1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmso
JmppdCk7CisgICAgcmV0dXJuIGNhbGw7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpDYWxsIFNwZWN1
bGF0aXZlSklUOjpjb3B5V3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3du
ZXIsIHZvaWQqIG9sZFN0b3JhZ2UsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcgbmV3U3RvcmFnZSwg
c2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJy
aWVyKGppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0
LnB1c2goR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShvd25lciwgVHJ1c3RlZEltbVB0cihvbGRTdG9yYWdlKSwgVHJ1c3RlZEltbTMy
KG9sZFNpemUpLCBuZXdTdG9yYWdlLCBUcnVzdGVkSW1tMzIobmV3U2l6ZSkpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBqaXQucG9wKEdQUklu
Zm86OnRvUmVnaXN0ZXIoaSkpOworCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZqaXQp
OworICAgIHJldHVybiBjYWxsOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb3B5V3JpdGVC
YXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIG9sZFN0b3JhZ2UsIHNpemVfdCBvbGRTaXplLCBH
UFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQg
PSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsK
KworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIGNhbGxP
cGVyYXRpb24oZGZnQ29weVdyaXRlQmFycmllciwgb3duZXIsIG9sZFN0b3JhZ2UsIG9sZFNpemUs
IG5ld1N0b3JhZ2UsIG5ld1NpemUpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxp
ZEdQUlJlZyk7CisgICAgLy8gTmVlZCB0byByZWxvYWQgdGhlIGJ1dHRlcmZseSBwb2ludGVyIHNp
bmNlIGZpbGxpbmcgd29uJ3QgcmVsb2FkIGl0IHNpbmNlIGl0J3MgYSB0ZW1wb3JhcnkuCisgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvd25lciwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgbmV3U3RvcmFnZSk7CisKKyAgICBkZWZpbml0ZWx5Tm90TWFya2Vk
LmxpbmsoJm1faml0KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmll
cihHUFJSZWcgb3duZXIsIHZvaWQqIG9sZFN0b3JhZ2UsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcg
bmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5l
cmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKworICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIGNhbGxPcGVyYXRp
b24oZGZnQ29weVdyaXRlQmFycmllciwgb3duZXIsIG9sZFN0b3JhZ2UsIG9sZFNpemUsIG5ld1N0
b3JhZ2UsIG5ld1NpemUpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJl
Zyk7CisgICAgLy8gTmVlZCB0byByZWxvYWQgdGhlIGJ1dHRlcmZseSBwb2ludGVyIHNpbmNlIGZp
bGxpbmcgd29uJ3QgcmVsb2FkIGl0IHNpbmNlIGl0J3MgYSB0ZW1wb3JhcnkuCisgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvd25lciwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgbmV3U3RvcmFnZSk7CisKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmso
Jm1faml0KTsKK30KKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY3JhdGNoMikKIHsKLSAgICBVTlVTRURfUEFSQU0oaml0KTsKLSAgICBVTlVTRURf
UEFSQU0ob3duZXIpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CiAgICAgQVNTRVJUKG93
bmVyICE9IHNjcmF0Y2gxKTsKICAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOwotICAgIEFT
U0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7CiAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChqaXQsIFdyaXRlQmFycmllckNv
dW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgorICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKGppdCwgb3du
ZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0LnB1c2goR1BSSW5m
bzo6dG9SZWdpc3RlcihpKSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShv
d25lcik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspCisgICAg
ICAgIGppdC5wb3AoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisKKyAgICBkZWZpbml0ZWx5Tm90
TWFya2VkLmxpbmsoJmppdCk7CisgICAgcmV0dXJuIGNhbGw7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRn
ZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY3JhdGNoMikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQogewotICAgIFVO
VVNFRF9QQVJBTShvd25lckdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlR1BSKTsKLSAgICBV
TlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7Ci0gICAg
VU5VU0VEX1BBUkFNKHVzZUtpbmQpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlO
b3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEs
IHNjcmF0Y2gyKTsKKworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcp
OworICAgIGNhbGxPcGVyYXRpb24oZGZnVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgb3duZXJH
UFIpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisKKyNpZm5k
ZWYgTkRFQlVHICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG93bmVyTm90TnVsbCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3duZXJHUFIpOworICAg
IG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICBvd25lck5vdE51bGwubGluaygmbV9qaXQpOworI2Vu
ZGlmCisKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKK30KIAordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVl
R1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sK
ICAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2Uubm9kZSgpKSkKICAgICAgICAgcmV0dXJu
OwogCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVy
OjplbWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVz
ZUtpbmQpKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7CisgICAgaWYgKCFpc0tu
b3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9
IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIp
OworCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2Fs
bE9wZXJhdGlvbihkZmdXcml0ZUJhcnJpZXIsIG93bmVyR1BSLCB2YWx1ZUdQUik7CisgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKworI2lmbmRlZiBOREVCVUcgCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3duZXJOb3ROdWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvd25lckdQUik7CisgICAgbV9qaXQuYnJlYWtwb2lu
dCgpOworICAgIG93bmVyTm90TnVsbC5saW5rKCZtX2ppdCk7CisjZW5kaWYKKworI2lmbmRlZiBO
REVCVUcKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB2YWx1ZU5vdE51bGwgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSKTsKKyAgICBtX2ppdC5i
cmVha3BvaW50KCk7CisgICAgdmFsdWVOb3ROdWxsLmxpbmsoJm1faml0KTsKICNlbmRpZgorCisg
ICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7CisgICAgaWYgKCFpc0tub3duQ2Vs
bCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0Nl
bGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKLSAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0
Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0gICAgCiAgICAgaWYgKEhlYXA6Omlz
TWFya2VkKHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQobV9qaXQsIFdyaXRlQmFy
cmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3du
ZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ1dyaXRlQmFycmllciwgb3du
ZXJHUFIsIHZhbHVlKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcp
OworCisjaWZuZGVmIE5ERUJVRworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG93bmVyTm90TnVs
bCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3duZXJHUFIp
OworICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICBvd25lck5vdE51bGwubGluaygmbV9qaXQp
OwogI2VuZGlmCisKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2
YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJS
ZWcgc2NyYXRjaCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BS
UmVnIHNjcmF0Y2gyKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BB
UkFNKHZhbHVlR1BSKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHVzZUtpbmQpOwotCiAgICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlVXNlLm5vZGUoKSkp
CiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
LSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6
aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxs
OworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RD
ZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0
ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXIsIHNjcmF0Y2gx
LCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVn
KTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ1dyaXRlQmFycmllciwgb3duZXIsIHZhbHVlR1BSKTsK
KyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisjaWZuZGVmIE5E
RUJVRworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHZhbHVlTm90TnVsbCA9IG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIpOworICAgIG1faml0LmJy
ZWFrcG9pbnQoKTsKKyAgICB2YWx1ZU5vdE51bGwubGluaygmbV9qaXQpOwogI2VuZGlmCisKKyAg
ICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKKyAgICBpZiAoIWlzS25vd25DZWxs
KHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2RlKQpAQCAtNDUwNiw2ICs0
NjQxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIAog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0
aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CkBAIC00NTIzLDYgKzQ2NjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNo
R1BSKSk7CiAgICAgICAgIAogICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAg
IGNvcHlXcml0ZUJhcnJpZXIoYmFzZUdQUiwgMCwgMCwgc2NyYXRjaEdQUiwgaW5pdGlhbE91dE9m
TGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpLCBzY3JhdGNoMi5ncHIoKSwgc2NyYXRjaDMu
Z3ByKCkpOwogICAgICAgICAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIsIG5vZGUpOwog
fQpAQCAtNDU1MSw2ICs0Njg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxs
b2NhdGVQcgogICAgIFN0b3JhZ2VPcGVyYW5kIG9sZFN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOwogICAgICAg
ICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIG9sZFN0b3Jh
Z2VHUFIgPSBvbGRTdG9yYWdlLmdwcigpOwpAQCAtNDU3MCw3ICs0NzA5LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgICAgICBtX2ppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjIsIC0ob2Zmc2V0ICsg
c2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKICAgICB9CiAgICAgbV9qaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwotICAgIAorICAgIGNvcHlXcml0ZUJhcnJpZXIoYmFzZUdQ
Uiwgb2xkU3RvcmFnZUdQUiwgb2xkU2l6ZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUsIHNjcmF0Y2hH
UFIxLCBzY3JhdGNoMy5ncHIoKSk7CisKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBu
b2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsMTEgKzMxMSwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgd3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyVXNlS2luZCk7
Ci0KLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQ
UiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIx
ID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7Ci0g
ICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0
ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmll
clVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcpOworICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjb3B5V3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBvd25lciwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1B0ciwg
c2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY29weVdyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBvbGRQdHIsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcgbmV3
UHRyLCBzaXplX3QgbmV3U2l6ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCB3cml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisKKyAg
ICB2b2lkIGNvcHlXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgb2xkUHRyLCBz
aXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1B0ciwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lkIGNvcHlXcml0ZUJhcnJpZXIoR1BSUmVn
IG93bmVyR1BSLCB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcgbmV3UHRyLCBz
aXplX3QgbmV3U2l6ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZv
aWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHZhbHVl
LCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAg
dm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBKU0NlbGwqIHZhbHVlLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lciwgR1BSUmVnIHZhbHVlLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMik7CiAKICAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVn
IHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BS
UmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9
IEludmFsaWRHUFJSZWcpCiAgICAgewpAQCAtNzIwLDcgKzcyNSw3IEBAIHB1YmxpYzoKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQUlJl
ZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNw
aWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKLSAgICB2b2lkIGNhY2hlZFB1dEJ5SWQo
Q29kZU9yaWdpbiwgR1BSUmVnIGJhc2UsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BS
UmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAg
dm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUs
IEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJP
ck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVn
IHJlc3VsdFBheWxvYWRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3Rl
cnNNb2RlID0gTmVlZFRvU3BpbGwpOwogICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2lu
LCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVl
UGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CkBAIC0xMDM0LDYgKzEwMzksMTYgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDUFNQUyBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgc2l6ZV90IGFyZzMsIEdQUlJlZyBhcmc0LCBzaXplX3Qg
YXJnNSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQsIFRydXN0ZWRJbW0zMihhcmc1KSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRUNQU1BTIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIHZvaWQqIGFyZzIsIHNpemVfdCBhcmcz
LCBHUFJSZWcgYXJnNCwgc2l6ZV90IGFyZzUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSwgVHJ1c3RlZElt
bTMyKGFyZzMpLCBhcmc0LCBUcnVzdGVkSW1tMzIoYXJnNSkpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKc3NKc3Mgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CkBAIC0xMDY4
LDYgKzEwODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KKwog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNDSWNm
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSkpOwpAQCAt
MTA4Niw2ICsxMTAyLDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQiBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBKU0Nl
bGwqIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQorCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBKU0NlbGwq
IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoYXJnMSksIGFyZzIpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKworICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aRCBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMpCisgICAgeworICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7Cisg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cisg
ICAgfQorCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlv
bl9XIG9wZXJhdGlvbiwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCkpOwpA
QCAtMTMxNywxMiArMTM1Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aRCBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMpCi0gICAgewot
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJn
Myk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7Ci0gICAgfQotCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB2b2lkKiBw
b2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMTU2
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaywgSGVhcE9wZXJhdGlvbiBvcGVy
YXRpb24+CiBpbmxpbmUgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIo
dm9pZCogcCwgVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya0hvb2smIG1hcmtIb29rKQogewog
ICAgIG1hcmtIb29rLm1hcmsocCk7CkBAIC05MCw3ICs5MCw3IEBAIGlubGluZSB2b2lkIENvbnNl
cnZhdGl2ZVJvb3RzOjpnZW5lcmljQWQKICAgICBtX3Jvb3RzW21fc2l6ZSsrXSA9IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KHApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KK3RlbXBs
YXRlPHR5cGVuYW1lIE1hcmtIb29rLCBIZWFwT3BlcmF0aW9uIG9wZXJhdGlvbj4KIHZvaWQgQ29u
c2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRTcGFuKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIE1h
cmtIb29rJiBtYXJrSG9vaykKIHsKICAgICBpZiAoYmVnaW4gPiBlbmQpIHsKQEAgLTEwNSw3ICsx
MDUsNyBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2CiAKICAgICBU
aW55Qmxvb21GaWx0ZXIgZmlsdGVyID0gbV9ibG9ja3MtPmZpbHRlcigpOyAvLyBNYWtlIGEgbG9j
YWwgY29weSBvZiBmaWx0ZXIgdG8gc2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3QgYWxpYXMsIGFu
ZCBjYW4gYmUgcmVnaXN0ZXItYWxsb2NhdGVkLgogICAgIGZvciAoY2hhcioqIGl0ID0gc3RhdGlj
X2Nhc3Q8Y2hhcioqPihiZWdpbik7IGl0ICE9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsgKytp
dCkKLSAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIsIG1hcmtIb29rKTsKKyAg
ICAgICAgZ2VuZXJpY0FkZFBvaW50ZXI8TWFya0hvb2ssIG9wZXJhdGlvbj4oKml0LCBmaWx0ZXIs
IG1hcmtIb29rKTsKIH0KIAogY2xhc3MgRHVtbXlNYXJrSG9vayB7CkBAIC0xMTUsMTMgKzExNSwy
MSBAQCBwdWJsaWM6CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwg
dm9pZCogZW5kKQogeworICAgIEhlYXBPcGVyYXRpb24gb3BlcmF0aW9uID0gbV9jb3BpZWRTcGFj
ZS0+aGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCk7CiAgICAgRHVtbXlNYXJrSG9vayBkdW1t
eTsKLSAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBkdW1teSk7CisgICAgaWYgKG9wZXJh
dGlvbiA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48RHVtbXlNYXJr
SG9vaywgRnVsbENvbGxlY3Rpb24+KGJlZ2luLCBlbmQsIGR1bW15KTsKKyAgICBlbHNlCisgICAg
ICAgIGdlbmVyaWNBZGRTcGFuPER1bW15TWFya0hvb2ssIEVkZW5Db2xsZWN0aW9uPihiZWdpbiwg
ZW5kLCBkdW1teSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdp
biwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKQogewotICAg
IGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGppdFN0dWJSb3V0aW5lcyk7CisgICAgSGVhcE9w
ZXJhdGlvbiBvcGVyYXRpb24gPSBtX2NvcGllZFNwYWNlLT5oZWFwKCktPm9wZXJhdGlvbkluUHJv
Z3Jlc3MoKTsKKyAgICBpZiAob3BlcmF0aW9uID09IEZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBn
ZW5lcmljQWRkU3BhbjxKSVRTdHViUm91dGluZVNldCwgRnVsbENvbGxlY3Rpb24+KGJlZ2luLCBl
bmQsIGppdFN0dWJSb3V0aW5lcyk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmljQWRkU3BhbjxK
SVRTdHViUm91dGluZVNldCwgRWRlbkNvbGxlY3Rpb24+KGJlZ2luLCBlbmQsIGppdFN0dWJSb3V0
aW5lcyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CkBAIC0xNDcsOCAr
MTU1LDEyIEBAIHByaXZhdGU6CiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoCiAgICAgdm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywg
Q29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQogeworICAgIEhlYXBPcGVyYXRpb24gb3BlcmF0aW9u
ID0gbV9jb3BpZWRTcGFjZS0+aGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCk7CiAgICAgQ29t
cG9zaXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4gbWFya0hvb2so
aml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKLSAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwg
ZW5kLCBtYXJrSG9vayk7CisgICAgaWYgKG9wZXJhdGlvbiA9PSBGdWxsQ29sbGVjdGlvbikKKyAg
ICAgICAgZ2VuZXJpY0FkZFNwYW48Q29tcG9zaXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQs
IENvZGVCbG9ja1NldD4sIEZ1bGxDb2xsZWN0aW9uPihiZWdpbiwgZW5kLCBtYXJrSG9vayk7Cisg
ICAgZWxzZQorICAgICAgICBnZW5lcmljQWRkU3BhbjxDb21wb3NpdGVNYXJrSG9vazxKSVRTdHVi
Um91dGluZVNldCwgQ29kZUJsb2NrU2V0PiwgRWRlbkNvbGxlY3Rpb24+KGJlZ2luLCBlbmQsIG1h
cmtIb29rKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDE1NjExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDEwICs1MywxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHkgPSAxMjg7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25Jbmxp
bmVDYXBhY2l0eSA9IDgxOTIgLyBzaXplb2YoSlNDZWxsKik7CiAgICAgCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWFya0hvb2s+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2ssIEhlYXBP
cGVyYXRpb24+CiAgICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgVGlueUJsb29tRmls
dGVyLCBNYXJrSG9vayYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2ssIEhlYXBPcGVyYXRpb24+CiAgICAgdm9pZCBnZW5l
cmljQWRkU3Bhbih2b2lkKiwgdm9pZCogZW5kLCBNYXJrSG9vayYpOwogICAgIAogICAgIHZvaWQg
Z3JvdygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGZhc3RQYXRoU2hvdWxkU3VjY2VlZChzaXplX3QgYnl0ZXMpIGNvbnN0
OwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91
dFB0cik7CisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKHNpemVf
dCBieXRlcywgdm9pZCoqIG91dFB0cik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0
ZSh2b2lkICpvbGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVzKTsKICAgICB2
b2lkKiBmb3JjZUFsbG9jYXRlKHNpemVfdCBieXRlcyk7CiAgICAgQ29waWVkQmxvY2sqIHJlc2V0
Q3VycmVudEJsb2NrKCk7CkBAIC05Myw2ICs5NCwxNCBAQCBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4g
Q29waWVkQWxsb2NhdG9yOjp0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSBDaGVja2Vk
Qm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyhzaXplX3Qg
Ynl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAgaWYgKCF0cnlBbGxvY2F0ZShieXRlcywgb3V0
UHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fY3VycmVudEJsb2NrLT5yZXBvcnRM
aXZlQnl0ZXNEdXJpbmdDb3B5aW5nKGJ5dGVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogaW5s
aW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5UmVhbGxvY2F0ZSgKICAgICB2
b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVzKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCShyZXZpc2lvbiAxNTYxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NywxMiArNDcsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyBDb3BpZWRCbG9jayog
Y3JlYXRlTm9aZXJvRmlsbChEZWFkQmxvY2sqKTsKIAogICAgIHZvaWQgcGluKCk7CisgICAgdm9p
ZCB1bnBpbigpOwogICAgIGJvb2wgaXNQaW5uZWQoKTsKIAorICAgIGJvb2wgaXNPbGQoKTsKICAg
ICBib29sIGlzT3ZlcnNpemUoKTsKIAogICAgIHVuc2lnbmVkIGxpdmVCeXRlcygpOwogICAgIHZv
aWQgcmVwb3J0TGl2ZUJ5dGVzKEpTQ2VsbCosIENvcHlUb2tlbiwgdW5zaWduZWQpOworICAgIHZv
aWQgcmVwb3J0TGl2ZUJ5dGVzRHVyaW5nV3JpdGVCYXJyaWVyKHVuc2lnbmVkKTsKKyAgICB2b2lk
IHJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcodW5zaWduZWQpOwogICAgIHZvaWQgZGlkU3Vy
dml2ZUdDKCk7CiAgICAgdm9pZCBkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsKICAgICBib29s
IHNob3VsZEV2YWN1YXRlKCk7CkBAIC05NCw3ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PENvcHlXb3JrTGlzdD4gbV93b3JrTGlzdDsKIAogICAgIHNpemVfdCBtX3JlbWFpbmluZzsKLSAg
ICB1aW50cHRyX3QgbV9pc1Bpbm5lZDsKKyAgICBib29sIG1faXNQaW5uZWQgOiAxOworICAgIGJv
b2wgbV9pc09sZCA6IDE7CiAgICAgdW5zaWduZWQgbV9saXZlQnl0ZXM7CiAjaWZuZGVmIE5ERUJV
RwogICAgIHVuc2lnbmVkIG1fbGl2ZU9iamVjdHM7CkBAIC0xMDQsNyArMTA5LDcgQEAgcHJpdmF0
ZToKIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwoRGVh
ZEJsb2NrKiBibG9jaykKIHsKICAgICBSZWdpb24qIHJlZ2lvbiA9IGJsb2NrLT5yZWdpb24oKTsK
LSAgICByZXR1cm4gbmV3KE5vdE51bGwsIGJsb2NrKSBDb3BpZWRCbG9jayhyZWdpb24pOworICAg
IHJldHVybiBuZXcgKE5vdE51bGwsIGJsb2NrKSBDb3BpZWRCbG9jayhyZWdpb24pOwogfQogCiBp
bmxpbmUgQ29waWVkQmxvY2sqIENvcGllZEJsb2NrOjpjcmVhdGUoRGVhZEJsb2NrKiBibG9jaykK
QEAgLTEzMCw2ICsxMzUsNyBAQCBpbmxpbmUgQ29waWVkQmxvY2s6OkNvcGllZEJsb2NrKFJlZ2lv
biogCiAgICAgOiBIZWFwQmxvY2s8Q29waWVkQmxvY2s+KHJlZ2lvbikKICAgICAsIG1fcmVtYWlu
aW5nKHBheWxvYWRDYXBhY2l0eSgpKQogICAgICwgbV9pc1Bpbm5lZChmYWxzZSkKKyAgICAsIG1f
aXNPbGQoZmFsc2UpCiAgICAgLCBtX2xpdmVCeXRlcygwKQogI2lmbmRlZiBOREVCVUcKICAgICAs
IG1fbGl2ZU9iamVjdHMoMCkKQEAgLTE1Niw2ICsxNjIsNyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRC
bG9jazo6ZGlkU3Vydml2ZUdDKCkKIGlubGluZSB2b2lkIENvcGllZEJsb2NrOjpkaWRFdmFjdWF0
ZUJ5dGVzKHVuc2lnbmVkIGJ5dGVzKQogewogICAgIEFTU0VSVChtX2xpdmVCeXRlcyA+PSBieXRl
cyk7CisgICAgQVNTRVJUKG1fbGl2ZU9iamVjdHMpOwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICBtX2xpdmVCeXRlcyAtPSBieXRlczsKICNpZm5kZWYgTkRFQlVHCkBAIC0xNzgsMTYgKzE4
NSwyNyBAQCBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkRXZhY3VhdGUoCiAKIGlubGlu
ZSB2b2lkIENvcGllZEJsb2NrOjpwaW4oKQogeworICAgIG1faXNPbGQgPSB0cnVlOwogICAgIG1f
aXNQaW5uZWQgPSB0cnVlOwogICAgIGlmIChtX3dvcmtMaXN0KQogICAgICAgICBtX3dvcmtMaXN0
LmNsZWFyKCk7CiB9CiAKK2lubGluZSB2b2lkIENvcGllZEJsb2NrOjp1bnBpbigpCit7CisgICAg
bV9pc1Bpbm5lZCA9IGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNQaW5u
ZWQoKQogewogICAgIHJldHVybiBtX2lzUGlubmVkOwogfQogCitpbmxpbmUgYm9vbCBDb3BpZWRC
bG9jazo6aXNPbGQoKQoreworICAgIHJldHVybiBtX2lzT2xkOworfQorCiBpbmxpbmUgYm9vbCBD
b3BpZWRCbG9jazo6aXNPdmVyc2l6ZSgpCiB7CiAgICAgcmV0dXJuIHJlZ2lvbigpLT5pc0N1c3Rv
bVNpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJs
b2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE4
IEBAIGlubGluZSB2b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMKICNpZiBFTkFCTEUo
UEFSQUxMRUxfR0MpCiAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3dvcmtMaXN0TG9jayk7
CiAjZW5kaWYKLSNpZm5kZWYgTkRFQlVHCisKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisjaWZu
ZGVmIE5ERUJVRwogICAgIG1fbGl2ZU9iamVjdHMrKzsKICNlbmRpZgogICAgIG1fbGl2ZUJ5dGVz
ICs9IGJ5dGVzOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBtX2lzT2xkID0gdHJ1ZTsK
KyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7CisKKyAg
ICBpZiAoaXNQaW5uZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFzaG91bGRFdmFj
dWF0ZSgpKSB7CiAgICAgICAgIHBpbigpOwpAQCAtNTMsNiArNjAsMzAgQEAgaW5saW5lIHZvaWQg
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcwogICAgIG1fd29ya0xpc3QtPmFwcGVuZChDb3B5
V29ya2xpc3RJdGVtKG93bmVyLCB0b2tlbikpOwogfQogCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9j
azo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nV3JpdGVCYXJyaWVyKHVuc2lnbmVkIGJ5dGVzKQorewor
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9saXZlT2JqZWN0
cysrOworI2VuZGlmCisgICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7CisgICAgQVNTRVJUKCEhbV9s
aXZlQnl0ZXMgPT0gISFtX2xpdmVPYmplY3RzKTsKKyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPD0g
Q29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7Cit9CisKK2lubGluZSB2b2lkIENvcGllZEJsb2NrOjpy
ZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkIGJ5dGVzKQoreworICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICAvLyBUaGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBsb2NrZWQgYmVj
YXVzZSB0aGUgdGhyZWFkIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbiBvd25zIHRoZSBjdXJyZW50
IGJsb2NrLgorICAgIG1faXNPbGQgPSB0cnVlOworI2lmbmRlZiBOREVCVUcKKyAgICBtX2xpdmVP
YmplY3RzKys7CisjZW5kaWYKKyAgICBtX2xpdmVCeXRlcyArPSBieXRlczsKKyAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDw9IENvcGllZEJsb2NrOjpibG9j
a1NpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIENvcGllZEJsb2Nr
SW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFwKQogICAgIDogbV9oZWFw
KGhlYXApCi0gICAgLCBtX3RvU3BhY2UoMCkKLSAgICAsIG1fZnJvbVNwYWNlKDApCiAgICAgLCBt
X2luQ29weWluZ1BoYXNlKGZhbHNlKQogICAgICwgbV9zaG91bGREb0NvcHlQaGFzZShmYWxzZSkK
ICAgICAsIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MoMCkKQEAgLTQ2LDIwICs0NCwyNCBAQCBDb3Bp
ZWRTcGFjZTo6Q29waWVkU3BhY2UoSGVhcCogaGVhcCkKIAogQ29waWVkU3BhY2U6On5Db3BpZWRT
cGFjZSgpCiB7Ci0gICAgd2hpbGUgKCFtX3RvU3BhY2UtPmlzRW1wdHkoKSkKLSAgICAgICAgbV9o
ZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV90
b1NwYWNlLT5yZW1vdmVIZWFkKCkpKTsKKyAgICB3aGlsZSAoIW1fb2xkR2VuLnRvU3BhY2UtPmlz
RW1wdHkoKSkKKyAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29w
aWVkQmxvY2s6OmRlc3Ryb3kobV9vbGRHZW4udG9TcGFjZS0+cmVtb3ZlSGVhZCgpKSk7CiAKLSAg
ICB3aGlsZSAoIW1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpCi0gICAgICAgIG1faGVhcC0+YmxvY2tB
bGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KG1fZnJvbVNwYWNlLT5y
ZW1vdmVIZWFkKCkpKTsKKyAgICB3aGlsZSAoIW1fb2xkR2VuLmZyb21TcGFjZS0+aXNFbXB0eSgp
KQorICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9j
azo6ZGVzdHJveShtX29sZEdlbi5mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKSkpOwogCi0gICAgd2hp
bGUgKCFtX292ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9oZWFwLT5ibG9ja0Fs
bG9jYXRvcigpLmRlYWxsb2NhdGVDdXN0b21TaXplKENvcGllZEJsb2NrOjpkZXN0cm95KG1fb3Zl
cnNpemVCbG9ja3MucmVtb3ZlSGVhZCgpKSk7CisgICAgd2hpbGUgKCFtX29sZEdlbi5vdmVyc2l6
ZUJsb2Nrcy5pc0VtcHR5KCkpCisgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFs
bG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX29sZEdlbi5vdmVyc2l6ZUJs
b2Nrcy5yZW1vdmVIZWFkKCkpKTsKKworICAgIEFTU0VSVChtX29sZEdlbi50b1NwYWNlLT5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVChtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUKG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSk7CiB9CiAKIHZvaWQgQ29w
aWVkU3BhY2U6OmluaXQoKQogewotICAgIG1fdG9TcGFjZSA9ICZtX2Jsb2NrczE7Ci0gICAgbV9m
cm9tU3BhY2UgPSAmbV9ibG9ja3MyOworICAgIG1fb2xkR2VuLnRvU3BhY2UgPSAmbV9vbGRHZW4u
YmxvY2tzMTsKKyAgICBtX29sZEdlbi5mcm9tU3BhY2UgPSAmbV9vbGRHZW4uYmxvY2tzMjsKICAg
ICAKICAgICBhbGxvY2F0ZUJsb2NrKCk7CiB9ICAgCkBAIC04Myw3ICs4NSw3IEBAIENoZWNrZWRC
b29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZU8KICAgICBBU1NFUlQoaXNPdmVyc2l6ZShi
eXRlcykpOwogICAgIAogICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZEJsb2NrOjpjcmVh
dGUobV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFsbG9jYXRlQ3VzdG9tU2l6ZShzaXplb2YoQ29w
aWVkQmxvY2spICsgYnl0ZXMsIENvcGllZEJsb2NrOjpibG9ja1NpemUpKTsKLSAgICBtX292ZXJz
aXplQmxvY2tzLnB1c2goYmxvY2spOworICAgIG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLnB1c2go
YmxvY2spOwogICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxv
Y2spKTsKICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CiAgICAgCkBAIC0xMzgsNyArMTQwLDcg
QEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdAogCiAgICAgQ29waWVk
QmxvY2sqIG9sZEJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKG9sZFB0cik7CiAgICAgaWYg
KG9sZEJsb2NrLT5pc092ZXJzaXplKCkpIHsKLSAgICAgICAgbV9vdmVyc2l6ZUJsb2Nrcy5yZW1v
dmUob2xkQmxvY2spOworICAgICAgICBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5yZW1vdmUob2xk
QmxvY2spOwogICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShvbGRCbG9jayk7CiAgICAgICAgIG1f
aGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6
ZGVzdHJveShvbGRCbG9jaykpOwogICAgIH0KQEAgLTE2Niw3ICsxNjgsNyBAQCB2b2lkIENvcGll
ZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllCiAKICAgICB7CiAgICAgICAgIFNwaW5Mb2Nr
SG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7Ci0gICAgICAgIG1fdG9TcGFjZS0+cHVzaChi
bG9jayk7CisgICAgICAgIG1fb2xkR2VuLnRvU3BhY2UtPnB1c2goYmxvY2spOwogICAgICAgICBt
X2Jsb2NrU2V0LmFkZChibG9jayk7CiAgICAgICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJw
cmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICB9CkBAIC0xODEsOSArMTgzLDIwIEBAIHZvaWQg
Q29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2soQ29waWUKICAgICB9CiB9CiAKK3ZvaWQgQ29w
aWVkU3BhY2U6OmRpZFN0YXJ0RnVsbENvbGxlY3Rpb24oKQoreworICAgIEFTU0VSVChoZWFwKCkt
Pm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbik7CisgICAgQVNTRVJUKG1f
b2xkR2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9j
ayA9IG1fb2xkR2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQo
KSkKKyAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOworCisgICAgZm9yIChDb3BpZWRCbG9j
ayogYmxvY2sgPSBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9
IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKK30KKwogdm9p
ZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQogewotICAgIHN0ZDo6c3dhcChtX2Zyb21T
cGFjZSwgbV90b1NwYWNlKTsKKyAgICBzdGQ6OnN3YXAobV9vbGRHZW4uZnJvbVNwYWNlLCBtX29s
ZEdlbi50b1NwYWNlKTsKIAogICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKICAgICBtX2FsbG9j
YXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwpAQCAtMTkxLDI2ICsyMDQsMjYgQEAgdm9pZCBDb3Bp
ZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQogICAgIENvcGllZEJsb2NrKiBuZXh0ID0gMDsKICAg
ICBzaXplX3QgdG90YWxMaXZlQnl0ZXMgPSAwOwogICAgIHNpemVfdCB0b3RhbFVzYWJsZUJ5dGVz
ID0gMDsKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fZnJvbVNwYWNlLT5oZWFkKCk7
IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1f
b2xkR2VuLmZyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBuZXh0KSB7CiAgICAgICAg
IG5leHQgPSBibG9jay0+bmV4dCgpOwogICAgICAgICBpZiAoIWJsb2NrLT5pc1Bpbm5lZCgpICYm
IGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpIHsKICAgICAgICAgICAgIHJlY3ljbGVFdmFjdWF0ZWRC
bG9jayhibG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorICAgICAgICBB
U1NFUlQoYmxvY2stPmxpdmVCeXRlcygpIDw9IENvcGllZEJsb2NrOjpibG9ja1NpemUpOwogICAg
ICAgICB0b3RhbExpdmVCeXRlcyArPSBibG9jay0+bGl2ZUJ5dGVzKCk7CiAgICAgICAgIHRvdGFs
VXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwogICAgIH0KIAotICAgIENv
cGllZEJsb2NrKiBibG9jayA9IG1fb3ZlcnNpemVCbG9ja3MuaGVhZCgpOworICAgIENvcGllZEJs
b2NrKiBibG9jayA9IG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsKICAgICB3aGlsZSAo
YmxvY2spIHsKICAgICAgICAgQ29waWVkQmxvY2sqIG5leHQgPSBibG9jay0+bmV4dCgpOwogICAg
ICAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpIHsKICAgICAgICAgICAgIG1fYmxvY2tGaWx0ZXIu
YWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICAgICAgICAgIHRvdGFsTGl2
ZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKICAgICAgICAgICAgIHRvdGFsVXNh
YmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwotICAgICAgICAgICAgYmxvY2st
PmRpZFN1cnZpdmVHQygpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9vdmVyc2l6
ZUJsb2Nrcy5yZW1vdmUoYmxvY2spOworICAgICAgICAgICAgbV9vbGRHZW4ub3ZlcnNpemVCbG9j
a3MucmVtb3ZlKGJsb2NrKTsKICAgICAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsK
ICAgICAgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6
ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9jaykpOwogICAgICAgICB9IApAQCAtMjE5LDcgKzIz
Miw3IEBAIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKIAogICAgIGRvdWJsZSBt
YXJrZWRTcGFjZUJ5dGVzID0gbV9oZWFwLT5vYmplY3RTcGFjZSgpLmNhcGFjaXR5KCk7CiAgICAg
ZG91YmxlIHRvdGFsRnJhZ21lbnRhdGlvbiA9ICgoZG91YmxlKXRvdGFsTGl2ZUJ5dGVzICsgbWFy
a2VkU3BhY2VCeXRlcykgLyAoKGRvdWJsZSl0b3RhbFVzYWJsZUJ5dGVzICsgbWFya2VkU3BhY2VC
eXRlcyk7Ci0gICAgbV9zaG91bGREb0NvcHlQaGFzZSA9IHRvdGFsRnJhZ21lbnRhdGlvbiA8PSBP
cHRpb25zOjptaW5IZWFwVXRpbGl6YXRpb24oKTsKKyAgICBtX3Nob3VsZERvQ29weVBoYXNlID0g
bV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24gJiYgdG90YWxG
cmFnbWVudGF0aW9uIDw9IE9wdGlvbnM6Om1pbkhlYXBVdGlsaXphdGlvbigpOwogICAgIGlmICgh
bV9zaG91bGREb0NvcHlQaGFzZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDAsMjEgKzI1Mywx
OCBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgQVNTRVJUKG1faW5Db3B5
aW5nUGhhc2UgPT0gbV9zaG91bGREb0NvcHlQaGFzZSk7CiAgICAgbV9pbkNvcHlpbmdQaGFzZSA9
IGZhbHNlOwogCi0gICAgd2hpbGUgKCFtX2Zyb21TcGFjZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAg
IENvcGllZEJsb2NrKiBibG9jayA9IG1fZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCk7Ci0gICAgICAg
IC8vIEFsbCBub24tcGlubmVkIGJsb2NrcyBpbiBmcm9tLXNwYWNlIHNob3VsZCBoYXZlIGJlZW4g
cmVjbGFpbWVkIGFzIHRoZXkgd2VyZSBldmFjdWF0ZWQuCi0gICAgICAgIEFTU0VSVChibG9jay0+
aXNQaW5uZWQoKSB8fCAhbV9zaG91bGREb0NvcHlQaGFzZSk7Ci0gICAgICAgIGJsb2NrLT5kaWRT
dXJ2aXZlR0MoKTsKKyAgICB3aGlsZSAoIW1fb2xkR2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKSB7
CisgICAgICAgIENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLmZyb21TcGFjZS0+cmVtb3Zl
SGVhZCgpOwogICAgICAgICAvLyBXZSBkb24ndCBhZGQgdGhlIGJsb2NrIHRvIHRoZSBibG9ja1Nl
dCBiZWNhdXNlIGl0IHdhcyBuZXZlciByZW1vdmVkLgogICAgICAgICBBU1NFUlQobV9ibG9ja1Nl
dC5jb250YWlucyhibG9jaykpOwogICAgICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJl
dF9jYXN0PEJpdHM+KGJsb2NrKSk7Ci0gICAgICAgIG1fdG9TcGFjZS0+cHVzaChibG9jayk7Cisg
ICAgICAgIG1fb2xkR2VuLnRvU3BhY2UtPnB1c2goYmxvY2spOwogICAgIH0KIAotICAgIGlmICgh
bV90b1NwYWNlLT5oZWFkKCkpCisgICAgaWYgKCFtX29sZEdlbi50b1NwYWNlLT5oZWFkKCkpCiAg
ICAgICAgIGFsbG9jYXRlQmxvY2soKTsKICAgICBlbHNlCi0gICAgICAgIG1fYWxsb2NhdG9yLnNl
dEN1cnJlbnRCbG9jayhtX3RvU3BhY2UtPmhlYWQoKSk7CisgICAgICAgIG1fYWxsb2NhdG9yLnNl
dEN1cnJlbnRCbG9jayhtX29sZEdlbi50b1NwYWNlLT5oZWFkKCkpOwogCiAgICAgbV9zaG91bGRE
b0NvcHlQaGFzZSA9IGZhbHNlOwogfQpAQCAtMjYzLDEzICsyNzMsMTMgQEAgc2l6ZV90IENvcGll
ZFNwYWNlOjpzaXplKCkKIHsKICAgICBzaXplX3QgY2FsY3VsYXRlZFNpemUgPSAwOwogCi0gICAg
Zm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX3RvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2Nr
ID0gYmxvY2stPm5leHQoKSkKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2Vu
LnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAg
Y2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKIAotICAgIGZvciAoQ29waWVkQmxvY2sq
IGJsb2NrID0gbV9mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQo
KSkKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLmZyb21TcGFjZS0+aGVh
ZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxhdGVkU2l6
ZSArPSBibG9jay0+c2l6ZSgpOwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX292
ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICBm
b3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsg
YmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0g
YmxvY2stPnNpemUoKTsKIAogICAgIHJldHVybiBjYWxjdWxhdGVkU2l6ZTsKQEAgLTI3OSwxMyAr
Mjg5LDEzIEBAIHNpemVfdCBDb3BpZWRTcGFjZTo6Y2FwYWNpdHkoKQogewogICAgIHNpemVfdCBj
YWxjdWxhdGVkQ2FwYWNpdHkgPSAwOwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBt
X3RvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICBmb3Ig
KENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJs
b2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9IGJsb2Nr
LT5jYXBhY2l0eSgpOwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX2Zyb21TcGFj
ZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgIGZvciAoQ29waWVk
QmxvY2sqIGJsb2NrID0gbV9vbGRHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9
IGJsb2NrLT5uZXh0KCkpCiAgICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSArPSBibG9jay0+Y2Fw
YWNpdHkoKTsKIAotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vdmVyc2l6ZUJsb2Nr
cy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgZm9yIChDb3BpZWRC
bG9jayogYmxvY2sgPSBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9j
ayA9IGJsb2NrLT5uZXh0KCkpCiAgICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSArPSBibG9jay0+
Y2FwYWNpdHkoKTsKIAogICAgIHJldHVybiBjYWxjdWxhdGVkQ2FwYWNpdHk7CkBAIC0zMTEsOSAr
MzIxLDQ5IEBAIHN0YXRpYyBib29sIGlzQmxvY2tMaXN0UGFnZWRPdXQoZG91YmxlIGQKIAogYm9v
bCBDb3BpZWRTcGFjZTo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiB7Ci0gICAgcmV0dXJu
IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fdG9TcGFjZSkgCi0gICAgICAgIHx8IGlz
QmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fZnJvbVNwYWNlKSAKLSAgICAgICAgfHwgaXNC
bG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgJm1fb3ZlcnNpemVCbG9ja3MpOworICAgIHJldHVy
biBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCBtX29sZEdlbi50b1NwYWNlKSAKKyAgICAg
ICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV9vbGRHZW4uZnJvbVNwYWNlKSAK
KyAgICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgJm1fb2xkR2VuLm92ZXJz
aXplQmxvY2tzKTsKK30KKwordm9pZCBDb3BpZWRTcGFjZTo6d2lsbEFiYW5kb25TdG9yYWdlKHZv
aWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm47
CisKKyAgICBDb3BpZWRCbG9jayogb2xkQmxvY2sgPSBibG9ja0ZvcihwdHIpOworCisgICAgaWYg
KG9sZEJsb2NrLT5pc092ZXJzaXplKCkpIHsKKyAgICAgICAgb2xkQmxvY2stPnVucGluKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgYmxvY2sgaXMgb2xkIChpLmUu
IGl0IGhhcyBhbHJlYWR5IGJlZW4gdGhyb3VnaCBhdCBsZWFzdCBvbmUgY29sbGVjdGlvbikKKyAg
ICAvLyB0aGVuIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBieXRlcyB3ZSBhbGxvY2F0ZWQgaGVyZSBw
cmV2aW91c2x5IHNvIHRoYXQgdGhlIGJsb2NrJ3MKKyAgICAvLyBtX2xpdmVCeXRlcyBjb3VudCBy
ZW1haW5zIGFjY3VyYXRlIGFjcm9zcyBFZGVuQ29sbGVjdGlvbnMuIAorICAgIC8vCisgICAgLy8g
QWRkaXRpb25hbGx5LCBpZiB0aGUgYmxvY2sgaXMgdGhlIGJsb2NrIHRoYXQgaXMgY3VycmVudGx5
IGJlaW5nIGFsbG9jYXRlZCBvdXQgb2YsIAorICAgIC8vIHdlIG5lZWQgdG8gc3VidHJhY3QgdGhl
IGJ5dGVzIGZyb20gdGhlIGJsb2NrIGluIGNhc2Ugd2UgZW5kIHVwIHJlYWxsb2MtaW5nIGluIHRo
ZSAKKyAgICAvLyBzYW1lIGJsb2NrLiAKKyAgICBpZiAob2xkQmxvY2stPmlzT2xkKCkgfHwgb2xk
QmxvY2sgPT0gbV9hbGxvY2F0b3IuY3VycmVudEJsb2NrKCkpCisgICAgICAgIG9sZEJsb2NrLT5k
aWRFdmFjdWF0ZUJ5dGVzKGJ5dGVzKTsKK30KKwordm9pZCBDb3BpZWRTcGFjZTo6ZGlkQXNzaWdu
U3RvcmFnZSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQocHRyKTsKKyAg
ICBDb3BpZWRCbG9jayogbmV3QmxvY2sgPSBibG9ja0ZvcihwdHIpOworCisgICAgaWYgKG5ld0Js
b2NrLT5pc092ZXJzaXplKCkpIHsKKyAgICAgICAgbmV3QmxvY2stPnBpbigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBub3RpZnkgdGhlIGJsb2NrIG9mIGFk
ZGl0aW9uYWwgbGl2ZSBieXRlcyBpbiBjYXNlIG91ciBuZXh0IGNvbGxlY3Rpb24gCisgICAgLy8g
aXMgYW4gRWRlbkNvbGxlY3Rpb24uIFRoaXMgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVu
IGFzc2lnbmluZyBDb3BpZWRTcGFjZQorICAgIC8vIGFsbG9jYXRpb25zIHRvIG9sZC1nZW5lcmF0
aW9uIG9iamVjdHMsIGJlY2F1c2Ugd2Ugd29uJ3QgcmVwb3J0IHRoZXNlIG5ldyBieXRlcyBpbiB0
aGUgCisgICAgLy8gQ29waWVkQmxvY2sgZHVyaW5nIG1hcmtpbmcgb2YgYW4gRWRlbkNvbGxlY3Rp
b24uCisgICAgbmV3QmxvY2stPnJlcG9ydExpdmVCeXRlc0R1cmluZ1dyaXRlQmFycmllcihieXRl
cyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRTcGFjZS5oCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw4IEBA
IHB1YmxpYzoKICAgICAKICAgICBDb3BpZWRBbGxvY2F0b3ImIGFsbG9jYXRvcigpIHsgcmV0dXJu
IG1fYWxsb2NhdG9yOyB9CiAKKyAgICB2b2lkIGRpZFN0YXJ0RnVsbENvbGxlY3Rpb24oKTsKKwog
ICAgIHZvaWQgc3RhcnRlZENvcHlpbmcoKTsKICAgICB2b2lkIGRvbmVDb3B5aW5nKCk7CiAgICAg
Ym9vbCBpc0luQ29weVBoYXNlKCkgeyByZXR1cm4gbV9pbkNvcHlpbmdQaGFzZTsgfQpAQCAtODAs
NiArODIsMTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBibG9ja0Zvcih2
b2lkKik7CiAKKyAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwOyB9CisKKyAg
ICB2b2lkIGNvcHlXcml0ZUJhcnJpZXIodm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSk7Cisg
ICAgdm9pZCB3aWxsQWJhbmRvblN0b3JhZ2Uodm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSk7
CisgICAgdm9pZCBkaWRBc3NpZ25TdG9yYWdlKHZvaWQqIG5ld1B0ciwgc2l6ZV90IG5ld1NpemUp
OworCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzT3ZlcnNpemUoc2l6ZV90KTsKIApAQCAt
MTAzLDEyICsxMTEsMjMgQEAgcHJpdmF0ZToKIAogICAgIFNwaW5Mb2NrIG1fdG9TcGFjZUxvY2s7
CiAKLSAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogbV90b1NwYWNlOwotICAgIERv
dWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBtX2Zyb21TcGFjZTsKLSAgICAKLSAgICBEb3Vi
bHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBtX2Jsb2NrczE7Ci0gICAgRG91Ymx5TGlua2VkTGlz
dDxDb3BpZWRCbG9jaz4gbV9ibG9ja3MyOwotICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxv
Y2s+IG1fb3ZlcnNpemVCbG9ja3M7CisgICAgc3RydWN0IENvcGllZEdlbmVyYXRpb24geworICAg
ICAgICBDb3BpZWRHZW5lcmF0aW9uKCkKKyAgICAgICAgICAgIDogdG9TcGFjZSgwKQorICAgICAg
ICAgICAgLCBmcm9tU3BhY2UoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRG91
Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIHRvU3BhY2U7CisgICAgICAgIERvdWJseUxpbmtl
ZExpc3Q8Q29waWVkQmxvY2s+KiBmcm9tU3BhY2U7CisgICAgICAgIAorICAgICAgICBEb3VibHlM
aW5rZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MxOworICAgICAgICBEb3VibHlMaW5rZWRMaXN0
PENvcGllZEJsb2NrPiBibG9ja3MyOworICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJs
b2NrPiBvdmVyc2l6ZUJsb2NrczsKKyAgICB9OworCisgICAgQ29waWVkR2VuZXJhdGlvbiBtX29s
ZEdlbjsKKyAgICAvL0NvcGllZEdlbmVyYXRpb24gbV9uZXdHZW47CiAgICAKICAgICBib29sIG1f
aW5Db3B5aW5nUGhhc2U7CiAgICAgYm9vbCBtX3Nob3VsZERvQ29weVBoYXNlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlz
aW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgaW5saW5lIHZvaWQgQ29w
aWVkU3BhY2U6OnJlY3ljbGVFdmFjdWF0ZQogICAgIHsKICAgICAgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2sp
OwotICAgICAgICBtX2Zyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgbV9vbGRHZW4u
ZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOwogICAgIH0KICAgICBtX2hlYXAtPmJsb2NrQWxsb2Nh
dG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9jaykpOwogfQpAQCAtMTQx
LDcgKzE0MSw3IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKICAg
ICAKICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlKG1faGVhcC0+
YmxvY2tBbGxvY2F0b3IoKS5hbGxvY2F0ZTxDb3BpZWRCbG9jaz4oKSk7CiAgICAgICAgIAotICAg
IG1fdG9TcGFjZS0+cHVzaChibG9jayk7CisgICAgbV9vbGRHZW4udG9TcGFjZS0+cHVzaChibG9j
ayk7CiAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykp
OwogICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKICAgICBtX2FsbG9jYXRvci5zZXRDdXJyZW50
QmxvY2soYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0
b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
eVZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1
NSw3IEBAIGlubGluZSBib29sIENvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ28KIGlubGluZSB2
b2lkKiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZShzaXplX3QgYnl0ZXMpCiB7CiAgICAg
dm9pZCogcmVzdWx0ID0gMDsgLy8gQ29tcGlsZXJzIGRvbid0IHJlYWxpemUgdGhhdCB0aGlzIHdp
bGwgYmUgYXNzaWduZWQuCi0gICAgaWYgKExJS0VMWShtX2NvcGllZEFsbG9jYXRvci50cnlBbGxv
Y2F0ZShieXRlcywgJnJlc3VsdCkpKQorICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3Iu
dHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKGJ5dGVzLCAmcmVzdWx0KSkpCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgCiAgICAgcmVzdWx0ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0ZXMp
OwpAQCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3
U3BhCiAgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG5ld0Jsb2NrKTsKIAog
ICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IG1f
Y29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KTsKKyAgICBDaGVja2Vk
Qm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGVEdXJpbmdD
b3B5aW5nKGJ5dGVzLCAmcmVzdWx0KTsKICAgICBBU1NFUlQoZGlkU3VjY2VlZCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgeyAKIHN0YXRpYyBjb25zdCBz
aXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ug
d2VicGFnZS4KIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxIZWFwU2l6ZSA9IDEgKiBNQjsgLy8g
TWF0Y2hlcyB0aGUgRmFzdE1hbGxvYyBwZXItdGhyZWFkIGNhY2hlLgogCi0jZGVmaW5lIEVOQUJM
RV9HQ19MT0dHSU5HIDAKKyNkZWZpbmUgRU5BQkxFX0dDX0xPR0dJTkcgMQogCiAjaWYgRU5BQkxF
KEdDX0xPR0dJTkcpCiAjaWYgQ09NUElMRVIoQ0xBTkcpCkBAIC0xNTIsNiArMTUyLDEwIEBAIHN0
cnVjdCBHQ0NvdW50ZXIgewogI2RlZmluZSBHQ0NPVU5URVIobmFtZSwgdmFsdWUpIGRvIHsgfSB3
aGlsZSAoZmFsc2UpCiAjZW5kaWYKIAorI3VuZGVmIEVOQUJMRV9HQ19MT0dHSU5HCisKKyNkZWZp
bmUgRU5BQkxFX0dFTkVSQVRJT05BTF9DT0xMRUNUT1IgMQorCiBzdGF0aWMgaW5saW5lIHNpemVf
dCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlwZSwgc2l6ZV90IHJhbVNpemUpCiB7CiAgICAg
aWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkKQEAgLTE2Myw3ICsxNjcsMTEgQEAgc3RhdGljIGlu
bGluZSBzaXplX3QgcHJvcG9ydGlvbmFsSGVhcFNpegogewogICAgIC8vIFRyeSB0byBzdGF5IHVu
ZGVyIDEvMiBSQU0gc2l6ZSB0byBsZWF2ZSByb29tIGZvciB0aGUgRE9NLCByZW5kZXJpbmcsIG5l
dHdvcmtpbmcsIGV0Yy4KICAgICBpZiAoaGVhcFNpemUgPCByYW1TaXplIC8gNCkKKyNpZiBFTkFC
TEUoR0VORVJBVElPTkFMX0NPTExFQ1RPUikKKyAgICAgICAgcmV0dXJuIDMgKiBoZWFwU2l6ZTsK
KyNlbHNlCiAgICAgICAgIHJldHVybiAyICogaGVhcFNpemU7CisjZW5kaWYKICAgICBpZiAoaGVh
cFNpemUgPCByYW1TaXplIC8gMikKICAgICAgICAgcmV0dXJuIDEuNSAqIGhlYXBTaXplOwogICAg
IHJldHVybiAxLjI1ICogaGVhcFNpemU7CkBAIC0yNTEsOSArMjU5LDEwIEBAIEhlYXA6OkhlYXAo
Vk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fcmFtU2l6ZShyYW1TaXplKCkpCiAg
ICAgLCBtX21pbkJ5dGVzUGVyQ3ljbGUobWluSGVhcFNpemUobV9oZWFwVHlwZSwgbV9yYW1TaXpl
KSkKICAgICAsIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QoMCkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0
ZWRMaW1pdChtX21pbkJ5dGVzUGVyQ3ljbGUpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkKDApCi0g
ICAgLCBtX2J5dGVzQWJhbmRvbmVkKDApCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
KDApCisgICAgLCBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlKDApCisgICAgLCBtX2Z1bGxDb2xs
ZWN0VGhyZXNob2xkKG1fbWluQnl0ZXNQZXJDeWNsZSkKKyAgICAsIG1fY29sbGVjdFRocmVzaG9s
ZCgwLjEgKiBtX2Z1bGxDb2xsZWN0VGhyZXNob2xkKQogICAgICwgbV90b3RhbEJ5dGVzVmlzaXRl
ZCgwKQogICAgICwgbV90b3RhbEJ5dGVzQ29waWVkKDApCiAgICAgLCBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MoTm9PcGVyYXRpb24pCkBAIC0zMzMsOCArMzQyLDggQEAgdm9pZCBIZWFwOjpyZXBvcnRB
YmFuZG9uZWRPYmplY3RHcmFwaCgpCiAKIHZvaWQgSGVhcDo6ZGlkQWJhbmRvbihzaXplX3QgYnl0
ZXMpCiB7Ci0gICAgbV9hY3Rpdml0eUNhbGxiYWNrLT5kaWRBbGxvY2F0ZShtX2J5dGVzQWxsb2Nh
dGVkICsgbV9ieXRlc0FiYW5kb25lZCk7Ci0gICAgbV9ieXRlc0FiYW5kb25lZCArPSBieXRlczsK
KyAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgKyBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlKTsKKyAgICBtX2J5dGVzQWJhbmRvbmVk
VGhpc0N5Y2xlICs9IGJ5dGVzOwogfQogCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQpA
QCAtNDg3LDYgKzQ5NiwxNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgdmlzaXRvci5z
ZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IodmlzaXRvcik7CiAK
KyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAg
ICAgIEdDUEhBU0UoQWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVUb1JlbWVtYmVyZWRTZXQpOwor
ICAgICAgICAvLyBXZSBuZWVkIHRvIHJlLXByb2Nlc3MgYWxsIG9sZC1nZW5lcmF0aW9uIGV4ZWN1
dGFibGVzIHNvIHRoYXQgdGhleQorICAgICAgICAvLyB1cGRhdGUgdGhlaXIgQ29kZUJsb2Nrcy4K
KyAgICAgICAgYWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9SZW1lbWJlcmVkU2V0KCk7Cisg
ICAgfQorCisgICAgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+IHJlbWVtYmVyZWRTZXQobV9zbG90Vmlz
aXRvci5tYXJrU3RhY2soKS5zaXplKCkpOworICAgIG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCku
ZmlsbFZlY3RvcihyZW1lbWJlcmVkU2V0KTsKKwogICAgIHsKICAgICAgICAgUGFyYWxsZWxNb2Rl
RW5hYmxlciBlbmFibGVyKHZpc2l0b3IpOwogCkBAIC01OTAsNiArNjA5LDE3IEBAIHZvaWQgSGVh
cDo6bWFya1Jvb3RzKCkKICAgICAgICAgfQogICAgIH0KIAorICAgIHsKKyAgICAgICAgR0NQSEFT
RShDbGVhclJlbWVtYmVyZWRTZXQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVtZW1iZXJlZFNldC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgSlNDZWxsKiBj
ZWxsID0gcmVtZW1iZXJlZFNldFtpXTsKKyAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpibG9ja0Zv
cihjZWxsKS0+Y2xlYXJSZW1lbWJlcmVkKGNlbGwpOworICAgICAgICB9CisvKgorICAgICAgICBt
X29iamVjdFNwYWNlLmNsZWFyUmVtZW1iZXJlZFNldCgpOworKi8KKyAgICB9CisKICAgICBHQ0NP
VU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAogICAgIG1f
c2hhcmVkRGF0YS5kaWRGaW5pc2hNYXJraW5nKCk7CkBAIC02MDEsOCArNjMxLDE0IEBAIHZvaWQg
SGVhcDo6bWFya1Jvb3RzKCkKICAgICBNQVJLX0xPR19NRVNTQUdFMigiXG5OdW1iZXIgb2YgbGl2
ZSBPYmplY3RzIGFmdGVyIGZ1bGwgR0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgdmlzaXRDb3Vu
dCwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGdjU3RhcnRUaW1lKTsKICNl
bmRpZgogCi0gICAgbV90b3RhbEJ5dGVzVmlzaXRlZCA9IHZpc2l0b3IuYnl0ZXNWaXNpdGVkKCk7
Ci0gICAgbV90b3RhbEJ5dGVzQ29waWVkID0gdmlzaXRvci5ieXRlc0NvcGllZCgpOworICAgIGlm
IChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24pIHsKKyAgICAgICAgbV90
b3RhbEJ5dGVzVmlzaXRlZCArPSB2aXNpdG9yLmJ5dGVzVmlzaXRlZCgpOworICAgICAgICBtX3Rv
dGFsQnl0ZXNDb3BpZWQgKz0gdmlzaXRvci5ieXRlc0NvcGllZCgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pOwor
ICAgICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0gdmlzaXRvci5ieXRlc1Zpc2l0ZWQoKTsKKyAg
ICAgICAgbV90b3RhbEJ5dGVzQ29waWVkID0gdmlzaXRvci5ieXRlc0NvcGllZCgpOworICAgIH0K
ICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgbV90b3RhbEJ5dGVzVmlzaXRlZCArPSBtX3No
YXJlZERhdGEuY2hpbGRCeXRlc1Zpc2l0ZWQoKTsKICAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgKz0g
bV9zaGFyZWREYXRhLmNoaWxkQnl0ZXNDb3BpZWQoKTsKQEAgLTcyMywxMSArNzU5LDM0IEBAIHZv
aWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQogICAgIG1faml0U3R1YlJvdXRp
bmVzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwogfQogCit2b2lkIEhl
YXA6OmFkZE9sZEdlbmVyYXRpb25FeGVjdXRhYmxlc1RvUmVtZW1iZXJlZFNldCgpCit7CisgICAg
QVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbik7CisgICAgZm9y
IChFeGVjdXRhYmxlQmFzZSogY3VycmVudCA9IG1fY29tcGlsZWRDb2RlLmhlYWQoKTsgY3VycmVu
dDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkgeworICAgICAgICBpZiAoaXNNYXJrZWQoY3Vy
cmVudCkpCisgICAgICAgICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoY3VycmVudCk7CisgICAgfQor
fQorCit2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlbGwqIGNlbGwpCit7
CisgICAgQVNTRVJUKGNlbGwpOworICAgIEFTU0VSVCghT3B0aW9uczo6ZW5hYmxlQ29uY3VycmVu
dEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChpc01hcmtlZChj
ZWxsKSk7CisgICAgaWYgKGlzSW5SZW1lbWJlcmVkU2V0KGNlbGwpKQorICAgICAgICByZXR1cm47
CisgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRSZW1lbWJlcmVkKGNlbGwpOwor
I2lmIEVOQUJMRShHRU5FUkFUSU9OQUxfQ09MTEVDVE9SKQorICAgIC8vZGF0YUxvZ0YoIkFkZGVk
ICVwIHRvIHJlbWVtYmVyZWQgc2V0XG4iLCBjZWxsKTsKKyAgICBtX3Nsb3RWaXNpdG9yLnVuY29u
ZGl0aW9uYWxseUFwcGVuZChjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKyNlbmRpZgorfQor
CiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKIHsKICAgICBpZiAoIW1faXNTYWZlVG9D
b2xsZWN0KQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBjb2xsZWN0KERvU3dlZXApOwog
fQogCkBAIC03NTgsOCArODE3LDI2IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBz
d2VlcFRvZ2cKICAgICBtX2RlZmVycmFsRGVwdGgrKzsgLy8gTWFrZSBzdXJlIHRoYXQgd2UgZG9u
J3QgR0MgaW4gdGhpcyBjYWxsLgogICAgIG1fdm0tPnByZXBhcmVUb0Rpc2NhcmRDb2RlKCk7CiAg
ICAgbV9kZWZlcnJhbERlcHRoLS07IC8vIERlY3JlbWVudCBkZWZlcmFsIG1hbnVhbGx5LCBzbyB3
ZSBkb24ndCBHQyB3aGVuIHdlIGRvIHNvLCBzaW5jZSB3ZSBhcmUgYWxyZWFkeSBHQ2luZyEuCi0g
ICAgCi0gICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKKyAgCisgICAgZGF0
YUxvZ0YoImJ5dGVzIGFsbG9jYXRlZCB0aGlzIGN5Y2xlOiAlbHVcbiIsIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGUpOworICAgIGRhdGFMb2dGKCJzaXplIGFmdGVyIGxhc3QgY29sbGVjdDogJWx1
XG4iLCBtX3NpemVBZnRlckxhc3RDb2xsZWN0KTsKKyAgICBkYXRhTG9nRigiY29sbGVjdCB0aHJl
c2hvbGQ6ICVsdVxuIiwgbV9jb2xsZWN0VGhyZXNob2xkKTsgCisgICAgZGF0YUxvZ0YoImZ1bGwg
Y29sbGVjdCB0aHJlc2hvbGQ6ICVsdVxuIiwgbV9mdWxsQ29sbGVjdFRocmVzaG9sZCk7CisgICAg
Ym9vbCBpc0Z1bGxDb2xsZWN0aW9uID0gKG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgKyBtX3Np
emVBZnRlckxhc3RDb2xsZWN0ID4gbV9mdWxsQ29sbGVjdFRocmVzaG9sZCkgfHwgc3dlZXBUb2dn
bGUgPT0gRG9Td2VlcDsKKyAgICBpZiAoaXNGdWxsQ29sbGVjdGlvbikgeworICAgICAgICBtX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPSBGdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgbV9zbG90VmlzaXRv
ci5jbGVhck1hcmtTdGFjaygpOworICAgICAgICBkYXRhTG9nRigiRnVsbENvbGxlY3Rpb25cbiIp
OworICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKEdFTkVSQVRJT05BTF9DT0xMRUNUT1IpCisgICAg
ICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEVkZW5Db2xsZWN0aW9uOworICAgICAgICBkYXRh
TG9nRigiRWRlbkNvbGxlY3Rpb25cbiIpOworI2Vsc2UKKyAgICAgICAgbV9vcGVyYXRpb25JblBy
b2dyZXNzID0gRnVsbENvbGxlY3Rpb247CisgICAgICAgIG1fc2xvdFZpc2l0b3IuY2xlYXJNYXJr
U3RhY2soKTsKKyAgICAgICAgZGF0YUxvZ0YoIkZ1bGxDb2xsZWN0aW9uXG4iKTsKKyNlbmRpZgor
ICAgIH0KICAgICBtX2V4dHJhTWVtb3J5VXNhZ2UgPSAwOwogCiAgICAgbV9hY3Rpdml0eUNhbGxi
YWNrLT53aWxsQ29sbGVjdCgpOwpAQCAtNzczLDYgKzg1MCw4IEBAIHZvaWQgSGVhcDo6Y29sbGVj
dChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB7CiAgICAgICAgIEdDUEhBU0UoU3RvcEFsbG9j
YXRpb24pOwogICAgICAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgICAg
IGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgICAg
ICBtX3N0b3JhZ2VTcGFjZS5kaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCk7CiAgICAgfQogCiAgICAg
bWFya1Jvb3RzKCk7CkBAIC03ODksNyArODY4LDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBtX2FycmF5QnVmZmVycy5zd2VlcCgpOwogICAgIH0K
IAotICAgIHsKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9u
KSB7CiAgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3Mo
KS5zZXQoKS5zaXplKCkpOwogICAgICAgICBNYXJrZWRCbG9ja1NuYXBzaG90RnVuY3RvciBmdW5j
dG9yKG1fYmxvY2tTbmFwc2hvdCk7CiAgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaEJsb2Nr
KGZ1bmN0b3IpOwpAQCAtODE5LDggKzg5OCwxMCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBU
b2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIG1fb2JqZWN0U3BhY2Uuc2hyaW5rKCk7CiAgICAgfQog
Ci0gICAgbV9zd2VlcGVyLT5zdGFydFN3ZWVwaW5nKG1fYmxvY2tTbmFwc2hvdCk7Ci0gICAgbV9i
eXRlc0FiYW5kb25lZCA9IDA7CisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxs
Q29sbGVjdGlvbikKKyAgICAgICAgbV9zd2VlcGVyLT5zdGFydFN3ZWVwaW5nKG1fYmxvY2tTbmFw
c2hvdCk7CisKKyAgICBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlID0gMDsKIAogICAgIHsKICAg
ICAgICAgR0NQSEFTRShSZXNldEFsbG9jYXRvcnMpOwpAQCAtODMxLDIxICs5MTIsNDYgQEAgdm9p
ZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIGlmIChPcHRpb25zOjpn
Y01heEhlYXBTaXplKCkgJiYgY3VycmVudEhlYXBTaXplID4gT3B0aW9uczo6Z2NNYXhIZWFwU2l6
ZSgpKQogICAgICAgICBIZWFwU3RhdGlzdGljczo6ZXhpdFdpdGhGYWlsdXJlKCk7CiAKLSAgICBt
X3NpemVBZnRlckxhc3RDb2xsZWN0ID0gY3VycmVudEhlYXBTaXplOworICAgIHNpemVfdCBvbGRD
b2xsZWN0VGhyZXNob2xkID0gbV9jb2xsZWN0VGhyZXNob2xkOworICAgIG1fY29sbGVjdFRocmVz
aG9sZCA9IDAuMSAqIGN1cnJlbnRIZWFwU2l6ZTsKKyAgICBpZiAoY3VycmVudEhlYXBTaXplID4g
bV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCkKKyAgICAgICAgbV9jb2xsZWN0VGhyZXNob2xkID0gbWF4
KG1fY29sbGVjdFRocmVzaG9sZCwgY3VycmVudEhlYXBTaXplIC0gbV9zaXplQWZ0ZXJMYXN0Q29s
bGVjdCk7CisgICAgbV9jb2xsZWN0VGhyZXNob2xkID0gbWF4KG1fY29sbGVjdFRocmVzaG9sZCwg
c2l6ZV90KG9sZENvbGxlY3RUaHJlc2hvbGQgKiAoMi4wIC8gMy4wKSkpOworICAgIG1fY29sbGVj
dFRocmVzaG9sZCA9IG1heChtX2NvbGxlY3RUaHJlc2hvbGQsIHNpemVfdCgwLjEgKiBtX21pbkJ5
dGVzUGVyQ3ljbGUpKTsKKworICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENv
bGxlY3Rpb24pCisgICAgICAgIG1fZnVsbENvbGxlY3RUaHJlc2hvbGQgPSAzICogY3VycmVudEhl
YXBTaXplOworLyoKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0
aW9uKSB7CisgICAgICAgIC8vIFRvIGF2b2lkIHBhdGhvbG9naWNhbCBHQyBjaHVybiBpbiB2ZXJ5
IHNtYWxsIGFuZCB2ZXJ5IGxhcmdlIGhlYXBzLCB3ZSBzZXQKKyAgICAgICAgLy8gdGhlIG5ldyBh
bGxvY2F0aW9uIGxpbWl0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAsIHdp
dGggYQorICAgICAgICAvLyBmaXhlZCBtaW5pbXVtLgorICAgICAgICBtX21heEhlYXBTaXplID0g
bWF4KG1pbkhlYXBTaXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSksIHByb3BvcnRpb25hbEhlYXBT
aXplKGN1cnJlbnRIZWFwU2l6ZSwgbV9yYW1TaXplKSk7CisgICAgICAgIG1fbWF4RWRlblNpemUg
PSBtX21heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgIH0gZWxzZSB7CisgICAgICAg
IEFTU0VSVChjdXJyZW50SGVhcFNpemUgPj0gbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCk7CisgICAg
ICAgIG1fbWF4RWRlblNpemUgPSBtX21heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAg
ICAgICBpZiAoKGRvdWJsZSltX21heEVkZW5TaXplIC8gKGRvdWJsZSltX21heEhlYXBTaXplIDwg
KDEuMCAvIDMuMCkpCisgICAgICAgICAgICBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24gPSB0cnVl
OworICAgICAgICBtX21heEhlYXBTaXplICs9IGN1cnJlbnRIZWFwU2l6ZSAtIG1fc2l6ZUFmdGVy
TGFzdENvbGxlY3Q7CisgICAgICAgIG1fbWF4RWRlblNpemUgPSBtX21heEhlYXBTaXplIC0gY3Vy
cmVudEhlYXBTaXplOworICAgIH0KKyNpZiAhRU5BQkxFKEdFTkVSQVRJT05BTF9DT0xMRUNUT1Ip
CisgICAgbV9tYXhFZGVuU2l6ZSA9IG1fbWF4SGVhcFNpemU7CisjZW5kaWYKIAotICAgIC8vIFRv
IGF2b2lkIHBhdGhvbG9naWNhbCBHQyBjaHVybiBpbiB2ZXJ5IHNtYWxsIGFuZCB2ZXJ5IGxhcmdl
IGhlYXBzLCB3ZSBzZXQKLSAgICAvLyB0aGUgbmV3IGFsbG9jYXRpb24gbGltaXQgYmFzZWQgb24g
dGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgaGVhcCwgd2l0aCBhCi0gICAgLy8gZml4ZWQgbWluaW11
bS4KLSAgICBzaXplX3QgbWF4SGVhcFNpemUgPSBtYXgobWluSGVhcFNpemUobV9oZWFwVHlwZSwg
bV9yYW1TaXplKSwgcHJvcG9ydGlvbmFsSGVhcFNpemUoY3VycmVudEhlYXBTaXplLCBtX3JhbVNp
emUpKTsKLSAgICBtX2J5dGVzQWxsb2NhdGVkTGltaXQgPSBtYXhIZWFwU2l6ZSAtIGN1cnJlbnRI
ZWFwU2l6ZTsKKyAgICBkYXRhTG9nRigic2l6ZSBvZiBlZGVuOiAlbHUgYnl0ZXNcbiIsIG1fbWF4
RWRlblNpemUpOworKi8KIAotICAgIG1fYnl0ZXNBbGxvY2F0ZWQgPSAwOworICAgIG1fc2l6ZUFm
dGVyTGFzdENvbGxlY3QgPSBjdXJyZW50SGVhcFNpemU7CisKKyAgICBtX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlID0gMDsKICAgICBkb3VibGUgbGFzdEdDRW5kVGltZSA9IFdURjo6bW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgbV9sYXN0R0NMZW5ndGggPSBsYXN0R0NFbmRUaW1l
IC0gbGFzdEdDU3RhcnRUaW1lOwogCiAgICAgaWYgKE9wdGlvbnM6OnJlY29yZEdDUGF1c2VUaW1l
cygpKQogICAgICAgICBIZWFwU3RhdGlzdGljczo6cmVjb3JkR0NQYXVzZVRpbWUobGFzdEdDU3Rh
cnRUaW1lLCBsYXN0R0NFbmRUaW1lKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPT0gQ29sbGVjdGlvbik7CisgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25J
blByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBG
dWxsQ29sbGVjdGlvbik7CiAKICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlv
bjsKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKQEAgLTg2MywxMCArOTY5LDYgQEAgdm9p
ZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBkb3VibGUgYWZ0
ZXIgPSBjdXJyZW50VGltZU1TKCk7CiAgICAgICAgIGRhdGFMb2coYWZ0ZXIgLSBiZWZvcmUsICIg
bXMsICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICIga2JdXG4iKTsKICAgICB9Ci0KLSNpZiBF
TkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQotICAgIGRhdGFMb2dGKCJKU0MgR0MgZmluaXNoaW5n
IGNvbGxlY3Rpb24uXG4iKTsKLSNlbmRpZgogfQogCiBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKQpAQCAtODc2LDcgKzk3OCw3IEBAIGJvb2wgSGVhcDo6Y29sbGVjdElmTmVj
ZXNzYXJ5T3JEZWZlcigpCiAgICAgCiAgICAgaWYgKCFzaG91bGRDb2xsZWN0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGNvbGxlY3QoRG9Ob3RTd2VlcCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC05MDksOCArMTAxMSw4IEBAIHZvaWQgSGVhcDo6c2V0R2FyYmFnZUNv
bGxlY3Rpb25UaW1lckVuYWIKIAogdm9pZCBIZWFwOjpkaWRBbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CiB7Ci0gICAgbV9hY3Rpdml0eUNhbGxiYWNrLT5kaWRBbGxvY2F0ZShtX2J5dGVzQWxsb2NhdGVk
ICsgbV9ieXRlc0FiYW5kb25lZCk7Ci0gICAgbV9ieXRlc0FsbG9jYXRlZCArPSBieXRlczsKKyAg
ICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUgKyBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlKTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlICs9IGJ5dGVzOwogfQogCiBib29sIEhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKHNpemVf
dCkKQEAgLTk4Nyw0ICsxMDg5LDQxIEBAIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0
aEFuZEdDSWYKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKK3ZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSkKK3sKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0xPT0tTX1ZBTElEKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOworICAgIGlmICghZnJv
bSB8fCAhaXNNYXJrZWQoZnJvbSkpCisgICAgICAgIHJldHVybjsKKyAgICBIZWFwOjpoZWFwKGZy
b20pLT5hZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7Cit9CisKK3ZvaWQgSGVhcDo6d2lsbEFiYW5k
b25TdG9yYWdlKGNvbnN0IEpTQ2VsbCogY2VsbCwgdm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7
CisgICAgaWYgKCFjZWxsIHx8ICFpc01hcmtlZChjZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fc3RvcmFnZVNwYWNlLndpbGxBYmFuZG9uU3RvcmFnZShwdHIsIGJ5dGVzKTsKK30KKwordm9p
ZCBIZWFwOjpkaWRBc3NpZ25TdG9yYWdlKGNvbnN0IEpTQ2VsbCogY2VsbCwgdm9pZCogcHRyLCBz
aXplX3QgYnl0ZXMpCit7CisgICAgaWYgKCFjZWxsIHx8ICFpc01hcmtlZChjZWxsKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fc3RvcmFnZVNwYWNlLmRpZEFzc2lnblN0b3JhZ2UocHRyLCBieXRl
cyk7Cit9CisKK3ZvaWQgSGVhcDo6Y29weVdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20s
IHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUsIHZvaWQqIG5ld1B0ciwgc2l6ZV90IG5ld1Np
emUpCit7CisgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChjb25zdF9jYXN0PEpTQ2Vs
bCo+KGZyb20pKTsKKworICAgIGlmICghZnJvbSB8fCAhaXNNYXJrZWQoZnJvbSkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIW5ld1B0cikgeworICAgICAgICBBU1NFUlQoIW5ld1NpemUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKGZyb20p
OworICAgIGhlYXAtPm1fc3RvcmFnZVNwYWNlLndpbGxBYmFuZG9uU3RvcmFnZShvbGRQdHIsIG9s
ZFNpemUpOworICAgIGhlYXAtPm1fc3RvcmFnZVNwYWNlLmRpZEFzc2lnblN0b3JhZ2UobmV3UHRy
LCBuZXdTaXplKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEwICs5MiwyMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAKKyAgICAgICAg
dm9pZCBhZGRPbGRHZW5lcmF0aW9uRXhlY3V0YWJsZXNUb1JlbWVtYmVyZWRTZXQoKTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxs
Kik7CisgICAgICAgIGJvb2wgaXNJblJlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKiBjZWxsKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY2VsbCk7CisgICAgICAgICAgICBB
U1NFUlQoIU9wdGlvbnM6OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRo
cmVhZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCkt
PmlzUmVtZW1iZXJlZChjZWxsKTsKKyAgICAgICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1dy
aXRlQmFycmllckVuYWJsZWQoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCopOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0
ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKLSAgICAgICAgc3RhdGljIHVpbnQ4
X3QqIGFkZHJlc3NPZkNhcmRGb3IoSlNDZWxsKik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgY29weVdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCB2b2lkKiBvbGRQ
dHIsIHNpemVfdCBvbGRTaXplLCB2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3aWxsQWJhbmRvblN0b3JhZ2UoY29uc3QgSlNDZWxs
Kiwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZGlkQXNzaWduU3RvcmFnZShjb25zdCBKU0NlbGwqLCB2b2lkKiBuZXdQdHIsIHNp
emVfdCBuZXdTaXplKTsKIAogICAgICAgICBIZWFwKFZNKiwgSGVhcFR5cGUpOwogICAgICAgICB+
SGVhcCgpOwpAQCAtMTEzLDYgKzEyNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8v
IHRydWUgaWYgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBp
c0NvbGxlY3RpbmcoKTsKKyAgICAgICAgaW5saW5lIEhlYXBPcGVyYXRpb24gb3BlcmF0aW9uSW5Q
cm9ncmVzcygpIHsgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzczsgfQogICAgICAgICAvLyB0
cnVlIGlmIGFuIGFsbG9jYXRpb24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAg
ICBpbmxpbmUgYm9vbCBpc0J1c3koKTsKICAgICAgICAgCkBAIC0yNDYsOSArMjU5LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwog
ICAgICAgICBzaXplX3QgbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdDsKIAotICAgICAgICBzaXplX3Qg
bV9ieXRlc0FsbG9jYXRlZExpbWl0OwotICAgICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsK
LSAgICAgICAgc2l6ZV90IG1fYnl0ZXNBYmFuZG9uZWQ7CisgICAgICAgIHNpemVfdCBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlOworICAgICAgICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFRoaXND
eWNsZTsKKyAgICAgICAgc2l6ZV90IG1fZnVsbENvbGxlY3RUaHJlc2hvbGQ7CisgICAgICAgIHNp
emVfdCBtX2NvbGxlY3RUaHJlc2hvbGQ7CiAKICAgICAgICAgc2l6ZV90IG1fdG90YWxCeXRlc1Zp
c2l0ZWQ7CiAgICAgICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNDb3BpZWQ7CkBAIC0yNjQsNiArMjc4
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZUYWJsZVNwZWN0cnVtIG1fZGVzdHJveWVk
VHlwZUNvdW50czsKICNlbmRpZgogCisgICAgICAgIEhhc2hTZXQ8Y29uc3QgSlNDZWxsKj4gbV9j
b3B5aW5nUmVtZW1iZXJlZFNldDsKKwogICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0
ZWRWYWx1ZXM7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4qID4gbV90ZW1wU29ydGluZ1ZlY3RvcnM7CiAgICAgICAgIE93blB0
cjxIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4gPiBtX21hcmtMaXN0U2V0OwpAQCAtMzEz
LDggKzMyOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAoaXNEZWZlcnJlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoT3B0aW9uczo6Z2NNYXhIZWFw
U2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQgPiBPcHRpb25zOjpn
Y01heEhlYXBTaXplKCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dy
ZXNzID09IE5vT3BlcmF0aW9uOwotICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZCA+IG1f
Ynl0ZXNBbGxvY2F0ZWRMaW1pdCAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb247CisgICAgICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZSA+IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSAmJiBtX2lzU2FmZVRvQ29s
bGVjdCAmJiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb247CisgICAgICAgIHJl
dHVybiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID4gbV9jb2xsZWN0VGhyZXNob2xkICYmIG1f
aXNTYWZlVG9Db2xsZWN0ICYmIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbjsK
ICAgICB9CiAKICAgICBib29sIEhlYXA6OmlzQnVzeSgpCkBAIC0zMjQsNyArMzQwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBib29sIEhlYXA6OmlzQ29sbGVjdGluZygpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IENvbGxlY3Rpb247CisgICAgICAg
IHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24gfHwgbV9vcGVy
YXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uOwogICAgIH0KIAogICAgIGlubGluZSBI
ZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKQEAgLTM2NCwxOCArMzgwLDMwIEBA
IG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6d3Jp
dGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopCisgICAgaW5saW5lIHZvaWQgSGVhcDo6
d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKICAgICB7CisjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAgICBXcml0ZUJhcnJpZXJDb3Vu
dGVyczo6Y291bnRXcml0ZUJhcnJpZXIoKTsKKyNlbmRpZgorICAgICAgICBpZiAoIWZyb20gfHwg
IWlzTWFya2VkKGZyb20pKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXRvIHx8
IGlzTWFya2VkKHRvKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSGVhcDo6aGVhcChm
cm9tKS0+YWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOwogICAgIH0KIAotICAgIGlubGluZSB2b2lk
IEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKQorICAgIGlubGluZSB2
b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8pCiAg
ICAgeworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgV3JpdGVC
YXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CisjZW5kaWYKKyAgICAgICAgaWYg
KCF0by5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd3JpdGVCYXJyaWVy
KGZyb20sIHRvLmFzQ2VsbCgpKTsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBIZWFwOjpyZXBv
cnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcE9wZXJhdGlvbi5oCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWVudW0gSGVhcE9wZXJhdGlvbiB7IE5vT3Bl
cmF0aW9uLCBBbGxvY2F0aW9uLCBDb2xsZWN0aW9uIH07CitlbnVtIEhlYXBPcGVyYXRpb24geyBO
b09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgRnVsbENvbGxlY3Rpb24sIEVkZW5Db2xsZWN0aW9uIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDI5IEBAIE1h
cmtTdGFja0FycmF5OjpNYXJrU3RhY2tBcnJheShCbG9ja0FsbG8KIAogTWFya1N0YWNrQXJyYXk6
On5NYXJrU3RhY2tBcnJheSgpCiB7Ci0gICAgQVNTRVJUKG1fbnVtYmVyT2ZTZWdtZW50cyA9PSAx
ICYmIG1fc2VnbWVudHMuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChtX251bWJlck9mU2VnbWVu
dHMgPT0gMSk7CisgICAgQVNTRVJUKG1fc2VnbWVudHMuc2l6ZSgpID09IDEpOwogICAgIG1fYmxv
Y2tBbGxvY2F0b3IuZGVhbGxvY2F0ZShNYXJrU3RhY2tTZWdtZW50OjpkZXN0cm95KG1fc2VnbWVu
dHMucmVtb3ZlSGVhZCgpKSk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgQVNTRVJU
KCFtX251bWJlck9mU2VnbWVudHMpOworICAgIEFTU0VSVCghbV9zZWdtZW50cy5zaXplKCkpOwor
fQorCit2b2lkIE1hcmtTdGFja0FycmF5OjpjbGVhcigpCit7CisgICAgaWYgKCFtX3NlZ21lbnRz
LmhlYWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE1hcmtTdGFja1NlZ21lbnQqIG5leHQ7Cisg
ICAgZm9yIChNYXJrU3RhY2tTZWdtZW50KiBjdXJyZW50ID0gbV9zZWdtZW50cy5oZWFkKCk7IGN1
cnJlbnQtPm5leHQoKTsgY3VycmVudCA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IGN1cnJlbnQt
Pm5leHQoKTsKKyAgICAgICAgbV9zZWdtZW50cy5yZW1vdmUoY3VycmVudCk7CisgICAgICAgIG1f
YmxvY2tBbGxvY2F0b3IuZGVhbGxvY2F0ZShNYXJrU3RhY2tTZWdtZW50OjpkZXN0cm95KGN1cnJl
bnQpKTsKKyAgICB9CisgICAgbV90b3AgPSAwOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cyA9IDE7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1fc2VnbWVudHMuaGVhZCgpLT5tX3RvcCA9IDA7
CisjZW5kaWYKIH0KIAogdm9pZCBNYXJrU3RhY2tBcnJheTo6ZXhwYW5kKCkKQEAgLTE2Nyw0ICsx
ODgsMjggQEAgdm9pZCBNYXJrU3RhY2tBcnJheTo6c3RlYWxTb21lQ2VsbHNGcm9tKAogICAgICAg
ICBhcHBlbmQob3RoZXIucmVtb3ZlTGFzdCgpKTsKIH0KIAordm9pZCBNYXJrU3RhY2tBcnJheTo6
ZmlsbFZlY3RvcihWZWN0b3I8Y29uc3QgSlNDZWxsKj4mIHZlY3RvcikKK3sKKyAgICBBU1NFUlQo
dmVjdG9yLnNpemUoKSA9PSBzaXplKCkpOworCisgICAgTWFya1N0YWNrU2VnbWVudCogY3VycmVu
dFNlZ21lbnQgPSBtX3NlZ21lbnRzLmhlYWQoKTsKKyAgICBpZiAoIWN1cnJlbnRTZWdtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdG9wOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRTZWdt
ZW50LT5kYXRhKClbaV0pOworICAgICAgICB2ZWN0b3JbY291bnQrK10gPSBjdXJyZW50U2VnbWVu
dC0+ZGF0YSgpW2ldOworICAgIH0KKworICAgIGN1cnJlbnRTZWdtZW50ID0gY3VycmVudFNlZ21l
bnQtPm5leHQoKTsKKyAgICB3aGlsZSAoY3VycmVudFNlZ21lbnQpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNfc2VnbWVudENhcGFjaXR5OyArK2kpIHsKKyAgICAgICAgICAg
IEFTU0VSVChjdXJyZW50U2VnbWVudC0+ZGF0YSgpW2ldKTsKKyAgICAgICAgICAgIHZlY3Rvcltj
b3VudCsrXSA9IGN1cnJlbnRTZWdtZW50LT5kYXRhKClbaV07CisgICAgICAgIH0KKyAgICAgICAg
Y3VycmVudFNlZ21lbnQgPSBjdXJyZW50U2VnbWVudC0+bmV4dCgpOworICAgIH0KK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAKIAogI2luY2x1ZGUgIkhlYXBC
bG9jay5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMDAsNiArMTAxLDkgQEAgcHVibGljOgog
ICAgIHNpemVfdCBzaXplKCk7CiAgICAgYm9vbCBpc0VtcHR5KCk7CiAKKyAgICB2b2lkIGZpbGxW
ZWN0b3IoVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CisgICAgdm9pZCBjbGVhcigpOworCiBwcml2
YXRlOgogICAgIHRlbXBsYXRlIDxzaXplX3Qgc2l6ZT4gc3RydWN0IENhcGFjaXR5RnJvbVNpemUg
ewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZhbHVlID0gKHNpemUgLSBzaXplb2YoTWFy
a1N0YWNrU2VnbWVudCkpIC8gc2l6ZW9mKGNvbnN0IEpTQ2VsbCopOwpAQCAtMTIxLDcgKzEyNSw2
IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGNvbnN0IHNpemVfdCBz
X3NlZ21lbnRDYXBhY2l0eSA9IENhcGFjaXR5RnJvbVNpemU8TWFya1N0YWNrU2VnbWVudDo6Ymxv
Y2tTaXplPjo6dmFsdWU7CiAgICAgc2l6ZV90IG1fdG9wOwogICAgIHNpemVfdCBtX251bWJlck9m
U2VnbWVudHM7Ci0gICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNTYx
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05LDEwICs5LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29s
IE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCitzdGF0aWMgYm9v
bCBpc0xpc3RQYWdlZE91dChkb3VibGUgZGVhZGxpbmUsIERvdWJseUxpbmtlZExpc3Q8TWFya2Vk
QmxvY2s+JiBsaXN0KQogewogICAgIHVuc2lnbmVkIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0g
MDsKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBtX2Jsb2NrTGlzdC5oZWFkKCk7CisgICAgTWFy
a2VkQmxvY2sqIGJsb2NrID0gbGlzdC5oZWFkKCk7CiAgICAgd2hpbGUgKGJsb2NrKSB7CiAgICAg
ICAgIGJsb2NrID0gYmxvY2stPm5leHQoKTsKICAgICAgICAgKytpdGVyc1NpbmNlTGFzdFRpbWVD
aGVjazsKQEAgLTIzLDcgKzIzLDEzIEBAIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0
KGRvdWJsZSAKICAgICAgICAgICAgIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKICAgICAg
ICAgfQogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKK2Jvb2wgTWFya2VkQWxsb2NhdG9y
Ojppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKK3sKKyAgICBpZiAoaXNMaXN0UGFnZWRPdXQo
ZGVhZGxpbmUsIG1fYmxvY2tMaXN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCkBAIC0zMSwxNSArMzcsMzUgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdAogewogICAgIGlmICghbV9mcmVlTGlzdC5oZWFkKSB7CiAgICAgICAg
IGlmIChtX2N1cnJlbnRCbG9jaykgewotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2Nr
ID09IG1fYmxvY2tzVG9Td2VlcCk7CisgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2sg
PT0gbV9uZXh0QmxvY2tUb1N3ZWVwKTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRD
b25zdW1lRnJlZUxpc3QoKTsKLSAgICAgICAgICAgIG1fYmxvY2tzVG9Td2VlcCA9IG1fY3VycmVu
dEJsb2NrLT5uZXh0KCk7CisgICAgICAgICAgICBtX25leHRCbG9ja1RvU3dlZXAgPSBtX2N1cnJl
bnRCbG9jay0+bmV4dCgpOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChNYXJrZWRCbG9jayom
IGJsb2NrID0gbV9ibG9ja3NUb1N3ZWVwOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKSB7
CisgICAgICAgIE1hcmtlZEJsb2NrKiBuZXh0OworICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYg
YmxvY2sgPSBtX25leHRCbG9ja1RvU3dlZXA7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAg
ICAgICAgIG5leHQgPSBibG9jay0+bmV4dCgpOworCiAgICAgICAgICAgICBNYXJrZWRCbG9jazo6
RnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9GcmVl
TGlzdCk7CisvKgorICAgICAgICAgICAgdW5zaWduZWQgZnJlZUxpc3RMZW5ndGggPSBmcmVlTGlz
dC5ieXRlcyAvIGJsb2NrLT5jZWxsU2l6ZSgpOworICAgICAgICAgICAgdW5zaWduZWQgbWF4TnVt
T2JqZWN0cyA9IChibG9jay0+Y2FwYWNpdHkoKSAtIHNpemVvZihNYXJrZWRCbG9jaykpIC8gYmxv
Y2stPmNlbGxTaXplKCk7CisqLworICAgICAgICAgICAgCisgICAgICAgICAgICAvL2lmIChkb3Vi
bGUobWF4TnVtT2JqZWN0cyAtIGZyZWVMaXN0TGVuZ3RoKSAvIGRvdWJsZShtYXhOdW1PYmplY3Rz
KSA+IDAuNzUpIHsKICAgICAgICAgICAgIGlmICghZnJlZUxpc3QuaGVhZCkgeworLyoKKyAgICAg
ICAgICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIG5leHQ7CisgICAgICAgICAgICAgICAg
Zm9yIChNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGN1cnJlbnQgPSBmcmVlTGlzdC5oZWFkOyBjdXJy
ZW50OyBjdXJyZW50ID0gbmV4dCkgeworICAgICAgICAgICAgICAgICAgICBuZXh0ID0gY3VycmVu
dC0+bmV4dDsKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihj
dXJyZW50KS0+emFwKCk7CisgICAgICAgICAgICAgICAgfQorKi8KICAgICAgICAgICAgICAgICBi
bG9jay0+ZGlkQ29uc3VtZUVtcHR5RnJlZUxpc3QoKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nr
TGlzdC5yZW1vdmUoYmxvY2spOworICAgICAgICAgICAgICAgIG1fYmxvY2tMaXN0LnB1c2goYmxv
Y2spOworICAgICAgICAgICAgICAgIGlmICghbV9sYXN0RnVsbEJsb2NrKQorICAgICAgICAgICAg
ICAgICAgICBtX2xhc3RGdWxsQmxvY2sgPSBibG9jazsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIApAQCAtNDgsNiArNzQsNyBAQCBpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAKKyAgICAKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAg
ICAgICAgICBtX2ZyZWVMaXN0ID0gZnJlZUxpc3Q7CiAgICAgICAgICAgICBicmVhazsKQEAgLTYy
LDYgKzg5LDcgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdAogICAg
IE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBtX2Zy
ZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwogICAgIEFTU0VSVChoZWFkKTsKKyAgICBtX21hcmtl
ZFNwYWNlLT5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOwogICAgIHJldHVybiBo
ZWFkOwogfQogICAgIApAQCAtMTI3LDcgKzE1NSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjph
ZGRCbG9jayhNYXJrZWRCbG8KICAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAgCiAg
ICAgbV9ibG9ja0xpc3QuYXBwZW5kKGJsb2NrKTsKLSAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2N1
cnJlbnRCbG9jayA9IGJsb2NrOworICAgIG1fbmV4dEJsb2NrVG9Td2VlcCA9IG1fY3VycmVudEJs
b2NrID0gYmxvY2s7CiAgICAgbV9mcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6
U3dlZXBUb0ZyZWVMaXN0KTsKICAgICBtX21hcmtlZFNwYWNlLT5kaWRBZGRCbG9jayhibG9jayk7
CiB9CkBAIC0xMzgsOSArMTY2LDI3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9j
ayhNYXJrZWQKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2N1cnJlbnRCbG9jay0+bmV4dCgp
OwogICAgICAgICBtX2ZyZWVMaXN0ID0gTWFya2VkQmxvY2s6OkZyZWVMaXN0KCk7CiAgICAgfQot
ICAgIGlmIChtX2Jsb2Nrc1RvU3dlZXAgPT0gYmxvY2spCi0gICAgICAgIG1fYmxvY2tzVG9Td2Vl
cCA9IG1fYmxvY2tzVG9Td2VlcC0+bmV4dCgpOworICAgIGlmIChtX25leHRCbG9ja1RvU3dlZXAg
PT0gYmxvY2spCisgICAgICAgIG1fbmV4dEJsb2NrVG9Td2VlcCA9IG1fbmV4dEJsb2NrVG9Td2Vl
cC0+bmV4dCgpOworCisgICAgaWYgKGJsb2NrID09IG1fbGFzdEZ1bGxCbG9jaykKKyAgICAgICAg
bV9sYXN0RnVsbEJsb2NrID0gbV9sYXN0RnVsbEJsb2NrLT5wcmV2KCk7CisgICAgCiAgICAgbV9i
bG9ja0xpc3QucmVtb3ZlKGJsb2NrKTsKIH0KIAordm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc2V0
KCkKK3sKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IDA7CisgICAgbV9jdXJyZW50QmxvY2sgPSAw
OworICAgIG1fZnJlZUxpc3QgPSBNYXJrZWRCbG9jazo6RnJlZUxpc3QoKTsKKyAgICBpZiAobV9o
ZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgIG1f
bGFzdEZ1bGxCbG9jayA9IDA7CisKKyAgICBpZiAobV9sYXN0RnVsbEJsb2NrKQorICAgICAgICBt
X25leHRCbG9ja1RvU3dlZXAgPSBtX2xhc3RGdWxsQmxvY2stPm5leHQoKSA/IG1fbGFzdEZ1bGxC
bG9jay0+bmV4dCgpIDogbV9sYXN0RnVsbEJsb2NrOworICAgIGVsc2UKKyAgICAgICAgbV9uZXh0
QmxvY2tUb1N3ZWVwID0gbV9ibG9ja0xpc3QuaGVhZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
CShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsOCBAQCBwcml2YXRlOgogICAg
IE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBtX2ZyZWVMaXN0OwogICAgIE1hcmtlZEJsb2NrKiBtX2N1
cnJlbnRCbG9jazsKICAgICBNYXJrZWRCbG9jayogbV9sYXN0QWN0aXZlQmxvY2s7Ci0gICAgTWFy
a2VkQmxvY2sqIG1fYmxvY2tzVG9Td2VlcDsKKyAgICBNYXJrZWRCbG9jayogbV9uZXh0QmxvY2tU
b1N3ZWVwOworICAgIE1hcmtlZEJsb2NrKiBtX2xhc3RGdWxsQmxvY2s7CiAgICAgRG91Ymx5TGlu
a2VkTGlzdDxNYXJrZWRCbG9jaz4gbV9ibG9ja0xpc3Q7CiAgICAgc2l6ZV90IG1fY2VsbFNpemU7
CiAgICAgTWFya2VkQmxvY2s6OkRlc3RydWN0b3JUeXBlIG1fZGVzdHJ1Y3RvclR5cGU7CkBAIC02
OCw3ICs2OSw4IEBAIGlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXQKIGlu
bGluZSBNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcigpCiAgICAgOiBtX2N1cnJlbnRC
bG9jaygwKQogICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKLSAgICAsIG1fYmxvY2tzVG9Td2Vl
cCgwKQorICAgICwgbV9uZXh0QmxvY2tUb1N3ZWVwKDApCisgICAgLCBtX2xhc3RGdWxsQmxvY2so
MCkKICAgICAsIG1fY2VsbFNpemUoMCkKICAgICAsIG1fZGVzdHJ1Y3RvclR5cGUoTWFya2VkQmxv
Y2s6Ok5vbmUpCiAgICAgLCBtX2hlYXAoMCkKQEAgLTEwMiwxNCArMTA0LDYgQEAgaW5saW5lIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUocwogICAgIHJldHVybiBoZWFkOwogfQogCi1p
bmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc2V0KCkKLXsKLSAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IDA7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAgIG1fZnJlZUxpc3QgPSBNYXJr
ZWRCbG9jazo6RnJlZUxpc3QoKTsKLSAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2Jsb2NrTGlzdC5o
ZWFkKCk7Ci19Ci0KIGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmco
KQogewogICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMTU2MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTksNiArMTk5LDQ1IEBAIHZvaWQgTWFya2VkQmxvY2s6OnN0b3BBbGxvY2F0aW5nKGNvbnN0
IEYKICAgICBtX3N0YXRlID0gTWFya2VkOwogfQogCit2b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1h
cmtzKCkKK3sKKyAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gSlNDOjpF
ZGVuQ29sbGVjdGlvbikKKyAgICAgICAgdGhpcy0+Y2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlw
ZTxFZGVuQ29sbGVjdGlvbj4oKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXMtPmNsZWFyTWFya3NX
aXRoQ29sbGVjdGlvblR5cGU8RnVsbENvbGxlY3Rpb24+KCk7Cit9CisKK3ZvaWQgTWFya2VkQmxv
Y2s6OmNsZWFyUmVtZW1iZXJlZFNldCgpCit7CisgICAgbV9yZW1lbWJlcmVkU2V0LmNsZWFyQWxs
KCk7Cit9CisKK3RlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgordm9pZCBN
YXJrZWRCbG9jazo6Y2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlwZSgpCit7CisgICAgQVNTRVJU
KGNvbGxlY3Rpb25UeXBlID09IEZ1bGxDb2xsZWN0aW9uIHx8IGNvbGxlY3Rpb25UeXBlID09IEVk
ZW5Db2xsZWN0aW9uKTsKKyAgICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMp
OworCisgICAgQVNTRVJUKG1fc3RhdGUgIT0gTmV3ICYmIG1fc3RhdGUgIT0gRnJlZUxpc3RlZCk7
CisgICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEZ1bGxDb2xsZWN0aW9uKSB7CisgICAgICAgIG1f
bWFya3MuY2xlYXJBbGwoKTsKKyAgICAgICAgbV9yZW1lbWJlcmVkU2V0LmNsZWFyQWxsKCk7Cisg
ICAgfQorCisgICAgLy8gVGhpcyB3aWxsIGJlY29tZSB0cnVlIGF0IHRoZSBlbmQgb2YgdGhlIG1h
cmsgcGhhc2UuIFdlIHNldCBpdCBub3cgdG8KKyAgICAvLyBhdm9pZCBhbiBleHRyYSBwYXNzIHRv
IGRvIHNvIGxhdGVyLgorICAgIG1fc3RhdGUgPSBNYXJrZWQ7Cit9CisKK3ZvaWQgTWFya2VkQmxv
Y2s6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKK3sKKyAgICBtX3dlYWtTZXQubGFzdENoYW5jZVRv
RmluYWxpemUoKTsKKworICAgIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKKyAgICBjbGVhck1hcmtz
V2l0aENvbGxlY3Rpb25UeXBlPEZ1bGxDb2xsZWN0aW9uPigpOworICAgIHN3ZWVwKCk7Cit9CisK
IE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6cmVzdW1lQWxsb2NhdGluZygpCiB7
CiAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMTU2MTEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
SGVhcEJsb2NrLmgiCiAKKyNpbmNsdWRlICJIZWFwT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiV2Vh
a1NldC5oIgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5o
PgpAQCAtNjksOCArNzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBzaXplLgogCiAgICAg
Y2xhc3MgTWFya2VkQmxvY2sgOiBwdWJsaWMgSGVhcEJsb2NrPE1hcmtlZEJsb2NrPiB7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21TaXplID0gODsgLy8gYnl0ZXMKKyAgICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBhdG9tU2l6ZSA9IDE2OyAvLyBieXRlcwogICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGJsb2NrU2l6ZSA9IDY0ICogS0I7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgYmxvY2tNYXNrID0gfihibG9ja1NpemUgLSAxKTsgLy8gYmxvY2tTaXplIG11c3Qg
YmUgYSBwb3dlciBvZiB0d28uCiAKQEAgLTEzNSwxMSArMTM3LDE3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKGNvbnN0IEZyZWVMaXN0Jik7CiAgICAgICAg
IEZyZWVMaXN0IHJlc3VtZUFsbG9jYXRpbmcoKTsgLy8gQ2FsbCB0aGlzIGlmIHlvdSBjYW5vbmlj
YWxpemVkIGEgYmxvY2sgZm9yIHNvbWUgbm9uLWNvbGxlY3Rpb24gcmVsYXRlZCBwdXJwb3NlLgog
ICAgICAgICB2b2lkIGRpZENvbnN1bWVFbXB0eUZyZWVMaXN0KCk7IC8vIENhbGwgdGhpcyBpZiB5
b3Ugc3dlZXAgYSBibG9jaywgYnV0IHRoZSByZXR1cm5lZCBGcmVlTGlzdCBpcyBlbXB0eS4KKyAg
ICAgICAgdm9pZCBkaWRTd2VlcFRvTm9BdmFpbCgpOyAvLyBDYWxsIHRoaXMgaWYgeW91IHN3ZWVw
IGEgYmxvY2sgYW5kIGdldCBhbiBlbXB0eSBmcmVlIGxpc3QgYmFjay4KIAogICAgICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlICJuZXdseSBhbGxvY2F0ZWQiIGJpdG1hcCB3YXMgbm9uLW51bGwg
CiAgICAgICAgIC8vIGFuZCB3YXMgc3VjY2Vzc2Z1bGx5IGNsZWFyZWQgYW5kIGZhbHNlIG90aGVy
d2lzZS4KICAgICAgICAgYm9vbCBjbGVhck5ld2x5QWxsb2NhdGVkKCk7CisKICAgICAgICAgdm9p
ZCBjbGVhck1hcmtzKCk7CisgICAgICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkU2V0KCk7CisgICAg
ICAgIHRlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgorICAgICAgICB2b2lk
IGNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGUoKTsKKwogICAgICAgICBzaXplX3QgbWFya0Nv
dW50KCk7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpOwogCkBAIC0xNTYsNiArMTY0LDExIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAg
ICAgIHZvaWQgY2xlYXJNYXJrZWQoY29uc3Qgdm9pZCopOwogCisgICAgICAgIHZvaWQgc2V0UmVt
ZW1iZXJlZChjb25zdCB2b2lkKik7CisgICAgICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkKGNvbnN0
IHZvaWQqKTsKKyAgICAgICAgdm9pZCBhdG9taWNDbGVhclJlbWVtYmVyZWQoY29uc3Qgdm9pZCop
OworICAgICAgICBib29sIGlzUmVtZW1iZXJlZChjb25zdCB2b2lkKik7CisKICAgICAgICAgYm9v
bCBpc05ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFs
bG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChj
b25zdCB2b2lkKik7CkBAIC0xNjYsNiArMTc5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlQ2VsbChGdW5jdG9y
Jik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hEZWFk
Q2VsbChGdW5jdG9yJik7CiAKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1hcmtz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEJsb2NrLCBtX21hcmtzKTsgfQorCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tQWxpZ25tZW50TWFz
ayA9IGF0b21TaXplIC0gMTsgLy8gYXRvbVNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KIApA
QCAtMTgzLDkgKzE5OCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IG1fYXRv
bXNQZXJDZWxsOwogICAgICAgICBzaXplX3QgbV9lbmRBdG9tOyAvLyBUaGlzIGlzIGEgZnV6enkg
ZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20uCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dD
KQotICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBXVEY6OkJpdG1hcEF0b21pYz4g
bV9tYXJrczsKKyAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RGOjpCaXRtYXBB
dG9taWMsIHVpbnQ4X3Q+IG1fbWFya3M7CisgICAgICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxv
Y2ssIFdURjo6Qml0bWFwQXRvbWljLCB1aW50OF90PiBtX3JlbWVtYmVyZWRTZXQ7CiAjZWxzZQot
ICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBXVEY6OkJpdG1hcE5vdEF0b21pYz4g
bV9tYXJrczsKKyAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RGOjpCaXRtYXBO
b3RBdG9taWMsIHVpbnQ4X3Q+IG1fbWFya3M7CisgICAgICAgIFdURjo6Qml0bWFwPGF0b21zUGVy
QmxvY2ssIFdURjo6Qml0bWFwTm90QXRvbWljLCB1aW50OF90PiBtX3JlbWVtYmVyZWRTZXQ7CiAj
ZW5kaWYKICAgICAgICAgT3duUHRyPFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+ID4gbV9uZXds
eUFsbG9jYXRlZDsKIApAQCAtMjI3LDE1ICsyNDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0
PEJpdHM+KHApICYgYmxvY2tNYXNrKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJrZWRC
bG9jazo6bGFzdENoYW5jZVRvRmluYWxpemUoKQotICAgIHsKLSAgICAgICAgbV93ZWFrU2V0Lmxh
c3RDaGFuY2VUb0ZpbmFsaXplKCk7Ci0KLSAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZCgpOwot
ICAgICAgICBjbGVhck1hcmtzKCk7Ci0gICAgICAgIHN3ZWVwKCk7Ci0gICAgfQotCiAgICAgaW5s
aW5lIE1hcmtlZEFsbG9jYXRvciogTWFya2VkQmxvY2s6OmFsbG9jYXRvcigpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CkBAIC0yODQsMjYgKzI5MiwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlz
KTsKIAogICAgICAgICBBU1NFUlQoIW1fbmV3bHlBbGxvY2F0ZWQpOwotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9
IG1fYXRvbXNQZXJDZWxsKQotICAgICAgICAgICAgQVNTRVJUKG1fbWFya3MuZ2V0KGkpKTsKLSNl
bmRpZgogICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBGcmVlTGlzdGVkKTsKICAgICAgICAgbV9z
dGF0ZSA9IE1hcmtlZDsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2xl
YXJNYXJrcygpCi0gICAgewotICAgICAgICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9O
KHRoaXMpOwotCi0gICAgICAgIEFTU0VSVChtX3N0YXRlICE9IE5ldyAmJiBtX3N0YXRlICE9IEZy
ZWVMaXN0ZWQpOwotICAgICAgICBtX21hcmtzLmNsZWFyQWxsKCk7Ci0KLSAgICAgICAgLy8gVGhp
cyB3aWxsIGJlY29tZSB0cnVlIGF0IHRoZSBlbmQgb2YgdGhlIG1hcmsgcGhhc2UuIFdlIHNldCBp
dCBub3cgdG8KLSAgICAgICAgLy8gYXZvaWQgYW4gZXh0cmEgcGFzcyB0byBkbyBzbyBsYXRlci4K
LSAgICAgICAgbV9zdGF0ZSA9IE1hcmtlZDsKLSAgICB9Ci0KICAgICBpbmxpbmUgc2l6ZV90IE1h
cmtlZEJsb2NrOjptYXJrQ291bnQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWFya3MuY291
bnQoKTsKQEAgLTMzOSw2ICszMzEsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVy
biAocmVpbnRlcnByZXRfY2FzdDxCaXRzPihwKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4odGhp
cykpIC8gYXRvbVNpemU7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OnNl
dFJlbWVtYmVyZWQoY29uc3Qgdm9pZCogcCkKKyAgICB7CisgICAgICAgIG1fcmVtZW1iZXJlZFNl
dC5zZXQoYXRvbU51bWJlcihwKSk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya2VkQmxv
Y2s6OmNsZWFyUmVtZW1iZXJlZChjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgbV9yZW1l
bWJlcmVkU2V0LmNsZWFyKGF0b21OdW1iZXIocCkpOworICAgIH0KKworICAgIGlubGluZSB2b2lk
IE1hcmtlZEJsb2NrOjphdG9taWNDbGVhclJlbWVtYmVyZWQoY29uc3Qgdm9pZCogcCkKKyAgICB7
CisgICAgICAgIG1fcmVtZW1iZXJlZFNldC5jb25jdXJyZW50VGVzdEFuZENsZWFyKGF0b21OdW1i
ZXIocCkpOworICAgIH0KKworICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc1JlbWVtYmVy
ZWQoY29uc3Qgdm9pZCogcCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlbWVtYmVyZWRTZXQu
Z2V0KGF0b21OdW1iZXIocCkpOworICAgIH0KKwogICAgIGlubGluZSBib29sIE1hcmtlZEJsb2Nr
Ojppc01hcmtlZChjb25zdCB2b2lkKiBwKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWFya3Mu
Z2V0KGF0b21OdW1iZXIocCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAg
TWFya2VkU3BhY2U6On5NYXJrZWRTcGFjZSgpCiB7CiAgICAgRnJlZSBmcmVlKEZyZWU6OkZyZWVB
bGwsIHRoaXMpOwogICAgIGZvckVhY2hCbG9jayhmcmVlKTsKKyAgICBBU1NFUlQoIW1fYmxvY2tz
LnNldCgpLnNpemUoKSk7CiB9CiAKIHN0cnVjdCBMYXN0Q2hhbmNlVG9GaW5hbGl6ZSA6IE1hcmtl
ZEJsb2NrOjpWb2lkRnVuY3RvciB7CkBAIC0xMzgsMTcgKzEzOSwyNyBAQCB2b2lkIE1hcmtlZFNw
YWNlOjpyZXNldEFsbG9jYXRvcnMoKQogICAgIG1fbm9ybWFsU3BhY2UubGFyZ2VBbGxvY2F0b3Iu
cmVzZXQoKTsKICAgICBtX25vcm1hbERlc3RydWN0b3JTcGFjZS5sYXJnZUFsbG9jYXRvci5yZXNl
dCgpOwogICAgIG1faW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxvY2F0
b3IucmVzZXQoKTsKKworICAgIG1fYmxvY2tzV2l0aE5ld09iamVjdHMuY2xlYXIoKTsKIH0KIAog
dm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290
VmlzaXRvcikKIHsKICAgICBWaXNpdFdlYWtTZXQgdmlzaXRXZWFrU2V0KGhlYXBSb290VmlzaXRv
cik7Ci0gICAgZm9yRWFjaEJsb2NrKHZpc2l0V2Vha1NldCk7CisgICAgaWYgKG1faGVhcC0+b3Bl
cmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgdmlzaXRXZWFrU2V0KG1fYmxvY2tzV2l0aE5ld09iamVjdHNbaV0pOworICAgIH0g
ZWxzZQorICAgICAgICBmb3JFYWNoQmxvY2sodmlzaXRXZWFrU2V0KTsKIH0KIAogdm9pZCBNYXJr
ZWRTcGFjZTo6cmVhcFdlYWtTZXRzKCkKIHsKLSAgICBmb3JFYWNoQmxvY2s8UmVhcFdlYWtTZXQ+
KCk7CisgICAgaWYgKG1faGVhcC0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0
aW9uKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrc1dpdGhOZXdP
YmplY3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0c1tp
XS0+cmVhcFdlYWtTZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZm9yRWFjaEJsb2NrPFJlYXBX
ZWFrU2V0PigpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KQEAgLTI5OSw2ICsz
MTAsMjUgQEAgdm9pZCBNYXJrZWRTcGFjZTo6Y2xlYXJOZXdseUFsbG9jYXRlZCgpCiAjZW5kaWYK
IH0KIAorI2lmbmRlZiBOREVCVUcKK3N0cnVjdCBWZXJpZnlNYXJrZWQgOiBNYXJrZWRCbG9jazo6
Vm9pZEZ1bmN0b3IgeworICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsg
QVNTRVJUKGJsb2NrLT5uZWVkc1N3ZWVwaW5nKCkpOyB9Cit9OworI2VuZGlmCisKK3ZvaWQgTWFy
a2VkU3BhY2U6OmNsZWFyTWFya3MoKQoreworICAgIGlmIChtX2hlYXAtPm9wZXJhdGlvbkluUHJv
Z3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAgICBkYXRhTG9nRigibnVtYmVyIG9m
IGJsb2NrcyB3aXRoIG5ldyBvYmplY3RzID0gJWx1XG4iLCBtX2Jsb2Nrc1dpdGhOZXdPYmplY3Rz
LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrc1dpdGhO
ZXdPYmplY3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0
c1tpXS0+Y2xlYXJNYXJrcygpOworICAgIH0gZWxzZQorICAgICAgICBmb3JFYWNoQmxvY2s8Q2xl
YXJNYXJrcz4oKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgZm9yRWFjaEJsb2NrPFZlcmlmeU1hcmtl
ZD4oKTsKKyNlbmRpZgorfQorCiB2b2lkIE1hcmtlZFNwYWNlOjp3aWxsU3RhcnRJdGVyYXRpbmco
KQogewogICAgIEFTU0VSVCghaXNJdGVyYXRpbmcoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1
LDE3IEBAIGNsYXNzIFdlYWtHQ0hhbmRsZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBzdHJ1Y3Qg
Q2xlYXJNYXJrcyA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci0gICAgdm9pZCBvcGVyYXRv
cigpKE1hcmtlZEJsb2NrKiBibG9jaykgeyBibG9jay0+Y2xlYXJNYXJrcygpOyB9CisgICAgdm9p
ZCBvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIGJsb2NrLT5j
bGVhck1hcmtzKCk7CisgICAgfQorfTsKKworc3RydWN0IENsZWFyUmVtZW1iZXJlZFNldCA6IE1h
cmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAgdm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2Nr
KiBibG9jaykKKyAgICB7CisgICAgICAgIGJsb2NrLT5jbGVhclJlbWVtYmVyZWRTZXQoKTsKKyAg
ICB9CiB9OwogCiBzdHJ1Y3QgU3dlZXAgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewpAQCAt
MTA0LDggKzExNCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEFkZEJsb2NrKE1hcmtlZEJs
b2NrKik7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoTWFya2VkQmxvY2sqKTsKKyAgICB2
b2lkIGRpZEFsbG9jYXRlSW5CbG9jayhNYXJrZWRCbG9jayopOwogCiAgICAgdm9pZCBjbGVhck1h
cmtzKCk7CisgICAgdm9pZCBjbGVhclJlbWVtYmVyZWRTZXQoKTsKICAgICB2b2lkIGNsZWFyTmV3
bHlBbGxvY2F0ZWQoKTsKICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgc2l6ZV90IG9iamVjdENvdW50
KCk7CkBAIC0xNDQsNiArMTU2LDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jYXBhY2l0eTsK
ICAgICBib29sIG1faXNJdGVyYXRpbmc7CiAgICAgTWFya2VkQmxvY2tTZXQgbV9ibG9ja3M7Cisg
ICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja3NXaXRoTmV3T2JqZWN0czsKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5U
eXBlIE1hcmtlZFNwYWNlOjpmb3JFYWNoTGl2ZUNlbGwoSGVhcEl0ZXJhdGlvblNjb3BlJiwgRnVu
Y3RvciYgZnVuY3RvcikKQEAgLTI1NCw5ICsyNjcsMTQgQEAgaW5saW5lIHZvaWQgTWFya2VkU3Bh
Y2U6OmRpZEFkZEJsb2NrKE1hcgogICAgIG1fYmxvY2tzLmFkZChibG9jayk7CiB9CiAKLWlubGlu
ZSB2b2lkIE1hcmtlZFNwYWNlOjpjbGVhck1hcmtzKCkKK2lubGluZSB2b2lkIE1hcmtlZFNwYWNl
OjpkaWRBbGxvY2F0ZUluQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQoreworICAgIG1fYmxvY2tz
V2l0aE5ld09iamVjdHMuYXBwZW5kKGJsb2NrKTsKK30KKworaW5saW5lIHZvaWQgTWFya2VkU3Bh
Y2U6OmNsZWFyUmVtZW1iZXJlZFNldCgpCiB7Ci0gICAgZm9yRWFjaEJsb2NrPENsZWFyTWFya3M+
KCk7CisgICAgZm9yRWFjaEJsb2NrPENsZWFyUmVtZW1iZXJlZFNldD4oKTsKIH0KIAogaW5saW5l
IHNpemVfdCBNYXJrZWRTcGFjZTo6b2JqZWN0Q291bnQoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBAIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihHQ1RocmVhZFNoYXJlZEQKIAog
U2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0
eSgpKTsKKyAgICBjbGVhck1hcmtTdGFjaygpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpzZXR1
cCgpCkBAIC02Myw2ICs2MywxMSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiAgICAgfQog
fQogCit2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCit7CisgICAgbV9zdGFjay5j
bGVhcigpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMm
IGNvbnNlcnZhdGl2ZVJvb3RzKQogewogICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CkBAIC04MCw3
ICs4NSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbigKICNlbmRp
ZgogCiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKLSAgICAKKwogICAgIGlmIChp
c0pTU3RyaW5nKGNlbGwpKSB7CiAgICAgICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZpc2l0b3IpOwogICAgICAgICByZXR1cm47CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDE1NjExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICBTbG90VmlzaXRvcihHQ1RocmVhZFNo
YXJlZERhdGEmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAorICAgIE1hcmtTdGFja0FycmF5JiBt
YXJrU3RhY2soKSB7IHJldHVybiBtX3N0YWNrOyB9CisKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7
CisKICAgICB2b2lkIGFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kKEpJVFdyaXRlQmFycmllcjxUPiopOwpAQCAtNjAs
MTcgKzY0LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkVmFsdWUoSlNW
YWx1ZSopOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmRVbmJhcnJp
ZXJlZFdlYWsoV2VhazxUPiopOworICAgIHZvaWQgdW5jb25kaXRpb25hbGx5QXBwZW5kKEpTQ2Vs
bCopOwogICAgIAogICAgIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgYm9vbCBjb250
YWluc09wYXF1ZVJvb3Qodm9pZCopOwogICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRy
aVN0YXRlKHZvaWQqKTsKICAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBHQ1RocmVh
ZFNoYXJlZERhdGEmIHNoYXJlZERhdGEoKSB7IHJldHVybiBtX3NoYXJlZDsgfQorICAgIEdDVGhy
ZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkOyB9CiAg
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KIAogICAgIHZv
aWQgc2V0dXAoKTsKICAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBjbGVhck1hcmtTdGFjaygp
OwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNp
dGVkOyB9CiAgICAgc2l6ZV90IGJ5dGVzQ29waWVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0Nv
cGllZDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDE0
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWwKICAgICAgICAgCiAg
ICAgTUFSS19MT0dfQ0hJTEQoKnRoaXMsIGNlbGwpOwogCisgICAgdW5jb25kaXRpb25hbGx5QXBw
ZW5kKGNlbGwpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnVuY29uZGl0
aW9uYWxseUFwcGVuZChKU0NlbGwqIGNlbGwpCit7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2Vk
KGNlbGwpKTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICAgICAgCiAgICAgLy8gU2hvdWxkIG5l
dmVyIGF0dGVtcHQgdG8gbWFyayBzb21ldGhpbmcgdGhhdCBpcyB6YXBwZWQuCiAgICAgQVNTRVJU
KCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAgICAgCkBAIC0yMTIsNyArMjIwLDkgQEAgaW5saW5l
IHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKAogaW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OmNvcHlMYXRlcihKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4gdG9rZW4sIHZvaWQqIHB0ciwg
c2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChieXRlcyk7Ci0gICAgbV9ieXRlc0NvcGllZCAr
PSBieXRlczsKKyAgICBib29sIGlzUmVtZW1iZXJlZCA9IGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9n
cmVzcygpID09IEVkZW5Db2xsZWN0aW9uICYmIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lcikt
PmlzUmVtZW1iZXJlZChvd25lcik7CisgICAgaWYgKCFpc1JlbWVtYmVyZWQpCisgICAgICAgIG1f
Ynl0ZXNDb3BpZWQgKz0gYnl0ZXM7CiAKICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRT
cGFjZTo6YmxvY2tGb3IocHRyKTsKICAgICBpZiAoYmxvY2stPmlzT3ZlcnNpemUoKSkgewpAQCAt
MjIwLDcgKzIzMCw3IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIoSlNDZWwK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChibG9jay0+aXNQaW5uZWQoKSkKKyAg
ICBpZiAoaXNSZW1lbWJlcmVkKQogICAgICAgICByZXR1cm47CiAKICAgICBibG9jay0+cmVwb3J0
TGl2ZUJ5dGVzKG93bmVyLCB0b2tlbiwgYnl0ZXMpOwpAQCAtMjQxLDYgKzI1MSwxMSBAQCBpbmxp
bmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vCiAjZW5kaWYKIH0KIAoraW5saW5l
IEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJnNoYXJlZERh
dGEoKS5tX3ZtLT5oZWFwOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFNs
b3RWaXNpdG9ySW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1MSw4ICs0NTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gV3Jp
dGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlcklt
bWVkaWF0ZXMgfTsKICAgICAgICAgLy8gdmFsdWUgcmVnaXN0ZXIgaW4gd3JpdGUgYmFycmllciBp
cyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRjaCByZWdpc3RlcnMKICAgICAgICAgLy8gc28gbWF5IHNh
ZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRoZXIgb2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAg
ICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2
YWx1ZVRhZywgUmVnaXN0ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJh
cnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKLSAgICAgICAgdm9pZCBlbWl0V3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRj
aCwgV3JpdGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CisgICAgICAgIEp1bXAg
Y2hlY2tNYXJrV29yZChSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdp
c3RlcklEIHNjcmF0Y2gyKTsKKyAgICAgICAgSnVtcCBjaGVja01hcmtXb3JkKEpTQ2VsbCogb3du
ZXIsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihS
ZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlVGFnLCBSZWdpc3RlcklEIHNjcmF0Y2gx
LCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlLCBKdW1wTGlzdCYgc2xvd0Nh
c2VzKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lz
dGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgSnVtcExp
c3QmIHNsb3dDYXNlcyk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlw
ZT4gLy8gU3RydWN0dXJlVHlwZSBjYW4gYmUgUmVnaXN0ZXJJRCBvciBJbW1QdHIuCiAgICAgICAg
IHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoUmVnaXN0ZXJJRCBhbGxvY2F0b3IsIFN0cnVjdHVy
ZVR5cGUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwpAQCAtNzUyLDYg
Kzc1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9h
cmd1bWVudF9ieV92YWwoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NoZWNrX2hhc19pbnN0YW5jZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbml0X2dsb2JhbF9j
b25zdChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pmYWxz
ZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDggKzM4OCw3IEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgKIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQ
cm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3Rl
cklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzY3JhdGNoKTsgLy8gV2UgaGFkIGZvdW5kIHRoaXMgc2NyYXRjaCByZWdpc3RlciB1c2Vm
dWwgaGVyZSBiZWZvcmUsIHNvIEkgd2lsbCBrZWVwIGl0IGZvciBub3cuCi0gICAgCisgICAgVU5V
U0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlID0gc3RydWN0dXJl
QW5kSW5kZXhpbmdUeXBlOwogICAgIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJl
QW5kSW5kZXhpbmdUeXBlOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzAsNyArMzMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlv
bgogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgCisKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9m
aWxlKTsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIEpJVEludDMyOgpAQCAtMzU3LDcg
KzM1Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICAK
ICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyht
X2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CiAKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVz
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CiB9CiAKIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSkKQEAgLTM3NCw2ICszNzMsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzCiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOworCiAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBl
KSB7CiAgICAgY2FzZSBJbnQzMlNoYXBlOgogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGVtaXRK
dW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QzKSk7CkBAIC0zOTIsNiArMzkyLDcgQEAgSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91cwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
cmVnVDAsIHJlZ1QzLCByZWdUMiwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIHNsb3dD
YXNlcyk7CiAgICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRp
bWVzRWlnaHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTQzMCw2ICs0MzEs
NyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAKICAgICBMYWJl
bCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMyk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QyLCByZWdUMiwg
U2hvdWxkRmlsdGVySW1tZWRpYXRlcywgc2xvd0Nhc2VzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBC
YXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKQEAg
LTQ2NSw2ICs0NjcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1
YwogICAgIGNhc2UgSklURG91YmxlOgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZh
bHVlIHR5cGUgY2hlY2sKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgor
ICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Cisg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTYw
Nyw2ICs2MTMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgog
ICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBh
biBpbW1lZGlhdGUsIG9yIGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCBy
ZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgc2xvd0Nhc2VzKTsKKyAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOworCiAgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5j
ZVB1dEJ5SWQpOwogCiAgICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMpOwpAQCAtNjIwLDggKzYz
MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKIAogICAgIEVO
RF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiAKLSAgICBlbWl0V3Jp
dGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlh
dGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0KICAgICBtX3Byb3BlcnR5QWNj
ZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oUHJv
cGVydHlTdHViUHV0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgaG90UGF0aEJlZ2luLCBzdHJ1Y3R1
cmVUb0NvbXBhcmUsIHByb3BlcnR5U3RvcmFnZUxvYWQsIGRpc3BsYWNlbWVudExhYmVsKSk7CiB9
CiAKQEAgLTYzMyw2ICs2NDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKElu
c3RydWN0CiAKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7CiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0
IDogY3RpX29wX3B1dF9ieV9pZCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwpA
QCAtNzMxLDEyICs3NDAsMjkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5z
aXRpbwogICAgICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CiAg
ICAgfQogCi0gICAgLy8gUGxhbnRpbmcgdGhlIG5ldyBzdHJ1Y3R1cmUgdHJpZ2dlcnMgdGhlIHdy
aXRlIGJhcnJpZXIgc28gd2UgbmVlZAotICAgIC8vIGFuIHVuY29uZGl0aW9uYWwgYmFycmllciBo
ZXJlLgotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsK
LQogICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09IG9sZFN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCkpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKSwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOworCisgICAgSnVtcExp
c3Qgd3JpdGVCYXJyaWVyU2xvd0Nhc2VzOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJl
Z1QxLCByZWdUMywgcmVnVDMsIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHdyaXRlQmFycmll
clNsb3dDYXNlcyk7CisgICAgSnVtcCB3cml0ZUJhcnJpZXJOb3RUYWtlbiA9IGp1bXAoKTsKKyAg
ICB3cml0ZUJhcnJpZXJTbG93Q2FzZXMubGluayh0aGlzKTsKKworICAgIHB1c2gocmVnVDApOwor
ICAgIHB1c2gocmVnVDEpOworICAgIHB1c2gocmVnVDIpOworICAgIHB1c2gocmVnVDMpOworICAg
IHB1c2gocmVnVDQpOworICAgIEpJVFN0dWJDYWxsIHdyaXRlQmFycmllclN0dWJDYWxsKHRoaXMs
IGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcik7CisgICAgd3JpdGVCYXJyaWVy
U3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOworICAgIHdyaXRlQmFycmllclN0dWJDYWxsLmNh
bGwoKTsKKyAgICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUMyk7CisgICAgcG9wKHJlZ1QyKTsK
KyAgICBwb3AocmVnVDEpOworICAgIHBvcChyZWdUMCk7CisKKyAgICB3cml0ZUJhcnJpZXJOb3RU
YWtlbi5saW5rKHRoaXMpOwogICAgIGNvbXBpbGVQdXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1Qx
LCBjYWNoZWRPZmZzZXQpOwogCiAgICAgcmV0KCk7CkBAIC03NTEsOSArNzc3LDEwIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVj
dF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAKICAgICBpZiAod2lsbE5lZWRTdG9y
YWdlUmVhbGxvYykgewotICAgICAgICBBU1NFUlQobV9jYWxscy5zaXplKCkgPT0gMSk7CiAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfb3Bf
cHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOwotICAgIH0KKyAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhtX2NhbGxzWzFdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9oZWFwX3VuY29uZGl0aW9u
YWxfd3JpdGVfYmFycmllcikpOworICAgIH0gZWxzZQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0
ZV9iYXJyaWVyKSk7CiAgICAgCiAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklU
U3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREUoCkBAIC0xMzQzLDE2ICsxMzcwLDI2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShJbnMKIAogdm9pZCBKSVQ6
OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3QqIG9wZXJhbmRTbG90LCBpbnQgdmFsdWUp
CiB7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworCisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QyLCByZWdU
MSwgcmVnVDEsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIHNsb3dDYXNlcyk7CisgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKKwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJl
Z1QxKTsKICAgICBuZWdQdHIocmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVy
YW5kLCBpbnQgdmFsdWUpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJ
bW1lZGlhdGVzLCBzbG93Q2FzZXMpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisKICAg
ICBzdG9yZVB0cihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3BlcmFuZCkpOwogfQog
CkBAIC0xMzYwLDYgKzEzOTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBz
Y29wZSwgdQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisKKyAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdU
MiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgc2xvd0Nhc2VzKTsKKyAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOworCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1ZhcmlhYmxlT2JqZWN0
OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDApOwogICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwLCBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQpAQCAtMTM5MywxNSAr
MTQzNSwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZCkudHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIC8vIEZvciB2YXIgaW5qZWN0aW9uIGNoZWNrcyBv
ciBzdHJ1Y3R1cmUgY2hlY2tzLgorICAgIGlmIChuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHkpCisgICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKKworICAgIC8vIEZvciB0aGUgd3JpdGUgYmFycmllci4KKyAgICBpZiAo
cmVzb2x2ZVR5cGUgIT0gRHluYW1pYykKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF90b19zY29wZSk7CiAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
QEAgLTE0MTQsOSArMTQ2MCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25z
dChJbnN0CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQsIHJlZ1QwKTsKIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBlbWl0
V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1l
ZGlhdGVzLCBzbG93Q2FzZXMpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisKICAgICBz
dG9yZTY0KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwot
ICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKLSAgICAgICAgZW1pdFdyaXRl
QmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRl
cywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOworfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5pdF9nbG9iYWxfY29uc3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CisKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfaW5pdF9n
bG9iYWxfY29uc3QpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY3Vy
cmVudEluc3RydWN0aW9uKSk7CisgICAgc3R1YkNhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6
cmVzZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvKQpAQCAtMTQzOSwzMyArMTQ5NiwxODYgQEAgdm9pZCBKSVQ6OnJl
c2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkK
IAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJ
RCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKK0pJVDo6SnVtcCBK
SVQ6OmNoZWNrTWFya1dvcmQoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCBzY3JhdGNoMSwg
UmVnaXN0ZXJJRCBzY3JhdGNoMikKK3sKKyAgICBtb3ZlKG93bmVyLCBzY3JhdGNoMSk7CisgICAg
bW92ZShvd25lciwgc2NyYXRjaDIpOworCisgICAgYW5kUHRyKFRydXN0ZWRJbW0zMihNYXJrZWRC
bG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDEpOworICAgIGFuZFB0cihUcnVzdGVkSW1tMzIofk1h
cmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMik7CisKKyAgICByc2hpZnQzMihUcnVzdGVk
SW1tMzIoMyArIDQpLCBzY3JhdGNoMik7CisKKyAgICByZXR1cm4gYnJhbmNoVGVzdDgoWmVybywg
QmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgVGltZXNPbmUsIE1hcmtlZEJsb2NrOjpvZmZz
ZXRPZk1hcmtzKCkpKTsKK30KKworSklUOjpKdW1wIEpJVDo6Y2hlY2tNYXJrV29yZChKU0NlbGwq
IG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCit7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0g
TWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKTsKKyAgICBzaXplX3QgaW5kZXggPSAocmVpbnRl
cnByZXRfY2FzdDxzaXplX3Q+KG93bmVyKSAmIH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSA+PiAo
MyArIDQpOworICAgIHVpbnQzMl90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dCo+KChyZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBNYXJrZWRCbG9jazo6b2Zmc2V0
T2ZNYXJrcygpKSkgKyBpbmRleDsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwg
c2NyYXRjaCk7CisgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Moc2NyYXRjaCkp
OworfQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdp
c3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBX
cml0ZUJhcnJpZXJNb2RlIG1vZGUsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gxKTsKICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9Q
QVJBTSh1c2VLaW5kKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFVOVVNFRF9QQVJB
TShtb2RlKTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaCk7CisgICAgQVNTRVJUKG93bmVy
ICE9IHNjcmF0Y2gxKTsKICAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOwotICAgIAotI2lm
IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBlbWl0Q291bnQoV3JpdGVCYXJy
aWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCisKKy8qCisgICAg
dW5zaWduZWQgbnVtQ2FsbHNCZWZvcmUgPSBtX2NhbGxzLnNpemUoKTsKKyAgICBKdW1wIHZhbHVl
Tm90Q2VsbDsKKyovCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykgCisg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHZhbHVlLCB0YWdNYXNr
UmVnaXN0ZXIpKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsK
KworLyoKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVWYWx1ZSA9IGZhbHNlOworICAgIGlmIChzY3Jh
dGNoMSA9PSBzY3JhdGNoMikgeworICAgICAgICBwdXNoKHZhbHVlKTsKKyAgICAgICAgc2NyYXRj
aDIgPSB2YWx1ZTsKKyAgICAgICAgbmVlZFRvUmVzdG9yZVZhbHVlID0gdHJ1ZTsKKyAgICB9Cisg
ICAgSnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gY2hlY2tNYXJrV29yZChvd25lciwgc2NyYXRj
aDEsIHNjcmF0Y2gyKTsKKyAgICBpZiAobmVlZFRvUmVzdG9yZVZhbHVlKQorICAgICAgICBwb3Ao
dmFsdWUpOworKi8KKworLyoKKyAgICBwdXNoKHJlZ1QwKTsKKyAgICBwdXNoKHJlZ1QxKTsKKyAg
ICBwdXNoKHJlZ1QyKTsKKyAgICBwdXNoKHJlZ1QzKTsKKyAgICBwdXNoKHJlZ1Q0KTsKKworICAg
IC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoeSB3ZSBuZWVkIHRoaXMuCisgICAgcHVzaChyZWdUNCk7
CisgICAgcHVzaChyZWdUNCk7CisKKyAgICAvLyBDYWxsIEhlYXA6OndyaXRlQmFycmllci4KKyAg
ICBpZiAobW9kZSA9PSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKSB7CisgICAgICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmll
cik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG93bmVyKTsKKyAgICAgICAgc3R1YkNh
bGwuY2FsbCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChvd25lcik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHZhbHVlKTsKKyAgICAgICAg
c3R1YkNhbGwuY2FsbCgpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoeSB3
ZSBuZWVkIHRoaXMuCisgICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDQpOworCisgICAgcG9w
KHJlZ1Q0KTsKKyAgICBwb3AocmVnVDMpOworICAgIHBvcChyZWdUMik7CisgICAgcG9wKHJlZ1Qx
KTsKKyAgICBwb3AocmVnVDApOworKi8KKy8qCisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAg
IGRlZmluaXRlbHlOb3RNYXJrZWQubGluayh0aGlzKTsKKyAgICBpZiAobmVlZFRvUmVzdG9yZVZh
bHVlKQorICAgICAgICBwb3AodmFsdWUpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworKi8KKy8q
CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykgCisgICAgICAgIHZhbHVl
Tm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwg
dGhpcywgbV9jb2RlQmxvY2spOworICAgIGlmIChtb2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJh
cnJpZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHNbbnVtQ2FsbHNCZWZvcmVdLnRvID09IGN0
aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsobV9jYWxsc1tudW1DYWxsc0JlZm9yZV0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBf
dW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKG1fY2FsbHNbbnVtQ2FsbHNCZWZvcmVdLnRvID09IGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIp
OworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbbnVtQ2FsbHNCZWZvcmVdLmZyb20s
IEZ1bmN0aW9uUHRyKGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIpKTsKKyAgICB9CisqLwogfQogCi12
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVl
LCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1vZGUgbW9kZSwgV3JpdGVCYXJyaWVy
VXNlS2luZCB1c2VLaW5kKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsK
ICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwot
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIAot
I2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBlbWl0Q291bnQoV3JpdGVC
YXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCisvKgorICAg
IEp1bXAgdmFsdWVOb3RDZWxsOworICAgIHVuc2lnbmVkIG51bUNhbGxzQmVmb3JlID0gbV9jYWxs
cy5zaXplKCk7CisqLworCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykg
CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHZhbHVlLCB0YWdN
YXNrUmVnaXN0ZXIpKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgp
KTsKKworLyoKKyAgICBKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBjaGVja01hcmtXb3JkKG93
bmVyLCBzY3JhdGNoKTsKKyovCisKKy8qCisgICAgcHVzaChyZWdUMCk7CisgICAgcHVzaChyZWdU
MSk7CisgICAgcHVzaChyZWdUMik7CisgICAgcHVzaChyZWdUMyk7CisgICAgcHVzaChyZWdUNCk7
CisqLworCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2h5IHdlIG5lZWQgdGhpcy4KKy8qCisg
ICAgcHVzaChyZWdUNCk7CisgICAgcHVzaChyZWdUNCk7CisqLworCisvKgorICAgIGlmIChtb2Rl
ID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKTsKKyAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihvd25lcikpOworICAgICAgICBz
dHViQ2FsbC5jYWxsKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX2hlYXBfd3JpdGVfYmFycmllcik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIob3duZXIpKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQodmFsdWUpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgfQorKi8KKyAgICAvLyBG
SVhNRTogRmlndXJlIG91dCB3aHkgd2UgbmVlZCB0aGlzLgorLyoKKyAgICBwb3AocmVnVDQpOwor
ICAgIHBvcChyZWdUNCk7CisqLworLyoKKyAgICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUMyk7
CisgICAgcG9wKHJlZ1QyKTsKKyAgICBwb3AocmVnVDEpOworICAgIHBvcChyZWdUMCk7CisqLwor
LyoKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsodGhpcyk7CisqLworLyoKKyAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKSAKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxp
bmsodGhpcyk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2Nv
ZGVCbG9jayk7CisgICAgaWYgKG1vZGUgPT0gVW5jb25kaXRpb25hbFdyaXRlQmFycmllcikgewor
ICAgICAgICBBU1NFUlQobV9jYWxsc1tudW1DYWxsc0JlZm9yZV0udG8gPT0gY3RpX2hlYXBfdW5j
b25kaXRpb25hbF93cml0ZV9iYXJyaWVyKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2Nh
bGxzW251bUNhbGxzQmVmb3JlXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfaGVhcF91bmNvbmRpdGlv
bmFsX3dyaXRlX2JhcnJpZXIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobV9jYWxs
c1tudW1DYWxsc0JlZm9yZV0udG8gPT0gY3RpX2hlYXBfd3JpdGVfYmFycmllcik7CisgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tudW1DYWxsc0JlZm9yZV0uZnJvbSwgRnVuY3Rpb25Q
dHIoY3RpX2hlYXBfd3JpdGVfYmFycmllcikpOworICAgIH0KKyovCiB9CiAKIEpJVDo6SnVtcCBK
SVQ6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUmVnaXN0ZXJJRCBzY3Jh
dGNoKQpAQCAtMTU4Miw3ICsxNzkyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlW
YWwoQnlWYWxJbgogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgCisKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNhc2Ug
SklUSW50MzI6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CkBAIC0xNjA4LDEwICsxODE4LDggQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLSAg
ICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJl
c3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93
UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKLSAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25l
KSk7CiAgICAgCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNzcsNiArMjI3NywyOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcF9wdXRfdG9fc2NvCiAgICAgfQogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBoZWFwX3dyaXRlX2JhcnJpZXIpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5oZWFwKCktPndyaXRlQmFycmllcihz
dGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLmFzQ2VsbCgpLCBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNWYWx1ZSgpKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgaGVhcF91bmNvbmRp
dGlvbmFsX3dyaXRlX2JhcnJpZXIpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOworICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5oZWFwKCktPndyaXRlQmFycmllcihz
dGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLmFzQ2VsbCgpKTsKK30KKworREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfaW5pdF9nbG9iYWxfY29uc3QpCit7CisgICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOworICAgIEluc3RydWN0aW9uKiBwYyA9IHN0YWNrRnJhbWUuYXJnc1swXS5wYygp
OworCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSBwY1sxXS51
LnJlZ2lzdGVyUG9pbnRlcjsKKyAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+cihwY1syXS51Lm9w
ZXJhbmQpLmpzVmFsdWUoKTsKKyAgICByZWdpc3RlclBvaW50ZXItPnNldChleGVjLT52bSgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHZhbHVlKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaAkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNiArMzg1LDcgQEAgdm9pZCBKSVRf
U1RVQiBjdGlfaGFuZGxlX3dhdGNoZG9nX3RpbWVyKAogaW50IEpJVF9TVFVCIGN0aV9oYXNfcHJv
cGVydHkoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVC
IGN0aV9vcF9kZWJ1ZyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQg
SklUX1NUVUIgY3RpX29wX2VuZChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
K3ZvaWQgSklUX1NUVUIgY3RpX29wX2luaXRfZ2xvYmFsX2NvbnN0KFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcG9wX3Njb3BlKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHJv
ZmlsZV9kaWRfY2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQg
SklUX1NUVUIgY3RpX29wX3Byb2ZpbGVfd2lsbF9jYWxsKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwpAQCAtNDIxLDcgKzQyMiw4IEBAIHZvaWQqIEpJVF9TVFVCIGN0aV92bV90
aHJvdyhTVFVCX0FSR1NfREUKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZl
X3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFs
dWUgSklUX1NUVUIgY3RpX29wX2dldF9mcm9tX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X3RvX3Njb3BlKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotCit2b2lkIEpJVF9TVFVCIGN0aV9oZWFwX3dy
aXRlX2JhcnJpZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJ
VF9TVFVCIGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcihTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogRW5jb2RlZEV4
Y2VwdGlvbkhhbmRsZXIgSklUX1NUVUIgY3RpX3ZtX2hhbmRsZV9leGNlcHRpb24oQ2FsbEZyYW1l
KikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiAjZWxzZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmgJKHJldmlzaW9uIDE1NjExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBACiAjZW5kaWYKIAogLy8gRGlzYWJsZSBpbmxpbmUgY2FjaGluZyBv
ZiBnZXRfYnlfaWQgYW5kIHB1dF9ieV9pZC4KLSNkZWZpbmUgTExJTlRfQUxXQVlTX0FDQ0VTU19T
TE9XIDAKKyNkZWZpbmUgTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XIDEKIAogLy8gRW5hYmxlIE9T
UiBpbnRvIHRoZSBKSVQuIERpc2FibGluZyB0aGlzIHdoaWxlIHRoZSBMTEludCBpcyBlbmFibGVk
IGVmZmVjdGl2ZWx5CiAvLyB0dXJucyBvZmYgYWxsIEpJVCdpbmcsIHNpbmNlIGluIExMSW50J3Mg
cGFybGFuY2UsIE9TUiBzdWJzdW1lcyBhbnkgZm9ybSBvZiBKSVQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTU2MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMzNiw2ICsxMzM2LDE4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9wdXRfdG9fc2MKICAgICBMTElOVF9FTkQoKTsKIH0KIAorZXh0ZXJuICJDIiB2b2lk
IGxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyhKU0NlbGwqIG93bmVyLCBKU0NlbGwqIHZhbHVlKQor
eworICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKG93bmVyKTsKKyAgICBoZWFwLT53cml0ZUJh
cnJpZXIob3duZXIsIHZhbHVlKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIGxsaW50X3VuY29uZGl0
aW9uYWxfd3JpdGVfYmFycmllcl9zbG93KEpTQ2VsbCogb3duZXIpCit7CisgICAgSGVhcCogaGVh
cCA9IEhlYXA6OmhlYXAob3duZXIpOworICAgIGhlYXAtPndyaXRlQmFycmllcihvd25lcik7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludAogCiAjZW5kaWYgLy8gRU5BQkxFKExMSU5U
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJ
KHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIG5hbWVzcGFjZSBMTElu
dCB7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX29wZXJhbmQo
RXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJlLCBpbnQgb3BlcmFuZCk7CiBl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShFeGVjU3RhdGUq
LCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIGludCBvcGVyYW5kKTsKK2V4dGVybiAiQyIg
dm9pZCBsbGludF93cml0ZV9iYXJyaWVyX3Nsb3coSlNDZWxsKiwgSlNDZWxsKik7CitleHRlcm4g
IkMiIHZvaWQgbGxpbnRfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyX3Nsb3coSlNDZWxsKik7
CiAKICNkZWZpbmUgTExJTlRfU0xPV19QQVRIX0RFQ0wobmFtZSkgXAogICAgIGV4dGVybiAiQyIg
U2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50XyMjbmFtZShFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0
aW9uKiBwYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTcyLDggKzE3MiwxMDQgQEAgbWFjcm8gbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwo
aW5kZXgsIAogICAgIGJ0cW56IHZhbHVlLCB0YWdNYXNrLCBzbG93CiBlbmQKIAotbWFjcm8gd3Jp
dGVCYXJyaWVyKHZhbHVlKQotICAgICMgTm90aGluZyB0byBkbywgc2luY2Ugd2UgZG9uJ3QgaGF2
ZSBhIGdlbmVyYXRpb25hbCBvciBpbmNyZW1lbnRhbCBjb2xsZWN0b3IuCitjb25zdCBNYXJrZWRC
bG9ja1NpemUgPSA2NCAqIDEwMjQKK2NvbnN0IE1hcmtlZEJsb2NrSGVhZGVyTWFzayA9IH4oTWFy
a2VkQmxvY2tTaXplIC0gMSkKKyMgc2l6ZW9mKGF0b20pID09IDgKK2NvbnN0IEF0b21OdW1iZXJT
aGlmdCA9IDMKK2NvbnN0IEJpdE1hcFdvcmRTaGlmdCA9IDUKK2NvbnN0IEJpdE1hcFdvcmRTaXpl
ID0gMzIKK2NvbnN0IEJpdE1hcFdvcmRNb2QgPSBCaXRNYXBXb3JkU2l6ZSAtIDEKKworIyBDbG9i
YmVycyBib3RoIGNlbGwgYW5kIHNjcmF0Y2guCittYWNybyBpc01hcmtlZChjZWxsLCBzY3JhdGNo
LCBjb250aW51YXRpb24pCisgICAgbW92ZSBjZWxsLCBzY3JhdGNoCisKKyMgR2V0IHRoZSBpbmRl
eCBvZiB0aGUgd29yZCBpbiB0aGUgYml0bWFwLgorICAgIGFuZHEgfk1hcmtlZEJsb2NrSGVhZGVy
TWFzaywgY2VsbAorICAgIHB1c2hxIGNlbGwKKyAgICByc2hpZnRwIEF0b21OdW1iZXJTaGlmdCAr
IEJpdE1hcFdvcmRTaGlmdCwgY2VsbAorCisjIExvYWQgdGhlIHdvcmQgZnJvbSB0aGUgYml0bWFw
LgorICAgIGFuZHEgTWFya2VkQmxvY2tIZWFkZXJNYXNrLCBzY3JhdGNoCisgICAgbG9hZGkgTWFy
a2VkQmxvY2s6Om1fbWFya3Nbc2NyYXRjaCwgY2VsbCwgNF0sIHNjcmF0Y2gKKworIyBHZXQgdGhl
IGFtb3VudCB0byByaWdodCBzaGlmdCB0aGUgcmVzdWx0IGJ5LgorICAgIHBvcHEgY2VsbAorICAg
IHJzaGlmdHAgQXRvbU51bWJlclNoaWZ0LCBjZWxsCisgICAgYW5kcSBCaXRNYXBXb3JkTW9kLCBj
ZWxsCisgICAgcnNoaWZ0cCBjZWxsLCBzY3JhdGNoCisKKyMgQ2hlY2sgdGhlIHJpZ2h0LW1vc3Qg
Yml0LgorICAgIGFuZHEgMSwgc2NyYXRjaAorCisgICAgY29udGludWF0aW9uKHNjcmF0Y2gpCitl
bmQKKworbWFjcm8gdW5jb25kaXRpb25hbFdyaXRlQmFycmllcihvd25lcikKKyAgICBwdXNocSB0
MAorICAgIHB1c2hxIHQxCisgICAgcHVzaHEgdDIKKyAgICBwdXNocSB0MworICAgIHB1c2hxIHQ0
CisgICAgcHVzaHEgdDUKKyAgICBwdXNocSB0NgorICAgIGNDYWxsMihfbGxpbnRfdW5jb25kaXRp
b25hbF93cml0ZV9iYXJyaWVyX3Nsb3csIG93bmVyLCBvd25lcikKKyAgICBwb3BxIHQ2CisgICAg
cG9wcSB0NQorICAgIHBvcHEgdDQKKyAgICBwb3BxIHQzCisgICAgcG9wcSB0MgorICAgIHBvcHEg
dDEKKyAgICBwb3BxIHQwCisjICAgIHN0b3JlcSAwLCBbc3BdCisjICAgIHN0b3JlcSAwLCA4W3Nw
XQorIyAgICBzdG9yZXEgMCwgMTZbc3BdCisjICAgIHN0b3JlcSAwLCAyNFtzcF0KKyMgICAgc3Rv
cmVxIDAsIDMyW3NwXQorIyAgICBzdG9yZXEgMCwgNDBbc3BdCisjICAgIHN0b3JlcSAwLCA0OFtz
cF0KK2VuZAorCittYWNybyB3cml0ZUJhcnJpZXJXaXRoVmFsdWUob3duZXIsIHZhbHVlKQorIyBT
a2lwIGlmIHZhbHVlIGlzIG51bGwgb3Igbm90IGEgY2VsbC4KKyAgICBidHB6IHZhbHVlLCAud3Jp
dGVCYXJyaWVyRG9uZQorICAgIGJ0cW56IHZhbHVlLCB0YWdNYXNrLCAud3JpdGVCYXJyaWVyRG9u
ZQorIyAgICBwdXNocSBvd25lcgorIyAgICBwdXNocSB2YWx1ZQorIyAgICBpc01hcmtlZChvd25l
ciwgdmFsdWUsIAorIyAgICAgICAgbWFjcm8gKG1hcmtlZCkKKyMjIElmIG93bmVyIGlzbid0IG1h
cmtlZCwgdGhlbiB3ZSdyZSBnb29kIHRvIGdvLgorIyAgICAgICAgICAgIGJ0YnogbWFya2VkLCAu
dmFsdWVJc05vbk51bGxDZWxsCisjICAgICAgICAgICAgcG9wcSB2YWx1ZQorIyAgICAgICAgICAg
IHBvcHEgb3duZXIKKyAgICAgICAgICAgIHB1c2hxIHQwCisgICAgICAgICAgICBwdXNocSB0MQor
ICAgICAgICAgICAgcHVzaHEgdDIKKyAgICAgICAgICAgIHB1c2hxIHQzCisgICAgICAgICAgICBw
dXNocSB0NAorICAgICAgICAgICAgcHVzaHEgdDUKKyAgICAgICAgICAgIHB1c2hxIHQ2CisgICAg
ICAgICAgICBjQ2FsbDIoX2xsaW50X3dyaXRlX2JhcnJpZXJfc2xvdywgb3duZXIsIHZhbHVlKQor
ICAgICAgICAgICAgcG9wcSB0NgorICAgICAgICAgICAgcG9wcSB0NQorICAgICAgICAgICAgcG9w
cSB0NAorICAgICAgICAgICAgcG9wcSB0MworICAgICAgICAgICAgcG9wcSB0MgorICAgICAgICAg
ICAgcG9wcSB0MQorICAgICAgICAgICAgcG9wcSB0MAorIyAgICBzdG9yZXEgMCwgW3NwXQorIyAg
ICBzdG9yZXEgMCwgOFtzcF0KKyMgICAgc3RvcmVxIDAsIDE2W3NwXQorIyAgICBzdG9yZXEgMCwg
MjRbc3BdCisjICAgIHN0b3JlcSAwLCAzMltzcF0KKyMgICAgc3RvcmVxIDAsIDQwW3NwXQorIyAg
ICBzdG9yZXEgMCwgNDhbc3BdCisjICAgICAgICAgICAgam1wIC53cml0ZUJhcnJpZXJEb25lCisj
ICAgICAgICBlbmQpCisjLnZhbHVlSXNOb25OdWxsQ2VsbDoKKyMgICAgcG9wcSB2YWx1ZQorIyAg
ICBwb3BxIG93bmVyCisud3JpdGVCYXJyaWVyRG9uZToKIGVuZAogCiBtYWNybyB2YWx1ZVByb2Zp
bGUodmFsdWUsIG9wZXJhbmQsIHNjcmF0Y2gpCkBAIC04MzIsMTEgKzkyOCwxMyBAQCBlbmQKIAog
bWFjcm8gc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwg
b2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBm
aXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5lCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVl
KG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZs
eVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlP
ZmZzZXRBc0ludAogICAgIHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0
QXNJbnQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6CisgICAgd3JpdGVCYXJyaWVyV2l0aFZh
bHVlKG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGFkZHAgc2l6ZW9mIEpTT2JqZWN0IC0g
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6
CiAgICAgc3RvcmVxIHZhbHVlLCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIDhbb2JqZWN0
QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0KQEAgLTg0Nyw3ICs5NDUsOSBAQCBf
bGxpbnRfb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIs
IHQxKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDEsIHQwKQogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUodDEsIHQyKQotICAgIHdyaXRlQmFycmllcih0MikKKyAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgdDEKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QxXSwgdDEK
KyAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDEsIHQyKQogICAgIHN0b3JlcSB0MiwgW3QwXQog
ICAgIGRpc3BhdGNoKDUpCiAKQEAgLTkzNiwxMyArMTAzNiwxNCBAQCBtYWNybyBwdXRCeUlkKGdl
dFByb3BlcnR5U3RvcmFnZSkKICAgICBnZXRQcm9wZXJ0eVN0b3JhZ2UoCiAgICAgICAgIHQwLAog
ICAgICAgICB0MywKLSAgICAgICAgbWFjcm8gKHByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaCkKLSAg
ICAgICAgICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBdLCB0MSwgLm9wUHV0QnlJZFNs
b3cKLSAgICAgICAgICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig1LCB0MSkKLSAgICAgICAgICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHNjcmF0Y2gpCi0gICAgICAgICAgICB3cml0ZUJh
cnJpZXIodDApCi0gICAgICAgICAgICBzdG9yZXEgc2NyYXRjaCwgW3Byb3BlcnR5U3RvcmFnZSwg
dDFdCi0gICAgICAgICAgICBkaXNwYXRjaCg5KQorICAgICAgICBtYWNybyAocHJvcGVydHlTdG9y
YWdlLCBzY3JhdGNoKSAgICAgICAgICAgICAgICAgICAgICAgICMgTGl2ZSB2YXJpYWJsZXMKKyAg
ICAgICAgICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBdLCB0MSwgLm9wUHV0QnlJZFNs
b3cgICAjIHQwLCB0MSwgdDIsIHQzCisgICAgICAgICAgICBtb3ZlIHQwLCB0MSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0MCwgdDEsIHQyLCB0MworICAgICAgICAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0Miwgc2NyYXRjaCkgICAgICAgICAgICAgICAgICMg
dDAsIHQxLCB0MiwgdDMKKyAgICAgICAgICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZSh0MSwgc2Ny
YXRjaCkgICAgICAgICAgICAgICAgICAjIHQwLCB0MSwgICAsIHQzCisgICAgICAgICAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oNSwgdDEpICAgICAgICAgICAgICAgICAgICAgICAgIyB0MCwgdDEs
ICAgLCB0MworICAgICAgICAgICAgc3RvcmVxIHNjcmF0Y2gsIFtwcm9wZXJ0eVN0b3JhZ2UsIHQx
XSAgICAgICAgICAgICAgICMgdDAsIHQxLCAgICwgdDMKKyAgICAgICAgICAgIGRpc3BhdGNoKDkp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgLCAgICwgICAsICAK
ICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTk3Myw5ICsxMDc0LDEwIEBAIG1hY3JvIHB1dEJ5SWRU
cmFuc2l0aW9uKGFkZGl0aW9uYWxDaGVja3MKICAgICAgICAgbWFjcm8gKHByb3BlcnR5U3RvcmFn
ZSwgc2NyYXRjaCkKICAgICAgICAgICAgIGFkZHAgdDEsIHByb3BlcnR5U3RvcmFnZSwgdDMKICAg
ICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQxKQotICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKHQxKQorICAgICAgICAgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQwLCB0MSkK
ICAgICAgICAgICAgIHN0b3JlcSB0MSwgW3QzXQogICAgICAgICAgICAgbG9hZHBGcm9tSW5zdHJ1
Y3Rpb24oNiwgdDEpCisgICAgICAgICAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDAsIHQxKQog
ICAgICAgICAgICAgc3RvcmVwIHQxLCBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXQogICAgICAgICAg
ICAgZGlzcGF0Y2goOSkKICAgICAgICAgZW5kKQpAQCAtMTEzMCw3ICsxMjMyLDggQEAgbWFjcm8g
Y29udGlndW91c1B1dEJ5VmFsKHN0b3JlQ2FsbGJhY2spCiAgICAgYmlhZXEgdDMsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0
MF0sIC5vdXRPZkJvdW5kcwogLnN0b3JlUmVzdWx0OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
bigzLCB0MikKLSAgICBzdG9yZUNhbGxiYWNrKHQyLCB0MSwgW3QwLCB0MywgOF0pCisgICAgbGVh
cCBbdDAsIHQzLCA4XSwgdDAKKyAgICBzdG9yZUNhbGxiYWNrKHQyLCB0MywgW3QwXSkKICAgICBk
aXNwYXRjaCg1KQogCiAub3V0T2ZCb3VuZHM6CkBAIC0xMTg1LDcgKzEyODgsNyBAQCBfbGxpbnRf
b3BfcHV0X2J5X3ZhbDoKICAgICBjb250aWd1b3VzUHV0QnlWYWwoCiAgICAgICAgIG1hY3JvIChv
cGVyYW5kLCBzY3JhdGNoLCBhZGRyZXNzKQogICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShvcGVyYW5kLCBzY3JhdGNoKQotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKHNjcmF0Y2gp
CisgICAgICAgICAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDEsIHNjcmF0Y2gpCiAgICAgICAg
ICAgICBzdG9yZXAgc2NyYXRjaCwgYWRkcmVzcwogICAgICAgICBlbmQpCiAKQEAgLTExOTQsMjEg
KzEyOTcsMjIgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgYmlhZXEgdDMsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnZlY3Rvckxlbmd0aFt0
MF0sIC5vcFB1dEJ5VmFsT3V0T2ZCb3VuZHMKICAgICBidHF6IEFycmF5U3RvcmFnZTo6bV92ZWN0
b3JbdDAsIHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQogLm9wUHV0QnlWYWxB
cnJheVN0b3JhZ2VTdG9yZVJlc3VsdDoKKyAgICBsZWFwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3Jb
dDAsIHQzLCA4XSwgdDAKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDIpCi0gICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCi0gICAgd3JpdGVCYXJyaWVyKHQxKQotICAgIHN0
b3JlcSB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdCisgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZSh0MiwgdDMpCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQxLCB0MykK
KyAgICBzdG9yZXEgdDMsIFt0MF0KICAgICBkaXNwYXRjaCg1KQogCiAub3BQdXRCeVZhbEFycmF5
U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0gICAgICAgIGxvYWRwRnJvbUlu
c3RydWN0aW9uKDQsIHQxKQotICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0
b3JlVG9Ib2xlW3QxXQorICAgICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig0LCB0MikKKyAgICAg
ICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KICAgICBlbmQK
ICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KICAgICBi
aWIgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhz
LnB1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKLSAg
ICBhZGRpIDEsIHQzLCB0MQotICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXQorICAgIGFkZGkgMSwg
dDMsIHQyCisgICAgc3RvcmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdI
ZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsQXJy
YXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxPdXRPZkJvdW5kczoKQEAgLTE4MzUs
MTIgKzE5MzksMTYgQEAgbWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMywgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEpCiAgICAgbG9h
ZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDApCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCisg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0Ml0sIHQyCisgICAgd3JpdGVCYXJy
aWVyV2l0aFZhbHVlKHQyLCB0MSkKICAgICBzdG9yZXEgdDEsIFt0MF0KIGVuZAogCiBtYWNybyBw
dXRDbG9zdXJlVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQw
LCB0MikKICAgICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQwCiAg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQogICAgIHN0b3JlcSB0MiwgW3QwLCB0MSwg
OF0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5y
Ygo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVj
dGlvbnMucmIJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZs
aW5lYXNtL2luc3RydWN0aW9ucy5yYgkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOSBAQCBN
QUNST19JTlNUUlVDVElPTlMgPQogICAgICAiYmNkMmkiLAogICAgICAibW92ZHoiLAogICAgICAi
cG9wIiwKKyAgICAgInBvcHEiLAogICAgICAicHVzaCIsCisgICAgICJwdXNocSIsCiAgICAgICJt
b3ZlIiwKICAgICAgInN4aTJxIiwKICAgICAgInp4aTJxIiwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEw
MCw3IEBAIGNsYXNzIFJlZ2lzdGVySUQKICAgICAgICAgICAgIHdoZW4gOnF1YWQKICAgICAgICAg
ICAgICAgICBpc1g2NCA/ICIlcmF4IiA6IHJhaXNlCiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiSW52YWxpZCBraW5kICN7a2lu
ZH0gZm9yIG5hbWUgI3tuYW1lfSIKICAgICAgICAgICAgIGVuZAogICAgICAgICB3aGVuICJ0MSIs
ICJhMSIsICJyMSIKICAgICAgICAgICAgIGNhc2Uga2luZApAQCAtOTgyLDggKzk4MiwxMiBAQCBj
bGFzcyBJbnN0cnVjdGlvbgogICAgICAgICAgICAgZW5kCiAgICAgICAgIHdoZW4gInBvcCIKICAg
ICAgICAgICAgICRhc20ucHV0cyAicG9wICN7b3BlcmFuZHNbMF0ueDg2T3BlcmFuZCg6cHRyKX0i
CisgICAgICAgIHdoZW4gInBvcHEiCisgICAgICAgICAgICAkYXNtLnB1dHMgInBvcHEgI3tvcGVy
YW5kc1swXS54ODZPcGVyYW5kKDpwdHIpfSIKICAgICAgICAgd2hlbiAicHVzaCIKICAgICAgICAg
ICAgICRhc20ucHV0cyAicHVzaCAje29wZXJhbmRzWzBdLng4Nk9wZXJhbmQoOnB0cil9IgorICAg
ICAgICB3aGVuICJwdXNocSIKKyAgICAgICAgICAgICRhc20ucHV0cyAicHVzaHEgI3tvcGVyYW5k
c1swXS54ODZPcGVyYW5kKDpwdHIpfSIKICAgICAgICAgd2hlbiAibW92ZSIKICAgICAgICAgICAg
IGhhbmRsZU1vdmUKICAgICAgICAgd2hlbiAic3hpMnEiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2
ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKKyAgICBzaXpl
X3QgdG90YWxTaXplKFN0cnVjdHVyZSopOworCiAgICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQogICAgIHZvaWQqIGJhc2UoU3Ry
dWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsMjIgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSBzaXplX3QgQnV0dGVyZmx5Ojp0b3RhbFNpemUoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAg
IHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICBib29sIGhhc0luZGV4aW5n
SGVhZGVyID0gc3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpOworICAgIGlmIChV
TkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBpbmRl
eGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyA9IGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAw
OworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHJl
dHVybiBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwg
aGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKwogaW5s
aW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBy
ZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNTYxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Ny
ZWF0ZV90aGlzKQogCiAgICAgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gcGNbM10udS5vcGVyYW5k
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uc3RydWN0b3ItPmFsbG9jYXRpb25Qcm9m
aWxlKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+c3RydWN0dXJlKCk7Ci0gICAgUkVUVVJOKGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSkpOworICAgIEpTT2JqZWN0KiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpOworICAgIFJFVFVSTihyZXN1
bHQpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhpcykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24g
MTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5
IGNhbm5vdCBiZQogICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4K
LSAgICBzaXplX3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IHByZUNhcGFjaXR5KFN0cnVjdHVyZSopOwogICAgIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqKTsKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTU2MTEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3MCw2ICsyNzAsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNl
KFZNJiB2CiAgICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRvIGNob29zZSB0byBhbGxvY2F0ZSBh
IG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBv
bmUuCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgd2lsbFJlcGxhY2VPbGRC
dXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgdm9pZCogbmV3QWxs
b2NCYXNlID0gMDsKICAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHk7CiAgICAgLy8gSWYg
dGhlIGN1cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKGJ1dCBub3Qg
dG9vIGxhcmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQuCkBAIC0zMjEsOCArMzIyLDggQEAg
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogCiAgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJp
YXM7Ci0KLSAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBzZXRCdXR0ZXJmbHlX
aXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUobmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBsYWNlT2xk
QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKIAogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtNjk3LDkgKzY5OCw5IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhB
cnJheVN0b3JhZ2UKICAgICAKICAgICBpZiAoc3RhcnRJbmRleCArIGNvdW50ID4gdmVjdG9yTGVu
Z3RoKQogICAgICAgICBjb3VudCA9IHZlY3Rvckxlbmd0aCAtIHN0YXJ0SW5kZXg7Ci0gICAgCisK
ICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHZlY3Rvckxlbmd0aCwgb2xkTGVu
Z3RoKTsKLSAgICAKKwogICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzQmVmb3JlU2hpZnRSZWdpb24g
PSBzdGFydEluZGV4OwogICAgIHVuc2lnbmVkIGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uID0g
c3RhcnRJbmRleCArIGNvdW50OwogICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzQWZ0ZXJTaGlmdFJl
Z2lvbiA9IHVzZWRWZWN0b3JMZW5ndGggLSBmaXJzdEluZGV4QWZ0ZXJTaGlmdFJlZ2lvbjsKQEAg
LTc0Myw3ICs3NDQsNiBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdl
CiAgICAgICAgIC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4gV2UgYWxzbyBkb24ndCBtb2RpZnkg
dGhlIHZlY3RvciBsZW5ndGggYmVjYXVzZSB3ZSdyZSBub3QgYWN0dWFsbHkgY2hhbmdpbmcKICAg
ICAgICAgLy8gaXRzIGxlbmd0aDsgd2UncmUganVzdCB1c2luZyBsZXNzIG9mIGl0LgogICAgIH0K
LSAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODU3LDEwICs4NTcsMTEgQEAgYm9vbCBK
U0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOwogCiAgICAgaWYgKG1vdmVGcm9udCAmJiBz
dG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2J1dHRlcmZseSA9IHN0
b3JhZ2UtPmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7Ci0gICAgICAg
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQoc3RydWN0dXJl
KCksIGNvdW50KTsKKyAgICAgICAgc3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50OwogICAgICAgICBzdG9y
YWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoICsgY291bnQpOworICAgICAgICBzZXRC
dXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUobmV3QnV0dGVyZmx5KTsKICAgICB9IGVs
c2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAg
ICAgICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwogICAg
IGVsc2UgaWYgKHVuc2hpZnRDb3VudFNsb3dDYXNlKGV4ZWMtPnZtKCksIG1vdmVGcm9udCwgY291
bnQpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
cmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDcsMTMgKzU0NywxNSBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiAgICAgfQogCiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwg
bV9idXR0ZXJmbHkpOyAKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1
dHRlcmZseSgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5KTsKLSAg
ICAKLSAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKwogICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gMDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KHZtLCB0aGlzLCBtYXApOworICAgIHNldEJ1dHRlcmZs
eVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShuZXdCdXR0ZXJmbHkpOworICAgIGRpZFJlcGxhY2VP
bGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgIAogICAgIHJl
dHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQpAQCAtNjEzLDcgKzYxNSwxMSBA
QCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5p
dGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZVVuZGVjaWRlZCk7CisKKyAgICB3aWxsUmVw
bGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBzZXRT
dHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAg
ICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CisKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5OwogfQogCkBAIC02MjIsNyArNjI4LDExIEBAIENv
bnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFs
SW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlSW50MzIpOworCisgICAgd2lsbFJlcGxhY2VPbGRC
dXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJl
QW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVw
bGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAg
cmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTYzMyw3ICs2
NDMsMTEgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogICAgIGZv
ciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAg
ICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUU5hTjsKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVEb3VibGUpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0
ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFj
ZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0
dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC02NDIsNyArNjU2
LDExIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVh
dGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisKKyAgICB3
aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAg
ICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5
KTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRl
cmZseSk7CisKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKQEAg
LTY2Myw3ICs2ODEsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YQogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2lu
ZGV4QmlhcyA9IDA7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0
ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJm
bHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9s
ZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtNzMwLDcgKzc1MiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
Ojpjb252ZXJ0VW5kZWNpZGVkCiAgICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgogICAg
IAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNl
T2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7
CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5i
dXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gc3RvcmFnZTsKIH0KIApAQCAtNzg3LDcgKzgxMywx
MSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgfQogICAg
IAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNl
T2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHko
KSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9y
YWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtODU2
LDcgKzg4NiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAg
ICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdp
bGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5i
dXR0ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJl
LCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0K
IApAQCAtODg1LDcgKzkxOSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29u
dGlndW91CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsK
KworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJm
bHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdT
dG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3
U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3Rv
cmFnZTsKIH0KIApAQCAtMjMyMSwxOCArMjM1OSwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFz
ZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2Fw
YWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KICAgICBpZiAoTElL
RUxZKCFpbmRleEJpYXMpKSB7CiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAg
ICAgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZs
eSk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5
KCktPmdyb3dBcnJheVJpZ2h0KAogICAgICAgICAgICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKICAgICAgICAgICAgIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3
VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKwogICAg
ICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVj
dG9yTGVuZ3RoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KG5ld0J1dHRlcmZseSk7CisgICAgICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CiAgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRv
bWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgogICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwg
c3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsgCiAgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0g
c3RkOjptaW4oaW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdW
ZWN0b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0
dGVyZmx5KCktPnJlc2l6ZUFycmF5KAogICAgICAgICB2bSwgdGhpcywKQEAgLTIzNDAsMTAgKzIz
ODIsMTEgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAg
ICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5n
dGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworCiAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7Cisg
ICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKG5ld0J1dHRlcmZseSk7Cisg
ICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzNTgsMTUgKzI0MDEsMTkgQEAgdm9pZCBKU09i
amVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIAogICAgICAgICBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKTsKICAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIHdpbGxS
ZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIG1f
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAogICAgICAgICB2bSwgdGhp
cywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAog
ICAgICAgICBvbGRWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAogICAgICAg
ICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgIG1fYnV0
dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBkaWRSZXBsYWNl
T2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOworCiAgICAgaWYgKGhh
c0RvdWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQogICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKClbaV0gPSBRTmFO
OwogICAgIH0KLSAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0
aCk7CiB9CiAKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2
bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw4IEBACiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUg
IkluZGV4aW5nSGVhZGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUg
IlByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgpAQCAtNjA0LDEz
ICs2MDYsMTYgQEAgcHVibGljOgogICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxl
dGUoRXhlY1N0YXRlKiBleGVjKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSog
Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
OwotICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZs
eSopOyAvLyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCisgICAgdm9pZCBz
ZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7CiAgICAgICAg
IAogICAgIHZvaWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXRT
dHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKICAgICB2
b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCB1bnNp
Z25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiwgU3RydWN0dXJlKik7CiAKKyAgICB2b2lk
IHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7Cisg
ICAgdm9pZCBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5
Kik7CisKICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7
CkBAIC0xMTIzLDggKzExMjgsMjggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzRXJyb3JJbnN0
YW5jZSgpIAogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRXJy
b3JJbnN0YW5jZVR5cGU7CiB9CiAKK2lubGluZSB2b2lkIEpTT2JqZWN0Ojp3aWxsUmVwbGFjZU9s
ZEJ1dHRlcmZseShWTSYgdm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBCdXR0ZXJmbHkqIG9s
ZEJ1dHRlcmZseSkKK3sKKyAgICBpZiAoIW9sZEJ1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHZvaWQqIG9sZEJhc2UgPSBvbGRCdXR0ZXJmbHkgPyBvbGRCdXR0ZXJmbHktPmJhc2Uob2xk
U3RydWN0dXJlKSA6IDA7CisgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRCdXR0ZXJmbHkgPyBvbGRC
dXR0ZXJmbHktPnRvdGFsU2l6ZShvbGRTdHJ1Y3R1cmUpIDogMDsKKyAgICB2bS5oZWFwLndpbGxB
YmFuZG9uU3RvcmFnZSh0aGlzLCBvbGRCYXNlLCBvbGRTaXplKTsKK30KKworaW5saW5lIHZvaWQg
SlNPYmplY3Q6OmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSwgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkpCit7CisgICAgaWYgKCFuZXdCdXR0ZXJm
bHkpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBuZXdCYXNlID0gbmV3QnV0dGVyZmx5ID8g
bmV3QnV0dGVyZmx5LT5iYXNlKG5ld1N0cnVjdHVyZSkgOiAwOworICAgIHNpemVfdCBuZXdTaXpl
ID0gbmV3QnV0dGVyZmx5ID8gbmV3QnV0dGVyZmx5LT50b3RhbFNpemUobmV3U3RydWN0dXJlKSA6
IDA7CisgICAgdm0uaGVhcC5kaWRBc3NpZ25TdG9yYWdlKHRoaXMsIG5ld0Jhc2UsIG5ld1NpemUp
OworfQorCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogeworICAg
IEFTU0VSVChzdHJ1Y3R1cmUpOworICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRo
aXMpKSk7CiAgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiAgICAgc2V0U3RydWN0dXJlKHZt
LCBzdHJ1Y3R1cmUpOwogfQpAQCAtMTI5MywxMCArMTMxOCwxNiBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwotICAg
ICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQorICAg
ICAgICBib29sIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gZmFsc2U7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpIHsKKyAgICAgICAgICAg
IHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwog
ICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0
T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgZGlkQWxsb2NhdGVOZXdCdXR0
ZXJmbHkgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5h
ZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IHNwZWNpZmljRnVuY3Rpb24pOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBpZiAoZGlkQWxsb2NhdGVOZXdC
dXR0ZXJmbHkpCisgICAgICAgICAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1
cmUoKSwgbmV3QnV0dGVyZmx5KTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwog
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CkBAIC0x
MzE0LDEyICsxMzQ1LDE5IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5h
bCgKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0KSkgewogICAgICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHk7Ci0gICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICBib29sIGRpZEFsbG9jYXRlTmV3QnV0dGVy
Zmx5ID0gZmFsc2U7CisgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRo
aXMtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZt
LCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgICAgICAgICAgbmV3QnV0dGVy
Zmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIGRpZEFsbG9jYXRlTmV3QnV0dGVy
Zmx5ID0gdHJ1ZTsKKyAgICAgICAgfQogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7
CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAg
ICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkp
OworICAgICAgICBpZiAoZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICBkaWRS
ZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAg
IHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcg
cHJvcGVydHk7IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVu
dGx5IGNhY2hhYmxlLAogICAgICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hh
YmxlIHN0YXRlLgpAQCAtMTM4OSw5ICsxNDI3LDExIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0Ojpz
ZXRTdHJ1Y3R1cmVBbmRSZWEKICAgICB9CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
IAorICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJm
bHkpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
CiAgICAgICAgIHZtLCBvbGRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUs
IG5ld0J1dHRlcmZseSk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVB
bmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUpCkBAIC0xNDI3LDEwICsxNDY3LDE2IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXRE
aXJlY3RXaXRob3V0VHIKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJU
KCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKLSAgICBpZiAoc3RydWN0
dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQorICAgIGJvb2wgZGlkQWxsb2Nh
dGVOZXdCdXR0ZXJmbHkgPSBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93
T3V0T2ZMaW5lU3RvcmFnZSgpKSB7CisgICAgICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZt
LCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0
cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAg
ICAgIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gdHJ1ZTsKKyAgICB9CiAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24o
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsK
ICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJm
bHkpOworICAgIGlmIChkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSkKKyAgICAgICAgZGlkUmVwbGFj
ZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CiAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkocmV2aXNpb24g
MTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksOSArMTA5LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHJldHVybiBtX2VudW1lcmF0aW9uQ2FjaGUuZ2V0KCk7CiAgICAgfQogICAg
IAotICAgIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hl
KFZNJiB2bSwgY29uc3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciog
dmFsdWUpCisgICAgaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldEVudW1lcmF0aW9u
Q2FjaGUoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmUqLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fZW51bWVyYXRpb25DYWNoZS5zZXQodm0sIG93bmVyLCB2
YWx1ZSk7CisgICAgICAgIG1fZW51bWVyYXRpb25DYWNoZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsK
ICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwRGF0YS5jcHAJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTYgKzE5
NywxOCBAQCBDaGVja2VkQm9vbGVhbiBNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwCiAKICAgICBz
aXplX3QgcmVxdWlyZWRTaXplID0gc3RkOjptYXgobV9jYXBhY2l0eSArIChtX2NhcGFjaXR5IC8g
MikgKyAxLCBtaW5pbXVtTWFwU2l6ZSk7CiAgICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7CisgICAg
RGVmZXJHQyBkZWZlcigqY2FsbEZyYW1lLT5oZWFwKCkpOworICAgIGNhbGxGcmFtZS0+aGVhcCgp
LT53aWxsQWJhbmRvblN0b3JhZ2UodGhpcywgbV9lbnRyaWVzLCBtX2NhcGFjaXR5ICogc2l6ZW9m
KEVudHJ5KSk7CiAgICAgaWYgKCFjYWxsRnJhbWUtPmhlYXAoKS0+dHJ5QWxsb2NhdGVTdG9yYWdl
KHRoaXMsIHJlcXVpcmVkU2l6ZSAqIHNpemVvZihFbnRyeSksICZuZXdTdG9yYWdlKSkgewogICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KLSAgICBEZWZlckdDIGRlZmVyKCpjYWxsRnJhbWUtPmhlYXAoKSk7CiAgICAg
RW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOwogICAg
IGlmIChzaG91bGRQYWNrKCkpCiAgICAgICAgIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5l
d0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CiAgICAgZWxzZQogICAgICAgICByZXBsYWNlQmFja2lu
Z1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CisgICAgY2FsbEZyYW1lLT5oZWFwKCkt
PmRpZEFzc2lnblN0b3JhZ2UodGhpcywgbV9lbnRyaWVzLCByZXF1aXJlZFNpemUgKiBzaXplb2Yo
RW50cnkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyAr
MjEyLDcgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICNpZiAhRU5BQkxFKFlBUlJfSklU
KQogICAgIHVzZVJlZ0V4cEpJVCgpID0gZmFsc2U7CiAjZW5kaWYKLSAgICAKKwogICAgIC8vIERv
IHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8gdGhlIG9w
dGlvbnM6CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkg
Pj0gdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICBBU1NFUlQodGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbigp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMTU2MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgU3RydWN0dXJl
OjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1h
dGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKICAgICBp
ZiAodGFibGUpIHsKLSAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgMCwgbnVtYmVyT2ZT
bG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAg
dGFibGUgPSB0YWJsZS0+Y29weSh2bSwgc3RydWN0dXJlLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9m
ZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwogICAgICAgICBzdHJ1Y3R1cmUtPm1f
bG9jay51bmxvY2soKTsKICAgICB9CiAgICAgCkBAIC03MDUsOCArNzA1LDExIEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKIAogICAgIC8vIElmIHRoZSBvYmplY3Qg
aGFkIGEgQnV0dGVyZmx5IGJ1dCBhZnRlciBmbGF0dGVuaW5nL2NvbXBhY3Rpbmcgd2Ugbm8gbG9u
Z2VyIGhhdmUgbmVlZCBvZiBpdCwKICAgICAvLyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0IGJlY2F1
c2UgdGhlIGNvbGxlY3RvciBkZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1cmUgdG8ga25vdyB0aGUgc2l6
ZSBmb3IgY29weWluZy4KLSAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhdGhpcy0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKKyAg
ICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAm
JiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkgeworICAgICAgICBvYmplY3QtPndp
bGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLCBvYmplY3QtPmJ1
dHRlcmZseSgpKTsKICAgICAgICAgb2JqZWN0LT5zZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IHRoaXMsIDApOworICAgICAgICBvYmplY3QtPmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHRo
aXMsIDApOworICAgIH0KIAogICAgIHJldHVybiB0aGlzOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1NjExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MjIsNiArNDIyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0UHJldmlvdXNJRChWTSYgdm0s
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgeworICAg
ICAgICBBU1NFUlQodHJhbnNpdGlvbiA9PSB0aGlzKTsKICAgICAgICAgaWYgKHR5cGVJbmZvKCku
c3RydWN0dXJlSGFzUmFyZURhdGEoKSkKICAgICAgICAgICAgIHJhcmVEYXRhKCktPnNldFByZXZp
b3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVE
YXRhSW5saW5lcy5oCShyZXZpc2lvbiAxNTYxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
OSArMzUsOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6cHJlCiAgICAg
cmV0dXJuIG1fcHJldmlvdXMuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVE
YXRhOjpzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRQcmV2aW91
c0lEKFZNJiB2bSwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgbV9w
cmV2aW91cy5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CisgICAgbV9wcmV2aW91cy5z
ZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CiB9CiAKIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVE
YXRhOjpjbGVhclByZXZpb3VzSUQoKQpAQCAtNTAsOSArNTAsOSBAQCBpbmxpbmUgSlNTdHJpbmcq
IFN0cnVjdHVyZVJhcmVEYXRhOjpvYmplCiAgICAgcmV0dXJuIG1fb2JqZWN0VG9TdHJpbmdWYWx1
ZS5nZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRv
U3RyaW5nVmFsdWUoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFsdWUp
CitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShW
TSYgdm0sIGNvbnN0IEpTQ2VsbCosIEpTU3RyaW5nKiB2YWx1ZSkKIHsKLSAgICBtX29iamVjdFRv
U3RyaW5nVmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgIG1fb2JqZWN0VG9TdHJpbmdW
YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212115</attachid>
            <date>2013-09-19 18:56:28 -0700</date>
            <delta_ts>2013-09-26 17:26:32 -0700</delta_ts>
            <desc>checkpoint</desc>
            <filename>bug-121074-20130919185543.patch</filename>
            <type>text/plain</type>
            <size>194337</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNSBA
QAorMjAxMy0wOS0xOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIGdlbmVyYXRpb25hbCBnYXJiYWdlIGNvbGxlY3Rv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMDc0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6OkZ1
bmN0aW9uUHRyKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFz
ZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjo6OmV4ZWN1dGVFZmZlY3Rz
KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJh
bnNpdGlvblN0dWIpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Z2VuZXJpY1dyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2
YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4pOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVS
b290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAg
ICogaGVhcC9Db3BpZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2su
aDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwpOgorICAgICAg
ICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRC
bG9jazo6ZGlkRXZhY3VhdGVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp1bnBp
bik6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjppc09sZCk6CisgICAgICAgIChKU0M6OkNv
cGllZEJsb2NrOjpkaWRQcm9tb3RlKToKKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKToKKyAgICAg
ICAgKEpTQzo6Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlc0R1cmluZ1dyaXRlQmFycmllcik6
CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5n
KToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29waWVk
U3BhY2U6OkNvcGllZFNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6On5Db3BpZWRT
cGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjppbml0KToKKyAgICAgICAgKEpTQzo6
Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNpemUpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6dHJ5UmVhbGxvY2F0ZU92ZXJzaXplKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6
OmRvbmVGaWxsaW5nQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZGlkU3RhcnRG
dWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lQ29weWluZyk6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29waWVk
U3BhY2U6OmNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmlzUGFnZWRPdXQp
OgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6d2lsbEFiYW5kb25TdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6Q29waWVkU3BhY2U6OmRpZEFzc2lnblN0b3JhZ2UpOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmhlYXApOgorICAgICAg
ICAoSlNDOjpDb3BpZWRTcGFjZTo6Q29waWVkR2VuZXJhdGlvbjo6Q29waWVkR2VuZXJhdGlvbik6
CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29w
aWVkU3BhY2U6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnJlY3ljbGVF
dmFjdWF0ZWRCbG9jayk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKToKKyAgICAgICAg
KiBoZWFwL0NvcHlWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmNvcHlG
cm9tU2hhcmVkKToKKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZSk6CisgICAgICAgIChKU0M6OkNv
cHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlU2xvdyk6CisgICAgICAgICogaGVhcC9HQ1RocmVh
ZFNoYXJlZERhdGEuY3BwOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0
YXJ0Q29weWluZyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRpZEFiYW5kb24pOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb3B5QmFja2luZ1N0b3Jl
cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZE9sZEdlbmVyYXRpb25FeGVjdXRhYmxlc1RvUmVt
ZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6Y29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVm
ZXIpOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkhlYXA6OndpbGxBYmFuZG9uU3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmRpZEFzc2lnblN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpIZWFwOjpjb3B5V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6aXNJblJlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFwOjpv
cGVyYXRpb25JblByb2dyZXNzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2hvdWxkQ29sbGVjdCk6
CisgICAgICAgIChKU0M6OkhlYXA6OmlzQ29sbGVjdGluZyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmll
cik6CisgICAgICAgICogaGVhcC9IZWFwT3BlcmF0aW9uLmg6CisgICAgICAgICogaGVhcC9NYXJr
U3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6fk1hcmtTdGFja0FycmF5
KToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6
TWFya1N0YWNrQXJyYXk6OmZpbGxWZWN0b3IpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrLmg6
CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjppc0xp
c3RQYWdlZE91dCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dCk6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL01h
cmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNsZWFyTWFya3MpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2xlYXJSZW1lbWJlcmVkU2V0KToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OmNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGUpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAqIGhl
YXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om9mZnNldE9mTWFy
a3MpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGlkQ29uc3VtZUVtcHR5RnJlZUxpc3Qp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c2V0UmVtZW1iZXJlZCk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpjbGVhclJlbWVtYmVyZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6YXRvbWljQ2xlYXJSZW1lbWJlcmVkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OmlzUmVtZW1iZXJlZCk6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjp+TWFya2VkU3BhY2UpOgorICAgICAgICAoSlNDOjpNYXJrZWRT
cGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnZpc2l0
V2Vha1NldHMpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVhcFdlYWtTZXRzKToKKyAg
ICAgICAgKEpTQzo6VmVyaWZ5TWFya2VkOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmNsZWFyTWFya3MpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAg
ICAgICAgKEpTQzo6Q2xlYXJNYXJrczo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNsZWFy
UmVtZW1iZXJlZFNldDo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpk
aWRBbGxvY2F0ZUluQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2xlYXJSZW1l
bWJlcmVkU2V0KToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjpjbGVhck1hcmtTdGFjayk6CisgICAgICAgIChKU0M6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1hcmtT
dGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzaGFyZWREYXRhKToKKyAgICAgICAg
KiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
aW50ZXJuYWxBcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dW5jb25kaXRpb25h
bGx5QXBwZW5kKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvcHlMYXRlcik6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjpoZWFwKToKKyAgICAgICAgKiBoZWFwL1RpbnlCbG9vbUZp
bHRlci5oOgorICAgICAgICAoSlNDOjpUaW55Qmxvb21GaWx0ZXI6OmFkZCk6CisgICAgICAgICog
aml0L0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5lcmlj
Q29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luaXRfZ2xvYmFsX2NvbnN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjpjaGVja01hcmtXb3JkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0V3Jp
dGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9G
VU5DVElPTik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogbGxpbnQvTExJ
bnRDb21tb24uaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjpsbGludF93cml0ZV9iYXJyaWVyX3Nsb3cpOgorICAgICAgICAoSlNDOjpM
TEludDo6bGxpbnRfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyX3Nsb3cpOgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYjoKKyAgICAg
ICAgKiBvZmZsaW5lYXNtL3g4Ni5yYjoKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
OgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbmRl
eGluZ0hlYWRlci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1
bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRl
SW5pdGlhbEludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxEb3Vi
bGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjplbnN1cmVMZW5ndGhTbG93KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojp3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1Y3R1
cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNl
dEVudW1lcmF0aW9uQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcERhdGE6OmVuc3VyZVNwYWNlRm9yQXBwZW5kKToKKyAgICAgICAgKiBydW50
aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRl
bkRpY3Rpb25hcnlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJldmlvdXNJRCk6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFy
ZURhdGE6OnNldFByZXZpb3VzSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6
c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZSk6CisKIDIwMTMtMDktMTkgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggV2luZG93cyBidWlsZCBw
YXJ0IDIuIG1faml0Q29kZU1hcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC02NTAsNiArNjUwLDcgQEAKIAkJMUFDRjczNzcxNzFDQTZGQjAwQzlCQjFFIC8q
IFdlYWsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFDRjczNzYxNzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwICovOyB9OwogCQkyNjAwQjVBNjE1
MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpT
U3RyaW5nSm9pbmVyLmNwcCAqLzsgfTsKIAkJMjYwMEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpT
U3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLzsgfTsK
KwkJMkEwRDkwMjYxN0U5NEM2ODAwRUNBNTQ2IC8qIEhlYXBPcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMEQ5MDI1MTdFOTRDNjgwMEVD
QTU0NiAvKiBIZWFwT3BlcmF0aW9uLmggKi87IH07CiAJCTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1
RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjExQjU3NDE3NkEyMjREMDAwRTJBMjMgLyogQVBJQ2FsbGJhY2tG
dW5jdGlvbi5oICovOyB9OwogCQkyQTZGNDYyNjE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE2
RjQ2MjUxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQUQ4OTMyQjE3RTM4NjhGMDA2Njgy
NzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlv
blNjb3BlLmggKi87IH07CkBAIC00MDM1LDYgKzQwMzYsNyBAQAogCQkJCTJBRDg5MzJCMTdFMzg2
OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzQxMDE3RjE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFs
U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBMEQ5MDI2MTdFOTRDNjgw
MEVDQTU0NiAvKiBIZWFwT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEz
MkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZE
OEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDE1NjEzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTMgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIHJldHVyblR5cGUsIHR5cGVuYW1lIGFyZ1R5cGUxLCB0eXBlbmFtZSBhcmdUeXBl
MiwgdHlwZW5hbWUgYXJnVHlwZTMsIHR5cGVuYW1lIGFyZ1R5cGU0LCB0eXBlbmFtZSBhcmdUeXBl
NSwgdHlwZW5hbWUgYXJnVHlwZTY+CisgICAgRnVuY3Rpb25QdHIocmV0dXJuVHlwZSgqdmFsdWUp
KGFyZ1R5cGUxLCBhcmdUeXBlMiwgYXJnVHlwZTMsIGFyZ1R5cGU0LCBhcmdUeXBlNSwgYXJnVHlw
ZTYpKQorICAgICAgICA6IG1fdmFsdWUoKHZvaWQqKXZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKKyAgICB9CisKIC8vIE1TVkMgZG9lc24n
dCBzZWVtIHRvIHRyZWF0IGZ1bmN0aW9ucyB3aXRoIGRpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRp
b25zIGFzCiAvLyBkaWZmZXJlbnQgdHlwZXM7IHRoZXNlIG1ldGhvZHMgYWxyZWFkeSBkZWZpbmVk
IGZvciBmYXN0Y2FsbCwgYmVsb3cuCiAjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwg
JiYgIU9TKFdJTkRPV1MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MjAsNyArMjQyMCw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzW2ldLnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogCi0gICAgdXBkYXRlQWxsUHJlZGljdGlvbnMoQ29sbGVjdGlvbik7CisgICAgdXBk
YXRlQWxsUHJlZGljdGlvbnModmlzaXRvci5oZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgICAgICBtX2J1Y2tldHNbaV0g
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKG9wZXJhdGlvbiA9PSBDb2xsZWN0aW9uCisgICAgICAgIGlmICgob3BlcmF0aW9uID09
IEZ1bGxDb2xsZWN0aW9uIHx8IG9wZXJhdGlvbiA9PSBFZGVuQ29sbGVjdGlvbikKICAgICAgICAg
ICAgICYmICFtX3NpbmdsZXRvblZhbHVlSXNUb3AKICAgICAgICAgICAgICYmICEhbV9zaW5nbGV0
b25WYWx1ZQogICAgICAgICAgICAgJiYgbV9zaW5nbGV0b25WYWx1ZS5pc0NlbGwoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzE2LDcgKzEzMTYsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIAogICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsK
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
LQogICAgICAgICBmaWx0ZXIodmFsdWUsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9z
dGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0NCw4ICsxNzQ0LDExIEBAIGNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAg
ICBvYmplY3QtPndpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgp
LCBvYmplY3QtPmJ1dHRlcmZseSgpKTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CiAg
ICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsK
KyAgICBvYmplY3QtPmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0dXJl
KCksIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7
CiB9CiAKQEAgLTE3NTQsOCArMTc1NywxMSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7CisgICAgb2JqZWN0LT53aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1
Y3R1cmUoKSwgb2JqZWN0LT5idXR0ZXJmbHkoKSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBv
YmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKICAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhv
dXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIG9iamVjdC0+ZGlkUmVwbGFjZU9sZEJ1
dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMTk1Miw2ICsxOTU4LDMwIEBA
IHNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCit2b2lkIERGR19P
UEVSQVRJT04gZGZnQ29weVdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRyLCBzaXplX3QgbmV3
U2l6ZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIGV4ZWMtPmhlYXAoKS0+Y29weVdyaXRlQmFy
cmllcihjZWxsLCBvbGRQdHIsIG9sZFNpemUsIG5ld1B0ciwgbmV3U2l6ZSk7Cit9CisKK3ZvaWQg
REZHX09QRVJBVElPTiBkZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBjZWxsKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgZXhlYy0+aGVhcCgpLT53
cml0ZUJhcnJpZXIoY2VsbCk7Cit9CisKK3ZvaWQgREZHX09QRVJBVElPTiBkZmdXcml0ZUJhcnJp
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIG93bmVkKQoreworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworCisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIsIG93bmVk
KTsKK30KKwogdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlv
bkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0
Y2gpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2
ICsxMDMsNyBAQCB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgaW50MzJfdCwgZG91YmxlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9O
ICgqVl9ERkdPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBF
bmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9O
ICgqVl9ERkdPcGVyYXRpb25fRUNCKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBCdXR0ZXJmbHkqKTsK
IHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNJY2YpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVS
QVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2Vs
bCosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RG
R09wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpOwpAQCAtMTMwLDcgKzEzMSw4IEBAIHR5cGVkZWYgY2hhciogREZHX09QRVJB
VElPTiAoKlBfREZHT3BlcmEKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIFN0cmlu
Z0ltcGwqIERGR19PUEVSQVRJT04gKCpJX0RGR09wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBK
U1N0cmluZyopOwogdHlwZWRlZiBKU1N0cmluZyogREZHX09QRVJBVElPTiAoKkpzc19ERkdPcGVy
YXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVS
TkFMOyAKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OIChWX0RGR09wZXJhdGlvbl9FQ1BTUFMp
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOworSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUq
LCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOwogCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlk
ZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28g
Y29tcGxleCB0byBKSVQuCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKQEAgLTMxNyw2ICszMTksMTAg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogY2hhciogREZHX09Q
RVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUlu
ZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCiAKK3ZvaWQgREZHX09QRVJBVElPTiBkZmdDb3B5V3JpdGVCYXJyaWVyKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOwordm9pZCBERkdf
T1BFUkFUSU9OIGRmZ1dyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsK
K3ZvaWQgREZHX09QRVJBVElPTiBkZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOworCiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9u
X0VTdFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlw
ZSB0eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDcsNzAgKzY0Nyw1NSBAQCBzdGF0aWMgdm9pZCBlbWl0
UHV0UmVwbGFjZVN0dWIoCiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwogI2VuZGlmCiAgICAgR1BSUmVn
IHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVH
UFIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAg
IEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9
IHRydWU7Ci0jZWxzZQotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFsc2U7
Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwogICAgIAotICAgIGlm
IChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgKHdyaXRlQmFycmllck5lZWRlZCB8fCBp
c091dE9mTGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgdmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1
bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQ
Uik7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRj
aC5kZmcudXNlZFJlZ2lzdGVycyk7CisgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7CiAjZW5k
aWYKLSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICBzdHViSml0
LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgfQorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsK
KyAgICAKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOwogCisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGV4ZWMtPmNvZGVCbG9jaygp
KTsKKworICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHVi
Sml0KTsKKyAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHVi
Sml0LmJyYW5jaFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7
Ci0gICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQ
UihiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0jZWxzZQotICAgIHNjcmF0Y2hHUFIy
ID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZh
bHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgIHN0dWJKaXQucHVzaChzY3JhdGNo
R1BSMik7Ci0gICAgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3Mp
OwotICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIyKTsKLSNlbmRpZgorCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgd3JpdGVCYXJyaWVyT3BlcmF0aW9uID0gU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpOwogICAg
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSkpOwogICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5l
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICAg
ICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVs
c2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAg
fQogI2VuZGlmCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwogICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3Jl
U2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICBpZiAoYWxs
b2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CiAgICAgICAgIHN1Y2Nlc3MgPSBzdHVi
Sml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0
KTsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIGFsbG9jYXRvci5y
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwogICAgICAgICBmYWlsdXJl
ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3VjY2VzcyA9IHN0dWJK
aXQuanVtcCgpOwpAQCAtNzE4LDYgKzcwMyw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNl
U3R1YigKICAgICB9CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHVi
Sml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJp
ZXJPcGVyYXRpb24sIGRmZ1VuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKICAgICAgICAgICAgIApAQCAtNzYyLDM1ICs3
NDgsMzQgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgIEFTU0VSVChz
Y3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKICAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gdmFsdWVH
UFIpOwogICAgIAotICAgIGJvb2wgbmVlZFNlY29uZFNjcmF0Y2ggPSBmYWxzZTsKLSAgICBib29s
IG5lZWRUaGlyZFNjcmF0Y2ggPSBmYWxzZTsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9G
SUxJTkcpCi0gICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOwotI2VuZGlmCisgICAgYm9vbCBu
ZWVkRm91cnRoU2NyYXRjaCA9IGZhbHNlOwogICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICYm
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkU2Vjb25k
U2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOworICAgICAg
ICBuZWVkRm91cnRoU2NyYXRjaCA9IHRydWU7CiAgICAgfQogCi0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIyOwotICAgIGlmIChuZWVkU2Vjb25kU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMiA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIp
OwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBBU1NF
UlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQUik7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZh
bHVlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOworCisgICAg
R1BSUmVnIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
IEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjMg
IT0gdmFsdWVHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7Cisg
ICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIyKTsKKyAgICAKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjQ7CisgICAgaWYgKG5lZWRGb3VydGhTY3JhdGNoKSB7CisgICAgICAgIHNjcmF0
Y2hHUFI0ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBBU1NFUlQo
c2NyYXRjaEdQUjQgIT0gYmFzZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSB2
YWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMSk7Cisg
ICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMik7CisgICAgICAgIEFTU0VS
VChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMyk7CiAgICAgfSBlbHNlCi0gICAgICAgIHNjcmF0
Y2hHUFIyID0gSW52YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjM7Ci0gICAgaWYg
KG5lZWRUaGlyZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BS
KTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNT
RVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIzICE9IHNjcmF0Y2hHUFIyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBJ
bnZhbGlkR1BSUmVnOwotICAgICAgICAgICAgCisgICAgICAgIHNjcmF0Y2hHUFI0ID0gSW52YWxp
ZEdQUlJlZzsKKwogICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGlu
ZyhzdHViSml0KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7
CkBAIC04MTEsMTIgKzc5Niw5IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigK
ICAgICAgICAgfQogICAgIH0KIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
LSAgICBBU1NFUlQobmVlZFNlY29uZFNjcmF0Y2gpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAh
PSBJbnZhbGlkR1BSUmVnKTsKICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFy
cmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAg
U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSNlbmRpZgor
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHdyaXRlQmFycmllck9wZXJhdGlvbiA9IFNwZWN1bGF0
aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjb3B5V3JpdGVCYXJyaWVyT3BlcmF0
aW9uOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAK
QEAgLTgzMiw2ICs4MTQsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAg
ICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRj
aEdQUjEpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29s
dXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRj
aEdQUjEpOworICAgICAgICAgICAgY29weVdyaXRlQmFycmllck9wZXJhdGlvbiA9IFNwZWN1bGF0
aXZlSklUOjpjb3B5V3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIDAsIDAsIHNjcmF0Y2hH
UFIxLCBuZXdTaXplLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMpOwogICAgICAgICAgICAgc3R1
YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkp
LCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVl
KTsKQEAgLTg0Myw2ICs4MjYsOCBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIo
CiAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2Nh
dG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2Ny
YXRjaEdQUjEpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFi
c29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2Ny
YXRjaEdQUjEpOworICAgICAgICAgICAgLy8gVE9ETzogR2V0IHRoZSByZWFsIGJhc2Ugb2YgdGhl
IG9sZCBCdXR0ZXJmbHkuCisgICAgICAgICAgICBjb3B5V3JpdGVCYXJyaWVyT3BlcmF0aW9uID0g
U3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRj
aEdQUjMsIG9sZFNpemUsIHNjcmF0Y2hHUFIxLCBuZXdTaXplLCBzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjQpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3Jh
Z2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCiAgICAgICAgICAgICBmb3IgKHB0cmRpZmZfdCBv
ZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZz
ZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewpAQCAtOTA5LDYgKzg5NCw5IEBAIHN0YXRpYyB2b2lkIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICB9CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayh3cml0ZUJhcnJpZXJPcGVyYXRpb24sIGRmZ1VuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIp
OworICAgIGlmIChzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoY29weVdyaXRlQmFycmllck9wZXJhdGlvbiwgZGZnQ29weVdyaXRlQmFycmllcik7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYg
KGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1NjEzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzOSwxNyArMjM5LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdl
dEJ5SWQoQ29kZU8KICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwg
R1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0
S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIs
IEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJS
ZWcgc2NyYXRjaEdQUjIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2lu
ZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7CiAgICAgCiAgICAgSklUQ29t
cGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgSklUQ29tcGlsZXI6
OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJX
aXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2lu
dGVyKSkpOwogCi0gICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgIHdyaXRlQmFy
cmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVVc2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BS
Mik7CiAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9y
YWdlTG9hZCA9Ci0gICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5z
dG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgMCkpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjEpOworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRj
aCA9IG1faml0LnN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgMCkpOwogCiAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAgICAgCkBAIC0yNzksNyArMjc5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgICAgICAgICAgaWRlbnRp
ZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgfQogICAgIFJlZ2lzdGVyU2V0IGN1cnJl
bnRseVVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzKCk7Ci0gICAgY3VycmVudGx5VXNlZFJl
Z2lzdGVycy5jbGVhcihzY3JhdGNoR1BSKTsKKyAgICBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmNs
ZWFyKHNjcmF0Y2hHUFIxKTsKICAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQo
YmFzZUdQUikpOwogICAgIEFTU0VSVChjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmdldCh2YWx1ZUdQ
UikpOwogICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKApAQCAtMjk4Miw4ICsyOTgyLDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpDb250
aWd1b3VzICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJy
aWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaDEodGhpcyk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMp
OworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hp
bGQzLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CkBAIC0zMDU2
LDggKzMwNTcsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChIZWFwOjpp
c1dyaXRlQmFycmllckVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1
ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5n
cHIoKSk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAgICAgICAgICAg
ICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgc2NyYXRjaDEuZ3By
KCksIHNjcmF0Y2gyLmdwcigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOwpAQCAtMzE1Myw3ICszMTU1LDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVnLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJndW1lbnRzLCBtX3Nsb3dBcmd1bWVudHMpKSkpOwotICAgIAorCisgICAgICAg
ICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVSZWcsIGNoaWxkMywgc2NyYXRjaFJlZywg
c2NyYXRjaDJSZWcpOworCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHByb3BlcnR5UmVnLCBzY3Jh
dGNoMlJlZyk7CiAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMlJl
Zywgc2NyYXRjaDJSZWcpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTMyNTYsNyAr
MzI2MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6SW50MzIgJiYg
SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQ
UiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vz
cywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgc2NyYXRjaC5ncHIo
KSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAg
LTMzMDUsNyArMzMwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKIAogICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CiAg
ICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAg
ICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIp
OworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+
Y2hpbGQyKCksIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIp
OwpAQCAtNDA2OSwxNCArNDA3MywxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHJlZ2lzdGVycyh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MygpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0aGlzKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3RlcjIodGhpcyk7CiAKICAgICAgICAgR1BSUmVn
IHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZWdpc3RlcnNHUFIgPSBy
ZWdpc3RlcnMuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwog
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2hSZWdpc3Rlci5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gc2NyYXRjaFJlZ2lzdGVyMi5ncHIoKTsKIAogICAgICAg
ICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNH
UFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICB3cml0
ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVy
Rm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICB3cml0ZUJhcnJpZXIoc2Nv
cGVHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDMoKSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIp
OwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDI3
MiwxMyArNDI3OCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVy
ZVRyYW5zaXRpb24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2Rl
KTsKIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKICAgICAgICAgCi0gICAgICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKICAgICAgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMg
dGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAotICAgICAgICB3cml0
ZUJhcnJpZXIoYmFzZUdQUiwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1
Y3R1cmUsIFdyaXRlQmFycmllckZvckdlbmVyaWNBY2Nlc3MpOwotI2VuZGlmCisgICAgICAgIHdy
aXRlQmFycmllcihiYXNlR1BSLCBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0
cnVjdHVyZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKICAgICAgICAgCiAgICAg
ICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogICAgICAgICAKQEAg
LTQzMzMsMTggKzQzMzgsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotI2lmIEVOQUJM
RShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0jZW5kaWYKICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAKICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJf
UFJPRklMSU5HKQotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCks
IG5vZGUtPmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYK
KyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBub2RlLT5jaGls
ZDMoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKIAogICAgICAgICBTdG9yYWdl
QWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFj
Y2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCkBAIC00
MzU3LDM2ICs0MzYwLDM0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICBjYXNlIFB1dEJ5SWQ6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0g
c2NyYXRjaDIuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2
YWx1ZS51c2UoKTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNl
R1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwg
bm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOwogCi0gICAgICAgIGNhY2hlZFB1
dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigp
LCBzY3JhdGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7Ci0gICAg
ICAgIAotICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
Y2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwor
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNj
cmF0Y2gyLmdwcigpOwogICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFs
dWUudXNlKCk7Ci0KLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNl
R1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZp
ZXJOdW1iZXIoKSwgRGlyZWN0KTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3Jp
Z2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIxLCBzY3Jh
dGNoR1BSMiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwogCi0gICAgICAgIG5v
UmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ0MDMsMTAgKzQ0MDQsMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwor
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlh
YmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2RlLT5jaGls
ZDEoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgbm9kZS0+cmVnaXN0ZXJQb2lu
dGVyKCkpOwpAQCAtNDY4Nyw5ICs0Njg4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKIAogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhY3RpdmF0aW9uVmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgICAgIEdQUlJlZyBhY3RpdmF0aW9uVmFsdWVH
UFIgPSBhY3RpdmF0aW9uVmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwogCiAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklU
Q29tcGlsZXI6Olplcm8sIGFjdGl2YXRpb25WYWx1ZUdQUik7CiAKQEAgLTQ3MDAsMTMgKzQ3MDMs
MTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBm
b3IgKGludCBpID0gc3ltYm9sVGFibGUtPmNhcHR1cmVTdGFydCgpOyBpID4gY2FwdHVyZUVuZDsg
LS1pKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCiAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgaSAqIHNpemVvZihSZWdpc3Rlcikp
LCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAotICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIHNj
cmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVzcygKICAgICAgICAgICAgICAgICAgICAgYWN0
aXZhdGlvblZhbHVlR1BSLCByZWdpc3RlcnNPZmZzZXQgKyBpICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OwogICAgICAgICB9Ci0gICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJz
T2Zmc2V0KSwgYWN0aXZhdGlvblZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQu
c3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYWN0aXZhdGlvblZhbHVl
R1BSLCBKU0FjdGl2YXRpb246Om9mZnNldE9mUmVnaXN0ZXJzKCkpKTsKKyAgICAgICAgbV9qaXQu
YWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3RlcnNPZmZzZXQpLCBhY3RpdmF0aW9uVmFsdWVHUFIs
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKGFjdGl2YXRpb25WYWx1ZUdQUiwgSlNBY3RpdmF0aW9uOjpvZmZzZXRP
ZlJlZ2lzdGVycygpKSk7CisgICAgICAgIHdyaXRlQmFycmllcihhY3RpdmF0aW9uVmFsdWVHUFIs
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMik7CiAKICAgICAgICAgbm90Q3JlYXRlZC5saW5rKCZt
X2ppdCk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1NjEzMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OTUsNjcgKzg5NSwyMDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hp
bGRyZW4oTm9kZSogbgogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJy
aWVyKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKK3N0YXRpYyBKSVRD
b21waWxlcjo6SnVtcCBnZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIC8vIENv
cHkgb3duZXIgdG8gc2NyYXRjaDEKKyAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDEpOworICAg
IC8vIENvcHkgb3duZXIgdG8gc2NyYXRjaDIKKyAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDIp
OworCisgICAgLy8gTWFzayBzY3JhdGNoMSB0byBibG9jaworICAgIGppdC5hbmRQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDEp
OworICAgIC8vIE1hc2sgc2NyYXRjaDIgdG8gaW5kZXgKKyAgICBqaXQuYW5kUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIofk1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMik7
CisKKyAgICAvLyBTaGlmdCBpbmRleAorICAgIGppdC5yc2hpZnQzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDMgKyA0KSwgc2NyYXRjaDIpOworCisgICAgLy8gRW1pdCBsb2FkIGFuZCBi
cmFuY2gKKyAgICByZXR1cm4gaml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSk7Cit9CisKK3N0YXRp
YyBKSVRDb21waWxlcjo6SnVtcCBnZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0
LCBKU0NlbGwqIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyAvKnNjcmF0Y2gyKi8pCit7
CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKTsK
KyAgICBzaXplX3QgbWFya0luZGV4ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihvd25lcikg
JiB+TWFya2VkQmxvY2s6OmJsb2NrTWFzaykgPj4gKDMgKyA0KTsKKyAgICB1aW50OF90KiBhZGRy
ZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
YmxvY2spICsgTWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MoKSkgKyBtYXJrSW5kZXg7CisKKyAg
ICAvLyBFbWl0IGxvYWQgYW5kIGJyYW5jaAorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKGFkZHJlc3MpLCBzY3JhdGNoMSk7CisgICAgcmV0dXJuIGppdC5icmFuY2hU
ZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aDEpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0
ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIG9sZFN0b3Jh
Z2UsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1NpemUsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKGppdCwgb3duZXIsIHNj
cmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0LnB1c2goR1BSSW5mbzo6dG9S
ZWdpc3RlcihpKSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvd25lciwg
b2xkU3RvcmFnZSwgVHJ1c3RlZEltbTMyKG9sZFNpemUpLCBuZXdTdG9yYWdlLCBUcnVzdGVkSW1t
MzIobmV3U2l6ZSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07
KQorICAgICAgICBqaXQucG9wKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworCisgICAgZGVmaW5p
dGVseU5vdE1hcmtlZC5saW5rKCZqaXQpOworICAgIHJldHVybiBjYWxsOworfQorCitNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmllcihDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIG93bmVyLCB2b2lkKiBvbGRTdG9yYWdlLCBzaXplX3Qgb2xkU2l6ZSwg
R1BSUmVnIG5ld1N0b3JhZ2UsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2Vk
ID0gZ2VuZXJpY1dyaXRlQmFycmllcihqaXQsIG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2kpCisgICAgICAgIGppdC5wdXNoKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIGpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob3duZXIsIFRydXN0ZWRJbW1QdHIob2xkU3Rv
cmFnZSksIFRydXN0ZWRJbW0zMihvbGRTaXplKSwgbmV3U3RvcmFnZSwgVHJ1c3RlZEltbTMyKG5l
d1NpemUpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykKKyAg
ICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKworICAgIGRlZmluaXRlbHlO
b3RNYXJrZWQubGluaygmaml0KTsKKyAgICByZXR1cm4gY2FsbDsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29weVdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBvbGRTdG9yYWdl
LCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1N0b3JhZ2UsIHNpemVfdCBuZXdTaXplLCBHUFJS
ZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBk
ZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXIsIHNj
cmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlk
R1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvcHlXcml0ZUJhcnJpZXIsIG93bmVyLCBv
bGRTdG9yYWdlLCBvbGRTaXplLCBuZXdTdG9yYWdlLCBuZXdTaXplKTsKKyAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIC8vIE5lZWQgdG8gcmVsb2FkIHRoZSBi
dXR0ZXJmbHkgcG9pbnRlciBzaW5jZSBmaWxsaW5nIHdvbid0IHJlbG9hZCBpdCBzaW5jZSBpdCdz
IGEgdGVtcG9yYXJ5LgorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3duZXIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIG5ld1N0b3JhZ2UpOworCisgICAg
ZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvcHlXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCB2b2lkKiBvbGRTdG9yYWdlLCBzaXpl
X3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1N0b3JhZ2UsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0
ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXIsIHNjcmF0Y2gx
LCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVn
KTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvcHlXcml0ZUJhcnJpZXIsIG93bmVyLCBvbGRTdG9y
YWdlLCBvbGRTaXplLCBuZXdTdG9yYWdlLCBuZXdTaXplKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIC8vIE5lZWQgdG8gcmVsb2FkIHRoZSBidXR0ZXJm
bHkgcG9pbnRlciBzaW5jZSBmaWxsaW5nIHdvbid0IHJlbG9hZCBpdCBzaW5jZSBpdCdzIGEgdGVt
cG9yYXJ5LgorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3duZXIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIG5ld1N0b3JhZ2UpOworCisgICAgZGVmaW5p
dGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpDYWxsIFNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25l
ciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KGppdCk7Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aDEpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtp
bmQpOwogICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMSk7CiAgICAgQVNTRVJUKG93bmVyICE9
IHNjcmF0Y2gyKTsKLSAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogCi0jaWYgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQo
aml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5k
aWYKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dy
aXRlQmFycmllcihqaXQsIG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAg
ICAgIGppdC5wdXNoKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUob3duZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwg
PSBqaXQuY2FsbCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KQorICAgICAgICBqaXQucG9wKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwor
CisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZqaXQpOworICAgIHJldHVybiBjYWxsOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBH
UFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2lu
ZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y3JhdGNoMikKIHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOwotICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZUdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKLSAgICBVTlVTRURfUEFS
QU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwg
b3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ1VuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIsIG93bmVyR1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFs
aWRHUFJSZWcpOworCisjaWZuZGVmIE5ERUJVRyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvd25lck5vdE51bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIG93bmVyR1BSKTsKKyAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgb3duZXJOb3ROdWxs
LmxpbmsoJm1faml0KTsKKyNlbmRpZgorCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZt
X2ppdCk7Cit9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3du
ZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpCit7CiAgICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlVXNlLm5vZGUo
KSkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVy
czo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RD
ZWxsOworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNO
b3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRl
ZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lckdQUiwg
c2NyYXRjaDEsIHNjcmF0Y2gyKTsKKworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFs
aWRHUFJSZWcpOworICAgIGNhbGxPcGVyYXRpb24oZGZnV3JpdGVCYXJyaWVyLCBvd25lckdQUiwg
dmFsdWVHUFIpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisK
KyNpZm5kZWYgTkRFQlVHIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG93bmVyTm90TnVsbCA9
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3duZXJHUFIpOwor
ICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICBvd25lck5vdE51bGwubGluaygmbV9qaXQpOwor
I2VuZGlmCisKKyNpZm5kZWYgTkRFQlVHCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdmFsdWVO
b3ROdWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1
ZUdQUik7CisgICAgbV9qaXQuYnJlYWtwb2ludCgpOworICAgIHZhbHVlTm90TnVsbC5saW5rKCZt
X2ppdCk7CiAjZW5kaWYKKworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOwor
ICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxs
LmxpbmsoJm1faml0KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQ
UlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5k
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFsdWUsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAg
IFVOVVNFRF9QQVJBTShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotICAg
IAogICAgIGlmIChIZWFwOjppc01hcmtlZCh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotI2lm
IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENv
dW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7
CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0
ZUJhcnJpZXIobV9qaXQsIG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihk
ZmdXcml0ZUJhcnJpZXIsIG93bmVyR1BSLCB2YWx1ZSk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhJbnZhbGlkR1BSUmVnKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvd25lck5vdE51bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIG93bmVyR1BSKTsKKyAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgb3duZXJO
b3ROdWxsLmxpbmsoJm1faml0KTsKICNlbmRpZgorCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5s
aW5rKCZtX2ppdCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVz
ZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBH
UFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsKLSAgICBVTlVTRURfUEFSQU0ob3du
ZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0
Y2gpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLQogICAgIGlmIChpc0tub3duTm90Q2Vs
bCh2YWx1ZVVzZS5ub2RlKCkpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChtX2ppdCwgV3Jp
dGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOworICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzTm90Q2VsbDsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUo
KSkpCisgICAgICAgIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6
Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgSklUQ29t
cGlsZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9q
aXQsIG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihkZmdXcml0ZUJhcnJpZXIs
IG93bmVyLCB2YWx1ZUdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB2YWx1ZU5v
dE51bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVl
R1BSKTsKKyAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgdmFsdWVOb3ROdWxsLmxpbmsoJm1f
aml0KTsKICNlbmRpZgorCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwu
bGluaygmbV9qaXQpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSog
bm9kZSkKQEAgLTQ1MDYsNiArNDY0MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3AKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMp
OwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwpAQCAtNDUyMyw2ICs0NjYwLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgICAgICBzbG93UGF0aENhbGwo
c2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRp
YWxDYXBhY2l0eSwgc2NyYXRjaEdQUikpOwogICAgICAgICAKICAgICBtX2ppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpKTsKKyAgICBjb3B5V3JpdGVCYXJyaWVyKGJhc2VHUFIsIDAsIDAsIHNjcmF0
Y2hHUFIsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSwgc2NyYXRj
aDIuZ3ByKCksIHNjcmF0Y2gzLmdwcigpKTsKICAgICAgICAgCiAgICAgc3RvcmFnZVJlc3VsdChz
Y3JhdGNoR1BSLCBub2RlKTsKIH0KQEAgLTQ1NTEsNiArNDY4OSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBTdG9yYWdlT3BlcmFuZCBvbGRTdG9yYWdl
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7
CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoMyh0aGlzKTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwog
ICAgIEdQUlJlZyBvbGRTdG9yYWdlR1BSID0gb2xkU3RvcmFnZS5ncHIoKTsKQEAgLTQ1NzAsNyAr
NDcwOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIyLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CiAg
ICAgfQogICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAKKyAgICBjb3B5
V3JpdGVCYXJyaWVyKGJhc2VHUFIsIG9sZFN0b3JhZ2VHUFIsIG9sZFNpemUsIHNjcmF0Y2hHUFIy
LCBuZXdTaXplLCBzY3JhdGNoR1BSMSwgc2NyYXRjaDMuZ3ByKCkpOworCiAgICAgc3RvcmFnZVJl
c3VsdChzY3JhdGNoR1BSMiwgbm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzExLDExICszMTEsMTYgQEAgcHVibGljOgogICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9p
bnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQ
UlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdy
aXRlQmFycmllclVzZUtpbmQpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVy
R1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQs
IEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9
IEludmFsaWRHUFJSZWcpOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwg
SlNDZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0g
SW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7Ci0gICAg
dm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZh
bHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY29weVdyaXRlQmFycmll
cihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgb3duZXIsIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNp
emUsIEdQUlJlZyBuZXdQdHIsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMik7CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNvcHlXcml0ZUJh
cnJpZXIoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIG93bmVyLCBHUFJSZWcgb2xkUHRyLCBzaXplX3Qg
b2xkU2l6ZSwgR1BSUmVnIG5ld1B0ciwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKTsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgd3JpdGVC
YXJyaWVyKENDYWxsSGVscGVycyYsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpOworCisgICAgdm9pZCBjb3B5V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQ
UiwgR1BSUmVnIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUsIEdQUlJlZyBuZXdQdHIsIHNpemVfdCBu
ZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCBjb3B5
V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6
ZSwgR1BSUmVnIG5ld1B0ciwgc2l6ZV90IG5ld1NpemUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBz
Y3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcg
b3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgSlNDZWxs
KiB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BS
UmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxl
Y3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJl
c2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcs
IEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVnKQogICAgIHsKQEAgLTcyMCw3ICs3MjUs
NyBAQCBwdWJsaWM6CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQgY2FjaGVkR2V0QnlJ
ZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRD
b21waWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7Ci0gICAg
dm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUs
IEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBp
bGVyOjpKdW1wKCkpOworICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcg
YmFzZSwgR1BSUmVnIHZhbHVlLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQ
UlJlZyBzY3JhdGNoR1BSMiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNl
bGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4s
IEdQUlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyBy
ZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpK
dW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKICAgICB2b2lkIGNhY2hl
ZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVU
YWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3Jh
dGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwpAQCAtMTAzNCw2ICsx
MDM5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9F
Q1BTUFMgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHNpemVfdCBhcmczLCBH
UFJSZWcgYXJnNCwgc2l6ZV90IGFyZzUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0LCBU
cnVzdGVkSW1tMzIoYXJnNSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDUFNQUyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCB2b2lk
KiBhcmcyLCBzaXplX3QgYXJnMywgR1BSUmVnIGFyZzQsIHNpemVfdCBhcmc1KQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1Q
dHIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSwgYXJnNCwgVHJ1c3RlZEltbTMyKGFyZzUpKTsK
KyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsK
KyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlv
bl9FSnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIpOwpAQCAtMTA2OCw2ICsxMDgzLDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxs
RnJhbWUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uKTsKICAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
REZHT3BlcmF0aW9uX0VDQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpbmxp
bmVDYWxsRnJhbWUpKTsKQEAgLTEwODYsNiArMTEwMiwzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Igb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQorCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0K
KworICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUND
IG9wZXJhdGlvbiwgSlNDZWxsKiBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBhcmcy
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
KTsKKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBh
cmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9ERkdPcGVyYXRpb25fVyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNocG9p
bnRTZXQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhUcnVzdGVkSW1tUHRy
KHdhdGNocG9pbnRTZXQpKTsKQEAgLTEzMTcsMTIgKzEzNTcsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
REZHT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQ
UlJlZyBhcmczKQotICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwotICAgIH0KLQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290
cy5jcHAJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCB2b2lk
IENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgordGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2ss
IEhlYXBPcGVyYXRpb24gb3BlcmF0aW9uPgogaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmdlbmVyaWNBZGRQb2ludGVyKHZvaWQqIHAsIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtI
b29rJiBtYXJrSG9vaykKIHsKICAgICBtYXJrSG9vay5tYXJrKHApOwpAQCAtOTAsNyArOTAsNyBA
QCBpbmxpbmUgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkCiAgICAgbV9yb290c1tt
X3NpemUrK10gPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihwKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgTWFya0hvb2s+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaywgSGVhcE9wZXJhdGlvbiBv
cGVyYXRpb24+CiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBi
ZWdpbiwgdm9pZCogZW5kLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgaWYgKGJlZ2luID4g
ZW5kKSB7CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJp
Y0FkZFNwYW4odgogCiAgICAgVGlueUJsb29tRmlsdGVyIGZpbHRlciA9IG1fYmxvY2tzLT5maWx0
ZXIoKTsgLy8gTWFrZSBhIGxvY2FsIGNvcHkgb2YgZmlsdGVyIHRvIHNob3cgdGhlIGNvbXBpbGVy
IGl0IHdvbid0IGFsaWFzLCBhbmQgY2FuIGJlIHJlZ2lzdGVyLWFsbG9jYXRlZC4KICAgICBmb3Ig
KGNoYXIqKiBpdCA9IHN0YXRpY19jYXN0PGNoYXIqKj4oYmVnaW4pOyBpdCAhPSBzdGF0aWNfY2Fz
dDxjaGFyKio+KGVuZCk7ICsraXQpCi0gICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgZmls
dGVyLCBtYXJrSG9vayk7CisgICAgICAgIGdlbmVyaWNBZGRQb2ludGVyPE1hcmtIb29rLCBvcGVy
YXRpb24+KCppdCwgZmlsdGVyLCBtYXJrSG9vayk7CiB9CiAKIGNsYXNzIER1bW15TWFya0hvb2sg
ewpAQCAtMTE1LDEzICsxMTUsMjEgQEAgcHVibGljOgogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3Rz
OjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCkKIHsKKyAgICBIZWFwT3BlcmF0aW9uIG9wZXJh
dGlvbiA9IG1fY29waWVkU3BhY2UtPmhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpOwogICAg
IER1bW15TWFya0hvb2sgZHVtbXk7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgZHVt
bXkpOworICAgIGlmIChvcGVyYXRpb24gPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgIGdlbmVy
aWNBZGRTcGFuPER1bW15TWFya0hvb2ssIEZ1bGxDb2xsZWN0aW9uPihiZWdpbiwgZW5kLCBkdW1t
eSk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmljQWRkU3BhbjxEdW1teU1hcmtIb29rLCBFZGVu
Q29sbGVjdGlvbj4oYmVnaW4sIGVuZCwgZHVtbXkpOwogfQogCiB2b2lkIENvbnNlcnZhdGl2ZVJv
b3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0
dWJSb3V0aW5lcykKIHsKLSAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBqaXRTdHViUm91
dGluZXMpOworICAgIEhlYXBPcGVyYXRpb24gb3BlcmF0aW9uID0gbV9jb3BpZWRTcGFjZS0+aGVh
cCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCk7CisgICAgaWYgKG9wZXJhdGlvbiA9PSBGdWxsQ29s
bGVjdGlvbikKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48SklUU3R1YlJvdXRpbmVTZXQsIEZ1bGxD
b2xsZWN0aW9uPihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMpOworICAgIGVsc2UKKyAgICAg
ICAgZ2VuZXJpY0FkZFNwYW48SklUU3R1YlJvdXRpbmVTZXQsIEVkZW5Db2xsZWN0aW9uPihiZWdp
biwgZW5kLCBqaXRTdHViUm91dGluZXMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPgpAQCAtMTQ3LDggKzE1NSwxMiBAQCBwcml2YXRlOgogdm9pZCBDb25zZXJ2YXRpdmVS
b290czo6YWRkKAogICAgIHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0
JiBqaXRTdHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKKyAgICBIZWFw
T3BlcmF0aW9uIG9wZXJhdGlvbiA9IG1fY29waWVkU3BhY2UtPmhlYXAoKS0+b3BlcmF0aW9uSW5Q
cm9ncmVzcygpOwogICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBDb2Rl
QmxvY2tTZXQ+IG1hcmtIb29rKGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7Ci0gICAgZ2Vu
ZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgbWFya0hvb2spOworICAgIGlmIChvcGVyYXRpb24gPT0g
RnVsbENvbGxlY3Rpb24pCisgICAgICAgIGdlbmVyaWNBZGRTcGFuPENvbXBvc2l0ZU1hcmtIb29r
PEpJVFN0dWJSb3V0aW5lU2V0LCBDb2RlQmxvY2tTZXQ+LCBGdWxsQ29sbGVjdGlvbj4oYmVnaW4s
IGVuZCwgbWFya0hvb2spOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48Q29tcG9z
aXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4sIEVkZW5Db2xsZWN0
aW9uPihiZWdpbiwgZW5kLCBtYXJrSG9vayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCShy
ZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMCArNTMsMTAgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMTI4OwogICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkgPSA4MTkyIC8gc2l6ZW9mKEpTQ2VsbCopOwog
ICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1hcmtIb29rLCBIZWFwT3BlcmF0aW9uPgogICAgIHZvaWQgZ2VuZXJpY0FkZFBvaW50ZXIo
dm9pZCosIFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1hcmtIb29rPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rLCBIZWFwT3BlcmF0
aW9uPgogICAgIHZvaWQgZ2VuZXJpY0FkZFNwYW4odm9pZCosIHZvaWQqIGVuZCwgTWFya0hvb2sm
KTsKICAgICAKICAgICB2b2lkIGdyb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEFsbG9jYXRvci5oCShyZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBmYXN0UGF0aFNob3VsZFN1Y2NlZWQo
c2l6ZV90IGJ5dGVzKSBjb25zdDsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZShzaXpl
X3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpOworICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRl
RHVyaW5nQ29weWluZyhzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpOwogICAgIENoZWNrZWRC
b29sZWFuIHRyeVJlYWxsb2NhdGUodm9pZCAqb2xkUHRyLCBzaXplX3Qgb2xkQnl0ZXMsIHNpemVf
dCBuZXdCeXRlcyk7CiAgICAgdm9pZCogZm9yY2VBbGxvY2F0ZShzaXplX3QgYnl0ZXMpOwogICAg
IENvcGllZEJsb2NrKiByZXNldEN1cnJlbnRCbG9jaygpOwpAQCAtOTMsNiArOTQsMTQgQEAgaW5s
aW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dAogICAgIHJldHVybiB0cnVlOwog
fQogCitpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUR1
cmluZ0NvcHlpbmcoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQoreworICAgIGlmICghdHJ5
QWxsb2NhdGUoYnl0ZXMsIG91dFB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2N1
cnJlbnRCbG9jay0+cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nQ29weWluZyhieXRlcyk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnRy
eVJlYWxsb2NhdGUoCiAgICAgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkQnl0ZXMsIHNpemVfdCBu
ZXdCeXRlcykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2su
aAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTIgKzQ3LDE3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgQ29waWVkQmxvY2sqIGNyZWF0ZU5vWmVyb0ZpbGwoRGVhZEJsb2NrKik7CiAKICAgICB2
b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsKICAgICBib29sIGlzUGlubmVkKCk7CiAKKyAg
ICBib29sIGlzT2xkKCk7CiAgICAgYm9vbCBpc092ZXJzaXplKCk7CisgICAgdm9pZCBkaWRQcm9t
b3RlKCk7CiAKICAgICB1bnNpZ25lZCBsaXZlQnl0ZXMoKTsKLSAgICB2b2lkIHJlcG9ydExpdmVC
eXRlcyhKU0NlbGwqLCBDb3B5VG9rZW4sIHVuc2lnbmVkKTsKKyAgICB2b2lkIHJlcG9ydExpdmVC
eXRlcyhKU0NlbGwqLCBib29sIGlzT3duZXJSZW1lbWJlcmVkLCBDb3B5VG9rZW4sIHVuc2lnbmVk
KTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRlc0R1cmluZ1dyaXRlQmFycmllcih1bnNpZ25lZCk7
CisgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkKTsKICAgICB2
b2lkIGRpZFN1cnZpdmVHQygpOwogICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCk7
CiAgICAgYm9vbCBzaG91bGRFdmFjdWF0ZSgpOwpAQCAtOTQsNyArOTksOCBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxDb3B5V29ya0xpc3Q+IG1fd29ya0xpc3Q7CiAKICAgICBzaXplX3QgbV9yZW1h
aW5pbmc7Ci0gICAgdWludHB0cl90IG1faXNQaW5uZWQ7CisgICAgYm9vbCBtX2lzUGlubmVkIDog
MTsKKyAgICBib29sIG1faXNPbGQgOiAxOwogICAgIHVuc2lnbmVkIG1fbGl2ZUJ5dGVzOwogI2lm
bmRlZiBOREVCVUcKICAgICB1bnNpZ25lZCBtX2xpdmVPYmplY3RzOwpAQCAtMTA0LDcgKzExMCw3
IEBAIHByaXZhdGU6CiBpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZEJsb2NrOjpjcmVhdGVOb1pl
cm9GaWxsKERlYWRCbG9jayogYmxvY2spCiB7CiAgICAgUmVnaW9uKiByZWdpb24gPSBibG9jay0+
cmVnaW9uKCk7Ci0gICAgcmV0dXJuIG5ldyhOb3ROdWxsLCBibG9jaykgQ29waWVkQmxvY2socmVn
aW9uKTsKKyAgICByZXR1cm4gbmV3IChOb3ROdWxsLCBibG9jaykgQ29waWVkQmxvY2socmVnaW9u
KTsKIH0KIAogaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRCbG9jazo6Y3JlYXRlKERlYWRCbG9j
ayogYmxvY2spCkBAIC0xMzAsNiArMTM2LDcgQEAgaW5saW5lIENvcGllZEJsb2NrOjpDb3BpZWRC
bG9jayhSZWdpb24qIAogICAgIDogSGVhcEJsb2NrPENvcGllZEJsb2NrPihyZWdpb24pCiAgICAg
LCBtX3JlbWFpbmluZyhwYXlsb2FkQ2FwYWNpdHkoKSkKICAgICAsIG1faXNQaW5uZWQoZmFsc2Up
CisgICAgLCBtX2lzT2xkKGZhbHNlKQogICAgICwgbV9saXZlQnl0ZXMoMCkKICNpZm5kZWYgTkRF
QlVHCiAgICAgLCBtX2xpdmVPYmplY3RzKDApCkBAIC0xNTYsNiArMTYzLDcgQEAgaW5saW5lIHZv
aWQgQ29waWVkQmxvY2s6OmRpZFN1cnZpdmVHQygpCiBpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6
ZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCBieXRlcykKIHsKICAgICBBU1NFUlQobV9saXZlQnl0
ZXMgPj0gYnl0ZXMpOworICAgIEFTU0VSVChtX2xpdmVPYmplY3RzKTsKICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CiAgICAgbV9saXZlQnl0ZXMgLT0gYnl0ZXM7CiAjaWZuZGVmIE5ERUJVRwpAQCAt
MTgzLDExICsxOTEsMjYgQEAgaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnBpbigpCiAgICAgICAg
IG1fd29ya0xpc3QuY2xlYXIoKTsKIH0KIAoraW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnVucGlu
KCkKK3sKKyAgICBtX2lzUGlubmVkID0gZmFsc2U7Cit9CisKIGlubGluZSBib29sIENvcGllZEJs
b2NrOjppc1Bpbm5lZCgpCiB7CiAgICAgcmV0dXJuIG1faXNQaW5uZWQ7CiB9CiAKK2lubGluZSBi
b29sIENvcGllZEJsb2NrOjppc09sZCgpCit7CisgICAgcmV0dXJuIG1faXNPbGQ7Cit9CisKK2lu
bGluZSB2b2lkIENvcGllZEJsb2NrOjpkaWRQcm9tb3RlKCkKK3sKKyAgICBtX2lzT2xkID0gdHJ1
ZTsKK30KKwogaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OmlzT3ZlcnNpemUoKQogewogICAgIHJl
dHVybiByZWdpb24oKS0+aXNDdXN0b21TaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTU2MTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDE2ICszMSwyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLWlubGlu
ZSB2b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMoSlNDZWxsKiBvd25lciwgQ29weVRv
a2VuIHRva2VuLCB1bnNpZ25lZCBieXRlcykKK2lubGluZSB2b2lkIENvcGllZEJsb2NrOjpyZXBv
cnRMaXZlQnl0ZXMoSlNDZWxsKiBvd25lciwgYm9vbCBpc093bmVyUmVtZW1iZXJlZCwgQ29weVRv
a2VuIHRva2VuLCB1bnNpZ25lZCBieXRlcykKIHsKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAg
ICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3dvcmtMaXN0TG9jayk7CiAjZW5kaWYKKworICAg
IC8vIFdlIG9ubHkgd2FudCB0byBhZGQgdG8gbGl2ZSBieXRlcyBpZiB0aGUgb3duZXIgaXNuJ3Qg
cGFydCBvZiB0aGUgcmVtZW1iZXJlZCBzZXQuCisgICAgLy8gSWYgd2UgYWx3YXlzIGFkZGVkIGxp
dmUgYnl0ZXMgd2Ugd291bGQgZG91YmxlIGNvdW50IGZvciBlbGVtZW50cyBpbiB0aGUgcmVtZW1i
ZXJlZAorICAgIC8vIHNldCBhY3Jvc3MgY29sbGVjdGlvbnMuIAorICAgIGlmICghaXNPd25lclJl
bWVtYmVyZWQpIHsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogI2lmbmRlZiBOREVCVUcK
LSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgbV9saXZlT2JqZWN0cysrOworICAgICAgICBt
X2xpdmVPYmplY3RzKys7CiAjZW5kaWYKLSAgICBtX2xpdmVCeXRlcyArPSBieXRlczsKKyAgICAg
ICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICB9CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDw9IENvcGllZEJsb2NrOjpibG9ja1NpemUpOwor
CisgICAgaWYgKGlzUGlubmVkKCkpCisgICAgICAgIHJldHVybjsKIAogICAgIGlmICghc2hvdWxk
RXZhY3VhdGUoKSkgewogICAgICAgICBwaW4oKTsKQEAgLTUwLDcgKzYxLDM0IEBAIGlubGluZSB2
b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMKICAgICBpZiAoIW1fd29ya0xpc3QpCiAg
ICAgICAgIG1fd29ya0xpc3QgPSBhZG9wdFB0cihuZXcgQ29weVdvcmtMaXN0KEhlYXA6OmhlYXAo
b3duZXIpLT5ibG9ja0FsbG9jYXRvcigpKSk7CiAKLSAgICBtX3dvcmtMaXN0LT5hcHBlbmQoQ29w
eVdvcmtsaXN0SXRlbShvd25lciwgdG9rZW4pKTsKKyAgICAvLyBSZW1lbWJlcmVkIHNldCBlbGVt
ZW50cyBzdGlsbCBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSB3b3JrIGxpc3QgaWYgdGhlIGJsb2Nr
IGlzIHlvdW5nCisgICAgLy8gYmVjYXVzZSBpZiB3ZSBkbyBjb3B5aW5nIHRoZW4gd2UgYWx3YXlz
IGV2YWN1YXRlIHlvdW5nIGJsb2NrcywgZXZlbiBkdXJpbmcgRWRlbkNvbGxlY3Rpb25zLgorICAg
IGlmICghaXNPd25lclJlbWVtYmVyZWQgfHwgIW1faXNPbGQpCisgICAgICAgIG1fd29ya0xpc3Qt
PmFwcGVuZChDb3B5V29ya2xpc3RJdGVtKG93bmVyLCB0b2tlbikpOworfQorCitpbmxpbmUgdm9p
ZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nV3JpdGVCYXJyaWVyKHVuc2lnbmVk
IGJ5dGVzKQoreworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
bV9saXZlT2JqZWN0cysrOworI2VuZGlmCisgICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7CisgICAg
QVNTRVJUKCEhbV9saXZlQnl0ZXMgPT0gISFtX2xpdmVPYmplY3RzKTsKKyAgICBBU1NFUlQobV9s
aXZlQnl0ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7Cit9CisKK2lubGluZSB2b2lkIENv
cGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkIGJ5dGVzKQor
eworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAvLyBUaGlzIGRvZXNuJ3QgbmVlZCB0byBi
ZSBsb2NrZWQgYmVjYXVzZSB0aGUgdGhyZWFkIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbiBvd25z
IHRoZSBjdXJyZW50IGJsb2NrLgorICAgIG1faXNPbGQgPSB0cnVlOworI2lmbmRlZiBOREVCVUcK
KyAgICBtX2xpdmVPYmplY3RzKys7CisjZW5kaWYKKyAgICBtX2xpdmVCeXRlcyArPSBieXRlczsK
KyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDw9IENvcGll
ZEJsb2NrOjpibG9ja1NpemUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHJldmlzaW9uIDE1NjEzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsOCArMzUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQ29waWVkU3BhY2U6OkNv
cGllZFNwYWNlKEhlYXAqIGhlYXApCiAgICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fdG9TcGFj
ZSgwKQotICAgICwgbV9mcm9tU3BhY2UoMCkKICAgICAsIG1faW5Db3B5aW5nUGhhc2UoZmFsc2Up
CiAgICAgLCBtX3Nob3VsZERvQ29weVBoYXNlKGZhbHNlKQogICAgICwgbV9udW1iZXJPZkxvYW5l
ZEJsb2NrcygwKQpAQCAtNDYsMjEgKzQ0LDQwIEBAIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShI
ZWFwKiBoZWFwKQogCiBDb3BpZWRTcGFjZTo6fkNvcGllZFNwYWNlKCkKIHsKLSAgICB3aGlsZSAo
IW1fdG9TcGFjZS0+aXNFbXB0eSgpKQotICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCku
ZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX3RvU3BhY2UtPnJlbW92ZUhlYWQoKSkp
OworICAgIHdoaWxlICghbV9vbGRHZW4udG9TcGFjZS0+aXNFbXB0eSgpKQorICAgICAgICBtX2hl
YXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX29s
ZEdlbi50b1NwYWNlLT5yZW1vdmVIZWFkKCkpKTsKIAotICAgIHdoaWxlICghbV9mcm9tU3BhY2Ut
PmlzRW1wdHkoKSkKLSAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUo
Q29waWVkQmxvY2s6OmRlc3Ryb3kobV9mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKSkpOworICAgIHdo
aWxlICghbV9vbGRHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpCisgICAgICAgIG1faGVhcC0+Ymxv
Y2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KG1fb2xkR2VuLmZy
b21TcGFjZS0+cmVtb3ZlSGVhZCgpKSk7CiAKLSAgICB3aGlsZSAoIW1fb3ZlcnNpemVCbG9ja3Mu
aXNFbXB0eSgpKQotICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZUN1
c3RvbVNpemUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV9vdmVyc2l6ZUJsb2Nrcy5yZW1vdmVIZWFk
KCkpKTsKKyAgICB3aGlsZSAoIW1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGVDdXN0b21TaXplKENvcGll
ZEJsb2NrOjpkZXN0cm95KG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLnJlbW92ZUhlYWQoKSkpOwor
CisgICAgd2hpbGUgKCFtX25ld0dlbi50b1NwYWNlLT5pc0VtcHR5KCkpCisgICAgICAgIG1faGVh
cC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KG1fbmV3
R2VuLnRvU3BhY2UtPnJlbW92ZUhlYWQoKSkpOworCisgICAgd2hpbGUgKCFtX25ld0dlbi5mcm9t
U3BhY2UtPmlzRW1wdHkoKSkKKyAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxs
b2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV9uZXdHZW4uZnJvbVNwYWNlLT5yZW1vdmVIZWFk
KCkpKTsKKworICAgIHdoaWxlICghbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKQor
ICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZUN1c3RvbVNpemUoQ29w
aWVkQmxvY2s6OmRlc3Ryb3kobV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MucmVtb3ZlSGVhZCgpKSk7
CisKKyAgICBBU1NFUlQobV9vbGRHZW4udG9TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
bV9vbGRHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX29sZEdlbi5vdmVy
c2l6ZUJsb2Nrcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX25ld0dlbi50b1NwYWNlLT5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVChtX25ld0dlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUKG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSk7CiB9CiAKIHZvaWQgQ29w
aWVkU3BhY2U6OmluaXQoKQogewotICAgIG1fdG9TcGFjZSA9ICZtX2Jsb2NrczE7Ci0gICAgbV9m
cm9tU3BhY2UgPSAmbV9ibG9ja3MyOworICAgIG1fb2xkR2VuLnRvU3BhY2UgPSAmbV9vbGRHZW4u
YmxvY2tzMTsKKyAgICBtX29sZEdlbi5mcm9tU3BhY2UgPSAmbV9vbGRHZW4uYmxvY2tzMjsKICAg
ICAKKyAgICBtX25ld0dlbi50b1NwYWNlID0gJm1fbmV3R2VuLmJsb2NrczE7CisgICAgbV9uZXdH
ZW4uZnJvbVNwYWNlID0gJm1fbmV3R2VuLmJsb2NrczI7CisKICAgICBhbGxvY2F0ZUJsb2NrKCk7
CiB9ICAgCiAKQEAgLTgzLDkgKzEwMCwxMCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6
dHJ5QWxsb2NhdGVPCiAgICAgQVNTRVJUKGlzT3ZlcnNpemUoYnl0ZXMpKTsKICAgICAKICAgICBD
b3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlKG1faGVhcC0+YmxvY2tBbGxv
Y2F0b3IoKS5hbGxvY2F0ZUN1c3RvbVNpemUoc2l6ZW9mKENvcGllZEJsb2NrKSArIGJ5dGVzLCBD
b3BpZWRCbG9jazo6YmxvY2tTaXplKSk7Ci0gICAgbV9vdmVyc2l6ZUJsb2Nrcy5wdXNoKGJsb2Nr
KTsKLSAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7
CisgICAgbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MucHVzaChibG9jayk7CisgICAgbV9uZXdHZW4u
YmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICBtX2Js
b2NrU2V0LmFkZChibG9jayk7CisgICAgQVNTRVJUKCFibG9jay0+aXNPbGQoKSk7CiAgICAgCiAg
ICAgQ29waWVkQWxsb2NhdG9yIGFsbG9jYXRvcjsKICAgICBhbGxvY2F0b3Iuc2V0Q3VycmVudEJs
b2NrKGJsb2NrKTsKQEAgLTEzOCw3ICsxNTYsMTAgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3Bh
Y2U6OnRyeVJlYWxsb2NhdAogCiAgICAgQ29waWVkQmxvY2sqIG9sZEJsb2NrID0gQ29waWVkU3Bh
Y2U6OmJsb2NrRm9yKG9sZFB0cik7CiAgICAgaWYgKG9sZEJsb2NrLT5pc092ZXJzaXplKCkpIHsK
LSAgICAgICAgbV9vdmVyc2l6ZUJsb2Nrcy5yZW1vdmUob2xkQmxvY2spOworICAgICAgICBpZiAo
b2xkQmxvY2stPmlzT2xkKCkpCisgICAgICAgICAgICBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5y
ZW1vdmUob2xkQmxvY2spOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25ld0dlbi5vdmVy
c2l6ZUJsb2Nrcy5yZW1vdmUob2xkQmxvY2spOwogICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShv
bGRCbG9jayk7CiAgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3Vz
dG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJveShvbGRCbG9jaykpOwogICAgIH0KQEAgLTE2NSwx
MCArMTg2LDExIEBAIHZvaWQgQ29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2soQ29waWUKICAg
ICBibG9jay0+emVyb0ZpbGxXaWxkZXJuZXNzKCk7CiAKICAgICB7CisgICAgICAgIC8vIEFsd2F5
cyBwdXQgdGhlIGJsb2NrIGludG8gdGhlIG9sZCBnZW4gYmVjYXVzZSBpdCdzIGJlaW5nIHByb21v
dGVkIQogICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOwotICAg
ICAgICBtX3RvU3BhY2UtPnB1c2goYmxvY2spOworICAgICAgICBtX29sZEdlbi50b1NwYWNlLT5w
dXNoKGJsb2NrKTsKICAgICAgICAgbV9ibG9ja1NldC5hZGQoYmxvY2spOwotICAgICAgICBtX2Js
b2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CisgICAgICAgIG1f
b2xkR2VuLmJsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CiAg
ICAgfQogCiAgICAgewpAQCAtMTgxLDUyICsyMDMsMTcgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9u
ZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIH0KIH0KIAotdm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRl
ZENvcHlpbmcoKQordm9pZCBDb3BpZWRTcGFjZTo6ZGlkU3RhcnRGdWxsQ29sbGVjdGlvbigpCiB7
Ci0gICAgc3RkOjpzd2FwKG1fZnJvbVNwYWNlLCBtX3RvU3BhY2UpOwotCi0gICAgbV9ibG9ja0Zp
bHRlci5yZXNldCgpOwotICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7Ci0KLSAg
ICBDb3BpZWRCbG9jayogbmV4dCA9IDA7Ci0gICAgc2l6ZV90IHRvdGFsTGl2ZUJ5dGVzID0gMDsK
LSAgICBzaXplX3QgdG90YWxVc2FibGVCeXRlcyA9IDA7Ci0gICAgZm9yIChDb3BpZWRCbG9jayog
YmxvY2sgPSBtX2Zyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBuZXh0KSB7Ci0gICAg
ICAgIG5leHQgPSBibG9jay0+bmV4dCgpOwotICAgICAgICBpZiAoIWJsb2NrLT5pc1Bpbm5lZCgp
ICYmIGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpIHsKLSAgICAgICAgICAgIHJlY3ljbGVFdmFjdWF0
ZWRCbG9jayhibG9jayk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICB0b3RhbExpdmVCeXRlcyArPSBibG9jay0+bGl2ZUJ5dGVzKCk7Ci0gICAgICAgIHRvdGFsVXNh
YmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwotICAgIH0KKyAgICBBU1NFUlQo
aGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pOworICAgIEFT
U0VSVChtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fbmV3R2Vu
LmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKIAotICAgIENvcGllZEJsb2NrKiBibG9jayA9IG1fb3Zl
cnNpemVCbG9ja3MuaGVhZCgpOwotICAgIHdoaWxlIChibG9jaykgewotICAgICAgICBDb3BpZWRC
bG9jayogbmV4dCA9IGJsb2NrLT5uZXh0KCk7Ci0gICAgICAgIGlmIChibG9jay0+aXNQaW5uZWQo
KSkgewotICAgICAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRz
PihibG9jaykpOwotICAgICAgICAgICAgdG90YWxMaXZlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRD
YXBhY2l0eSgpOwotICAgICAgICAgICAgdG90YWxVc2FibGVCeXRlcyArPSBibG9jay0+cGF5bG9h
ZENhcGFjaXR5KCk7Ci0gICAgICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBtX292ZXJzaXplQmxvY2tzLnJlbW92ZShibG9jayk7Ci0g
ICAgICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShibG9jayk7Ci0gICAgICAgICAgICBtX2hlYXAt
PmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZUN1c3RvbVNpemUoQ29waWVkQmxvY2s6OmRlc3Ry
b3koYmxvY2spKTsKLSAgICAgICAgfSAKLSAgICAgICAgYmxvY2sgPSBuZXh0OwotICAgIH0KLQot
ICAgIGRvdWJsZSBtYXJrZWRTcGFjZUJ5dGVzID0gbV9oZWFwLT5vYmplY3RTcGFjZSgpLmNhcGFj
aXR5KCk7Ci0gICAgZG91YmxlIHRvdGFsRnJhZ21lbnRhdGlvbiA9ICgoZG91YmxlKXRvdGFsTGl2
ZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcykgLyAoKGRvdWJsZSl0b3RhbFVzYWJsZUJ5dGVzICsg
bWFya2VkU3BhY2VCeXRlcyk7Ci0gICAgbV9zaG91bGREb0NvcHlQaGFzZSA9IHRvdGFsRnJhZ21l
bnRhdGlvbiA8PSBPcHRpb25zOjptaW5IZWFwVXRpbGl6YXRpb24oKTsKLSAgICBpZiAoIW1fc2hv
dWxkRG9Db3B5UGhhc2UpCi0gICAgICAgIHJldHVybjsKKyAgICBmb3IgKENvcGllZEJsb2NrKiBi
bG9jayA9IG1fb2xkR2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5l
eHQoKSkKKyAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOwogCi0gICAgQVNTRVJUKG1fc2hv
dWxkRG9Db3B5UGhhc2UpOwotICAgIEFTU0VSVCghbV9pbkNvcHlpbmdQaGFzZSk7Ci0gICAgQVNT
RVJUKCFtX251bWJlck9mTG9hbmVkQmxvY2tzKTsKLSAgICBtX2luQ29weWluZ1BoYXNlID0gdHJ1
ZTsKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLm92ZXJzaXplQmxvY2tz
LmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgYmxvY2stPmRp
ZFN1cnZpdmVHQygpOwogfQogCiB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCkBAIC0y
NDAsMjEgKzIyNywzNSBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgQVNT
RVJUKG1faW5Db3B5aW5nUGhhc2UgPT0gbV9zaG91bGREb0NvcHlQaGFzZSk7CiAgICAgbV9pbkNv
cHlpbmdQaGFzZSA9IGZhbHNlOwogCi0gICAgd2hpbGUgKCFtX2Zyb21TcGFjZS0+aXNFbXB0eSgp
KSB7Ci0gICAgICAgIENvcGllZEJsb2NrKiBibG9jayA9IG1fZnJvbVNwYWNlLT5yZW1vdmVIZWFk
KCk7Ci0gICAgICAgIC8vIEFsbCBub24tcGlubmVkIGJsb2NrcyBpbiBmcm9tLXNwYWNlIHNob3Vs
ZCBoYXZlIGJlZW4gcmVjbGFpbWVkIGFzIHRoZXkgd2VyZSBldmFjdWF0ZWQuCi0gICAgICAgIEFT
U0VSVChibG9jay0+aXNQaW5uZWQoKSB8fCAhbV9zaG91bGREb0NvcHlQaGFzZSk7Ci0gICAgICAg
IGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKKyAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2Nr
PiogdG9TcGFjZSwgKmZyb21TcGFjZTsKKyAgICBUaW55Qmxvb21GaWx0ZXIqIGJsb2NrRmlsdGVy
OworICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlv
bikgeworICAgICAgICB0b1NwYWNlID0gbV9vbGRHZW4udG9TcGFjZTsKKyAgICAgICAgZnJvbVNw
YWNlID0gbV9vbGRHZW4uZnJvbVNwYWNlOworICAgICAgICBibG9ja0ZpbHRlciA9ICZtX29sZEdl
bi5ibG9ja0ZpbHRlcjsKKyAgICB9IGVsc2UgeworICAgICAgICB0b1NwYWNlID0gbV9uZXdHZW4u
dG9TcGFjZTsKKyAgICAgICAgZnJvbVNwYWNlID0gbV9uZXdHZW4uZnJvbVNwYWNlOworICAgICAg
ICBibG9ja0ZpbHRlciA9ICZtX25ld0dlbi5ibG9ja0ZpbHRlcjsKKyAgICB9CisKKyAgICB3aGls
ZSAoIWZyb21TcGFjZS0+aXNFbXB0eSgpKSB7CisgICAgICAgIENvcGllZEJsb2NrKiBibG9jayA9
IGZyb21TcGFjZS0+cmVtb3ZlSGVhZCgpOwogICAgICAgICAvLyBXZSBkb24ndCBhZGQgdGhlIGJs
b2NrIHRvIHRoZSBibG9ja1NldCBiZWNhdXNlIGl0IHdhcyBuZXZlciByZW1vdmVkLgogICAgICAg
ICBBU1NFUlQobV9ibG9ja1NldC5jb250YWlucyhibG9jaykpOwotICAgICAgICBtX2Jsb2NrRmls
dGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7Ci0gICAgICAgIG1fdG9TcGFj
ZS0+cHVzaChibG9jayk7CisgICAgICAgIGJsb2NrRmlsdGVyLT5hZGQocmVpbnRlcnByZXRfY2Fz
dDxCaXRzPihibG9jaykpOworICAgICAgICB0b1NwYWNlLT5wdXNoKGJsb2NrKTsKKyAgICB9CisK
KyAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24p
IHsKKyAgICAgICAgbV9vbGRHZW4udG9TcGFjZS0+Y29uY2F0KCptX25ld0dlbi50b1NwYWNlKTsK
KyAgICAgICAgbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuY29uY2F0KG1fbmV3R2VuLm92ZXJzaXpl
QmxvY2tzKTsKKyAgICAgICAgbV9vbGRHZW4uYmxvY2tGaWx0ZXIuYWRkKG1fbmV3R2VuLmJsb2Nr
RmlsdGVyKTsKKyAgICAgICAgbV9uZXdHZW4uYmxvY2tGaWx0ZXIucmVzZXQoKTsKICAgICB9CiAK
LSAgICBpZiAoIW1fdG9TcGFjZS0+aGVhZCgpKQotICAgICAgICBhbGxvY2F0ZUJsb2NrKCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2FsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobV90b1NwYWNlLT5o
ZWFkKCkpOworICAgIEFTU0VSVChtX25ld0dlbi50b1NwYWNlLT5pc0VtcHR5KCkpOworICAgIGFs
bG9jYXRlQmxvY2soKTsKIAogICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSBmYWxzZTsKIH0KQEAg
LTI2MywxMyArMjY0LDIyIEBAIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCiB7CiAgICAgc2l6
ZV90IGNhbGN1bGF0ZWRTaXplID0gMDsKIAotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0g
bV90b1NwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgZm9y
IChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdlbi50b1NwYWNlLT5oZWFkKCk7IGJsb2NrOyBi
bG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIGNhbGN1bGF0ZWRTaXplICs9IGJsb2NrLT5z
aXplKCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLmZyb21TcGFj
ZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxh
dGVkU2l6ZSArPSBibG9jay0+c2l6ZSgpOwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sg
PSBtX2Zyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAg
IGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgp
OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxhdGVkU2l6ZSAr
PSBibG9jay0+c2l6ZSgpOwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX292ZXJz
aXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICBmb3Ig
KENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJs
b2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNp
emUoKTsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4uZnJvbVNwYWNl
LT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIGNhbGN1bGF0
ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9
IG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5l
eHQoKSkKICAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKIAogICAgIHJl
dHVybiBjYWxjdWxhdGVkU2l6ZTsKQEAgLTI3OSwxMyArMjg5LDIyIEBAIHNpemVfdCBDb3BpZWRT
cGFjZTo6Y2FwYWNpdHkoKQogewogICAgIHNpemVfdCBjYWxjdWxhdGVkQ2FwYWNpdHkgPSAwOwog
Ci0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX3RvU3BhY2UtPmhlYWQoKTsgYmxvY2s7
IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1f
b2xkR2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAg
ICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgpOworCisgICAgZm9y
IChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7
IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9IGJs
b2NrLT5jYXBhY2l0eSgpOworCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdl
bi5vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCiAg
ICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSArPSBibG9jay0+Y2FwYWNpdHkoKTsKIAotICAgIGZv
ciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2Nr
ID0gYmxvY2stPm5leHQoKSkKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2Vu
LnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAg
Y2FsY3VsYXRlZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgpOwogCi0gICAgZm9yIChDb3Bp
ZWRCbG9jayogYmxvY2sgPSBtX292ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0g
YmxvY2stPm5leHQoKSkKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2VuLmZy
b21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBj
YWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisKKyAgICBmb3IgKENvcGll
ZEJsb2NrKiBibG9jayA9IG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJs
b2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9IGJsb2Nr
LT5jYXBhY2l0eSgpOwogCiAgICAgcmV0dXJuIGNhbGN1bGF0ZWRDYXBhY2l0eTsKQEAgLTMxMSw5
ICszMzAsNTIgQEAgc3RhdGljIGJvb2wgaXNCbG9ja0xpc3RQYWdlZE91dChkb3VibGUgZAogCiBi
b29sIENvcGllZFNwYWNlOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKIHsKLSAgICByZXR1
cm4gaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV90b1NwYWNlKSAKLSAgICAgICAgfHwg
aXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV9mcm9tU3BhY2UpIAotICAgICAgICB8fCBp
c0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCAmbV9vdmVyc2l6ZUJsb2Nrcyk7CisgICAgcmV0
dXJuIGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fb2xkR2VuLnRvU3BhY2UpIAorICAg
ICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCBtX29sZEdlbi5mcm9tU3BhY2Up
IAorICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCAmbV9vbGRHZW4ub3Zl
cnNpemVCbG9ja3MpCisgICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1f
bmV3R2VuLnRvU3BhY2UpIAorICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5l
LCBtX25ld0dlbi5mcm9tU3BhY2UpIAorICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRl
YWRsaW5lLCAmbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MpOworfQorCit2b2lkIENvcGllZFNwYWNl
Ojp3aWxsQWJhbmRvblN0b3JhZ2Uodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYg
KCFwdHIpCisgICAgICAgIHJldHVybjsKKworICAgIENvcGllZEJsb2NrKiBvbGRCbG9jayA9IGJs
b2NrRm9yKHB0cik7CisKKyAgICBpZiAob2xkQmxvY2stPmlzT3ZlcnNpemUoKSkgeworICAgICAg
ICBvbGRCbG9jay0+dW5waW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElm
IHRoZSBibG9jayBpcyBvbGQgKGkuZS4gaXQgaGFzIGFscmVhZHkgYmVlbiB0aHJvdWdoIGF0IGxl
YXN0IG9uZSBjb2xsZWN0aW9uKQorICAgIC8vIHRoZW4gd2UgbmVlZCB0byByZW1vdmUgdGhlIGJ5
dGVzIHdlIGFsbG9jYXRlZCBoZXJlIHByZXZpb3VzbHkgc28gdGhhdCB0aGUgYmxvY2sncworICAg
IC8vIG1fbGl2ZUJ5dGVzIGNvdW50IHJlbWFpbnMgYWNjdXJhdGUgYWNyb3NzIEVkZW5Db2xsZWN0
aW9ucy4gCisgICAgLy8KKyAgICAvLyBBZGRpdGlvbmFsbHksIGlmIHRoZSBibG9jayBpcyB0aGUg
YmxvY2sgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgYWxsb2NhdGVkIG91dCBvZiwgCisgICAgLy8g
d2UgbmVlZCB0byBzdWJ0cmFjdCB0aGUgYnl0ZXMgZnJvbSB0aGUgYmxvY2sgaW4gY2FzZSB3ZSBl
bmQgdXAgcmVhbGxvYy1pbmcgaW4gdGhlIAorICAgIC8vIHNhbWUgYmxvY2suIAorICAgIGlmIChv
bGRCbG9jay0+aXNPbGQoKSB8fCBvbGRCbG9jayA9PSBtX2FsbG9jYXRvci5jdXJyZW50QmxvY2so
KSkKKyAgICAgICAgb2xkQmxvY2stPmRpZEV2YWN1YXRlQnl0ZXMoYnl0ZXMpOworfQorCit2b2lk
IENvcGllZFNwYWNlOjpkaWRBc3NpZ25TdG9yYWdlKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQor
eworICAgIEFTU0VSVChwdHIpOworICAgIENvcGllZEJsb2NrKiBuZXdCbG9jayA9IGJsb2NrRm9y
KHB0cik7CisKKyAgICBpZiAobmV3QmxvY2stPmlzT3ZlcnNpemUoKSkgeworICAgICAgICBuZXdC
bG9jay0+cGluKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRv
IG5vdGlmeSB0aGUgYmxvY2sgb2YgYWRkaXRpb25hbCBsaXZlIGJ5dGVzIGluIGNhc2Ugb3VyIG5l
eHQgY29sbGVjdGlvbiAKKyAgICAvLyBpcyBhbiBFZGVuQ29sbGVjdGlvbi4gVGhpcyBmdW5jdGlv
biBvbmx5IGdldHMgY2FsbGVkIHdoZW4gYXNzaWduaW5nIENvcGllZFNwYWNlCisgICAgLy8gYWxs
b2NhdGlvbnMgdG8gb2xkLWdlbmVyYXRpb24gb2JqZWN0cywgYmVjYXVzZSB3ZSB3b24ndCByZXBv
cnQgdGhlc2UgbmV3IGJ5dGVzIGluIHRoZSAKKyAgICAvLyBDb3BpZWRCbG9jayBkdXJpbmcgbWFy
a2luZyBvZiBhbiBFZGVuQ29sbGVjdGlvbi4KKyAgICBuZXdCbG9jay0+cmVwb3J0TGl2ZUJ5dGVz
RHVyaW5nV3JpdGVCYXJyaWVyKGJ5dGVzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDE1NjEz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvcGllZEFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIkhlYXBCbG9jay5oIgorI2luY2x1ZGUgIkhlYXBPcGVyYXRpb24uaCIKICNpbmNs
dWRlICJUaW55Qmxvb21GaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQm9vbGVhbi5oPgpAQCAtNjAsNiArNjEsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgQ29waWVkQWxsb2NhdG9yJiBhbGxvY2F0b3IoKSB7IHJldHVybiBtX2FsbG9jYXRv
cjsgfQogCisgICAgdm9pZCBkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCk7CisKKyAgICB0ZW1wbGF0
ZSA8SGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZT4KICAgICB2b2lkIHN0YXJ0ZWRDb3B5aW5n
KCk7CiAgICAgdm9pZCBkb25lQ29weWluZygpOwogICAgIGJvb2wgaXNJbkNvcHlQaGFzZSgpIHsg
cmV0dXJuIG1faW5Db3B5aW5nUGhhc2U7IH0KQEAgLTgwLDYgKzg0LDEyIEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBDb3BpZWRCbG9jayogYmxvY2tGb3Iodm9pZCopOwogCisgICAgSGVhcCogaGVh
cCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcDsgfQorCisgICAgdm9pZCBjb3B5V3JpdGVCYXJyaWVy
KHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUpOworICAgIHZvaWQgd2lsbEFiYW5kb25TdG9y
YWdlKHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUpOworICAgIHZvaWQgZGlkQXNzaWduU3Rv
cmFnZSh2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKTsKKwogcHJpdmF0ZToKICAgICBzdGF0
aWMgYm9vbCBpc092ZXJzaXplKHNpemVfdCk7CiAKQEAgLTkxLDYgKzEwMSw3IEBAIHByaXZhdGU6
CiAgICAgQ29waWVkQmxvY2sqIGFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKTsKIAogICAg
IHZvaWQgZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayosIENvcGllZEJsb2NrKiopOworICAg
IHRlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgogICAgIHZvaWQgcmVjeWNs
ZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2NrKik7CiAgICAgdm9pZCByZWN5Y2xlQm9ycm93ZWRC
bG9jayhDb3BpZWRCbG9jayopOwogCkBAIC05OCwxNyArMTA5LDI5IEBAIHByaXZhdGU6CiAKICAg
ICBDb3BpZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAKLSAgICBUaW55Qmxvb21GaWx0ZXIgbV9i
bG9ja0ZpbHRlcjsKICAgICBIYXNoU2V0PENvcGllZEJsb2NrKj4gbV9ibG9ja1NldDsKIAogICAg
IFNwaW5Mb2NrIG1fdG9TcGFjZUxvY2s7CiAKLSAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJs
b2NrPiogbV90b1NwYWNlOwotICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBtX2Zy
b21TcGFjZTsKLSAgICAKLSAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBtX2Jsb2Nr
czE7Ci0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gbV9ibG9ja3MyOwotICAgIERv
dWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+IG1fb3ZlcnNpemVCbG9ja3M7CisgICAgc3RydWN0
IENvcGllZEdlbmVyYXRpb24geworICAgICAgICBDb3BpZWRHZW5lcmF0aW9uKCkKKyAgICAgICAg
ICAgIDogdG9TcGFjZSgwKQorICAgICAgICAgICAgLCBmcm9tU3BhY2UoMCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIHRvU3Bh
Y2U7CisgICAgICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBmcm9tU3BhY2U7Cisg
ICAgICAgIAorICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MxOwor
ICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MyOworICAgICAgICBE
b3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBvdmVyc2l6ZUJsb2NrczsKKworICAgICAgICBU
aW55Qmxvb21GaWx0ZXIgYmxvY2tGaWx0ZXI7CisgICAgfTsKKworICAgIENvcGllZEdlbmVyYXRp
b24gbV9vbGRHZW47CisgICAgQ29waWVkR2VuZXJhdGlvbiBtX25ld0dlbjsKICAgIAogICAgIGJv
b2wgbV9pbkNvcHlpbmdQaGFzZTsKICAgICBib29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAko
cmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGlubGluZSBib29sIENvcGllZFNwYWNlOjpjb250YWlucyhDb3BpZWRCbG9jayogYmxv
Y2spCiB7Ci0gICAgcmV0dXJuICFtX2Jsb2NrRmlsdGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2Fz
dDxCaXRzPihibG9jaykpICYmIG1fYmxvY2tTZXQuY29udGFpbnMoYmxvY2spOworICAgIHJldHVy
biAoIW1fbmV3R2VuLmJsb2NrRmlsdGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihi
bG9jaykpIAorICAgICAgICAgICAgfHwgIW1fb2xkR2VuLmJsb2NrRmlsdGVyLnJ1bGVPdXQocmVp
bnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpKQorICAgICAgICAmJiBtX2Jsb2NrU2V0LmNvbnRh
aW5zKGJsb2NrKTsKIH0KIAogaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmNvbnRhaW5zKHZvaWQq
IHB0ciwgQ29waWVkQmxvY2sqJiByZXN1bHQpCkBAIC05Miw2ICs5NCw3IEBAIGlubGluZSB2b2lk
IENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2FyeSgKICAgICAgICAgcGluKGJsb2NrKTsKIH0KIAor
dGVtcGxhdGUgPEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGU+CiBpbmxpbmUgdm9pZCBDb3Bp
ZWRTcGFjZTo6cmVjeWNsZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2NrKiBibG9jaykKIHsKICAg
ICBBU1NFUlQoYmxvY2spOwpAQCAtMTAwLDcgKzEwMywxMCBAQCBpbmxpbmUgdm9pZCBDb3BpZWRT
cGFjZTo6cmVjeWNsZUV2YWN1YXRlCiAgICAgewogICAgICAgICBTcGluTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fdG9TcGFjZUxvY2spOwogICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShibG9jayk7Ci0g
ICAgICAgIG1fZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOworICAgICAgICBpZiAoY29sbGVjdGlv
blR5cGUgPT0gRWRlbkNvbGxlY3Rpb24pCisgICAgICAgICAgICBtX25ld0dlbi5mcm9tU3BhY2Ut
PnJlbW92ZShibG9jayk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fb2xkR2VuLmZyb21T
cGFjZS0+cmVtb3ZlKGJsb2NrKTsKICAgICB9CiAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigp
LmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKIH0KQEAgLTE0MSw4ICsx
NDcsOCBAQCBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9jaygpCiAgICAgCiAg
ICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZShtX2hlYXAtPmJsb2Nr
QWxsb2NhdG9yKCkuYWxsb2NhdGU8Q29waWVkQmxvY2s+KCkpOwogICAgICAgICAKLSAgICBtX3Rv
U3BhY2UtPnB1c2goYmxvY2spOwotICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nh
c3Q8Qml0cz4oYmxvY2spKTsKKyAgICBtX25ld0dlbi50b1NwYWNlLT5wdXNoKGJsb2NrKTsKKyAg
ICBtX25ld0dlbi5ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykp
OwogICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKICAgICBtX2FsbG9jYXRvci5zZXRDdXJyZW50
QmxvY2soYmxvY2spOwogfQpAQCAtMTczLDYgKzE3OSw4MSBAQCBpbmxpbmUgQ29waWVkQmxvY2sq
IENvcGllZFNwYWNlOjpibG9ja0ZvCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29waWVk
QmxvY2sqPihyZWludGVycHJldF9jYXN0PHNpemVfdD4ocHRyKSAmIHNfYmxvY2tNYXNrKTsKIH0K
IAordGVtcGxhdGUgPEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGU+CitpbmxpbmUgdm9pZCBD
b3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQoreworICAgIERvdWJseUxpbmtlZExpc3Q8Q29w
aWVkQmxvY2s+KiB0b1NwYWNlLCAqZnJvbVNwYWNlLCAqb3ZlcnNpemVCbG9ja3M7CisgICAgVGlu
eUJsb29tRmlsdGVyKiBibG9ja0ZpbHRlcjsKKyAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRnVs
bENvbGxlY3Rpb24pIHsKKyAgICAgICAgQVNTRVJUKG1fb2xkR2VuLmZyb21TcGFjZS0+aXNFbXB0
eSgpKTsKKyAgICAgICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKKwor
ICAgICAgICBtX29sZEdlbi50b1NwYWNlLT5jb25jYXQoKm1fbmV3R2VuLnRvU3BhY2UpOworICAg
ICAgICBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5jb25jYXQobV9uZXdHZW4ub3ZlcnNpemVCbG9j
a3MpOworCisgICAgICAgIEFTU0VSVChtX25ld0dlbi50b1NwYWNlLT5pc0VtcHR5KCkpOworICAg
ICAgICBBU1NFUlQobV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKTsKKworICAgICAg
ICBzdGQ6OnN3YXAobV9vbGRHZW4uZnJvbVNwYWNlLCBtX29sZEdlbi50b1NwYWNlKTsKKyAgICAg
ICAgdG9TcGFjZSA9IG1fb2xkR2VuLnRvU3BhY2U7CisgICAgICAgIGZyb21TcGFjZSA9IG1fb2xk
R2VuLmZyb21TcGFjZTsKKyAgICAgICAgb3ZlcnNpemVCbG9ja3MgPSAmbV9vbGRHZW4ub3ZlcnNp
emVCbG9ja3M7CisgICAgICAgIGJsb2NrRmlsdGVyID0gJm1fb2xkR2VuLmJsb2NrRmlsdGVyOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZDo6c3dhcChtX25ld0dlbi5mcm9tU3BhY2UsIG1fbmV3
R2VuLnRvU3BhY2UpOworICAgICAgICB0b1NwYWNlID0gbV9uZXdHZW4udG9TcGFjZTsKKyAgICAg
ICAgZnJvbVNwYWNlID0gbV9uZXdHZW4uZnJvbVNwYWNlOworICAgICAgICBvdmVyc2l6ZUJsb2Nr
cyA9ICZtX25ld0dlbi5vdmVyc2l6ZUJsb2NrczsKKyAgICAgICAgYmxvY2tGaWx0ZXIgPSAmbV9u
ZXdHZW4uYmxvY2tGaWx0ZXI7CisgICAgfQorCisgICAgYmxvY2tGaWx0ZXItPnJlc2V0KCk7Cisg
ICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKKworICAgIENvcGllZEJsb2NrKiBu
ZXh0ID0gMDsKKyAgICBzaXplX3QgdG90YWxMaXZlQnl0ZXMgPSAwOworICAgIHNpemVfdCB0b3Rh
bFVzYWJsZUJ5dGVzID0gMDsKKyAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgYWNjdXJhdGVseSBr
ZWVwIHRyYWNrIG9mIHRoZSB0b3RhbCBsaXZlIGJ5dGVzIGZvciBFZGVuQ29sbGVjdGlvbnMuCisg
ICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBmcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJs
b2NrID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gYmxvY2stPm5leHQoKTsKKyAgICAgICAgaWYg
KCFibG9jay0+aXNQaW5uZWQoKSAmJiBibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKSB7CisgICAgICAg
ICAgICByZWN5Y2xlRXZhY3VhdGVkQmxvY2s8Y29sbGVjdGlvblR5cGU+KGJsb2NrKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChibG9jay0+bGl2ZUJ5
dGVzKCkgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgICAgIHRvdGFsTGl2ZUJ5dGVz
ICs9IGJsb2NrLT5saXZlQnl0ZXMoKTsKKyAgICAgICAgdG90YWxVc2FibGVCeXRlcyArPSBibG9j
ay0+cGF5bG9hZENhcGFjaXR5KCk7CisgICAgICAgIGJsb2NrLT5kaWRQcm9tb3RlKCk7CisgICAg
fQorCisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gb3ZlcnNpemVCbG9ja3MtPmhlYWQoKTsKKyAg
ICB3aGlsZSAoYmxvY2spIHsKKyAgICAgICAgQ29waWVkQmxvY2sqIG5leHQgPSBibG9jay0+bmV4
dCgpOworICAgICAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpIHsKKyAgICAgICAgICAgIGJsb2Nr
RmlsdGVyLT5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOworICAgICAgICAgICAg
dG90YWxMaXZlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOworICAgICAgICAgICAg
dG90YWxVc2FibGVCeXRlcyArPSBibG9jay0+cGF5bG9hZENhcGFjaXR5KCk7CisgICAgICAgICAg
ICBibG9jay0+ZGlkUHJvbW90ZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3Zl
cnNpemVCbG9ja3MtPnJlbW92ZShibG9jayk7CisgICAgICAgICAgICBtX2Jsb2NrU2V0LnJlbW92
ZShibG9jayk7CisgICAgICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0
ZUN1c3RvbVNpemUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKKyAgICAgICAgfSAKKyAg
ICAgICAgYmxvY2sgPSBuZXh0OworICAgIH0KKworICAgIGRvdWJsZSBtYXJrZWRTcGFjZUJ5dGVz
ID0gbV9oZWFwLT5vYmplY3RTcGFjZSgpLmNhcGFjaXR5KCk7CisgICAgZG91YmxlIHRvdGFsRnJh
Z21lbnRhdGlvbiA9ICgoZG91YmxlKXRvdGFsTGl2ZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcykg
LyAoKGRvdWJsZSl0b3RhbFVzYWJsZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcyk7CisgICAgbV9z
aG91bGREb0NvcHlQaGFzZSA9IC8qbV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVs
bENvbGxlY3Rpb24gJiYgKi90b3RhbEZyYWdtZW50YXRpb24gPD0gT3B0aW9uczo6bWluSGVhcFV0
aWxpemF0aW9uKCk7CisgICAgaWYgKCFtX3Nob3VsZERvQ29weVBoYXNlKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFzZSk7CisgICAgQVNTRVJUKCFtX2lu
Q29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOworICAg
IG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIENvcGllZFNwYWNlSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVZpc2l0b3IuY3BwCShyZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDEwIEBAIHZvaWQgQ29weVZpc2l0b3I6OmNvcHlGcm9tU2hhcmVkKCkKICAgICAgICAgICAgICAg
ICB2aXNpdEl0ZW0oKml0KTsKIAogICAgICAgICAgICAgQVNTRVJUKCFibG9jay0+bGl2ZUJ5dGVz
KCkpOwotICAgICAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cmVjeWNsZUV2YWN1YXRl
ZEJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIGlmIChtX3NoYXJlZC5tX3ZtLT5oZWFwLm9wZXJh
dGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICBtX3No
YXJlZC5tX2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVkQmxvY2s8RWRlbkNvbGxlY3Rpb24+
KGJsb2NrKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX2Nv
cGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVkQmxvY2s8RnVsbENvbGxlY3Rpb24+KGJsb2NrKTsK
ICAgICAgICAgfQogICAgICAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KG5leHQsIGVu
ZCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZp
c2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3
IEBAIGlubGluZSBib29sIENvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ28KIGlubGluZSB2b2lk
KiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgdm9p
ZCogcmVzdWx0ID0gMDsgLy8gQ29tcGlsZXJzIGRvbid0IHJlYWxpemUgdGhhdCB0aGlzIHdpbGwg
YmUgYXNzaWduZWQuCi0gICAgaWYgKExJS0VMWShtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0
ZShieXRlcywgJnJlc3VsdCkpKQorICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5
QWxsb2NhdGVEdXJpbmdDb3B5aW5nKGJ5dGVzLCAmcmVzdWx0KSkpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgCiAgICAgcmVzdWx0ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0ZXMpOwpA
QCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3Bh
CiAgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG5ld0Jsb2NrKTsKIAogICAg
IHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IG1fY29w
aWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KTsKKyAgICBDaGVja2VkQm9v
bGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGVEdXJpbmdDb3B5
aW5nKGJ5dGVzLCAmcmVzdWx0KTsKICAgICBBU1NFUlQoZGlkU3VjY2VlZCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hh
cmVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmNwcAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgx
LDcgKzE4MSwzMSBAQCB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRDb3B5aW5nCiB7
CiAgICAgewogICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOwotICAg
ICAgICBXVEY6OmNvcHlUb1ZlY3RvcihtX2NvcGllZFNwYWNlLT5tX2Jsb2NrU2V0LCBtX2Jsb2Nr
c1RvQ29weSk7CisgICAgICAgIGlmIChtX3ZtLT5oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9
PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAg
ICAgICAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbV9jb3BpZWRTcGFjZS0+bV9uZXdHZW4uZnJv
bVNwYWNlLT5oZWFkKCk7IAorICAgICAgICAgICAgd2hpbGUgKGJsb2NrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGluZGV4ID49IG1fYmxvY2tzVG9Db3B5LnNpemUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9ibG9ja3NUb0NvcHlbaW5kZXgrK10gPSBi
bG9jazsgCisgICAgICAgICAgICAgICAgYmxvY2sgPSBibG9jay0+bmV4dCgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBXZSBkbyB0aGUgcmVzaXplIGhlcmUgaW5zdGVhZCBvZiBh
dCB0aGUgdmVyeSBiZWdpbm5pbmcgYmVjYXVzZSBpdCdzCisgICAgICAgICAgICAvLyBPKG4pIHRv
IGdldCB0aGUgbGVuZ3RoIG9mIHRoZSBsaW5rZWQgbGlzdCBvZiBibG9ja3MuCisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9Db3B5LnJlc2l6ZShpbmRl
eCk7CisKKyAgICAgICAgICAgIC8vIElmIHdlIGV4aGF1c3RlZCB0aGUgcHJlLWV4aXN0aW5nIGxl
bmd0aCBvZiB0aGUgdmVjdG9yIHRoZW4gc3RhcnQKKyAgICAgICAgICAgIC8vIGFwcGVuZGluZyB0
byB0aGUgZW5kIG9mIGl0LgorICAgICAgICAgICAgd2hpbGUgKGJsb2NrKSB7CisgICAgICAgICAg
ICAgICAgbV9ibG9ja3NUb0NvcHkuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBibG9j
ayA9IGJsb2NrLT5uZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBBU1NFUlQobV92bS0+aGVhcC5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENv
bGxlY3Rpb24pOworICAgICAgICAgICAgV1RGOjpjb3B5VG9WZWN0b3IobV9jb3BpZWRTcGFjZS0+
bV9ibG9ja1NldCwgbV9ibG9ja3NUb0NvcHkpOworICAgICAgICB9CiAgICAgICAgIG1fY29weUlu
ZGV4ID0gMDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgeyAKIHN0YXRpYyBjb25z
dCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJh
Z2Ugd2VicGFnZS4KIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxIZWFwU2l6ZSA9IDEgKiBNQjsg
Ly8gTWF0Y2hlcyB0aGUgRmFzdE1hbGxvYyBwZXItdGhyZWFkIGNhY2hlLgogCi0jZGVmaW5lIEVO
QUJMRV9HQ19MT0dHSU5HIDAKKyNkZWZpbmUgRU5BQkxFX0dDX0xPR0dJTkcgMQogCiAjaWYgRU5B
QkxFKEdDX0xPR0dJTkcpCiAjaWYgQ09NUElMRVIoQ0xBTkcpCkBAIC0xNTIsNiArMTUyLDEwIEBA
IHN0cnVjdCBHQ0NvdW50ZXIgewogI2RlZmluZSBHQ0NPVU5URVIobmFtZSwgdmFsdWUpIGRvIHsg
fSB3aGlsZSAoZmFsc2UpCiAjZW5kaWYKIAorI3VuZGVmIEVOQUJMRV9HQ19MT0dHSU5HCisKKyNk
ZWZpbmUgRU5BQkxFX0dFTkVSQVRJT05BTF9DT0xMRUNUT1IgMQorCiBzdGF0aWMgaW5saW5lIHNp
emVfdCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlwZSwgc2l6ZV90IHJhbVNpemUpCiB7CiAg
ICAgaWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkKQEAgLTE2Myw3ICsxNjcsMTEgQEAgc3RhdGlj
IGlubGluZSBzaXplX3QgcHJvcG9ydGlvbmFsSGVhcFNpegogewogICAgIC8vIFRyeSB0byBzdGF5
IHVuZGVyIDEvMiBSQU0gc2l6ZSB0byBsZWF2ZSByb29tIGZvciB0aGUgRE9NLCByZW5kZXJpbmcs
IG5ldHdvcmtpbmcsIGV0Yy4KICAgICBpZiAoaGVhcFNpemUgPCByYW1TaXplIC8gNCkKKyNpZiBF
TkFCTEUoR0VORVJBVElPTkFMX0NPTExFQ1RPUikKKyAgICAgICAgcmV0dXJuIDMgKiBoZWFwU2l6
ZTsKKyNlbHNlCiAgICAgICAgIHJldHVybiAyICogaGVhcFNpemU7CisjZW5kaWYKICAgICBpZiAo
aGVhcFNpemUgPCByYW1TaXplIC8gMikKICAgICAgICAgcmV0dXJuIDEuNSAqIGhlYXBTaXplOwog
ICAgIHJldHVybiAxLjI1ICogaGVhcFNpemU7CkBAIC0yNTEsOSArMjU5LDEwIEBAIEhlYXA6Okhl
YXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fcmFtU2l6ZShyYW1TaXplKCkp
CiAgICAgLCBtX21pbkJ5dGVzUGVyQ3ljbGUobWluSGVhcFNpemUobV9oZWFwVHlwZSwgbV9yYW1T
aXplKSkKICAgICAsIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QoMCkKLSAgICAsIG1fYnl0ZXNBbGxv
Y2F0ZWRMaW1pdChtX21pbkJ5dGVzUGVyQ3ljbGUpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkKDAp
Ci0gICAgLCBtX2J5dGVzQWJhbmRvbmVkKDApCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlKDApCisgICAgLCBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlKDApCisgICAgLCBtX2Z1bGxD
b2xsZWN0VGhyZXNob2xkKG1fbWluQnl0ZXNQZXJDeWNsZSkKKyAgICAsIG1fY29sbGVjdFRocmVz
aG9sZCgwLjEgKiBtX2Z1bGxDb2xsZWN0VGhyZXNob2xkKQogICAgICwgbV90b3RhbEJ5dGVzVmlz
aXRlZCgwKQogICAgICwgbV90b3RhbEJ5dGVzQ29waWVkKDApCiAgICAgLCBtX29wZXJhdGlvbklu
UHJvZ3Jlc3MoTm9PcGVyYXRpb24pCkBAIC0zMzMsOCArMzQyLDggQEAgdm9pZCBIZWFwOjpyZXBv
cnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpCiAKIHZvaWQgSGVhcDo6ZGlkQWJhbmRvbihzaXplX3Qg
Ynl0ZXMpCiB7Ci0gICAgbV9hY3Rpdml0eUNhbGxiYWNrLT5kaWRBbGxvY2F0ZShtX2J5dGVzQWxs
b2NhdGVkICsgbV9ieXRlc0FiYW5kb25lZCk7Ci0gICAgbV9ieXRlc0FiYW5kb25lZCArPSBieXRl
czsKKyAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGUgKyBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlKTsKKyAgICBtX2J5dGVzQWJhbmRv
bmVkVGhpc0N5Y2xlICs9IGJ5dGVzOwogfQogCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBr
KQpAQCAtNDg3LDYgKzQ5NiwxNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgdmlzaXRv
ci5zZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IodmlzaXRvcik7
CiAKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKSB7Cisg
ICAgICAgIEdDUEhBU0UoQWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVUb1JlbWVtYmVyZWRTZXQp
OworICAgICAgICAvLyBXZSBuZWVkIHRvIHJlLXByb2Nlc3MgYWxsIG9sZC1nZW5lcmF0aW9uIGV4
ZWN1dGFibGVzIHNvIHRoYXQgdGhleQorICAgICAgICAvLyB1cGRhdGUgdGhlaXIgQ29kZUJsb2Nr
cy4KKyAgICAgICAgYWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9SZW1lbWJlcmVkU2V0KCk7
CisgICAgfQorCisgICAgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+IHJlbWVtYmVyZWRTZXQobV9zbG90
VmlzaXRvci5tYXJrU3RhY2soKS5zaXplKCkpOworICAgIG1fc2xvdFZpc2l0b3IubWFya1N0YWNr
KCkuZmlsbFZlY3RvcihyZW1lbWJlcmVkU2V0KTsKKwogICAgIHsKICAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKHZpc2l0b3IpOwogCkBAIC01OTAsNiArNjA5LDE3IEBAIHZvaWQg
SGVhcDo6bWFya1Jvb3RzKCkKICAgICAgICAgfQogICAgIH0KIAorICAgIHsKKyAgICAgICAgR0NQ
SEFTRShDbGVhclJlbWVtYmVyZWRTZXQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVtZW1iZXJlZFNldC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgSlNDZWxs
KiBjZWxsID0gcmVtZW1iZXJlZFNldFtpXTsKKyAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKS0+Y2xlYXJSZW1lbWJlcmVkKGNlbGwpOworICAgICAgICB9CisvKgorICAgICAg
ICBtX29iamVjdFNwYWNlLmNsZWFyUmVtZW1iZXJlZFNldCgpOworKi8KKyAgICB9CisKICAgICBH
Q0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAogICAg
IG1fc2hhcmVkRGF0YS5kaWRGaW5pc2hNYXJraW5nKCk7CkBAIC02MDEsOCArNjMxLDE0IEBAIHZv
aWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICBNQVJLX0xPR19NRVNTQUdFMigiXG5OdW1iZXIgb2Yg
bGl2ZSBPYmplY3RzIGFmdGVyIGZ1bGwgR0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgdmlzaXRD
b3VudCwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGdjU3RhcnRUaW1lKTsK
ICNlbmRpZgogCi0gICAgbV90b3RhbEJ5dGVzVmlzaXRlZCA9IHZpc2l0b3IuYnl0ZXNWaXNpdGVk
KCk7Ci0gICAgbV90b3RhbEJ5dGVzQ29waWVkID0gdmlzaXRvci5ieXRlc0NvcGllZCgpOworICAg
IGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24pIHsKKyAgICAgICAg
bV90b3RhbEJ5dGVzVmlzaXRlZCArPSB2aXNpdG9yLmJ5dGVzVmlzaXRlZCgpOworICAgICAgICBt
X3RvdGFsQnl0ZXNDb3BpZWQgKz0gdmlzaXRvci5ieXRlc0NvcGllZCgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24p
OworICAgICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0gdmlzaXRvci5ieXRlc1Zpc2l0ZWQoKTsK
KyAgICAgICAgbV90b3RhbEJ5dGVzQ29waWVkID0gdmlzaXRvci5ieXRlc0NvcGllZCgpOworICAg
IH0KICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgbV90b3RhbEJ5dGVzVmlzaXRlZCArPSBt
X3NoYXJlZERhdGEuY2hpbGRCeXRlc1Zpc2l0ZWQoKTsKICAgICBtX3RvdGFsQnl0ZXNDb3BpZWQg
Kz0gbV9zaGFyZWREYXRhLmNoaWxkQnl0ZXNDb3BpZWQoKTsKQEAgLTYxNSw5ICs2NTEsMTAgQEAg
dm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIG1fc2hhcmVkRGF0YS5yZXNldCgpOwogfQogCit0
ZW1wbGF0ZSA8SGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZT4KIHZvaWQgSGVhcDo6Y29weUJh
Y2tpbmdTdG9yZXMoKQogewotICAgIG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7Cisg
ICAgbV9zdG9yYWdlU3BhY2Uuc3RhcnRlZENvcHlpbmc8Y29sbGVjdGlvblR5cGU+KCk7CiAgICAg
aWYgKG1fc3RvcmFnZVNwYWNlLnNob3VsZERvQ29weVBoYXNlKCkpIHsKICAgICAgICAgbV9zaGFy
ZWREYXRhLmRpZFN0YXJ0Q29weWluZygpOwogICAgICAgICBtX2NvcHlWaXNpdG9yLnN0YXJ0Q29w
eWluZygpOwpAQCAtNzIzLDExICs3NjAsMzQgQEAgdm9pZCBIZWFwOjpkZWxldGVVbm1hcmtlZENv
bXBpbGVkQ29kZSgpCiAgICAgbV9qaXRTdHViUm91dGluZXMuZGVsZXRlVW5tYXJrZWRKZXR0aXNv
bmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKK3ZvaWQgSGVhcDo6YWRkT2xkR2VuZXJhdGlvbkV4ZWN1
dGFibGVzVG9SZW1lbWJlcmVkU2V0KCkKK3sKKyAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dy
ZXNzID09IEVkZW5Db2xsZWN0aW9uKTsKKyAgICBmb3IgKEV4ZWN1dGFibGVCYXNlKiBjdXJyZW50
ID0gbV9jb21waWxlZENvZGUuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4
dCgpKSB7CisgICAgICAgIGlmIChpc01hcmtlZChjdXJyZW50KSkKKyAgICAgICAgICAgIGFkZFRv
UmVtZW1iZXJlZFNldChjdXJyZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6YWRkVG9SZW1l
bWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoY2VsbCk7CisgICAg
QVNTRVJUKCFPcHRpb25zOjplbmFibGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25U
aHJlYWQoKSk7CisgICAgQVNTRVJUKGlzTWFya2VkKGNlbGwpKTsKKyAgICBpZiAoaXNJblJlbWVt
YmVyZWRTZXQoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICBNYXJrZWRCbG9jazo6YmxvY2tG
b3IoY2VsbCktPnNldFJlbWVtYmVyZWQoY2VsbCk7CisjaWYgRU5BQkxFKEdFTkVSQVRJT05BTF9D
T0xMRUNUT1IpCisgICAgLy9kYXRhTG9nRigiQWRkZWQgJXAgdG8gcmVtZW1iZXJlZCBzZXRcbiIs
IGNlbGwpOworICAgIG1fc2xvdFZpc2l0b3IudW5jb25kaXRpb25hbGx5QXBwZW5kKGNvbnN0X2Nh
c3Q8SlNDZWxsKj4oY2VsbCkpOworI2VuZGlmCit9CisKIHZvaWQgSGVhcDo6Y29sbGVjdEFsbEdh
cmJhZ2UoKQogewogICAgIGlmICghbV9pc1NhZmVUb0NvbGxlY3QpCiAgICAgICAgIHJldHVybjsK
LSAgICAKKwogICAgIGNvbGxlY3QoRG9Td2VlcCk7CiB9CiAKQEAgLTc1OCw4ICs4MTgsMjYgQEAg
dm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIG1fZGVmZXJyYWxE
ZXB0aCsrOyAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBHQyBpbiB0aGlzIGNhbGwuCiAgICAg
bV92bS0+cHJlcGFyZVRvRGlzY2FyZENvZGUoKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsgLy8g
RGVjcmVtZW50IGRlZmVyYWwgbWFudWFsbHksIHNvIHdlIGRvbid0IEdDIHdoZW4gd2UgZG8gc28s
IHNpbmNlIHdlIGFyZSBhbHJlYWR5IEdDaW5nIS4KLSAgICAKLSAgICBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPSBDb2xsZWN0aW9uOworICAKKyAgICBkYXRhTG9nRigiYnl0ZXMgYWxsb2NhdGVkIHRo
aXMgY3ljbGU6ICVsdVxuIiwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSk7CisgICAgZGF0YUxv
Z0YoInNpemUgYWZ0ZXIgbGFzdCBjb2xsZWN0OiAlbHVcbiIsIG1fc2l6ZUFmdGVyTGFzdENvbGxl
Y3QpOworICAgIGRhdGFMb2dGKCJjb2xsZWN0IHRocmVzaG9sZDogJWx1XG4iLCBtX2NvbGxlY3RU
aHJlc2hvbGQpOyAKKyAgICBkYXRhTG9nRigiZnVsbCBjb2xsZWN0IHRocmVzaG9sZDogJWx1XG4i
LCBtX2Z1bGxDb2xsZWN0VGhyZXNob2xkKTsKKyAgICBib29sIGlzRnVsbENvbGxlY3Rpb24gPSAo
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSArIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QgPiBtX2Z1
bGxDb2xsZWN0VGhyZXNob2xkKSB8fCBzd2VlcFRvZ2dsZSA9PSBEb1N3ZWVwOworICAgIGlmIChp
c0Z1bGxDb2xsZWN0aW9uKSB7CisgICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEZ1bGxD
b2xsZWN0aW9uOworICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7CisgICAg
ICAgIGRhdGFMb2dGKCJGdWxsQ29sbGVjdGlvblxuIik7CisgICAgfSBlbHNlIHsKKyNpZiBFTkFC
TEUoR0VORVJBVElPTkFMX0NPTExFQ1RPUikKKyAgICAgICAgbV9vcGVyYXRpb25JblByb2dyZXNz
ID0gRWRlbkNvbGxlY3Rpb247CisgICAgICAgIGRhdGFMb2dGKCJFZGVuQ29sbGVjdGlvblxuIik7
CisjZWxzZQorICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBGdWxsQ29sbGVjdGlvbjsK
KyAgICAgICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOworICAgICAgICBkYXRhTG9n
RigiRnVsbENvbGxlY3Rpb25cbiIpOworI2VuZGlmCisgICAgfQogICAgIG1fZXh0cmFNZW1vcnlV
c2FnZSA9IDA7CiAKICAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPndpbGxDb2xsZWN0KCk7CkBAIC03
NzMsNiArODUxLDggQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwog
ICAgIHsKICAgICAgICAgR0NQSEFTRShTdG9wQWxsb2NhdGlvbik7CiAgICAgICAgIG1fb2JqZWN0
U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICAgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgICAgIG1fc3RvcmFnZVNwYWNlLmRpZFN0YXJ0
RnVsbENvbGxlY3Rpb24oKTsKICAgICB9CiAKICAgICBtYXJrUm9vdHMoKTsKQEAgLTc4OSwxMyAr
ODY5LDE2IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAg
ICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKICAgICB9CiAKLSAgICB7CisgICAgaWYgKG1fb3Bl
cmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikgewogICAgICAgICBtX2Jsb2NrU25h
cHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgpKTsKICAgICAg
ICAgTWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0b3IgZnVuY3RvcihtX2Jsb2NrU25hcHNob3QpOwog
ICAgICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAgICB9CiAKLSAg
ICBjb3B5QmFja2luZ1N0b3JlcygpOworICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0g
RnVsbENvbGxlY3Rpb24pCisgICAgICAgIGNvcHlCYWNraW5nU3RvcmVzPEZ1bGxDb2xsZWN0aW9u
PigpOworICAgIGVsc2UKKyAgICAgICAgY29weUJhY2tpbmdTdG9yZXM8RWRlbkNvbGxlY3Rpb24+
KCk7CiAKICAgICB7CiAgICAgICAgIEdDUEhBU0UoRmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxp
emVycyk7CkBAIC04MTksOCArOTAyLDEwIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2ds
ZSBzd2VlcFRvZ2cKICAgICAgICAgbV9vYmplY3RTcGFjZS5zaHJpbmsoKTsKICAgICB9CiAKLSAg
ICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBpbmcobV9ibG9ja1NuYXBzaG90KTsKLSAgICBtX2J5dGVz
QWJhbmRvbmVkID0gMDsKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xs
ZWN0aW9uKQorICAgICAgICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBpbmcobV9ibG9ja1NuYXBzaG90
KTsKKworICAgIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUgPSAwOwogCiAgICAgewogICAgICAg
ICBHQ1BIQVNFKFJlc2V0QWxsb2NhdG9ycyk7CkBAIC04MzEsMjEgKzkxNiw0NiBAQCB2b2lkIEhl
YXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgaWYgKE9wdGlvbnM6OmdjTWF4
SGVhcFNpemUoKSAmJiBjdXJyZW50SGVhcFNpemUgPiBPcHRpb25zOjpnY01heEhlYXBTaXplKCkp
CiAgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpleGl0V2l0aEZhaWx1cmUoKTsKIAotICAgIG1fc2l6
ZUFmdGVyTGFzdENvbGxlY3QgPSBjdXJyZW50SGVhcFNpemU7CisgICAgc2l6ZV90IG9sZENvbGxl
Y3RUaHJlc2hvbGQgPSBtX2NvbGxlY3RUaHJlc2hvbGQ7CisgICAgbV9jb2xsZWN0VGhyZXNob2xk
ID0gMC4xICogY3VycmVudEhlYXBTaXplOworICAgIGlmIChjdXJyZW50SGVhcFNpemUgPiBtX3Np
emVBZnRlckxhc3RDb2xsZWN0KQorICAgICAgICBtX2NvbGxlY3RUaHJlc2hvbGQgPSBtYXgobV9j
b2xsZWN0VGhyZXNob2xkLCBjdXJyZW50SGVhcFNpemUgLSBtX3NpemVBZnRlckxhc3RDb2xsZWN0
KTsKKyAgICBtX2NvbGxlY3RUaHJlc2hvbGQgPSBtYXgobV9jb2xsZWN0VGhyZXNob2xkLCBzaXpl
X3Qob2xkQ29sbGVjdFRocmVzaG9sZCAqICgyLjAgLyAzLjApKSk7CisgICAgbV9jb2xsZWN0VGhy
ZXNob2xkID0gbWF4KG1fY29sbGVjdFRocmVzaG9sZCwgc2l6ZV90KDAuMSAqIG1fbWluQnl0ZXNQ
ZXJDeWNsZSkpOworCisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVj
dGlvbikKKyAgICAgICAgbV9mdWxsQ29sbGVjdFRocmVzaG9sZCA9IDMgKiBjdXJyZW50SGVhcFNp
emU7CisvKgorICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24p
IHsKKyAgICAgICAgLy8gVG8gYXZvaWQgcGF0aG9sb2dpY2FsIEdDIGNodXJuIGluIHZlcnkgc21h
bGwgYW5kIHZlcnkgbGFyZ2UgaGVhcHMsIHdlIHNldAorICAgICAgICAvLyB0aGUgbmV3IGFsbG9j
YXRpb24gbGltaXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgaGVhcCwgd2l0aCBh
CisgICAgICAgIC8vIGZpeGVkIG1pbmltdW0uCisgICAgICAgIG1fbWF4SGVhcFNpemUgPSBtYXgo
bWluSGVhcFNpemUobV9oZWFwVHlwZSwgbV9yYW1TaXplKSwgcHJvcG9ydGlvbmFsSGVhcFNpemUo
Y3VycmVudEhlYXBTaXplLCBtX3JhbVNpemUpKTsKKyAgICAgICAgbV9tYXhFZGVuU2l6ZSA9IG1f
bWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKGN1cnJlbnRIZWFwU2l6ZSA+PSBtX3NpemVBZnRlckxhc3RDb2xsZWN0KTsKKyAgICAgICAg
bV9tYXhFZGVuU2l6ZSA9IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgICAg
IGlmICgoZG91YmxlKW1fbWF4RWRlblNpemUgLyAoZG91YmxlKW1fbWF4SGVhcFNpemUgPCAoMS4w
IC8gMy4wKSkKKyAgICAgICAgICAgIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbiA9IHRydWU7Cisg
ICAgICAgIG1fbWF4SGVhcFNpemUgKz0gY3VycmVudEhlYXBTaXplIC0gbV9zaXplQWZ0ZXJMYXN0
Q29sbGVjdDsKKyAgICAgICAgbV9tYXhFZGVuU2l6ZSA9IG1fbWF4SGVhcFNpemUgLSBjdXJyZW50
SGVhcFNpemU7CisgICAgfQorI2lmICFFTkFCTEUoR0VORVJBVElPTkFMX0NPTExFQ1RPUikKKyAg
ICBtX21heEVkZW5TaXplID0gbV9tYXhIZWFwU2l6ZTsKKyNlbmRpZgogCi0gICAgLy8gVG8gYXZv
aWQgcGF0aG9sb2dpY2FsIEdDIGNodXJuIGluIHZlcnkgc21hbGwgYW5kIHZlcnkgbGFyZ2UgaGVh
cHMsIHdlIHNldAotICAgIC8vIHRoZSBuZXcgYWxsb2NhdGlvbiBsaW1pdCBiYXNlZCBvbiB0aGUg
Y3VycmVudCBzaXplIG9mIHRoZSBoZWFwLCB3aXRoIGEKLSAgICAvLyBmaXhlZCBtaW5pbXVtLgot
ICAgIHNpemVfdCBtYXhIZWFwU2l6ZSA9IG1heChtaW5IZWFwU2l6ZShtX2hlYXBUeXBlLCBtX3Jh
bVNpemUpLCBwcm9wb3J0aW9uYWxIZWFwU2l6ZShjdXJyZW50SGVhcFNpemUsIG1fcmFtU2l6ZSkp
OwotICAgIG1fYnl0ZXNBbGxvY2F0ZWRMaW1pdCA9IG1heEhlYXBTaXplIC0gY3VycmVudEhlYXBT
aXplOworICAgIGRhdGFMb2dGKCJzaXplIG9mIGVkZW46ICVsdSBieXRlc1xuIiwgbV9tYXhFZGVu
U2l6ZSk7CisqLwogCi0gICAgbV9ieXRlc0FsbG9jYXRlZCA9IDA7CisgICAgbV9zaXplQWZ0ZXJM
YXN0Q29sbGVjdCA9IGN1cnJlbnRIZWFwU2l6ZTsKKworICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgPSAwOwogICAgIGRvdWJsZSBsYXN0R0NFbmRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKTsKICAgICBtX2xhc3RHQ0xlbmd0aCA9IGxhc3RHQ0VuZFRpbWUgLSBs
YXN0R0NTdGFydFRpbWU7CiAKICAgICBpZiAoT3B0aW9uczo6cmVjb3JkR0NQYXVzZVRpbWVzKCkp
CiAgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpyZWNvcmRHQ1BhdXNlVGltZShsYXN0R0NTdGFydFRp
bWUsIGxhc3RHQ0VuZFRpbWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBDb2xsZWN0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24gfHwgbV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxD
b2xsZWN0aW9uKTsKIAogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwog
ICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwpAQCAtODYzLDEwICs5NzMsNiBAQCB2b2lkIEhl
YXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIGRvdWJsZSBhZnRlciA9
IGN1cnJlbnRUaW1lTVMoKTsKICAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtcywg
IiwgY3VycmVudEhlYXBTaXplIC8gMTAyNCwgIiBrYl1cbiIpOwogICAgIH0KLQotI2lmIEVOQUJM
RShBTExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgZGF0YUxvZ0YoIkpTQyBHQyBmaW5pc2hpbmcgY29s
bGVjdGlvbi5cbiIpOwotI2VuZGlmCiB9CiAKIGJvb2wgSGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5
T3JEZWZlcigpCkBAIC04NzYsNyArOTgyLDcgQEAgYm9vbCBIZWFwOjpjb2xsZWN0SWZOZWNlc3Nh
cnlPckRlZmVyKCkKICAgICAKICAgICBpZiAoIXNob3VsZENvbGxlY3QoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorCiAgICAgY29sbGVjdChEb05vdFN3ZWVwKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTkwOSw4ICsxMDE1LDggQEAgdm9pZCBIZWFwOjpzZXRHYXJiYWdlQ29sbGVj
dGlvblRpbWVyRW5hYgogCiB2b2lkIEhlYXA6OmRpZEFsbG9jYXRlKHNpemVfdCBieXRlcykKIHsK
LSAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWQgKyBt
X2J5dGVzQWJhbmRvbmVkKTsKLSAgICBtX2J5dGVzQWxsb2NhdGVkICs9IGJ5dGVzOworICAgIG1f
YWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAr
IG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUpOworICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUgKz0gYnl0ZXM7CiB9CiAKIGJvb2wgSGVhcDo6aXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KQpA
QCAtOTg3LDQgKzEwOTMsNDIgQEAgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5k
R0NJZgogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIAordm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
TE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7CisgICAgaWYgKCFmcm9tIHx8
ICFpc01hcmtlZChmcm9tKSkKKyAgICAgICAgcmV0dXJuOworICAgIEhlYXA6OmhlYXAoZnJvbSkt
PmFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwordm9pZCBIZWFwOjp3aWxsQWJhbmRvblN0
b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxsLCB2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAg
ICBpZiAoIWNlbGwgfHwgIWlzTWFya2VkKGNlbGwpKQorICAgICAgICByZXR1cm47CisgICAgbV9z
dG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9yYWdlKHB0ciwgYnl0ZXMpOworfQorCit2b2lkIEhl
YXA6OmRpZEFzc2lnblN0b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxsLCB2b2lkKiBwdHIsIHNpemVf
dCBieXRlcykKK3sKKyAgICBpZiAoIWNlbGwgfHwgIWlzTWFya2VkKGNlbGwpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zdG9yYWdlU3BhY2UuZGlkQXNzaWduU3RvcmFnZShwdHIsIGJ5dGVzKTsK
K30KKwordm9pZCBIZWFwOjpjb3B5V3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgdm9p
ZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRyLCBzaXplX3QgbmV3U2l6ZSkK
K3sKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0X2Nhc3Q8SlNDZWxsKj4o
ZnJvbSkpOworCisgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghbmV3UHRyKSB7CisgICAgICAgIEFTU0VSVCghbmV3U2l6ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAoZnJvbSk7Cisg
ICAgaGVhcC0+bV9zdG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9yYWdlKG9sZFB0ciwgb2xkU2l6
ZSk7CisgICAgaGVhcC0+bV9zdG9yYWdlU3BhY2UuZGlkQXNzaWduU3RvcmFnZShuZXdQdHIsIG5l
d1NpemUpOworICAgIGhlYXAtPmFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAx
NTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDEwICs5MiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJv
b2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHNl
dE1hcmtlZChjb25zdCB2b2lkKik7CiAKKyAgICAgICAgdm9pZCBhZGRPbGRHZW5lcmF0aW9uRXhl
Y3V0YWJsZXNUb1JlbWVtYmVyZWRTZXQoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBhZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKik7CisgICAgICAgIGJvb2wgaXNJblJl
bWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoY2VsbCk7CisgICAgICAgICAgICBBU1NFUlQoIU9wdGlvbnM6OmVuYWJsZUNv
bmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzUmVtZW1iZXJlZChjZWxsKTsKKyAg
ICAgICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1dyaXRlQmFycmllckVuYWJsZWQoKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpT
Q2VsbCopOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwg
SlNWYWx1ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwq
LCBKU0NlbGwqKTsKLSAgICAgICAgc3RhdGljIHVpbnQ4X3QqIGFkZHJlc3NPZkNhcmRGb3IoSlND
ZWxsKik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29weVdyaXRl
QmFycmllcihjb25zdCBKU0NlbGwqLCB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRTaXplLCB2b2lk
KiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCB3aWxsQWJhbmRvblN0b3JhZ2UoY29uc3QgSlNDZWxsKiwgdm9pZCogb2xkUHRyLCBzaXplX3Qg
b2xkU2l6ZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlkQXNzaWduU3RvcmFn
ZShjb25zdCBKU0NlbGwqLCB2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKTsKIAogICAgICAg
ICBIZWFwKFZNKiwgSGVhcFR5cGUpOwogICAgICAgICB+SGVhcCgpOwpAQCAtMTEzLDYgKzEyNSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIHRydWUgaWYgY29sbGVjdGlvbiBpcyBp
biBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0NvbGxlY3RpbmcoKTsKKyAgICAgICAg
aW5saW5lIEhlYXBPcGVyYXRpb24gb3BlcmF0aW9uSW5Qcm9ncmVzcygpIHsgcmV0dXJuIG1fb3Bl
cmF0aW9uSW5Qcm9ncmVzczsgfQogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24gb3Ig
Y29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1c3koKTsK
ICAgICAgICAgCkBAIC0yMjUsNiArMjM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgbWFya1Jvb3RzKCk7CiAgICAgICAgIHZvaWQgbWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJv
b3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgbWFya1RlbXBTb3J0VmVjdG9ycyhIZWFwUm9vdFZp
c2l0b3ImKTsKKyAgICAgICAgdGVtcGxhdGUgPEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGU+
CiAgICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsKICAgICAgICAgdm9pZCBoYXJ2ZXN0
V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzKCk7CkBAIC0yNDYsOSArMjYwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBj
b25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwogICAgICAgICBzaXplX3QgbV9zaXplQWZ0
ZXJMYXN0Q29sbGVjdDsKIAotICAgICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZExpbWl0Owot
ICAgICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKLSAgICAgICAgc2l6ZV90IG1fYnl0ZXNB
YmFuZG9uZWQ7CisgICAgICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAg
ICAgICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFRoaXNDeWNsZTsKKyAgICAgICAgc2l6ZV90IG1f
ZnVsbENvbGxlY3RUaHJlc2hvbGQ7CisgICAgICAgIHNpemVfdCBtX2NvbGxlY3RUaHJlc2hvbGQ7
CiAKICAgICAgICAgc2l6ZV90IG1fdG90YWxCeXRlc1Zpc2l0ZWQ7CiAgICAgICAgIHNpemVfdCBt
X3RvdGFsQnl0ZXNDb3BpZWQ7CkBAIC0yNjQsNiArMjc5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZUYWJsZVNwZWN0cnVtIG1fZGVzdHJveWVkVHlwZUNvdW50czsKICNlbmRpZgogCisg
ICAgICAgIEhhc2hTZXQ8Y29uc3QgSlNDZWxsKj4gbV9jb3B5aW5nUmVtZW1iZXJlZFNldDsKKwog
ICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRWYWx1ZXM7CiAgICAgICAgIFZlY3Rv
cjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4qID4gbV90
ZW1wU29ydGluZ1ZlY3RvcnM7CiAgICAgICAgIE93blB0cjxIYXNoU2V0PE1hcmtlZEFyZ3VtZW50
QnVmZmVyKj4gPiBtX21hcmtMaXN0U2V0OwpAQCAtMzEzLDggKzMzMCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBpZiAoaXNEZWZlcnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBpZiAoT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKQotICAgICAgICAgICAgcmV0
dXJuIG1fYnl0ZXNBbGxvY2F0ZWQgPiBPcHRpb25zOjpnY01heEhlYXBTaXplKCkgJiYgbV9pc1Nh
ZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uOwotICAg
ICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZCA+IG1fYnl0ZXNBbGxvY2F0ZWRMaW1pdCAmJiBt
X2lzU2FmZVRvQ29sbGVjdCAmJiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb247
CisgICAgICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA+IE9wdGlvbnM6
OmdjTWF4SGVhcFNpemUoKSAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPT0gTm9PcGVyYXRpb247CisgICAgICAgIHJldHVybiBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlID4gbV9jb2xsZWN0VGhyZXNob2xkICYmIG1faXNTYWZlVG9Db2xsZWN0ICYmIG1fb3Bl
cmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbjsKICAgICB9CiAKICAgICBib29sIEhlYXA6
OmlzQnVzeSgpCkBAIC0zMjQsNyArMzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBib29s
IEhlYXA6OmlzQ29sbGVjdGluZygpCiAgICAgewotICAgICAgICByZXR1cm4gbV9vcGVyYXRpb25J
blByb2dyZXNzID09IENvbGxlY3Rpb247CisgICAgICAgIHJldHVybiBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24gfHwgbV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5D
b2xsZWN0aW9uOwogICAgIH0KIAogICAgIGlubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpT
Q2VsbCogY2VsbCkKQEAgLTM2NCwxOCArMzgxLDMwIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVO
QUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxz
ZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAg
ICAgfQogCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCos
IEpTQ2VsbCopCisgICAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2Vs
bCogZnJvbSwgSlNDZWxsKiB0bykKICAgICB7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJP
RklMSU5HKQogICAgICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJpZXIo
KTsKKyNlbmRpZgorICAgICAgICBpZiAoIWZyb20gfHwgIWlzTWFya2VkKGZyb20pKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXRvIHx8IGlzTWFya2VkKHRvKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgSGVhcDo6aGVhcChmcm9tKS0+YWRkVG9SZW1lbWJlcmVkU2V0
KGZyb20pOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqLCBKU1ZhbHVlKQorICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihj
b25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8pCiAgICAgeworI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3Jp
dGVCYXJyaWVyKCk7CisjZW5kaWYKKyAgICAgICAgaWYgKCF0by5pc0NlbGwoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgd3JpdGVCYXJyaWVyKGZyb20sIHRvLmFzQ2VsbCgpKTsKICAg
ICB9CiAKICAgICBpbmxpbmUgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90
IGNvc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwT3BlcmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcE9wZXJhdGlvbi5o
CShyZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwT3Bl
cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWVudW0gSGVhcE9wZXJhdGlvbiB7IE5vT3BlcmF0aW9uLCBBbGxvY2F0aW9uLCBDb2xs
ZWN0aW9uIH07CitlbnVtIEhlYXBPcGVyYXRpb24geyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwg
RnVsbENvbGxlY3Rpb24sIEVkZW5Db2xsZWN0aW9uIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlzaW9u
IDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDI5IEBAIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tB
cnJheShCbG9ja0FsbG8KIAogTWFya1N0YWNrQXJyYXk6On5NYXJrU3RhY2tBcnJheSgpCiB7Ci0g
ICAgQVNTRVJUKG1fbnVtYmVyT2ZTZWdtZW50cyA9PSAxICYmIG1fc2VnbWVudHMuc2l6ZSgpID09
IDEpOworICAgIEFTU0VSVChtX251bWJlck9mU2VnbWVudHMgPT0gMSk7CisgICAgQVNTRVJUKG1f
c2VnbWVudHMuc2l6ZSgpID09IDEpOwogICAgIG1fYmxvY2tBbGxvY2F0b3IuZGVhbGxvY2F0ZShN
YXJrU3RhY2tTZWdtZW50OjpkZXN0cm95KG1fc2VnbWVudHMucmVtb3ZlSGVhZCgpKSk7CisgICAg
bV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgQVNTRVJUKCFtX251bWJlck9mU2VnbWVudHMpOwor
ICAgIEFTU0VSVCghbV9zZWdtZW50cy5zaXplKCkpOworfQorCit2b2lkIE1hcmtTdGFja0FycmF5
OjpjbGVhcigpCit7CisgICAgaWYgKCFtX3NlZ21lbnRzLmhlYWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIE1hcmtTdGFja1NlZ21lbnQqIG5leHQ7CisgICAgZm9yIChNYXJrU3RhY2tTZWdtZW50
KiBjdXJyZW50ID0gbV9zZWdtZW50cy5oZWFkKCk7IGN1cnJlbnQtPm5leHQoKTsgY3VycmVudCA9
IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5leHQoKTsKKyAgICAgICAgbV9zZWdt
ZW50cy5yZW1vdmUoY3VycmVudCk7CisgICAgICAgIG1fYmxvY2tBbGxvY2F0b3IuZGVhbGxvY2F0
ZShNYXJrU3RhY2tTZWdtZW50OjpkZXN0cm95KGN1cnJlbnQpKTsKKyAgICB9CisgICAgbV90b3Ag
PSAwOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cyA9IDE7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIG1fc2VnbWVudHMuaGVhZCgpLT5tX3RvcCA9IDA7CisjZW5kaWYKIH0KIAogdm9pZCBNYXJr
U3RhY2tBcnJheTo6ZXhwYW5kKCkKQEAgLTE2Nyw0ICsxODgsMjggQEAgdm9pZCBNYXJrU3RhY2tB
cnJheTo6c3RlYWxTb21lQ2VsbHNGcm9tKAogICAgICAgICBhcHBlbmQob3RoZXIucmVtb3ZlTGFz
dCgpKTsKIH0KIAordm9pZCBNYXJrU3RhY2tBcnJheTo6ZmlsbFZlY3RvcihWZWN0b3I8Y29uc3Qg
SlNDZWxsKj4mIHZlY3RvcikKK3sKKyAgICBBU1NFUlQodmVjdG9yLnNpemUoKSA9PSBzaXplKCkp
OworCisgICAgTWFya1N0YWNrU2VnbWVudCogY3VycmVudFNlZ21lbnQgPSBtX3NlZ21lbnRzLmhl
YWQoKTsKKyAgICBpZiAoIWN1cnJlbnRTZWdtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICB1
bnNpZ25lZCBjb3VudCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdG9wOyAr
K2kpIHsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRTZWdtZW50LT5kYXRhKClbaV0pOworICAgICAg
ICB2ZWN0b3JbY291bnQrK10gPSBjdXJyZW50U2VnbWVudC0+ZGF0YSgpW2ldOworICAgIH0KKwor
ICAgIGN1cnJlbnRTZWdtZW50ID0gY3VycmVudFNlZ21lbnQtPm5leHQoKTsKKyAgICB3aGlsZSAo
Y3VycmVudFNlZ21lbnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNfc2Vn
bWVudENhcGFjaXR5OyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50U2VnbWVudC0+
ZGF0YSgpW2ldKTsKKyAgICAgICAgICAgIHZlY3Rvcltjb3VudCsrXSA9IGN1cnJlbnRTZWdtZW50
LT5kYXRhKClbaV07CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFNlZ21lbnQgPSBjdXJyZW50
U2VnbWVudC0+bmV4dCgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkocmV2aXNpb24gMTU2MTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDYgKzUyLDcgQEAKIAogI2luY2x1ZGUgIkhlYXBCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC0xMDAsNiArMTAxLDkgQEAgcHVibGljOgogICAgIHNpemVfdCBzaXplKCk7CiAgICAg
Ym9vbCBpc0VtcHR5KCk7CiAKKyAgICB2b2lkIGZpbGxWZWN0b3IoVmVjdG9yPGNvbnN0IEpTQ2Vs
bCo+Jik7CisgICAgdm9pZCBjbGVhcigpOworCiBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxzaXpl
X3Qgc2l6ZT4gc3RydWN0IENhcGFjaXR5RnJvbVNpemUgewogICAgICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IHZhbHVlID0gKHNpemUgLSBzaXplb2YoTWFya1N0YWNrU2VnbWVudCkpIC8gc2l6ZW9m
KGNvbnN0IEpTQ2VsbCopOwpAQCAtMTIxLDcgKzEyNSw2IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGNvbnN0IHNpemVfdCBzX3NlZ21lbnRDYXBhY2l0eSA9IENhcGFj
aXR5RnJvbVNpemU8TWFya1N0YWNrU2VnbWVudDo6YmxvY2tTaXplPjo6dmFsdWU7CiAgICAgc2l6
ZV90IG1fdG9wOwogICAgIHNpemVfdCBtX251bWJlck9mU2VnbWVudHM7Ci0gICAKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDEwICs5
LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdl
ZE91dChkb3VibGUgZGVhZGxpbmUpCitzdGF0aWMgYm9vbCBpc0xpc3RQYWdlZE91dChkb3VibGUg
ZGVhZGxpbmUsIERvdWJseUxpbmtlZExpc3Q8TWFya2VkQmxvY2s+JiBsaXN0KQogewogICAgIHVu
c2lnbmVkIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKLSAgICBNYXJrZWRCbG9jayogYmxv
Y2sgPSBtX2Jsb2NrTGlzdC5oZWFkKCk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbGlzdC5o
ZWFkKCk7CiAgICAgd2hpbGUgKGJsb2NrKSB7CiAgICAgICAgIGJsb2NrID0gYmxvY2stPm5leHQo
KTsKICAgICAgICAgKytpdGVyc1NpbmNlTGFzdFRpbWVDaGVjazsKQEAgLTIzLDcgKzIzLDEzIEBA
IGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSAKICAgICAgICAgICAgIGl0
ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CiAKK2Jvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFk
bGluZSkKK3sKKyAgICBpZiAoaXNMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fYmxvY2tMaXN0KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zMSwxNSAr
MzcsMzUgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdAogewogICAg
IGlmICghbV9mcmVlTGlzdC5oZWFkKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgewot
ICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrID09IG1fYmxvY2tzVG9Td2VlcCk7Cisg
ICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2sgPT0gbV9uZXh0QmxvY2tUb1N3ZWVwKTsK
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICAg
ICAgICAgIG1fYmxvY2tzVG9Td2VlcCA9IG1fY3VycmVudEJsb2NrLT5uZXh0KCk7CisgICAgICAg
ICAgICBtX25leHRCbG9ja1RvU3dlZXAgPSBtX2N1cnJlbnRCbG9jay0+bmV4dCgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgZm9yIChNYXJrZWRCbG9jayomIGJsb2NrID0gbV9ibG9ja3NUb1N3ZWVw
OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKSB7CisgICAgICAgIE1hcmtlZEJsb2NrKiBu
ZXh0OworICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYgYmxvY2sgPSBtX25leHRCbG9ja1RvU3dl
ZXA7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBibG9jay0+bmV4
dCgpOworCiAgICAgICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUxpc3QgZnJlZUxpc3QgPSBibG9j
ay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9GcmVlTGlzdCk7CisvKgorICAgICAgICAgICAg
dW5zaWduZWQgZnJlZUxpc3RMZW5ndGggPSBmcmVlTGlzdC5ieXRlcyAvIGJsb2NrLT5jZWxsU2l6
ZSgpOworICAgICAgICAgICAgdW5zaWduZWQgbWF4TnVtT2JqZWN0cyA9IChibG9jay0+Y2FwYWNp
dHkoKSAtIHNpemVvZihNYXJrZWRCbG9jaykpIC8gYmxvY2stPmNlbGxTaXplKCk7CisqLworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvL2lmIChkb3VibGUobWF4TnVtT2JqZWN0cyAtIGZyZWVM
aXN0TGVuZ3RoKSAvIGRvdWJsZShtYXhOdW1PYmplY3RzKSA+IDAuNzUpIHsKICAgICAgICAgICAg
IGlmICghZnJlZUxpc3QuaGVhZCkgeworLyoKKyAgICAgICAgICAgICAgICBNYXJrZWRCbG9jazo6
RnJlZUNlbGwqIG5leHQ7CisgICAgICAgICAgICAgICAgZm9yIChNYXJrZWRCbG9jazo6RnJlZUNl
bGwqIGN1cnJlbnQgPSBmcmVlTGlzdC5oZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dCkgewor
ICAgICAgICAgICAgICAgICAgICBuZXh0ID0gY3VycmVudC0+bmV4dDsKKyAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihjdXJyZW50KS0+emFwKCk7CisgICAgICAg
ICAgICAgICAgfQorKi8KICAgICAgICAgICAgICAgICBibG9jay0+ZGlkQ29uc3VtZUVtcHR5RnJl
ZUxpc3QoKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrTGlzdC5yZW1vdmUoYmxvY2spOworICAg
ICAgICAgICAgICAgIG1fYmxvY2tMaXN0LnB1c2goYmxvY2spOworICAgICAgICAgICAgICAgIGlm
ICghbV9sYXN0RnVsbEJsb2NrKQorICAgICAgICAgICAgICAgICAgICBtX2xhc3RGdWxsQmxvY2sg
PSBibG9jazsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAt
NDgsNiArNzQsNyBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKKyAgICAKICAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAgICAgICAgICBtX2ZyZWVMaXN0ID0gZnJl
ZUxpc3Q7CiAgICAgICAgICAgICBicmVhazsKQEAgLTYyLDYgKzg5LDcgQEAgaW5saW5lIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdAogICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCog
aGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0
OwogICAgIEFTU0VSVChoZWFkKTsKKyAgICBtX21hcmtlZFNwYWNlLT5kaWRBbGxvY2F0ZUluQmxv
Y2sobV9jdXJyZW50QmxvY2spOwogICAgIHJldHVybiBoZWFkOwogfQogICAgIApAQCAtMTI3LDcg
KzE1NSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG8KICAgICBB
U1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAgCiAgICAgbV9ibG9ja0xpc3QuYXBwZW5kKGJs
b2NrKTsKLSAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOworICAg
IG1fbmV4dEJsb2NrVG9Td2VlcCA9IG1fY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAgbV9mcmVl
TGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6U3dlZXBUb0ZyZWVMaXN0KTsKICAgICBt
X21hcmtlZFNwYWNlLT5kaWRBZGRCbG9jayhibG9jayk7CiB9CkBAIC0xMzgsOSArMTY2LDI3IEBA
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayhNYXJrZWQKICAgICAgICAgbV9jdXJy
ZW50QmxvY2sgPSBtX2N1cnJlbnRCbG9jay0+bmV4dCgpOwogICAgICAgICBtX2ZyZWVMaXN0ID0g
TWFya2VkQmxvY2s6OkZyZWVMaXN0KCk7CiAgICAgfQotICAgIGlmIChtX2Jsb2Nrc1RvU3dlZXAg
PT0gYmxvY2spCi0gICAgICAgIG1fYmxvY2tzVG9Td2VlcCA9IG1fYmxvY2tzVG9Td2VlcC0+bmV4
dCgpOworICAgIGlmIChtX25leHRCbG9ja1RvU3dlZXAgPT0gYmxvY2spCisgICAgICAgIG1fbmV4
dEJsb2NrVG9Td2VlcCA9IG1fbmV4dEJsb2NrVG9Td2VlcC0+bmV4dCgpOworCisgICAgaWYgKGJs
b2NrID09IG1fbGFzdEZ1bGxCbG9jaykKKyAgICAgICAgbV9sYXN0RnVsbEJsb2NrID0gbV9sYXN0
RnVsbEJsb2NrLT5wcmV2KCk7CisgICAgCiAgICAgbV9ibG9ja0xpc3QucmVtb3ZlKGJsb2NrKTsK
IH0KIAordm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IDA7CisgICAgbV9jdXJyZW50QmxvY2sgPSAwOworICAgIG1fZnJlZUxpc3QgPSBNYXJr
ZWRCbG9jazo6RnJlZUxpc3QoKTsKKyAgICBpZiAobV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNz
KCkgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgIG1fbGFzdEZ1bGxCbG9jayA9IDA7CisKKyAg
ICBpZiAobV9sYXN0RnVsbEJsb2NrKQorICAgICAgICBtX25leHRCbG9ja1RvU3dlZXAgPSBtX2xh
c3RGdWxsQmxvY2stPm5leHQoKSA/IG1fbGFzdEZ1bGxCbG9jay0+bmV4dCgpIDogbV9sYXN0RnVs
bEJsb2NrOworICAgIGVsc2UKKyAgICAgICAgbV9uZXh0QmxvY2tUb1N3ZWVwID0gbV9ibG9ja0xp
c3QuaGVhZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAxNTYxMzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNyArNTIsOCBAQCBwcml2YXRlOgogICAgIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBt
X2ZyZWVMaXN0OwogICAgIE1hcmtlZEJsb2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICBNYXJrZWRC
bG9jayogbV9sYXN0QWN0aXZlQmxvY2s7Ci0gICAgTWFya2VkQmxvY2sqIG1fYmxvY2tzVG9Td2Vl
cDsKKyAgICBNYXJrZWRCbG9jayogbV9uZXh0QmxvY2tUb1N3ZWVwOworICAgIE1hcmtlZEJsb2Nr
KiBtX2xhc3RGdWxsQmxvY2s7CiAgICAgRG91Ymx5TGlua2VkTGlzdDxNYXJrZWRCbG9jaz4gbV9i
bG9ja0xpc3Q7CiAgICAgc2l6ZV90IG1fY2VsbFNpemU7CiAgICAgTWFya2VkQmxvY2s6OkRlc3Ry
dWN0b3JUeXBlIG1fZGVzdHJ1Y3RvclR5cGU7CkBAIC02OCw3ICs2OSw4IEBAIGlubGluZSBwdHJk
aWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXQKIGlubGluZSBNYXJrZWRBbGxvY2F0b3I6Ok1h
cmtlZEFsbG9jYXRvcigpCiAgICAgOiBtX2N1cnJlbnRCbG9jaygwKQogICAgICwgbV9sYXN0QWN0
aXZlQmxvY2soMCkKLSAgICAsIG1fYmxvY2tzVG9Td2VlcCgwKQorICAgICwgbV9uZXh0QmxvY2tU
b1N3ZWVwKDApCisgICAgLCBtX2xhc3RGdWxsQmxvY2soMCkKICAgICAsIG1fY2VsbFNpemUoMCkK
ICAgICAsIG1fZGVzdHJ1Y3RvclR5cGUoTWFya2VkQmxvY2s6Ok5vbmUpCiAgICAgLCBtX2hlYXAo
MCkKQEAgLTEwMiwxNCArMTA0LDYgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGUocwogICAgIHJldHVybiBoZWFkOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0
b3I6OnJlc2V0KCkKLXsKLSAgICBtX2xhc3RBY3RpdmVCbG9jayA9IDA7Ci0gICAgbV9jdXJyZW50
QmxvY2sgPSAwOwotICAgIG1fZnJlZUxpc3QgPSBNYXJrZWRCbG9jazo6RnJlZUxpc3QoKTsKLSAg
ICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2Jsb2NrTGlzdC5oZWFkKCk7Ci19Ci0KIGlubGluZSB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQogewogICAgIEFTU0VSVCghbV9sYXN0
QWN0aXZlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmNwcAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDQ1IEBAIHZvaWQg
TWFya2VkQmxvY2s6OnN0b3BBbGxvY2F0aW5nKGNvbnN0IEYKICAgICBtX3N0YXRlID0gTWFya2Vk
OwogfQogCit2b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKCkKK3sKKyAgICBpZiAoaGVhcCgp
LT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gSlNDOjpFZGVuQ29sbGVjdGlvbikKKyAgICAgICAg
dGhpcy0+Y2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlwZTxFZGVuQ29sbGVjdGlvbj4oKTsKKyAg
ICBlbHNlCisgICAgICAgIHRoaXMtPmNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGU8RnVsbENv
bGxlY3Rpb24+KCk7Cit9CisKK3ZvaWQgTWFya2VkQmxvY2s6OmNsZWFyUmVtZW1iZXJlZFNldCgp
Cit7CisgICAgbV9yZW1lbWJlcmVkU2V0LmNsZWFyQWxsKCk7Cit9CisKK3RlbXBsYXRlIDxIZWFw
T3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgordm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJNYXJrc1dp
dGhDb2xsZWN0aW9uVHlwZSgpCit7CisgICAgQVNTRVJUKGNvbGxlY3Rpb25UeXBlID09IEZ1bGxD
b2xsZWN0aW9uIHx8IGNvbGxlY3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uKTsKKyAgICBIRUFQ
X0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOworCisgICAgQVNTRVJUKG1fc3RhdGUg
IT0gTmV3ICYmIG1fc3RhdGUgIT0gRnJlZUxpc3RlZCk7CisgICAgaWYgKGNvbGxlY3Rpb25UeXBl
ID09IEZ1bGxDb2xsZWN0aW9uKSB7CisgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKKyAgICAg
ICAgbV9yZW1lbWJlcmVkU2V0LmNsZWFyQWxsKCk7CisgICAgfQorCisgICAgLy8gVGhpcyB3aWxs
IGJlY29tZSB0cnVlIGF0IHRoZSBlbmQgb2YgdGhlIG1hcmsgcGhhc2UuIFdlIHNldCBpdCBub3cg
dG8KKyAgICAvLyBhdm9pZCBhbiBleHRyYSBwYXNzIHRvIGRvIHNvIGxhdGVyLgorICAgIG1fc3Rh
dGUgPSBNYXJrZWQ7Cit9CisKK3ZvaWQgTWFya2VkQmxvY2s6Omxhc3RDaGFuY2VUb0ZpbmFsaXpl
KCkKK3sKKyAgICBtX3dlYWtTZXQubGFzdENoYW5jZVRvRmluYWxpemUoKTsKKworICAgIGNsZWFy
TmV3bHlBbGxvY2F0ZWQoKTsKKyAgICBjbGVhck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlPEZ1bGxD
b2xsZWN0aW9uPigpOworICAgIHN3ZWVwKCk7Cit9CisKIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBN
YXJrZWRCbG9jazo6cmVzdW1lQWxsb2NhdGluZygpCiB7CiAgICAgSEVBUF9MT0dfQkxPQ0tfU1RB
VEVfVFJBTlNJVElPTih0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1
ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSGVhcEJsb2NrLmgiCiAKKyNpbmNsdWRl
ICJIZWFwT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiV2Vha1NldC5oIgogI2luY2x1ZGUgPHd0Zi9C
aXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgpAQCAtNjksOCArNzAsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAvLyBzaXplLgogCiAgICAgY2xhc3MgTWFya2VkQmxvY2sgOiBwdWJs
aWMgSGVhcEJsb2NrPE1hcmtlZEJsb2NrPiB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGF0b21TaXplID0gODsgLy8gYnl0ZXMKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9t
U2l6ZSA9IDE2OyAvLyBieXRlcwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJsb2NrU2l6
ZSA9IDY0ICogS0I7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tNYXNrID0gfihi
bG9ja1NpemUgLSAxKTsgLy8gYmxvY2tTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCiAKQEAg
LTEzNSwxMSArMTM3LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHN0b3BBbGxv
Y2F0aW5nKGNvbnN0IEZyZWVMaXN0Jik7CiAgICAgICAgIEZyZWVMaXN0IHJlc3VtZUFsbG9jYXRp
bmcoKTsgLy8gQ2FsbCB0aGlzIGlmIHlvdSBjYW5vbmljYWxpemVkIGEgYmxvY2sgZm9yIHNvbWUg
bm9uLWNvbGxlY3Rpb24gcmVsYXRlZCBwdXJwb3NlLgogICAgICAgICB2b2lkIGRpZENvbnN1bWVF
bXB0eUZyZWVMaXN0KCk7IC8vIENhbGwgdGhpcyBpZiB5b3Ugc3dlZXAgYSBibG9jaywgYnV0IHRo
ZSByZXR1cm5lZCBGcmVlTGlzdCBpcyBlbXB0eS4KKyAgICAgICAgdm9pZCBkaWRTd2VlcFRvTm9B
dmFpbCgpOyAvLyBDYWxsIHRoaXMgaWYgeW91IHN3ZWVwIGEgYmxvY2sgYW5kIGdldCBhbiBlbXB0
eSBmcmVlIGxpc3QgYmFjay4KIAogICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlICJuZXds
eSBhbGxvY2F0ZWQiIGJpdG1hcCB3YXMgbm9uLW51bGwgCiAgICAgICAgIC8vIGFuZCB3YXMgc3Vj
Y2Vzc2Z1bGx5IGNsZWFyZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgICAgYm9vbCBjbGVh
ck5ld2x5QWxsb2NhdGVkKCk7CisKICAgICAgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgICAg
IHZvaWQgY2xlYXJSZW1lbWJlcmVkU2V0KCk7CisgICAgICAgIHRlbXBsYXRlIDxIZWFwT3BlcmF0
aW9uIGNvbGxlY3Rpb25UeXBlPgorICAgICAgICB2b2lkIGNsZWFyTWFya3NXaXRoQ29sbGVjdGlv
blR5cGUoKTsKKwogICAgICAgICBzaXplX3QgbWFya0NvdW50KCk7CiAgICAgICAgIGJvb2wgaXNF
bXB0eSgpOwogCkBAIC0xNTYsNiArMTY0LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJNYXJrZWQoY29u
c3Qgdm9pZCopOwogCisgICAgICAgIHZvaWQgc2V0UmVtZW1iZXJlZChjb25zdCB2b2lkKik7Cisg
ICAgICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgdm9pZCBh
dG9taWNDbGVhclJlbWVtYmVyZWQoY29uc3Qgdm9pZCopOworICAgICAgICBib29sIGlzUmVtZW1i
ZXJlZChjb25zdCB2b2lkKik7CisKICAgICAgICAgYm9vbCBpc05ld2x5QWxsb2NhdGVkKGNvbnN0
IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CiAg
ICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CkBAIC0xNjYsNiAr
MTc5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hMaXZlQ2VsbChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hEZWFkQ2VsbChGdW5jdG9yJik7CiAKKyAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1hcmtzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKE1hcmtlZEJsb2NrLCBtX21hcmtzKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBhdG9tQWxpZ25tZW50TWFzayA9IGF0b21TaXplIC0gMTsgLy8gYXRv
bVNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KIApAQCAtMTgzLDkgKzE5OCwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IG1fYXRvbXNQZXJDZWxsOwogICAgICAgICBzaXpl
X3QgbV9lbmRBdG9tOyAvLyBUaGlzIGlzIGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBt
X2VuZEF0b20uCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgICAgICBXVEY6OkJpdG1hcDxh
dG9tc1BlckJsb2NrLCBXVEY6OkJpdG1hcEF0b21pYz4gbV9tYXJrczsKKyAgICAgICAgV1RGOjpC
aXRtYXA8YXRvbXNQZXJCbG9jaywgV1RGOjpCaXRtYXBBdG9taWMsIHVpbnQ4X3Q+IG1fbWFya3M7
CisgICAgICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwQXRvbWljLCB1
aW50OF90PiBtX3JlbWVtYmVyZWRTZXQ7CiAjZWxzZQotICAgICAgICBXVEY6OkJpdG1hcDxhdG9t
c1BlckJsb2NrLCBXVEY6OkJpdG1hcE5vdEF0b21pYz4gbV9tYXJrczsKKyAgICAgICAgV1RGOjpC
aXRtYXA8YXRvbXNQZXJCbG9jaywgV1RGOjpCaXRtYXBOb3RBdG9taWMsIHVpbnQ4X3Q+IG1fbWFy
a3M7CisgICAgICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwTm90QXRv
bWljLCB1aW50OF90PiBtX3JlbWVtYmVyZWRTZXQ7CiAjZW5kaWYKICAgICAgICAgT3duUHRyPFdU
Rjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+ID4gbV9uZXdseUFsbG9jYXRlZDsKIApAQCAtMjI3LDE1
ICsyNDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYmxvY2tNYXNrKTsK
ICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6bGFzdENoYW5jZVRvRmluYWxp
emUoKQotICAgIHsKLSAgICAgICAgbV93ZWFrU2V0Lmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7Ci0K
LSAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZCgpOwotICAgICAgICBjbGVhck1hcmtzKCk7Ci0g
ICAgICAgIHN3ZWVwKCk7Ci0gICAgfQotCiAgICAgaW5saW5lIE1hcmtlZEFsbG9jYXRvciogTWFy
a2VkQmxvY2s6OmFsbG9jYXRvcigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9hbGxv
Y2F0b3I7CkBAIC0yODQsMjYgKzI5MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSEVB
UF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKIAogICAgICAgICBBU1NFUlQoIW1f
bmV3bHlBbGxvY2F0ZWQpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKQotICAgICAg
ICAgICAgQVNTRVJUKG1fbWFya3MuZ2V0KGkpKTsKLSNlbmRpZgogICAgICAgICBBU1NFUlQobV9z
dGF0ZSA9PSBGcmVlTGlzdGVkKTsKICAgICAgICAgbV9zdGF0ZSA9IE1hcmtlZDsKICAgICB9CiAK
LSAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJNYXJrcygpCi0gICAgewotICAgICAg
ICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOwotCi0gICAgICAgIEFTU0VS
VChtX3N0YXRlICE9IE5ldyAmJiBtX3N0YXRlICE9IEZyZWVMaXN0ZWQpOwotICAgICAgICBtX21h
cmtzLmNsZWFyQWxsKCk7Ci0KLSAgICAgICAgLy8gVGhpcyB3aWxsIGJlY29tZSB0cnVlIGF0IHRo
ZSBlbmQgb2YgdGhlIG1hcmsgcGhhc2UuIFdlIHNldCBpdCBub3cgdG8KLSAgICAgICAgLy8gYXZv
aWQgYW4gZXh0cmEgcGFzcyB0byBkbyBzbyBsYXRlci4KLSAgICAgICAgbV9zdGF0ZSA9IE1hcmtl
ZDsKLSAgICB9Ci0KICAgICBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjptYXJrQ291bnQoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWFya3MuY291bnQoKTsKQEAgLTMzOSw2ICszMzEsMjYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxCaXRz
PihwKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4odGhpcykpIC8gYXRvbVNpemU7CiAgICAgfQog
CisgICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OnNldFJlbWVtYmVyZWQoY29uc3Qgdm9pZCog
cCkKKyAgICB7CisgICAgICAgIG1fcmVtZW1iZXJlZFNldC5zZXQoYXRvbU51bWJlcihwKSk7Cisg
ICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmNsZWFyUmVtZW1iZXJlZChjb25z
dCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgbV9yZW1lbWJlcmVkU2V0LmNsZWFyKGF0b21OdW1i
ZXIocCkpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjphdG9taWNDbGVh
clJlbWVtYmVyZWQoY29uc3Qgdm9pZCogcCkKKyAgICB7CisgICAgICAgIG1fcmVtZW1iZXJlZFNl
dC5jb25jdXJyZW50VGVzdEFuZENsZWFyKGF0b21OdW1iZXIocCkpOworICAgIH0KKworICAgIGlu
bGluZSBib29sIE1hcmtlZEJsb2NrOjppc1JlbWVtYmVyZWQoY29uc3Qgdm9pZCogcCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3JlbWVtYmVyZWRTZXQuZ2V0KGF0b21OdW1iZXIocCkpOworICAg
IH0KKwogICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBw
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24g
MTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgTWFya2VkU3BhY2U6On5NYXJrZWRTcGFj
ZSgpCiB7CiAgICAgRnJlZSBmcmVlKEZyZWU6OkZyZWVBbGwsIHRoaXMpOwogICAgIGZvckVhY2hC
bG9jayhmcmVlKTsKKyAgICBBU1NFUlQoIW1fYmxvY2tzLnNldCgpLnNpemUoKSk7CiB9CiAKIHN0
cnVjdCBMYXN0Q2hhbmNlVG9GaW5hbGl6ZSA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CkBA
IC0xMzgsMTcgKzEzOSwyNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMoKQog
ICAgIG1fbm9ybWFsU3BhY2UubGFyZ2VBbGxvY2F0b3IucmVzZXQoKTsKICAgICBtX25vcm1hbERl
c3RydWN0b3JTcGFjZS5sYXJnZUFsbG9jYXRvci5yZXNldCgpOwogICAgIG1faW1tb3J0YWxTdHJ1
Y3R1cmVEZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxvY2F0b3IucmVzZXQoKTsKKworICAgIG1fYmxv
Y2tzV2l0aE5ld09iamVjdHMuY2xlYXIoKTsKIH0KIAogdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRX
ZWFrU2V0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKIHsKICAgICBWaXNpdFdl
YWtTZXQgdmlzaXRXZWFrU2V0KGhlYXBSb290VmlzaXRvcik7Ci0gICAgZm9yRWFjaEJsb2NrKHZp
c2l0V2Vha1NldCk7CisgICAgaWYgKG1faGVhcC0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVk
ZW5Db2xsZWN0aW9uKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nr
c1dpdGhOZXdPYmplY3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgdmlzaXRXZWFrU2V0KG1f
YmxvY2tzV2l0aE5ld09iamVjdHNbaV0pOworICAgIH0gZWxzZQorICAgICAgICBmb3JFYWNoQmxv
Y2sodmlzaXRXZWFrU2V0KTsKIH0KIAogdm9pZCBNYXJrZWRTcGFjZTo6cmVhcFdlYWtTZXRzKCkK
IHsKLSAgICBmb3JFYWNoQmxvY2s8UmVhcFdlYWtTZXQ+KCk7CisgICAgaWYgKG1faGVhcC0+b3Bl
cmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0c1tpXS0+cmVhcFdlYWtTZXQoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZm9yRWFjaEJsb2NrPFJlYXBXZWFrU2V0PigpOwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KQEAgLTI5OSw2ICszMTAsMjUgQEAgdm9pZCBNYXJrZWRTcGFj
ZTo6Y2xlYXJOZXdseUFsbG9jYXRlZCgpCiAjZW5kaWYKIH0KIAorI2lmbmRlZiBOREVCVUcKK3N0
cnVjdCBWZXJpZnlNYXJrZWQgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgeworICAgIHZvaWQg
b3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgQVNTRVJUKGJsb2NrLT5uZWVkc1N3ZWVw
aW5nKCkpOyB9Cit9OworI2VuZGlmCisKK3ZvaWQgTWFya2VkU3BhY2U6OmNsZWFyTWFya3MoKQor
eworICAgIGlmIChtX2hlYXAtPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlv
bikgeworICAgICAgICBkYXRhTG9nRigibnVtYmVyIG9mIGJsb2NrcyB3aXRoIG5ldyBvYmplY3Rz
ID0gJWx1XG4iLCBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0c1tpXS0+Y2xlYXJNYXJrcygpOworICAg
IH0gZWxzZQorICAgICAgICBmb3JFYWNoQmxvY2s8Q2xlYXJNYXJrcz4oKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgZm9yRWFjaEJsb2NrPFZlcmlmeU1hcmtlZD4oKTsKKyNlbmRpZgorfQorCiB2b2lk
IE1hcmtlZFNwYWNlOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQogewogICAgIEFTU0VSVCghaXNJdGVy
YXRpbmcoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJ
KHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDE3IEBAIGNsYXNzIFdlYWtHQ0hhbmRs
ZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBzdHJ1Y3QgQ2xlYXJNYXJrcyA6IE1hcmtlZEJsb2Nr
OjpWb2lkRnVuY3RvciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykg
eyBibG9jay0+Y2xlYXJNYXJrcygpOyB9CisgICAgdm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2Nr
KiBibG9jaykKKyAgICB7CisgICAgICAgIGJsb2NrLT5jbGVhck1hcmtzKCk7CisgICAgfQorfTsK
Kworc3RydWN0IENsZWFyUmVtZW1iZXJlZFNldCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7
CisgICAgdm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAg
IGJsb2NrLT5jbGVhclJlbWVtYmVyZWRTZXQoKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgU3dlZXAg
OiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewpAQCAtMTA0LDggKzExNCwxMCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGRpZEFkZEJsb2NrKE1hcmtlZEJsb2NrKik7CiAgICAgdm9pZCBkaWRDb25z
dW1lRnJlZUxpc3QoTWFya2VkQmxvY2sqKTsKKyAgICB2b2lkIGRpZEFsbG9jYXRlSW5CbG9jayhN
YXJrZWRCbG9jayopOwogCiAgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgdm9pZCBjbGVhclJl
bWVtYmVyZWRTZXQoKTsKICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKICAgICB2b2lk
IHN3ZWVwKCk7CiAgICAgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNDQsNiArMTU2LDcgQEAg
cHJpdmF0ZToKICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBib29sIG1faXNJdGVyYXRpbmc7
CiAgICAgTWFya2VkQmxvY2tTZXQgbV9ibG9ja3M7CisgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4g
bV9ibG9ja3NXaXRoTmV3T2JqZWN0czsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IGlubGluZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIE1hcmtlZFNwYWNlOjpmb3JFYWNo
TGl2ZUNlbGwoSGVhcEl0ZXJhdGlvblNjb3BlJiwgRnVuY3RvciYgZnVuY3RvcikKQEAgLTI1NCw5
ICsyNjcsMTQgQEAgaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmRpZEFkZEJsb2NrKE1hcgogICAg
IG1fYmxvY2tzLmFkZChibG9jayk7CiB9CiAKLWlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpjbGVh
ck1hcmtzKCkKK2lubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpkaWRBbGxvY2F0ZUluQmxvY2soTWFy
a2VkQmxvY2sqIGJsb2NrKQoreworICAgIG1fYmxvY2tzV2l0aE5ld09iamVjdHMuYXBwZW5kKGJs
b2NrKTsKK30KKworaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmNsZWFyUmVtZW1iZXJlZFNldCgp
CiB7Ci0gICAgZm9yRWFjaEJsb2NrPENsZWFyTWFya3M+KCk7CisgICAgZm9yRWFjaEJsb2NrPENs
ZWFyUmVtZW1iZXJlZFNldD4oKTsKIH0KIAogaW5saW5lIHNpemVfdCBNYXJrZWRTcGFjZTo6b2Jq
ZWN0Q291bnQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIFNsb3RWaXNpdG9y
OjpTbG90VmlzaXRvcihHQ1RocmVhZFNoYXJlZEQKIAogU2xvdFZpc2l0b3I6On5TbG90VmlzaXRv
cigpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICBjbGVhck1hcmtTdGFj
aygpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpzZXR1cCgpCkBAIC02Myw2ICs2MywxMSBAQCB2
b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiAgICAgfQogfQogCit2b2lkIFNsb3RWaXNpdG9yOjpj
bGVhck1hcmtTdGFjaygpCit7CisgICAgbV9zdGFjay5jbGVhcigpOworfQorCiB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewog
ICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CkBAIC04MCw3ICs4NSw3IEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbigKICNlbmRpZgogCiAgICAgQVNTRVJUKEhlYXA6Omlz
TWFya2VkKGNlbGwpKTsKLSAgICAKKwogICAgIGlmIChpc0pTU3RyaW5nKGNlbGwpKSB7CiAgICAg
ICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZp
c2l0b3IpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1
YmxpYzoKICAgICBTbG90VmlzaXRvcihHQ1RocmVhZFNoYXJlZERhdGEmKTsKICAgICB+U2xvdFZp
c2l0b3IoKTsKIAorICAgIE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSB7IHJldHVybiBtX3N0
YWNrOyB9CisKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CisKICAgICB2b2lkIGFwcGVuZChDb25z
ZXJ2YXRpdmVSb290cyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBw
ZW5kKEpJVFdyaXRlQmFycmllcjxUPiopOwpAQCAtNjAsMTcgKzY0LDE5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFwcGVuZFVuYmFycmllcmVkVmFsdWUoSlNWYWx1ZSopOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZFdlYWsoV2VhazxUPiopOworICAg
IHZvaWQgdW5jb25kaXRpb25hbGx5QXBwZW5kKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgYWRk
T3BhcXVlUm9vdCh2b2lkKik7CiAgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopOwog
ICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKTsKICAgICBpbnQg
b3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERhdGEo
KSB7IHJldHVybiBtX3NoYXJlZDsgfQorICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1
cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgc2V0dXAoKTsKICAgICB2b2lkIHJl
c2V0KCk7CisgICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlz
aXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9CiAgICAgc2l6ZV90IGJ5dGVz
Q29waWVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0NvcGllZDsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE1
NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDE0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6aW50ZXJuYWwKICAgICAgICAgCiAgICAgTUFSS19MT0dfQ0hJTEQoKnRoaXMs
IGNlbGwpOwogCisgICAgdW5jb25kaXRpb25hbGx5QXBwZW5kKGNlbGwpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnVuY29uZGl0aW9uYWxseUFwcGVuZChKU0NlbGwqIGNl
bGwpCit7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKKyAgICBtX3Zpc2l0Q291
bnQrKzsKKyAgICAgICAgCiAgICAgLy8gU2hvdWxkIG5ldmVyIGF0dGVtcHQgdG8gbWFyayBzb21l
dGhpbmcgdGhhdCBpcyB6YXBwZWQuCiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAg
ICAgICAgCkBAIC0yMTIsNyArMjIwLDkgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZUFuZERyYWluKAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbGwqIG93
bmVyLCBDb3B5VG9rZW4gdG9rZW4sIHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQogewogICAgIEFT
U0VSVChieXRlcyk7Ci0gICAgbV9ieXRlc0NvcGllZCArPSBieXRlczsKKyAgICBib29sIGlzUmVt
ZW1iZXJlZCA9IGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9u
ICYmIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lciktPmlzUmVtZW1iZXJlZChvd25lcik7Cisg
ICAgaWYgKCFpc1JlbWVtYmVyZWQpCisgICAgICAgIG1fYnl0ZXNDb3BpZWQgKz0gYnl0ZXM7CiAK
ICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKICAg
ICBpZiAoYmxvY2stPmlzT3ZlcnNpemUoKSkgewpAQCAtMjIwLDEwICsyMzAsNyBAQCBpbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKEpTQ2VsCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJs
b2NrLT5yZXBvcnRMaXZlQnl0ZXMob3duZXIsIHRva2VuLCBieXRlcyk7CisgICAgYmxvY2stPnJl
cG9ydExpdmVCeXRlcyhvd25lciwgaXNSZW1lbWJlcmVkLCB0b2tlbiwgYnl0ZXMpOwogfQogICAg
IAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2Uoc2l6ZV90
IHNpemUpCkBAIC0yNDEsNiArMjQ4LDExIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBv
cnRFeHRyYU1lbW8KICNlbmRpZgogfQogCitpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAo
KSBjb25zdAoreworICAgIHJldHVybiAmc2hhcmVkRGF0YSgpLm1fdm0tPmhlYXA7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVzX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RpbnlCbG9vbUZpbHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RpbnlCbG9vbUZpbHRlci5oCShyZXZpc2lv
biAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaW55Qmxvb21GaWx0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBwdWJsaWM6CiAgICAgVGlueUJsb29t
RmlsdGVyKCk7CiAKICAgICB2b2lkIGFkZChCaXRzKTsKKyAgICB2b2lkIGFkZChUaW55Qmxvb21G
aWx0ZXImKTsKICAgICBib29sIHJ1bGVPdXQoQml0cykgY29uc3Q7IC8vIFRydWUgZm9yIDAuCiAg
ICAgdm9pZCByZXNldCgpOwogCkBAIC01Miw2ICs1MywxMSBAQCBpbmxpbmUgdm9pZCBUaW55Qmxv
b21GaWx0ZXI6OmFkZChCaXRzIGJpCiAgICAgbV9iaXRzIHw9IGJpdHM7CiB9CiAKK2lubGluZSB2
b2lkIFRpbnlCbG9vbUZpbHRlcjo6YWRkKFRpbnlCbG9vbUZpbHRlciYgb3RoZXIpCit7CisgICAg
bV9iaXRzIHw9IG90aGVyLm1fYml0czsKK30KKwogaW5saW5lIGJvb2wgVGlueUJsb29tRmlsdGVy
OjpydWxlT3V0KEJpdHMgYml0cykgY29uc3QKIHsKICAgICBpZiAoIWJpdHMpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE1NjEzMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2NSw2ICsyNjUsMjggQEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJn
NCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJn
MywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgcmVzZXRD
YWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUp
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVn
IGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1l
bnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3Vt
ZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgICAgIGFkZENh
bGxBcmd1bWVudChhcmc0KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOworICAgIH0K
KwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
UmVnIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBh
cmc0LCBHUFJSZWcgYXJnNSkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwpA
QCAtOTcxLDYgKzk5MywyMCBAQCBwdWJsaWM6CiAgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRy
IGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUp
CisgICAgeworICAgICAgICBwb2tlKGFyZzUsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUICsgMSk7Cisg
ICAgICAgIHBva2UoYXJnNCwgUE9LRV9BUkdVTUVOVF9PRkZTRVQpOworICAgICAgICBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorIAorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0z
MiBhcmc1KQorICAgIHsKKyAgICAgICAgcG9rZShhcmc1LCBQT0tFX0FSR1VNRU5UX09GRlNFVCAr
IDEpOworICAgICAgICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAgICAg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKwog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbTMyIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQp
CiAgICAgewogICAgICAgICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKQEAgLTEw
NjgsNiArMTEwNCwyOCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKKyNpZiBOVU1CRVJfT0Zf
QVJHVU1FTlRfUkVHSVNURVJTID09IDYKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0
ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCisgICAgeworICAg
ICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFI0PihhcmcxLCBhcmc0KTsKKyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIpOworICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Cisg
ICAgICAgIG1vdmUoYXJnNSwgR1BSSW5mbzo6YXJndW1lbnRHUFI1KTsKKyAgICAgICAgbW92ZShH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB9
CisgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwg
VHJ1c3RlZEltbTMyIGFyZzUpCisgICAgeworICAgICAgICBwdXNoKGFyZzEpOworICAgICAgICBz
ZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRH
UFI0PihhcmcyLCBhcmc0KTsKKyAgICAgICAgcG9wKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwor
ICAgICAgICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
fQorI2VuZGlmCisKICAgICB2b2lkIHNldHVwUmVzdWx0cyhHUFJSZWcgZGVzdEEsIEdQUlJlZyBk
ZXN0QikKICAgICB7CiAgICAgICAgIEdQUlJlZyBzcmNBID0gR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1NjEzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw4ICs0
NTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMgfTsKICAg
ICAgICAgLy8gdmFsdWUgcmVnaXN0ZXIgaW4gd3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBh
bnkgc2NyYXRjaCByZWdpc3RlcnMKICAgICAgICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2Ft
ZSBhcyBlaXRoZXIgb2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVnaXN0
ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0
ZUJhcnJpZXJVc2VLaW5kKTsKLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVy
TW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CisgICAgICAgIEp1bXAgY2hlY2tNYXJrV29yZChS
ZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdpc3RlcklEIHNjcmF0Y2gy
KTsKKyAgICAgICAgSnVtcCBjaGVja01hcmtXb3JkKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQg
c2NyYXRjaCk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVy
LCBSZWdpc3RlcklEIHZhbHVlVGFnLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdpc3RlcklEIHNj
cmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKTsKKyAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJl
Z2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgSnVtcExpc3QmIHNsb3dDYXNlcyk7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gLy8gU3RydWN0dXJl
VHlwZSBjYW4gYmUgUmVnaXN0ZXJJRCBvciBJbW1QdHIuCiAgICAgICAgIHZvaWQgZW1pdEFsbG9j
YXRlSlNPYmplY3QoUmVnaXN0ZXJJRCBhbGxvY2F0b3IsIFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVy
SUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwpAQCAtNzUyLDYgKzc1NCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwo
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX2hh
c19pbnN0YW5jZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pmYWxzZShJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbGVzcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAx
NTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzg4LDggKzM4OCw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSgKIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJl
Z2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQogewotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsg
Ly8gV2UgaGFkIGZvdW5kIHRoaXMgc2NyYXRjaCByZWdpc3RlciB1c2VmdWwgaGVyZSBiZWZvcmUs
IHNvIEkgd2lsbCBrZWVwIGl0IGZvciBub3cuCi0gICAgCisgICAgVU5VU0VEX1BBUkFNKHNjcmF0
Y2gpOwogICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlID0gc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBl
OwogICAgIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBl
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzAsNyArMzMwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIAogICAgIFBh
dGNoYWJsZUp1bXAgYmFkVHlwZTsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCisKICAg
ICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKICAgICBzd2l0
Y2ggKG1vZGUpIHsKICAgICBjYXNlIEpJVEludDMyOgpAQCAtMzU3LDcgKzM1Nyw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICAKICAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0
LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCBy
ZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcyk7CiB9CiAKIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0Nv
bnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKQEAgLTM3NCw2ICsz
NzMsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzCiAKICAgICBM
YWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDMpOworCiAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CiAgICAgY2FzZSBJ
bnQzMlNoYXBlOgogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RJbW1lZGlh
dGVJbnRlZ2VyKHJlZ1QzKSk7CkBAIC0zOTIsNiArMzkyLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRHZW5lcmljQ29udGlndW91cwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBD
b250aWd1b3VzU2hhcGU6CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCBy
ZWdUMiwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIHNsb3dDYXNlcyk7CiAgICAgICAg
IHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTQzMCw2ICs0MzEsNyBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0
aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CisgICAgZW1p
dFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QyLCByZWdUMiwgU2hvdWxkRmlsdGVySW1t
ZWRpYXRlcywgc2xvd0Nhc2VzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKQEAgLTQ2NSw2ICs0NjcsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGNhc2UgSklU
RG91YmxlOgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZhbHVlIHR5cGUgY2hlY2sK
ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgIGNhc2UgSklUQXJy
YXlTdG9yYWdlOgorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTYwNyw2ICs2MTMsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIC8vIEp1bXAgdG8g
YSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9y
IGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmls
dGVySW1tZWRpYXRlcywgc2xvd0Nhc2VzKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwor
CiAgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwogCiAg
ICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMpOwpAQCAtNjIwLDggKzYzMCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKIAogICAgIEVORF9VTklOVEVSUlVQVEVE
X1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1Qw
LCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJp
ZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0KICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oUHJvcGVydHlTdHViUHV0QnlJ
ZCwgbV9ieXRlY29kZU9mZnNldCwgaG90UGF0aEJlZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHBy
b3BlcnR5U3RvcmFnZUxvYWQsIGRpc3BsYWNlbWVudExhYmVsKSk7CiB9CiAKQEAgLTYzMyw2ICs2
NDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiAKICAgICBs
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7CiAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0IDogY3RpX29wX3B1dF9i
eV9pZCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwpAQCAtNzMxLDEyICs3NDAs
MjkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICBy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CiAgICAgfQogCi0gICAgLy8g
UGxhbnRpbmcgdGhlIG5ldyBzdHJ1Y3R1cmUgdHJpZ2dlcnMgdGhlIHdyaXRlIGJhcnJpZXIgc28g
d2UgbmVlZAotICAgIC8vIGFuIHVuY29uZGl0aW9uYWwgYmFycmllciBoZXJlLgotICAgIGVtaXRX
cml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFVuY29uZGl0aW9uYWxXcml0
ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLQogICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09IG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpOwog
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKSwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOworCisgICAgSnVtcExpc3Qgd3JpdGVCYXJyaWVy
U2xvd0Nhc2VzOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMywgcmVn
VDMsIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHdyaXRlQmFycmllclNsb3dDYXNlcyk7Cisg
ICAgSnVtcCB3cml0ZUJhcnJpZXJOb3RUYWtlbiA9IGp1bXAoKTsKKyAgICB3cml0ZUJhcnJpZXJT
bG93Q2FzZXMubGluayh0aGlzKTsKKworICAgIHB1c2gocmVnVDApOworICAgIHB1c2gocmVnVDEp
OworICAgIHB1c2gocmVnVDIpOworICAgIHB1c2gocmVnVDMpOworICAgIHB1c2gocmVnVDQpOwor
ICAgIEpJVFN0dWJDYWxsIHdyaXRlQmFycmllclN0dWJDYWxsKHRoaXMsIGN0aV9oZWFwX3VuY29u
ZGl0aW9uYWxfd3JpdGVfYmFycmllcik7CisgICAgd3JpdGVCYXJyaWVyU3R1YkNhbGwuYWRkQXJn
dW1lbnQocmVnVDApOworICAgIHdyaXRlQmFycmllclN0dWJDYWxsLmNhbGwoKTsKKyAgICBwb3Ao
cmVnVDQpOworICAgIHBvcChyZWdUMyk7CisgICAgcG9wKHJlZ1QyKTsKKyAgICBwb3AocmVnVDEp
OworICAgIHBvcChyZWdUMCk7CisKKyAgICB3cml0ZUJhcnJpZXJOb3RUYWtlbi5saW5rKHRoaXMp
OwogICAgIGNvbXBpbGVQdXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QxLCBjYWNoZWRPZmZzZXQp
OwogCiAgICAgcmV0KCk7CkBAIC03NTEsOSArNzc3LDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBG
dW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29w
X3B1dF9ieV9pZF9mYWlsKSk7CiAKICAgICBpZiAod2lsbE5lZWRTdG9yYWdlUmVhbGxvYykgewot
ICAgICAgICBBU1NFUlQobV9jYWxscy5zaXplKCkgPT0gMSk7CiAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fcmVhbGxvYykpOwotICAgIH0KKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxz
WzFdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmll
cikpOworICAgIH0gZWxzZQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJv
bSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKSk7CiAg
ICAgCiAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCiAg
ICAgICAgIEZJTkFMSVpFX0NPREUoCkBAIC0xMzQzLDE2ICsxMzcwLDI2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShJbnMKIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxQ
cm9wZXJ0eSh1aW50cHRyX3QqIG9wZXJhbmRTbG90LCBpbnQgdmFsdWUpCiB7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QyLCByZWdUMSwgcmVnVDEsIFNob3Vs
ZEZpbHRlckltbWVkaWF0ZXMsIHNsb3dDYXNlcyk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKKwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAgICBuZWdQ
dHIocmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAg
ICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUp
CiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIAorICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBzbG93
Q2FzZXMpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisKICAgICBzdG9yZVB0cihyZWdU
MCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3BlcmFuZCkpOwogfQogCkBAIC0xMzYwLDYgKzEz
OTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdQogewogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
ZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMiwgU2hvdWxkRmlsdGVy
SW1tZWRpYXRlcywgc2xvd0Nhc2VzKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworCiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lz
dGVycygpKSwgcmVnVDApOwogICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBvcGVy
YW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQpAQCAtMTM5MywxNSArMTQzNSwxOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZCkudHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOworICAgIC8vIEZvciB2YXIgaW5qZWN0aW9uIGNoZWNrcyBvciBzdHJ1Y3R1cmUgY2hl
Y2tzLgorICAgIGlmIChuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHkpCisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
KworICAgIC8vIEZvciB0aGUgd3JpdGUgYmFycmllci4KKyAgICBpZiAocmVzb2x2ZVR5cGUgIT0g
RHluYW1pYykKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF90b19zY29wZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKQEAgLTE0MTQsOSArMTQ2
MCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJl
Z1QwKTsKIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGds
b2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBzbG93Q2Fz
ZXMpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisKICAgICBzdG9yZTY0KHJlZ1QwLCBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwotICAgIGlmIChIZWFwOjpp
c1dyaXRlQmFycmllckVuYWJsZWQoKSkKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxP
YmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVy
Rm9yVmFyaWFibGVBY2Nlc3MpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5pdF9nbG9i
YWxfY29uc3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfaW5pdF9nbG9iYWxfY29uc3QpOwor
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9u
KSk7CisgICAgc3R1YkNhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6cmVzZXRQYXRjaEdldEJ5
SWQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvKQpAQCAtMTQzOSwzMyArMTQ5NiwxODYgQEAgdm9pZCBKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlk
KFJlcGF0Y2hCdWZmZQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0
ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUs
IFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKK0pJVDo6SnVtcCBKSVQ6OmNoZWNrTWFya1dv
cmQoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3Jh
dGNoMikKK3sKKyAgICBtb3ZlKG93bmVyLCBzY3JhdGNoMSk7CisgICAgbW92ZShvd25lciwgc2Ny
YXRjaDIpOworCisgICAgYW5kUHRyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6YmxvY2tNYXNr
KSwgc2NyYXRjaDEpOworICAgIGFuZFB0cihUcnVzdGVkSW1tMzIofk1hcmtlZEJsb2NrOjpibG9j
a01hc2spLCBzY3JhdGNoMik7CisKKyAgICByc2hpZnQzMihUcnVzdGVkSW1tMzIoMyArIDQpLCBz
Y3JhdGNoMik7CisKKyAgICByZXR1cm4gYnJhbmNoVGVzdDgoWmVybywgQmFzZUluZGV4KHNjcmF0
Y2gxLCBzY3JhdGNoMiwgVGltZXNPbmUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpKTsK
K30KKworSklUOjpKdW1wIEpJVDo6Y2hlY2tNYXJrV29yZChKU0NlbGwqIG93bmVyLCBSZWdpc3Rl
cklEIHNjcmF0Y2gpCit7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmJs
b2NrRm9yKG93bmVyKTsKKyAgICBzaXplX3QgaW5kZXggPSAocmVpbnRlcnByZXRfY2FzdDxzaXpl
X3Q+KG93bmVyKSAmIH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSA+PiAoMyArIDQpOworICAgIHVp
bnQzMl90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KChyZWludGVycHJl
dF9jYXN0PGNoYXIqPihibG9jaykgKyBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSkgKyBp
bmRleDsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgc2NyYXRjaCk7CisgICAg
cmV0dXJuIGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Moc2NyYXRjaCkpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBS
ZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsK
LSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsK
ICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsK
LSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBB
U1NFUlQob3duZXIgIT0gc2NyYXRjaCk7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gxKTsK
ICAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKLSAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6Ompp
dENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCisKKy8qCisgICAgdW5zaWduZWQgbnVtQ2Fs
bHNCZWZvcmUgPSBtX2NhbGxzLnNpemUoKTsKKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyovCisg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykgCisgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHZhbHVlLCB0YWdNYXNrUmVnaXN0ZXIpKTsKKyAg
ICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKKworLyoKKyAgICBib29s
IG5lZWRUb1Jlc3RvcmVWYWx1ZSA9IGZhbHNlOworICAgIGlmIChzY3JhdGNoMSA9PSBzY3JhdGNo
MikgeworICAgICAgICBwdXNoKHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaDIgPSB2YWx1ZTsKKyAg
ICAgICAgbmVlZFRvUmVzdG9yZVZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgSnVtcCBkZWZpbml0
ZWx5Tm90TWFya2VkID0gY2hlY2tNYXJrV29yZChvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsK
KyAgICBpZiAobmVlZFRvUmVzdG9yZVZhbHVlKQorICAgICAgICBwb3AodmFsdWUpOworKi8KKwor
LyoKKyAgICBwdXNoKHJlZ1QwKTsKKyAgICBwdXNoKHJlZ1QxKTsKKyAgICBwdXNoKHJlZ1QyKTsK
KyAgICBwdXNoKHJlZ1QzKTsKKyAgICBwdXNoKHJlZ1Q0KTsKKworICAgIC8vIEZJWE1FOiBGaWd1
cmUgb3V0IHdoeSB3ZSBuZWVkIHRoaXMuCisgICAgcHVzaChyZWdUNCk7CisgICAgcHVzaChyZWdU
NCk7CisKKyAgICAvLyBDYWxsIEhlYXA6OndyaXRlQmFycmllci4KKyAgICBpZiAobW9kZSA9PSBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKSB7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcik7CisgICAgICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KG93bmVyKTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9oZWFwX3dy
aXRlX2JhcnJpZXIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvd25lcik7CisgICAg
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHZhbHVlKTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgp
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoeSB3ZSBuZWVkIHRoaXMuCisg
ICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDQpOworCisgICAgcG9wKHJlZ1Q0KTsKKyAgICBw
b3AocmVnVDMpOworICAgIHBvcChyZWdUMik7CisgICAgcG9wKHJlZ1QxKTsKKyAgICBwb3AocmVn
VDApOworKi8KKy8qCisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIGRlZmluaXRlbHlOb3RN
YXJrZWQubGluayh0aGlzKTsKKyAgICBpZiAobmVlZFRvUmVzdG9yZVZhbHVlKQorICAgICAgICBw
b3AodmFsdWUpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworKi8KKy8qCisgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykgCisgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRo
aXMpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxv
Y2spOworICAgIGlmIChtb2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpIHsKKyAgICAg
ICAgQVNTRVJUKG1fY2FsbHNbbnVtQ2FsbHNCZWZvcmVdLnRvID09IGN0aV9oZWFwX3VuY29uZGl0
aW9uYWxfd3JpdGVfYmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tu
dW1DYWxsc0JlZm9yZV0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBfdW5jb25kaXRpb25hbF93
cml0ZV9iYXJyaWVyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHNbbnVt
Q2FsbHNCZWZvcmVdLnRvID09IGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKG1fY2FsbHNbbnVtQ2FsbHNCZWZvcmVdLmZyb20sIEZ1bmN0aW9uUHRyKGN0
aV9oZWFwX3dyaXRlX2JhcnJpZXIpKTsKKyAgICB9CisqLwogfQogCi12b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNj
cmF0Y2gsIFdyaXRlQmFycmllck1vZGUgbW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5k
KQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2
YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIEp1bXBMaXN0
JiBzbG93Q2FzZXMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKICAgICBVTlVTRURfUEFS
QU0oc2NyYXRjaCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIAotI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6
OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCisvKgorICAgIEp1bXAgdmFsdWVOb3RD
ZWxsOworICAgIHVuc2lnbmVkIG51bUNhbGxzQmVmb3JlID0gbV9jYWxscy5zaXplKCk7CisqLwor
CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykgCisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHZhbHVlLCB0YWdNYXNrUmVnaXN0ZXIpKTsK
KyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKKworLyoKKyAgICBK
dW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBjaGVja01hcmtXb3JkKG93bmVyLCBzY3JhdGNoKTsK
KyovCisKKy8qCisgICAgcHVzaChyZWdUMCk7CisgICAgcHVzaChyZWdUMSk7CisgICAgcHVzaChy
ZWdUMik7CisgICAgcHVzaChyZWdUMyk7CisgICAgcHVzaChyZWdUNCk7CisqLworCisgICAgLy8g
RklYTUU6IEZpZ3VyZSBvdXQgd2h5IHdlIG5lZWQgdGhpcy4KKy8qCisgICAgcHVzaChyZWdUNCk7
CisgICAgcHVzaChyZWdUNCk7CisqLworCisvKgorICAgIGlmIChtb2RlID09IFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyKTsKKyAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbVB0cihvd25lcikpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX2hl
YXBfd3JpdGVfYmFycmllcik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJ
bW1QdHIob3duZXIpKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodmFsdWUpOworICAg
ICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgfQorKi8KKyAgICAvLyBGSVhNRTogRmlndXJlIG91
dCB3aHkgd2UgbmVlZCB0aGlzLgorLyoKKyAgICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUNCk7
CisqLworLyoKKyAgICBwb3AocmVnVDQpOworICAgIHBvcChyZWdUMyk7CisgICAgcG9wKHJlZ1Qy
KTsKKyAgICBwb3AocmVnVDEpOworICAgIHBvcChyZWdUMCk7CisqLworLyoKKyAgICBkZWZpbml0
ZWx5Tm90TWFya2VkLmxpbmsodGhpcyk7CisqLworLyoKKyAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzKSAKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CisKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAg
aWYgKG1vZGUgPT0gVW5jb25kaXRpb25hbFdyaXRlQmFycmllcikgeworICAgICAgICBBU1NFUlQo
bV9jYWxsc1tudW1DYWxsc0JlZm9yZV0udG8gPT0gY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0
ZV9iYXJyaWVyKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzW251bUNhbGxzQmVm
b3JlXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfaGVhcF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJp
ZXIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobV9jYWxsc1tudW1DYWxsc0JlZm9y
ZV0udG8gPT0gY3RpX2hlYXBfd3JpdGVfYmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsobV9jYWxsc1tudW1DYWxsc0JlZm9yZV0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBfd3Jp
dGVfYmFycmllcikpOworICAgIH0KKyovCiB9CiAKIEpJVDo6SnVtcCBKSVQ6OmFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUmVnaXN0ZXJJRCBzY3JhdGNoKQpAQCAtMTU4Miw3
ICsxNzkyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAg
IAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgCisKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNhc2UgSklUSW50MzI6CiAgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSk7CkBAIC0xNjA4LDEwICsxODE4LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWwoQnlWYWxJbgogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICAKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVl
KCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsK
LSAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAu
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgCiAgICAg
YnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTU2MTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyNzcsNiArMjI3NywyOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfdG9f
c2NvCiAgICAgfQogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBoZWFwX3dyaXRlX2Jh
cnJpZXIpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5oZWFwKCktPndyaXRlQmFycmllcihzdGFja0ZyYW1lLmFyZ3Nb
MF0uanNWYWx1ZSgpLmFzQ2VsbCgpLCBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpKTsKK30K
KworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgaGVhcF91bmNvbmRpdGlvbmFsX3dyaXRlX2Jh
cnJpZXIpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5oZWFwKCktPndyaXRlQmFycmllcihzdGFja0ZyYW1lLmFyZ3Nb
MF0uanNWYWx1ZSgpLmFzQ2VsbCgpKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfaW5pdF9nbG9iYWxfY29uc3QpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAg
IEluc3RydWN0aW9uKiBwYyA9IHN0YWNrRnJhbWUuYXJnc1swXS5wYygpOworCisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSBwY1sxXS51LnJlZ2lzdGVyUG9pbnRl
cjsKKyAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+cihwY1syXS51Lm9wZXJhbmQpLmpzVmFsdWUo
KTsKKyAgICByZWdpc3RlclBvaW50ZXItPnNldChleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHZhbHVlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2
aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zODUsNiArMzg1LDcgQEAgdm9pZCBKSVRfU1RVQiBjdGlfaGFuZGxl
X3dhdGNoZG9nX3RpbWVyKAogaW50IEpJVF9TVFVCIGN0aV9oYXNfcHJvcGVydHkoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9kZWJ1ZyhT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29w
X2VuZChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX1NUVUIg
Y3RpX29wX2luaXRfZ2xvYmFsX2NvbnN0KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVS
TkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcG9wX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHJvZmlsZV9kaWRfY2FsbChT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29w
X3Byb2ZpbGVfd2lsbF9jYWxsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpA
QCAtNDIxLDcgKzQyMiw4IEBAIHZvaWQqIEpJVF9TVFVCIGN0aV92bV90aHJvdyhTVFVCX0FSR1Nf
REUKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX3Njb3BlKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3Rp
X29wX2dldF9mcm9tX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwog
dm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X3RvX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwotCit2b2lkIEpJVF9TVFVCIGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9TVFVCIGN0aV9oZWFw
X3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogRW5jb2RlZEV4Y2VwdGlvbkhhbmRsZXIg
SklUX1NUVUIgY3RpX3ZtX2hhbmRsZV9leGNlcHRpb24oQ2FsbEZyYW1lKikgUkVGRVJFTkNFRF9G
Uk9NX0FTTSBXVEZfSU5URVJOQUw7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50Q29tbW9uLmgJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBACiAjZW5kaWYKIAogLy8gRGlzYWJsZSBpbmxpbmUgY2FjaGluZyBvZiBnZXRfYnlfaWQgYW5k
IHB1dF9ieV9pZC4KLSNkZWZpbmUgTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XIDAKKyNkZWZpbmUg
TExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XIDEKIAogLy8gRW5hYmxlIE9TUiBpbnRvIHRoZSBKSVQu
IERpc2FibGluZyB0aGlzIHdoaWxlIHRoZSBMTEludCBpcyBlbmFibGVkIGVmZmVjdGl2ZWx5CiAv
LyB0dXJucyBvZmYgYWxsIEpJVCdpbmcsIHNpbmNlIGluIExMSW50J3MgcGFybGFuY2UsIE9TUiBz
dWJzdW1lcyBhbnkgZm9ybSBvZiBKSVQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTMzNiw2ICsxMzM2LDE4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9f
c2MKICAgICBMTElOVF9FTkQoKTsKIH0KIAorZXh0ZXJuICJDIiB2b2lkIGxsaW50X3dyaXRlX2Jh
cnJpZXJfc2xvdyhKU0NlbGwqIG93bmVyLCBKU0NlbGwqIHZhbHVlKQoreworICAgIEhlYXAqIGhl
YXAgPSBIZWFwOjpoZWFwKG93bmVyKTsKKyAgICBoZWFwLT53cml0ZUJhcnJpZXIob3duZXIsIHZh
bHVlKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIGxsaW50X3VuY29uZGl0aW9uYWxfd3JpdGVfYmFy
cmllcl9zbG93KEpTQ2VsbCogb3duZXIpCit7CisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAo
b3duZXIpOworICAgIGhlYXAtPndyaXRlQmFycmllcihvd25lcik7Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpMTEludAogCiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHJldmlzaW9uIDE1NjEz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIG5hbWVzcGFjZSBMTEludCB7CiAKIGV4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX29wZXJhbmQoRXhlY1N0YXRlKiwgSW5z
dHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJlLCBpbnQgb3BlcmFuZCk7CiBleHRlcm4gIkMiIFNsb3dQ
YXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbios
IGludCBmcm9tV2hlcmUsIGludCBvcGVyYW5kKTsKK2V4dGVybiAiQyIgdm9pZCBsbGludF93cml0
ZV9iYXJyaWVyX3Nsb3coSlNDZWxsKiwgSlNDZWxsKik7CitleHRlcm4gIkMiIHZvaWQgbGxpbnRf
dW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyX3Nsb3coSlNDZWxsKik7CiAKICNkZWZpbmUgTExJ
TlRfU0xPV19QQVRIX0RFQ0wobmFtZSkgXAogICAgIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5U
eXBlIGxsaW50XyMjbmFtZShFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCShyZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTcyLDggKzE3
MiwxMDQgQEAgbWFjcm8gbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoaW5kZXgsIAogICAgIGJ0
cW56IHZhbHVlLCB0YWdNYXNrLCBzbG93CiBlbmQKIAotbWFjcm8gd3JpdGVCYXJyaWVyKHZhbHVl
KQotICAgICMgTm90aGluZyB0byBkbywgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGdlbmVyYXRpb25h
bCBvciBpbmNyZW1lbnRhbCBjb2xsZWN0b3IuCitjb25zdCBNYXJrZWRCbG9ja1NpemUgPSA2NCAq
IDEwMjQKK2NvbnN0IE1hcmtlZEJsb2NrSGVhZGVyTWFzayA9IH4oTWFya2VkQmxvY2tTaXplIC0g
MSkKKyMgc2l6ZW9mKGF0b20pID09IDgKK2NvbnN0IEF0b21OdW1iZXJTaGlmdCA9IDMKK2NvbnN0
IEJpdE1hcFdvcmRTaGlmdCA9IDUKK2NvbnN0IEJpdE1hcFdvcmRTaXplID0gMzIKK2NvbnN0IEJp
dE1hcFdvcmRNb2QgPSBCaXRNYXBXb3JkU2l6ZSAtIDEKKworIyBDbG9iYmVycyBib3RoIGNlbGwg
YW5kIHNjcmF0Y2guCittYWNybyBpc01hcmtlZChjZWxsLCBzY3JhdGNoLCBjb250aW51YXRpb24p
CisgICAgbW92ZSBjZWxsLCBzY3JhdGNoCisKKyMgR2V0IHRoZSBpbmRleCBvZiB0aGUgd29yZCBp
biB0aGUgYml0bWFwLgorICAgIGFuZHEgfk1hcmtlZEJsb2NrSGVhZGVyTWFzaywgY2VsbAorICAg
IHB1c2hxIGNlbGwKKyAgICByc2hpZnRwIEF0b21OdW1iZXJTaGlmdCArIEJpdE1hcFdvcmRTaGlm
dCwgY2VsbAorCisjIExvYWQgdGhlIHdvcmQgZnJvbSB0aGUgYml0bWFwLgorICAgIGFuZHEgTWFy
a2VkQmxvY2tIZWFkZXJNYXNrLCBzY3JhdGNoCisgICAgbG9hZGkgTWFya2VkQmxvY2s6Om1fbWFy
a3Nbc2NyYXRjaCwgY2VsbCwgNF0sIHNjcmF0Y2gKKworIyBHZXQgdGhlIGFtb3VudCB0byByaWdo
dCBzaGlmdCB0aGUgcmVzdWx0IGJ5LgorICAgIHBvcHEgY2VsbAorICAgIHJzaGlmdHAgQXRvbU51
bWJlclNoaWZ0LCBjZWxsCisgICAgYW5kcSBCaXRNYXBXb3JkTW9kLCBjZWxsCisgICAgcnNoaWZ0
cCBjZWxsLCBzY3JhdGNoCisKKyMgQ2hlY2sgdGhlIHJpZ2h0LW1vc3QgYml0LgorICAgIGFuZHEg
MSwgc2NyYXRjaAorCisgICAgY29udGludWF0aW9uKHNjcmF0Y2gpCitlbmQKKworbWFjcm8gdW5j
b25kaXRpb25hbFdyaXRlQmFycmllcihvd25lcikKKyAgICBwdXNocSB0MAorICAgIHB1c2hxIHQx
CisgICAgcHVzaHEgdDIKKyAgICBwdXNocSB0MworICAgIHB1c2hxIHQ0CisgICAgcHVzaHEgdDUK
KyAgICBwdXNocSB0NgorICAgIGNDYWxsMihfbGxpbnRfdW5jb25kaXRpb25hbF93cml0ZV9iYXJy
aWVyX3Nsb3csIG93bmVyLCBvd25lcikKKyAgICBwb3BxIHQ2CisgICAgcG9wcSB0NQorICAgIHBv
cHEgdDQKKyAgICBwb3BxIHQzCisgICAgcG9wcSB0MgorICAgIHBvcHEgdDEKKyAgICBwb3BxIHQw
CisjICAgIHN0b3JlcSAwLCBbc3BdCisjICAgIHN0b3JlcSAwLCA4W3NwXQorIyAgICBzdG9yZXEg
MCwgMTZbc3BdCisjICAgIHN0b3JlcSAwLCAyNFtzcF0KKyMgICAgc3RvcmVxIDAsIDMyW3NwXQor
IyAgICBzdG9yZXEgMCwgNDBbc3BdCisjICAgIHN0b3JlcSAwLCA0OFtzcF0KK2VuZAorCittYWNy
byB3cml0ZUJhcnJpZXJXaXRoVmFsdWUob3duZXIsIHZhbHVlKQorIyBTa2lwIGlmIHZhbHVlIGlz
IG51bGwgb3Igbm90IGEgY2VsbC4KKyAgICBidHB6IHZhbHVlLCAud3JpdGVCYXJyaWVyRG9uZQor
ICAgIGJ0cW56IHZhbHVlLCB0YWdNYXNrLCAud3JpdGVCYXJyaWVyRG9uZQorIyAgICBwdXNocSBv
d25lcgorIyAgICBwdXNocSB2YWx1ZQorIyAgICBpc01hcmtlZChvd25lciwgdmFsdWUsIAorIyAg
ICAgICAgbWFjcm8gKG1hcmtlZCkKKyMjIElmIG93bmVyIGlzbid0IG1hcmtlZCwgdGhlbiB3ZSdy
ZSBnb29kIHRvIGdvLgorIyAgICAgICAgICAgIGJ0YnogbWFya2VkLCAudmFsdWVJc05vbk51bGxD
ZWxsCisjICAgICAgICAgICAgcG9wcSB2YWx1ZQorIyAgICAgICAgICAgIHBvcHEgb3duZXIKKyAg
ICAgICAgICAgIHB1c2hxIHQwCisgICAgICAgICAgICBwdXNocSB0MQorICAgICAgICAgICAgcHVz
aHEgdDIKKyAgICAgICAgICAgIHB1c2hxIHQzCisgICAgICAgICAgICBwdXNocSB0NAorICAgICAg
ICAgICAgcHVzaHEgdDUKKyAgICAgICAgICAgIHB1c2hxIHQ2CisgICAgICAgICAgICBjQ2FsbDIo
X2xsaW50X3dyaXRlX2JhcnJpZXJfc2xvdywgb3duZXIsIHZhbHVlKQorICAgICAgICAgICAgcG9w
cSB0NgorICAgICAgICAgICAgcG9wcSB0NQorICAgICAgICAgICAgcG9wcSB0NAorICAgICAgICAg
ICAgcG9wcSB0MworICAgICAgICAgICAgcG9wcSB0MgorICAgICAgICAgICAgcG9wcSB0MQorICAg
ICAgICAgICAgcG9wcSB0MAorIyAgICBzdG9yZXEgMCwgW3NwXQorIyAgICBzdG9yZXEgMCwgOFtz
cF0KKyMgICAgc3RvcmVxIDAsIDE2W3NwXQorIyAgICBzdG9yZXEgMCwgMjRbc3BdCisjICAgIHN0
b3JlcSAwLCAzMltzcF0KKyMgICAgc3RvcmVxIDAsIDQwW3NwXQorIyAgICBzdG9yZXEgMCwgNDhb
c3BdCisjICAgICAgICAgICAgam1wIC53cml0ZUJhcnJpZXJEb25lCisjICAgICAgICBlbmQpCisj
LnZhbHVlSXNOb25OdWxsQ2VsbDoKKyMgICAgcG9wcSB2YWx1ZQorIyAgICBwb3BxIG93bmVyCisu
d3JpdGVCYXJyaWVyRG9uZToKIGVuZAogCiBtYWNybyB2YWx1ZVByb2ZpbGUodmFsdWUsIG9wZXJh
bmQsIHNjcmF0Y2gpCkBAIC04MzIsMTEgKzkyOCwxMyBAQCBlbmQKIAogbWFjcm8gc3RvcmVQcm9w
ZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFn
ZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9m
ZnNldCwgLmlzSW5saW5lCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKG9iamVjdEFuZFN0b3Jh
Z2UsIHZhbHVlKQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9y
YWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAg
IHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAg
LnJlYWR5CiAuaXNJbmxpbmU6CisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKG9iamVjdEFuZFN0
b3JhZ2UsIHZhbHVlKQogICAgIGFkZHAgc2l6ZW9mIEpTT2JqZWN0IC0gKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6CiAgICAgc3RvcmVxIHZh
bHVlLCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJv
cGVydHlPZmZzZXRBc0ludCwgOF0KQEAgLTg0Nyw3ICs5NDUsOSBAQCBfbGxpbnRfb3BfaW5pdF9n
bG9iYWxfY29uc3Q6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQogICAgIGxvYWRw
RnJvbUluc3RydWN0aW9uKDEsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQy
KQotICAgIHdyaXRlQmFycmllcih0MikKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKKyAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QxXSwgdDEKKyAgICB3cml0ZUJhcnJp
ZXJXaXRoVmFsdWUodDEsIHQyKQogICAgIHN0b3JlcSB0MiwgW3QwXQogICAgIGRpc3BhdGNoKDUp
CiAKQEAgLTkzNiwxMyArMTAzNiwxNCBAQCBtYWNybyBwdXRCeUlkKGdldFByb3BlcnR5U3RvcmFn
ZSkKICAgICBnZXRQcm9wZXJ0eVN0b3JhZ2UoCiAgICAgICAgIHQwLAogICAgICAgICB0MywKLSAg
ICAgICAgbWFjcm8gKHByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaCkKLSAgICAgICAgICAgIGJwbmVx
IEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBdLCB0MSwgLm9wUHV0QnlJZFNsb3cKLSAgICAgICAgICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbig1LCB0MSkKLSAgICAgICAgICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUodDIsIHNjcmF0Y2gpCi0gICAgICAgICAgICB3cml0ZUJhcnJpZXIodDApCi0gICAg
ICAgICAgICBzdG9yZXEgc2NyYXRjaCwgW3Byb3BlcnR5U3RvcmFnZSwgdDFdCi0gICAgICAgICAg
ICBkaXNwYXRjaCg5KQorICAgICAgICBtYWNybyAocHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoKSAg
ICAgICAgICAgICAgICAgICAgICAgICMgTGl2ZSB2YXJpYWJsZXMKKyAgICAgICAgICAgIGJwbmVx
IEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBdLCB0MSwgLm9wUHV0QnlJZFNsb3cgICAjIHQwLCB0MSwg
dDIsIHQzCisgICAgICAgICAgICBtb3ZlIHQwLCB0MSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyB0MCwgdDEsIHQyLCB0MworICAgICAgICAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZSh0Miwgc2NyYXRjaCkgICAgICAgICAgICAgICAgICMgdDAsIHQxLCB0MiwgdDMK
KyAgICAgICAgICAgIHdyaXRlQmFycmllcldpdGhWYWx1ZSh0MSwgc2NyYXRjaCkgICAgICAgICAg
ICAgICAgICAjIHQwLCB0MSwgICAsIHQzCisgICAgICAgICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oNSwgdDEpICAgICAgICAgICAgICAgICAgICAgICAgIyB0MCwgdDEsICAgLCB0MworICAgICAg
ICAgICAgc3RvcmVxIHNjcmF0Y2gsIFtwcm9wZXJ0eVN0b3JhZ2UsIHQxXSAgICAgICAgICAgICAg
ICMgdDAsIHQxLCAgICwgdDMKKyAgICAgICAgICAgIGRpc3BhdGNoKDkpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgLCAgICwgICAsICAKICAgICAgICAgZW5kKQog
ZW5kCiAKQEAgLTk3Myw5ICsxMDc0LDEwIEBAIG1hY3JvIHB1dEJ5SWRUcmFuc2l0aW9uKGFkZGl0
aW9uYWxDaGVja3MKICAgICAgICAgbWFjcm8gKHByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaCkKICAg
ICAgICAgICAgIGFkZHAgdDEsIHByb3BlcnR5U3RvcmFnZSwgdDMKICAgICAgICAgICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUodDIsIHQxKQotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKHQxKQor
ICAgICAgICAgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQwLCB0MSkKICAgICAgICAgICAgIHN0
b3JlcSB0MSwgW3QzXQogICAgICAgICAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCisg
ICAgICAgICAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDAsIHQxKQogICAgICAgICAgICAgc3Rv
cmVwIHQxLCBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXQogICAgICAgICAgICAgZGlzcGF0Y2goOSkK
ICAgICAgICAgZW5kKQpAQCAtMTEzMCw3ICsxMjMyLDggQEAgbWFjcm8gY29udGlndW91c1B1dEJ5
VmFsKHN0b3JlQ2FsbGJhY2spCiAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIC5vdXRPZkJvdW5k
cwogLnN0b3JlUmVzdWx0OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MikKLSAgICBz
dG9yZUNhbGxiYWNrKHQyLCB0MSwgW3QwLCB0MywgOF0pCisgICAgbGVhcCBbdDAsIHQzLCA4XSwg
dDAKKyAgICBzdG9yZUNhbGxiYWNrKHQyLCB0MywgW3QwXSkKICAgICBkaXNwYXRjaCg1KQogCiAu
b3V0T2ZCb3VuZHM6CkBAIC0xMTg1LDcgKzEyODgsNyBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoK
ICAgICBjb250aWd1b3VzUHV0QnlWYWwoCiAgICAgICAgIG1hY3JvIChvcGVyYW5kLCBzY3JhdGNo
LCBhZGRyZXNzKQogICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShvcGVyYW5kLCBz
Y3JhdGNoKQotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKHNjcmF0Y2gpCisgICAgICAgICAgICB3
cml0ZUJhcnJpZXJXaXRoVmFsdWUodDEsIHNjcmF0Y2gpCiAgICAgICAgICAgICBzdG9yZXAgc2Ny
YXRjaCwgYWRkcmVzcwogICAgICAgICBlbmQpCiAKQEAgLTExOTQsMjEgKzEyOTcsMjIgQEAgX2xs
aW50X29wX3B1dF9ieV92YWw6CiAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFs
T3V0T2ZCb3VuZHMKICAgICBidHF6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwg
Lm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQogLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9y
ZVJlc3VsdDoKKyAgICBsZWFwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgdDAK
ICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDIpCi0gICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZSh0MiwgdDEpCi0gICAgd3JpdGVCYXJyaWVyKHQxKQotICAgIHN0b3JlcSB0MSwgQXJyYXlT
dG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0
MiwgdDMpCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQxLCB0MykKKyAgICBzdG9yZXEgdDMs
IFt0MF0KICAgICBkaXNwYXRjaCg1KQogCiAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5Ogog
ICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0gICAgICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDQsIHQx
KQotICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QxXQor
ICAgICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig0LCB0MikKKyAgICAgICAgc3RvcmViIDEsIEFy
cmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KICAgICBlbmQKICAgICBhZGRpIDEsIEFy
cmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KICAgICBiaWIgdDMsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0
MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKLSAgICBhZGRpIDEsIHQzLCB0
MQotICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVy
Ojp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXQorICAgIGFkZGkgMSwgdDMsIHQyCisgICAgc3Rv
cmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Ro
cy5wdWJsaWNMZW5ndGhbdDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVS
ZXN1bHQKIAogLm9wUHV0QnlWYWxPdXRPZkJvdW5kczoKQEAgLTE4MzUsMTIgKzE5MzksMTYgQEAg
bWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rp
b24oNiwgdDApCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCisgICAgbG9hZHAgQ29kZUJs
b2NrOjptX2dsb2JhbE9iamVjdFt0Ml0sIHQyCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQy
LCB0MSkKICAgICBzdG9yZXEgdDEsIFt0MF0KIGVuZAogCiBtYWNybyBwdXRDbG9zdXJlVmFyKCkK
ICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZSh0MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQwLCB0MikKICAgICBsb2Fk
cCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQwCiAgICAgbG9hZGlzRnJvbUlu
c3RydWN0aW9uKDYsIHQxKQogICAgIHN0b3JlcSB0MiwgW3QwLCB0MSwgOF0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIJKHJldmlz
aW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0
aW9ucy5yYgkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOSBAQCBNQUNST19JTlNUUlVDVElP
TlMgPQogICAgICAiYmNkMmkiLAogICAgICAibW92ZHoiLAogICAgICAicG9wIiwKKyAgICAgInBv
cHEiLAogICAgICAicHVzaCIsCisgICAgICJwdXNocSIsCiAgICAgICJtb3ZlIiwKICAgICAgInN4
aTJxIiwKICAgICAgInp4aTJxIiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5l
YXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS94ODYucmIJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZs
aW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIGNsYXNzIFJl
Z2lzdGVySUQKICAgICAgICAgICAgIHdoZW4gOnF1YWQKICAgICAgICAgICAgICAgICBpc1g2NCA/
ICIlcmF4IiA6IHJhaXNlCiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmFpc2UK
KyAgICAgICAgICAgICAgICByYWlzZSAiSW52YWxpZCBraW5kICN7a2luZH0gZm9yIG5hbWUgI3tu
YW1lfSIKICAgICAgICAgICAgIGVuZAogICAgICAgICB3aGVuICJ0MSIsICJhMSIsICJyMSIKICAg
ICAgICAgICAgIGNhc2Uga2luZApAQCAtOTgyLDggKzk4MiwxMiBAQCBjbGFzcyBJbnN0cnVjdGlv
bgogICAgICAgICAgICAgZW5kCiAgICAgICAgIHdoZW4gInBvcCIKICAgICAgICAgICAgICRhc20u
cHV0cyAicG9wICN7b3BlcmFuZHNbMF0ueDg2T3BlcmFuZCg6cHRyKX0iCisgICAgICAgIHdoZW4g
InBvcHEiCisgICAgICAgICAgICAkYXNtLnB1dHMgInBvcHEgI3tvcGVyYW5kc1swXS54ODZPcGVy
YW5kKDpwdHIpfSIKICAgICAgICAgd2hlbiAicHVzaCIKICAgICAgICAgICAgICRhc20ucHV0cyAi
cHVzaCAje29wZXJhbmRzWzBdLng4Nk9wZXJhbmQoOnB0cil9IgorICAgICAgICB3aGVuICJwdXNo
cSIKKyAgICAgICAgICAgICRhc20ucHV0cyAicHVzaHEgI3tvcGVyYW5kc1swXS54ODZPcGVyYW5k
KDpwdHIpfSIKICAgICAgICAgd2hlbiAibW92ZSIKICAgICAgICAgICAgIGhhbmRsZU1vdmUKICAg
ICAgICAgd2hlbiAic3hpMnEiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKKyAgICBzaXplX3QgdG90YWxTaXplKFN0
cnVjdHVyZSopOworCiAgICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2Fw
YWNpdHkgLSBwcmVDYXBhY2l0eTsgfQogICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVz
LmgJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsMjIgQEAgaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKK2lubGluZSBzaXplX3QgQnV0dGVyZmx5Ojp0b3RhbFNpemUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlczsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gc3RydWN0
dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRl
eGluZ0hlYWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyA9IGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVy
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHJldHVybiBCdXR0ZXJmbHk6
OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFk
ZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKwogaW5saW5lIHZvaWQqIEJ1dHRl
cmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICByZXR1cm4gYmFzZShpbmRl
eGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTcsNyArMjE3LDggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogCiAg
ICAgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gcGNbM10udS5vcGVyYW5kOwogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gY29uc3RydWN0b3ItPmFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGlu
ZUNhcGFjaXR5KS0+c3RydWN0dXJlKCk7Ci0gICAgUkVUVVJOKGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMsIHN0cnVjdHVyZSkpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpOworICAgIFJFVFVSTihyZXN1bHQpOwogfQogCiBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhpcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMTU2MTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGVzZSBtZXRob2Rz
IGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBiZQogICAg
IC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4KLSAgICBzaXplX3QgcHJl
Q2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByZUNh
cGFjaXR5KFN0cnVjdHVyZSopOwogICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyhTdHJ1Y3R1cmUqKTsKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsy
NzAsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgLy8g
V2UncmUgZWl0aGVyIGdvaW5nIHRvIGNob29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3Jh
Z2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBvbmUuCiAKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKICAg
ICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHk7CiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3Rv
cmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKGJ1dCBub3QgdG9vIGxhcmdlISkgdGhl
biBqdXN0IGtlZXAgdXNpbmcgaXQuCkBAIC0zMjEsOCArMzIyLDggQEAgYm9vbCBKU0FycmF5Ojp1
bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0KLSAgICBtX2J1
dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdT
dHJ1Y3R1cmUobmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBz
dHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNjk3
LDkgKzY5OCw5IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKICAg
ICAKICAgICBpZiAoc3RhcnRJbmRleCArIGNvdW50ID4gdmVjdG9yTGVuZ3RoKQogICAgICAgICBj
b3VudCA9IHZlY3Rvckxlbmd0aCAtIHN0YXJ0SW5kZXg7Ci0gICAgCisKICAgICB1bnNpZ25lZCB1
c2VkVmVjdG9yTGVuZ3RoID0gbWluKHZlY3Rvckxlbmd0aCwgb2xkTGVuZ3RoKTsKLSAgICAKKwog
ICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzQmVmb3JlU2hpZnRSZWdpb24gPSBzdGFydEluZGV4Owog
ICAgIHVuc2lnbmVkIGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uID0gc3RhcnRJbmRleCArIGNv
dW50OwogICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzQWZ0ZXJTaGlmdFJlZ2lvbiA9IHVzZWRWZWN0
b3JMZW5ndGggLSBmaXJzdEluZGV4QWZ0ZXJTaGlmdFJlZ2lvbjsKQEAgLTc0Myw3ICs3NDQsNiBA
QCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgICAgIC8vIHBv
cnRpb24gb2YgdGhlIHZlY3Rvci4gV2UgYWxzbyBkb24ndCBtb2RpZnkgdGhlIHZlY3RvciBsZW5n
dGggYmVjYXVzZSB3ZSdyZSBub3QgYWN0dWFsbHkgY2hhbmdpbmcKICAgICAgICAgLy8gaXRzIGxl
bmd0aDsgd2UncmUganVzdCB1c2luZyBsZXNzIG9mIGl0LgogICAgIH0KLSAgICAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtODU3LDEwICs4NTcsMTEgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYQogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpOwogCiAgICAgaWYgKG1vdmVGcm9udCAmJiBzdG9yYWdlLT5tX2luZGV4
QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7Ci0gICAgICAgIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAg
ICAgICAgc3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0
b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50OwogICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JM
ZW5ndGgodmVjdG9yTGVuZ3RoICsgY291bnQpOworICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0
Q2hhbmdpbmdTdHJ1Y3R1cmUobmV3QnV0dGVyZmx5KTsKICAgICB9IGVsc2UgaWYgKCFtb3ZlRnJv
bnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAgICAgICBzdG9yYWdlID0g
c3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwogICAgIGVsc2UgaWYgKHVuc2hp
ZnRDb3VudFNsb3dDYXNlKGV4ZWMtPnZtKCksIG1vdmVGcm9udCwgY291bnQpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTU2MTMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDcsMTMgKzU0NywxNSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRl
ckRpY3Rpb25hcnlJCiAgICAgfQogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAg
IHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOyAK
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNp
emVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigw
KSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5KTsKLSAgICAKLSAgICBtX2J1dHRl
cmZseSA9IG5ld0J1dHRlcmZseTsKKwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1faW5kZXhCaWFzID0gMDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRW
ZWN0b3JMZW5ndGgoMCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXAuc2V0KHZtLCB0aGlzLCBtYXApOworICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2lu
Z1N0cnVjdHVyZShuZXdCdXR0ZXJmbHkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0s
IHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgIAogICAgIHJldHVybiBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogfQpAQCAtNjEzLDcgKzYxNSwxMSBAQCBCdXR0ZXJmbHkqIEpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9y
YWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSgpLCBBbGxvY2F0ZVVuZGVjaWRlZCk7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZs
eSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBsYWNlT2xk
QnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisKICAgICByZXR1cm4g
bmV3QnV0dGVyZmx5OwogfQogCkBAIC02MjIsNyArNjI4LDExIEBAIENvbnRpZ3VvdXNKU1ZhbHVl
cyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uo
dm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KCksIEFsbG9jYXRlSW50MzIpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZs
eSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTYzMyw3ICs2NDMsMTEgQEAgQ29udGln
dW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogICAgIGZvciAodW5zaWduZWQgaSA9
IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUU5hTjsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwg
QWxsb2NhdGVEb3VibGUpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBu
ZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2
bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC02NDIsNyArNjU2LDExIEBAIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhl
ZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1
dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisKICAgICBy
ZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKQEAgLTY2Myw3ICs2ODEsMTEg
QEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJlc3VsdC0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CiAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VU
cmFuc2l0aW9uKCkpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVy
ZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdT
dHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNzMwLDcgKzc1MiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNp
ZGVkCiAgICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgogICAgIAogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZt
LCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZs
eSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFj
ZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisK
ICAgICByZXR1cm4gc3RvcmFnZTsKIH0KIApAQCAtNzg3LDcgKzgxMywxMSBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZt
LCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZs
eSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVw
bGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHko
KSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtODU2LDcgKzg4NiwxMSBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgfQogICAgIAogICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0
dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFu
ZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7Cisg
ICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5i
dXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtODg1LDcgKzkx
OSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgfQog
ICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJm
bHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdT
dG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAt
MjMyMSwxOCArMjM1OSwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChW
TSYgCiAgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNl
IGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KICAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMp
KSB7CiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgd2lsbFJlcGxh
Y2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJheVJp
Z2h0KAogICAgICAgICAgICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKICAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7
CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKwogICAgICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAg
ICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKG5ld0J1dHRlcmZseSk7
CisgICAgICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0
ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgLy8gUmVtb3Zl
IHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNh
cHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgogICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1f
YnV0dGVyZmx5KTsgCiAgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gc3RkOjptaW4oaW5kZXhC
aWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwog
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6
ZUFycmF5KAogICAgICAgICB2bSwgdGhpcywKQEAgLTIzNDAsMTAgKzIzODIsMTEgQEAgYm9vbCBK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdJbmRleEJpYXMs
IHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBpZiAo
IW5ld0J1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fYnV0dGVy
Zmx5ID0gbmV3QnV0dGVyZmx5OworCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CisgICAgc2V0QnV0dGVyZmx5
V2l0aG91dENoYW5naW5nU3RydWN0dXJlKG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9s
ZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTIzNTgsMTUgKzI0MDEsMTkgQEAgdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVu
Z3RoU2xvdyhWTSYgdm0sIAogICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAg
ICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVy
Zmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIG1fYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAogICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJlKCks
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAogICAgICAgICBvbGRWZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAogICAgICAgICBuZXdWZWN0b3JMZW5n
dGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0
b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZt
LCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOworCiAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZl
Y3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKClbaV0gPSBRTmFOOwogICAgIH0KLSAgICBt
X2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiB9CiAKIEJ1dHRl
cmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNp
emUsIHNpemVfdCBuZXdTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCShyZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVk
ZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJEZWZlckdDLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVy
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5o
IgogI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgpAQCAtNjA0LDEzICs2MDYsMTYgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBl
eGVjKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0
b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIHZvaWQgc2V0
QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZseSopOyAvLyBZb3UgcHJv
YmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCisgICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRo
b3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7CiAgICAgICAgIAogICAgIHZvaWQgc2V0
U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKICAgICB2b2lkIHNldFN0cnVjdHVy
ZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCB1bnNpZ25lZCBvbGRDYXBhY2l0
eSwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KFZNJiwgU3RydWN0dXJlKik7CiAKKyAgICB2b2lkIHdpbGxSZXBsYWNlT2xk
QnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CisgICAgdm9pZCBkaWRSZXBs
YWNlT2xkQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CisKICAgICB2b2lk
IGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0cnVjdHVy
ZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CkBAIC0xMTIzLDggKzEx
MjgsMjggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzRXJyb3JJbnN0YW5jZSgpIAogICAgIHJl
dHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRXJyb3JJbnN0YW5jZVR5cGU7
CiB9CiAKK2lubGluZSB2b2lkIEpTT2JqZWN0Ojp3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseShWTSYg
dm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBCdXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSkKK3sK
KyAgICBpZiAoIW9sZEJ1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIG9sZEJh
c2UgPSBvbGRCdXR0ZXJmbHkgPyBvbGRCdXR0ZXJmbHktPmJhc2Uob2xkU3RydWN0dXJlKSA6IDA7
CisgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRCdXR0ZXJmbHkgPyBvbGRCdXR0ZXJmbHktPnRvdGFs
U2l6ZShvbGRTdHJ1Y3R1cmUpIDogMDsKKyAgICB2bS5oZWFwLndpbGxBYmFuZG9uU3RvcmFnZSh0
aGlzLCBvbGRCYXNlLCBvbGRTaXplKTsKK30KKworaW5saW5lIHZvaWQgSlNPYmplY3Q6OmRpZFJl
cGxhY2VPbGRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkpCit7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJl
dHVybjsKKyAgICB2b2lkKiBuZXdCYXNlID0gbmV3QnV0dGVyZmx5ID8gbmV3QnV0dGVyZmx5LT5i
YXNlKG5ld1N0cnVjdHVyZSkgOiAwOworICAgIHNpemVfdCBuZXdTaXplID0gbmV3QnV0dGVyZmx5
ID8gbmV3QnV0dGVyZmx5LT50b3RhbFNpemUobmV3U3RydWN0dXJlKSA6IDA7CisgICAgdm0uaGVh
cC5kaWRBc3NpZ25TdG9yYWdlKHRoaXMsIG5ld0Jhc2UsIG5ld1NpemUpOworfQorCiBpbmxpbmUg
dm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogeworICAgIEFTU0VSVChzdHJ1Y3R1
cmUpOworICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7CiAgICAgbV9i
dXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwog
fQpAQCAtMTI5MywxMCArMTMxOCwxNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwoCiAKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwotICAgICAgICBpZiAoc3RydWN0
dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQorICAgICAgICBib29sIGRpZEFs
bG9jYXRlTmV3QnV0dGVyZmx5ID0gZmFsc2U7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0
V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpIHsKKyAgICAgICAgICAgIHdpbGxSZXBsYWNlT2xk
QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgICAgICAgICAgbmV3
QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNh
cGFjaXR5KCkpOworICAgICAgICAgICAgZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSB0cnVlOwor
ICAgICAgICB9CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rp
b24pOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBu
ZXdCdXR0ZXJmbHkpOworICAgICAgICBpZiAoZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkpCisgICAg
ICAgICAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVy
Zmx5KTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQo
c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CkBAIC0xMzE0LDEyICsxMzQ1LDE5
IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0KSkgewogICAgICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7
Ci0gICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKQorICAgICAgICBib29sIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gZmFsc2U7Cisg
ICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgp
KTsKKyAgICAgICAgICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1Y3R1
cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9m
TGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKKyAgICAgICAgICAgIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gdHJ1ZTsKKyAg
ICAgICAgfQogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBpZiAo
ZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICBkaWRSZXBsYWNlT2xkQnV0dGVy
Zmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwg
b2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5z
aXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAog
ICAgICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgpAQCAt
MTM4OSw5ICsxNDI3LDExIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRS
ZWEKICAgICB9CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IAorICAgIHdpbGxSZXBs
YWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCiAgICAgICAgIHZtLCBv
bGRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBzZXRT
dHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAg
ICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3Rv
cmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCkBAIC0xNDI3
LDEwICsxNDY3LDE2IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRl
clNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKLSAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxH
cm93T3V0T2ZMaW5lU3RvcmFnZSgpKQorICAgIGJvb2wgZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkg
PSBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFn
ZSgpKSB7CisgICAgICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwg
bV9idXR0ZXJmbHkpOwogICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIGRpZEFsbG9jYXRl
TmV3QnV0dGVyZmx5ID0gdHJ1ZTsKKyAgICB9CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKICAgICBzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgIGlmIChk
aWRBbGxvY2F0ZU5ld0J1dHRlcmZseSkKKyAgICAgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2
bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkocmV2aXNpb24gMTU2MTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksOSArMTA5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJl
dHVybiBtX2VudW1lcmF0aW9uQ2FjaGUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIGlubGluZSB2
b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiB2bSwgY29uc3Qg
U3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpCisgICAgaW5s
aW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldEVudW1lcmF0aW9uQ2FjaGUoVk0mIHZtLCBj
b25zdCBTdHJ1Y3R1cmUqLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIG1fZW51bWVyYXRpb25DYWNoZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CisgICAgICAg
IG1fZW51bWVyYXRpb25DYWNoZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0
YS5jcHAJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTYgKzE5NywxOCBAQCBDaGVja2Vk
Qm9vbGVhbiBNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwCiAKICAgICBzaXplX3QgcmVxdWlyZWRT
aXplID0gc3RkOjptYXgobV9jYXBhY2l0eSArIChtX2NhcGFjaXR5IC8gMikgKyAxLCBtaW5pbXVt
TWFwU2l6ZSk7CiAgICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7CisgICAgRGVmZXJHQyBkZWZlcigq
Y2FsbEZyYW1lLT5oZWFwKCkpOworICAgIGNhbGxGcmFtZS0+aGVhcCgpLT53aWxsQWJhbmRvblN0
b3JhZ2UodGhpcywgbV9lbnRyaWVzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEVudHJ5KSk7CiAgICAg
aWYgKCFjYWxsRnJhbWUtPmhlYXAoKS0+dHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIHJlcXVpcmVk
U2l6ZSAqIHNpemVvZihFbnRyeSksICZuZXdTdG9yYWdlKSkgewogICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAg
ICBEZWZlckdDIGRlZmVyKCpjYWxsRnJhbWUtPmhlYXAoKSk7CiAgICAgRW50cnkqIG5ld0VudHJp
ZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOwogICAgIGlmIChzaG91bGRQYWNr
KCkpCiAgICAgICAgIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVp
cmVkU2l6ZSk7CiAgICAgZWxzZQogICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJp
ZXMsIHJlcXVpcmVkU2l6ZSk7CisgICAgY2FsbEZyYW1lLT5oZWFwKCktPmRpZEFzc2lnblN0b3Jh
Z2UodGhpcywgbV9lbnRyaWVzLCByZXF1aXJlZFNpemUgKiBzaXplb2YoRW50cnkpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBP
cHRpb25zOjppbml0aWFsaXplKCkKICNpZiAhRU5BQkxFKFlBUlJfSklUKQogICAgIHVzZVJlZ0V4
cEpJVCgpID0gZmFsc2U7CiAjZW5kaWYKLSAgICAKKwogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3
aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6CiAgICAgQVNT
RVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPj0gdGhyZXNob2xkRm9y
T3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVB
ZnRlcldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbigpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTU2MTMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwKFYKICAgICBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihz
dHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKICAgICBpZiAodGFibGUpIHsKLSAg
ICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgMCwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZz
ZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgdGFibGUgPSB0YWJsZS0+
Y29weSh2bSwgc3RydWN0dXJlLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwg
bV9pbmxpbmVDYXBhY2l0eSkpOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsK
ICAgICB9CiAgICAgCkBAIC03MDUsOCArNzA1LDExIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpm
bGF0dGVuRGljdGlvbmFyeVMKIAogICAgIC8vIElmIHRoZSBvYmplY3QgaGFkIGEgQnV0dGVyZmx5
IGJ1dCBhZnRlciBmbGF0dGVuaW5nL2NvbXBhY3Rpbmcgd2Ugbm8gbG9uZ2VyIGhhdmUgbmVlZCBv
ZiBpdCwKICAgICAvLyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0IGJlY2F1c2UgdGhlIGNvbGxlY3Rv
ciBkZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1cmUgdG8ga25vdyB0aGUgc2l6ZSBmb3IgY29weWluZy4K
LSAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKKyAgICBpZiAob2JqZWN0LT5i
dXR0ZXJmbHkoKSAmJiAhdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhdGhpcy0+aGFzSW5k
ZXhpbmdIZWFkZXIob2JqZWN0KSkgeworICAgICAgICBvYmplY3QtPndpbGxSZXBsYWNlT2xkQnV0
dGVyZmx5KHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLCBvYmplY3QtPmJ1dHRlcmZseSgpKTsKICAg
ICAgICAgb2JqZWN0LT5zZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMsIDApOworICAg
ICAgICBvYmplY3QtPmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHRoaXMsIDApOworICAgIH0K
IAogICAgIHJldHVybiB0aGlzOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1NjEzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjIsNiArNDIyLDcgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgc2V0UHJldmlvdXNJRChWTSYgdm0sIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgeworICAgICAgICBBU1NFUlQodHJh
bnNpdGlvbiA9PSB0aGlzKTsKICAgICAgICAgaWYgKHR5cGVJbmZvKCkuc3RydWN0dXJlSGFzUmFy
ZURhdGEoKSkKICAgICAgICAgICAgIHJhcmVEYXRhKCktPnNldFByZXZpb3VzSUQodm0sIHRyYW5z
aXRpb24sIHN0cnVjdHVyZSk7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCShy
ZXZpc2lvbiAxNTYxMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQCBpbmxp
bmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6cHJlCiAgICAgcmV0dXJuIG1fcHJldmlv
dXMuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRQcmV2aW91
c0lEKFZNJiB2bSwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K2lubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3Ry
dWN0dXJlKiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgbV9wcmV2aW91cy5zZXQodm0s
IHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CisgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHN0
cnVjdHVyZSk7CiB9CiAKIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpjbGVhclByZXZp
b3VzSUQoKQpAQCAtNTAsOSArNTAsOSBAQCBpbmxpbmUgSlNTdHJpbmcqIFN0cnVjdHVyZVJhcmVE
YXRhOjpvYmplCiAgICAgcmV0dXJuIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5nZXQoKTsKIH0KIAot
aW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoVk0m
IHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFsdWUpCitpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShWTSYgdm0sIGNvbnN0IEpT
Q2VsbCosIEpTU3RyaW5nKiB2YWx1ZSkKIHsKLSAgICBtX29iamVjdFRvU3RyaW5nVmFsdWUuc2V0
KHZtLCBvd25lciwgdmFsdWUpOworICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5zZXQodm0sIHRo
aXMsIHZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2
MTM1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxMy0wOS0xOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29t
PgorCisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIGdlbmVyYXRpb25hbCBnYXJiYWdlIGNvbGxl
Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIx
MDc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvRG91Ymx5TGlua2VkTGlzdC5oOgorICAgICAgICAoV1RGOjpEb3VibHlMaW5rZWRMaXN0Ojpj
b25jYXQpOgorCiAyMDEzLTA5LTE5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5j
b20+CiAKICAgICAgICAgQVNTRVJUcyBpbiBpc01haW5UaHJlYWQgYWZ0ZXIgVVNFKFdFQl9USFJF
QUQpIE1haW5UaHJlYWQgY2hhbmdlcwpJbmRleDogU291cmNlL1dURi93dGYvRG91Ymx5TGlua2Vk
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RvdWJseUxpbmtlZExpc3QuaAko
cmV2aXNpb24gMTU2MTMzKQorKysgU291cmNlL1dURi93dGYvRG91Ymx5TGlua2VkTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1c2goVCop
OwogICAgIHZvaWQgYXBwZW5kKFQqKTsKICAgICB2b2lkIHJlbW92ZShUKik7CisgICAgdm9pZCBj
b25jYXQoRG91Ymx5TGlua2VkTGlzdDxUPiYpOwogCiBwcml2YXRlOgogICAgIFQqIG1faGVhZDsK
QEAgLTE4Niw2ICsxODcsMzEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIERvdWJs
eUxpbgogICAgIHJldHVybiBub2RlOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dm9pZCBEb3VibHlMaW5rZWRMaXN0PFQ+Ojpjb25jYXQoRG91Ymx5TGlua2VkTGlzdDxUPiYgb3Ro
ZXIpCit7CisgICAgaWYgKCFvdGhlci5oZWFkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghaGVhZCgpKSB7CisgICAgICAgIG1faGVhZCA9IG90aGVyLmhlYWQoKTsKKyAgICAgICAgbV90
YWlsID0gb3RoZXIudGFpbCgpOworICAgICAgICBvdGhlci5jbGVhcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUKHRhaWwoKSk7CisgICAgQVNTRVJUKG90aGVyLmhlYWQo
KSk7CisgICAgVCogb3RoZXJIZWFkID0gb3RoZXIuaGVhZCgpOworICAgIFQqIG90aGVyVGFpbCA9
IG90aGVyLnRhaWwoKTsKKyAgICBvdGhlci5jbGVhcigpOworCisgICAgQVNTRVJUKCFtX3RhaWwt
Pm5leHQoKSk7CisgICAgbV90YWlsLT5zZXROZXh0KG90aGVySGVhZCk7CisgICAgQVNTRVJUKCFv
dGhlckhlYWQtPnByZXYoKSk7CisgICAgb3RoZXJIZWFkLT5zZXRQcmV2KG1fdGFpbCk7CisgICAg
bV90YWlsID0gb3RoZXJUYWlsOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RG
OjpEb3VibHlMaW5rZWRMaXN0Tm9kZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212773</attachid>
            <date>2013-09-26 17:26:36 -0700</date>
            <delta_ts>2013-09-26 17:26:36 -0700</delta_ts>
            <desc>rebase</desc>
            <filename>bug-121074-20130926172624.patch</filename>
            <type>text/plain</type>
            <size>217536</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NTE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1OSBA
QAorMjAxMy0wOS0yNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIGdlbmVyYXRpb25hbCBnYXJiYWdlIGNvbGxlY3Rv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMDc0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6OkZ1
bmN0aW9uUHRyKToKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwOgorICAgICAg
ICAoSlNDOjpBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbik6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNp
dEFnZ3JlZ2F0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmljV3JpdGVCYXJyaWVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmllcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1dyaXRlQmFycmllckVsaXNpb25QaGFz
ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdXcml0ZUJhcnJpZXJFbGlzaW9uUGhhc2Uu
aDogQWRkZWQuCisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2tTZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2Nrcyk6Cisg
ICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuaDoKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2
ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRT
cGFuKToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmFkZCk6CisgICAgICAgICog
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5oOgorICAgICAgICAqIGhlYXAvQ29waWVkQWxsb2NhdG9y
Lmg6CisgICAgICAgIChKU0M6OkNvcGllZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVEdXJpbmdDb3B5
aW5nKToKKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvcGll
ZEJsb2NrOjpjcmVhdGVOb1plcm9GaWxsKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OkNv
cGllZEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmRpZEV2YWN1YXRlQnl0ZXMp
OgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6dW5waW4pOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6aXNPbGQpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6ZGlkUHJvbW90ZSk6
CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpy
ZXBvcnRMaXZlQnl0ZXNEdXJpbmdXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpDb3BpZWRC
bG9jazo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nQ29weWluZyk6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3BpZWRTcGFjZSk6Cisg
ICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp+Q29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpD
b3BpZWRTcGFjZTo6aW5pdCk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0
ZU92ZXJzaXplKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGVPdmVy
c2l6ZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKToKKyAg
ICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRpZFN0YXJ0RnVsbENvbGxlY3Rpb24pOgorICAgICAg
ICAoSlNDOjpDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpjYXBhY2l0eSk6CisgICAg
ICAgIChKU0M6OkNvcGllZFNwYWNlOjppc1BhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6Q29waWVk
U3BhY2U6OndpbGxBYmFuZG9uU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpk
aWRBc3NpZ25TdG9yYWdlKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmg6CisgICAgICAg
IChKU0M6OkNvcGllZFNwYWNlOjpoZWFwKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OkNv
cGllZEdlbmVyYXRpb246OkNvcGllZEdlbmVyYXRpb24pOgorICAgICAgICAqIGhlYXAvQ29waWVk
U3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpjb250YWlucyk6Cisg
ICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvcGll
ZFNwYWNlOjpzdGFydGVkQ29weWluZyk6CisgICAgICAgICogaGVhcC9Db3B5VmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJlZCk6CisgICAgICAgICog
aGVhcC9Db3B5VmlzaXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFs
bG9jYXRlTmV3U3BhY2UpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdT
cGFjZVNsb3cpOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcDoKKyAgICAg
ICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpkaWRTdGFydENvcHlpbmcpOgorICAgICAgICAq
IGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlND
OjpIZWFwOjpkaWRBYmFuZG9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6Y29weUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRPbGRHZW5lcmF0aW9uRXhlY3V0YWJsZXNUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAo
SlNDOjpIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xs
ZWN0QWxsR2FyYmFnZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAo
SlNDOjpIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZGlkQWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpIZWFwOjp3aWxsQWJhbmRvblN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpIZWFw
OjpkaWRBc3NpZ25TdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weVdyaXRlQmFycmll
cik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmlzSW5SZW1l
bWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6b3BlcmF0aW9uSW5Qcm9ncmVzcyk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnNob3VsZENvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpp
c0NvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQp
OgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cE9wZXJhdGlvbi5oOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrLmNwcDoKKyAgICAgICAgKEpT
Qzo6TWFya1N0YWNrQXJyYXk6On5NYXJrU3RhY2tBcnJheSk6CisgICAgICAgIChKU0M6Ok1hcmtT
dGFja0FycmF5OjpjbGVhcik6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5OjpmaWxsVmVj
dG9yKToKKyAgICAgICAgKiBoZWFwL01hcmtTdGFjay5oOgorICAgICAgICAqIGhlYXAvTWFya2Vk
QWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6aXNMaXN0UGFnZWRPdXQpOgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6cmVtb3ZlQmxv
Y2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlc2V0KToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Ok1h
cmtlZEFsbG9jYXRvcik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OmNsZWFyUmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVh
ck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Omxh
c3RDaGFuY2VUb0ZpbmFsaXplKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OmRpZENvbnN1bWVFbXB0eUZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OnNldFJlbWVtYmVyZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2xlYXJS
ZW1lbWJlcmVkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmF0b21pY0NsZWFyUmVtZW1i
ZXJlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc1JlbWVtYmVyZWQpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6bWlnaHRCZVZhbGlkQ2VsbCk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjppc0xpdmVDZWxsKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmNwcDoK
KyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6On5NYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFj
ZTo6dmlzaXRXZWFrU2V0cyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpyZWFwV2Vha1Nl
dHMpOgorICAgICAgICAoSlNDOjpWZXJpZnlNYXJrZWQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAo
SlNDOjpNYXJrZWRTcGFjZTo6Y2xlYXJNYXJrcyk6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFj
ZS5oOgorICAgICAgICAoSlNDOjpDbGVhck1hcmtzOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpT
Qzo6Q2xlYXJSZW1lbWJlcmVkU2V0OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6OmRpZEFsbG9jYXRlSW5CbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpj
bGVhclJlbWVtYmVyZWRTZXQpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6bWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNoYXJlZERhdGEpOgor
ICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1bmNv
bmRpdGlvbmFsbHlBcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29weUxhdGVy
KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UpOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aGVhcCk6CisgICAgICAgICogaGVhcC9UaW55Qmxv
b21GaWx0ZXIuaDoKKyAgICAgICAgKEpTQzo6VGlueUJsb29tRmlsdGVyOjphZGQpOgorICAgICAg
ICAqIGppdC9DQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjpzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
QXJyYXlQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZW50ZXIpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5z
aXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2luaXRfZ2xvYmFsX2NvbnN0KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aGVja01hcmtXb3JkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQv
SklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAg
ICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAg
ICAoSlNDOjplbWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjplbWl0UHV0VHJhbnNp
dGlvblN0dWIpOgorICAgICAgICAqIGxsaW50L0xMSW50Q29tbW9uLmg6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19Q
QVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfd3JpdGVfYmFycmllcl9zbG93
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50X3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmll
cl9zbG93KToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5oOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2ZmbGluZWFzbS9pbnN0
cnVjdGlvbnMucmI6CisgICAgICAgICogb2ZmbGluZWFzbS94ODYucmI6CisgICAgICAgICogcnVu
dGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0b3RhbFNpemUpOgorICAgICAgICAqIHJ1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAg
ICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9JbmRl
eGluZ0hlYWRlci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1
bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5o
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OnVudmFsaWRhdGVkU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlND
Ojo6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbFVuZGVjaWRlZCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50
MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbERvdWJsZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxl
bmd0aFNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OndpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0
U3RydWN0dXJlQW5kQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxs
b2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0RW51bWVyYXRp
b25DYWNoZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL01hcERhdGEuY3Bw
OgorICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVuZCk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldFByZXZpb3VzSUQpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZVJhcmVEYXRhOjpzZXRQcmV2aW91c0lEKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFy
ZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01h
cERhdGEuY3BwOgorICAgICAgICAoSlNDOjpXZWFrTWFwRGF0YTo6dmlzaXRDaGlsZHJlbik6CisK
IDIwMTMtMDktMjYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBN
YWtlIEdDQyBoYXBweQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYgQEAKIAkJ
MEYyNEU1NDIxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3
IC8qIENDYWxsSGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTUzRTE3RUE5RjU5
MDBBQkIyMTcgLyogRlBSSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMjRFNTQ0MTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTUzRjE3RUE5
RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTBGMjRFNTU1MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxs
RnJhbWVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgKi87
IH07Ci0JCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0MTdG
MEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcg
LyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI0RTU0NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAg
Ki87IH07CiAJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0NjE3RUUy
NzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICovOyB9OwogCQkwRjI0RTU0RTE3RUUyNzQ5
MDBBQkIyMTcgLyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ3MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25XcmFwcGVycy5oICovOyB9OwpAQCAtMTI3LDYgKzEyNSw4IEBACiAJCTBGMjRFNTUw
MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNo
LmNwcCAqLzsgfTsKIAkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRBMTdFRTI3
NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi87IH07CiAJCTBGMjRFNTUyMTdFRTI3NDkwMEFCQjIx
NyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsgfTsKKwkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3IC8q
IElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjI0RTU1MzE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1l
U2V0LmNwcCAqLzsgfTsKKwkJMEYyNEU1NTYxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxG
cmFtZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2MTYyN0Iw
QUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3
QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTY1Niw3ICs2NTYsMTAgQEAKIAkJMUFDRjczNzcxNzFDQTZGQjAwQzlCQjFFIC8q
IFdlYWsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFDRjczNzYxNzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwICovOyB9OwogCQkyNjAwQjVBNjE1
MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpT
U3RyaW5nSm9pbmVyLmNwcCAqLzsgfTsKIAkJMjYwMEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpT
U3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLzsgfTsK
KwkJMkEwRDkwMjYxN0U5NEM2ODAwRUNBNTQ2IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgfTsKIAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNh
bGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMTFCNTc0MTc2QTIyNEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmgg
Ki87IH07CisJCTJBNjZCMEY1MTdGNTAxOUUwMEUzNkEyOSAvKiBERkdXcml0ZUJhcnJpZXJFbGlz
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkE2NkIwRjMxN0Y1MDE5RTAwRTM2QTI5IC8qIERGR1dyaXRlQmFycmllckVsaXNpb25QaGFz
ZS5jcHAgKi87IH07CisJCTJBNjZCMEY2MTdGNTAxOUUwMEUzNkEyOSAvKiBERkdXcml0ZUJhcnJp
ZXJFbGlzaW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJBNjZCMEY0MTdGNTAxOUUwMEUzNkEyOSAvKiBERkdXcml0ZUJhcnJpZXJFbGlzaW9u
UGhhc2UuaCAqLzsgfTsKIAkJMkE2RjQ2MjYxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNkY0
NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2
IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25T
Y29wZS5oICovOyB9OwogCQkzNzFEODQyRDE3Qzk4QjZFMDBFQ0Y5OTQgLyogbGliei5keWxpYiBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUQ4NDJD
MTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGliICovOyB9OwpAQCAtMTMyMiw4ICsxMzI1LDYg
QEAKIAkJMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDQ2FsbEhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyNEU1M0UxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUkluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRlBSSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGMjRFNTUzMTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVT
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lQ2FsbEZy
YW1lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyNEU1NTQxN0YwQjcx
QzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyNEU1NDUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUT3BlcmF0aW9ucy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE9wZXJhdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NDcxN0VFMjc0OTAwQUJC
MjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpJVE9wZXJhdGlvbldyYXBwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMzMxLDYgKzEzMzIsOCBAQAogCQkwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVw
YXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBhdGNoLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3
IC8qIFJlcGF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcg
LyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjI0RTU1MzE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUNhbGxGcmFtZVNl
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjRFNTU0MTdGMEI3MUMwMEFC
QjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5saW5lQ2FsbEZyYW1lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgyNiw2ICsxODI5LDggQEAKIAkJMUNBQThC
NEIwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ0pvaW5lci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBK
U1N0cmluZ0pvaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmlu
Z0pvaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQTY2QjBGMzE3RjUwMTlF
MDBFMzZBMjkgLyogREZHV3JpdGVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dyaXRlQmFycmllckVsaXNpb25QaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHV3JpdGVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMkE2NkIwRjQxN0Y1MDE5RTAwRTM2QTI5IC8qIERGR1dyaXRlQmFy
cmllckVsaXNpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdX
cml0ZUJhcnJpZXJFbGlzaW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdXcml0ZUJhcnJpZXJFbGlz
aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE2RjQ2MjUxN0U5NTlD
RTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGVhcE9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUQ4
OTMyOTE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBJdGVyYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzNzFEODQyQzE3Qzk4QjZFMDBFQ0Y5OTQgLyogbGliei5keWxpYiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxl
ZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliei5keWxpYjsgcGF0aCA9IHVzci9saWIvbGliei5k
eWxpYjsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0zNjcxLDYgKzM2NzYsOCBAQAogCQkJ
CTBGRkZDOTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuaCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3Qu
Y3BwICovLAogCQkJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICov
LAorCQkJCTJBNjZCMEYzMTdGNTAxOUUwMEUzNkEyOSAvKiBERkdXcml0ZUJhcnJpZXJFbGlzaW9u
UGhhc2UuY3BwICovLAorCQkJCTJBNjZCMEY0MTdGNTAxOUUwMEUzNkEyOSAvKiBERkdXcml0ZUJh
cnJpZXJFbGlzaW9uUGhhc2UuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gZGZnOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQwNDcsNiArNDA1NCw3IEBACiAJCQkJMkFEODkzMkIxN0Uz
ODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlW
YWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkEwRDkwMjYxN0U5NEM2
ODAwRUNBNTQ2IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTg2RUNBM0ZBMTMyREYyNUEw
MDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMxNDE3
RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFF
M0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC00MTQ2LDYgKzQxNTQsNyBAQAogCQkJCUMyNEQzMUUzMTYxQ0Q2OTUwMDJB
QTREQiAvKiBIZWFwU3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFNTI2QkUxNTkw
RUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDUx
NEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTJBNjZCMEY2MTdGNTAxOUUwMEUzNkEyOSAvKiBERkdXcml0ZUJhcnJpZXJFbGlzaW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRl
bnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI1RjhCQ0UxNTc1NDRBOTAwMjQ1QjcxIC8q
IEluY3JlbWVudGFsU3dlZXBlci5oIGluIEhlYWRlcnMgKi8sCkBAIC00ODcyLDYgKzQ4ODEsNyBA
QAogCQkJCTBGNjM5NDU0MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzAxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5UHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9j
a0FsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyQTY2QjBGNTE3RjUwMTlFMDBFMzZB
MjkgLyogREZHV3JpdGVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODYzMTA3RUMxMUEwMDEzRTdCMiAvKiBCb29sZWFuQ29uc3RydWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyODA4NjQxMDdFQzExQTAwMTNFN0IyIC8qIEJvb2xlYW5PYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjUxMDdFQzExQTAwMTNFN0IyIC8qIEJvb2xl
YW5Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlz
aW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTMgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIHJldHVyblR5cGUsIHR5cGVuYW1lIGFyZ1R5cGUxLCB0eXBl
bmFtZSBhcmdUeXBlMiwgdHlwZW5hbWUgYXJnVHlwZTMsIHR5cGVuYW1lIGFyZ1R5cGU0LCB0eXBl
bmFtZSBhcmdUeXBlNSwgdHlwZW5hbWUgYXJnVHlwZTY+CisgICAgRnVuY3Rpb25QdHIocmV0dXJu
VHlwZSgqdmFsdWUpKGFyZ1R5cGUxLCBhcmdUeXBlMiwgYXJnVHlwZTMsIGFyZ1R5cGU0LCBhcmdU
eXBlNSwgYXJnVHlwZTYpKQorICAgICAgICA6IG1fdmFsdWUoKHZvaWQqKXZhbHVlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKKyAgICB9CisKIC8v
IE1TVkMgZG9lc24ndCBzZWVtIHRvIHRyZWF0IGZ1bmN0aW9ucyB3aXRoIGRpZmZlcmVudCBjYWxs
aW5nIGNvbnZlbnRpb25zIGFzCiAvLyBkaWZmZXJlbnQgdHlwZXM7IHRoZXNlIG1ldGhvZHMgYWxy
ZWFkeSBkZWZpbmVkIGZvciBmYXN0Y2FsbCwgYmVsb3cuCiAjaWYgQ0FMTElOR19DT05WRU5USU9O
X0lTX1NURENBTEwgJiYgIU9TKFdJTkRPV1MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcAkocmV2aXNpb24gMTU2NDk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJl
ZGljdAogewogICAgIGlmICghbV9sYXN0U2VlblN0cnVjdHVyZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIAorICAgCiAgICAgbV9vYnNlcnZlZEFycmF5TW9kZXMgfD0gYXJyYXlNb2RlRnJvbVN0cnVj
dHVyZShtX2xhc3RTZWVuU3RydWN0dXJlKTsKICAgICAKICAgICBpZiAoIW1fZGlkUGVyZm9ybUZp
cnN0UnVuUHJ1bmluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTk5LDE1ICsxOTk5LDE1
IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICBpZiAoQ29k
ZUJsb2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKICAgICAg
ICAgb3RoZXJCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAKLSAgICB2aXNpdG9yLnJl
cG9ydEV4dHJhTWVtb3J5VXNhZ2Uoc2l6ZW9mKENvZGVCbG9jaykpOworICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlVc2FnZShvd25lckV4ZWN1dGFibGUoKSwgc2l6ZW9mKENvZGVCbG9jaykp
OwogICAgIGlmIChtX2ppdENvZGUpCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlV
c2FnZShtX2ppdENvZGUtPnNpemUoKSk7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1v
cnlVc2FnZShvd25lckV4ZWN1dGFibGUoKSwgbV9qaXRDb2RlLT5zaXplKCkpOwogICAgIGlmICht
X2luc3RydWN0aW9ucy5zaXplKCkpIHsKICAgICAgICAgLy8gRGl2aWRlIGJ5IHJlZkNvdW50KCkg
YmVjYXVzZSBtX2luc3RydWN0aW9ucyBwb2ludHMgdG8gc29tZXRoaW5nIHRoYXQgaXMgc2hhcmVk
CiAgICAgICAgIC8vIGJ5IG11bHRpcGxlIENvZGVCbG9ja3MsIGFuZCB3ZSBvbmx5IHdhbnQgdG8g
Y291bnQgaXQgdG93YXJkcyB0aGUgaGVhcCBzaXplIG9uY2UuCiAgICAgICAgIC8vIEhhdmluZyBl
YWNoIENvZGVCbG9jayByZXBvcnQgb25seSBpdHMgcHJvcG9ydGlvbmFsIHNoYXJlIG9mIHRoZSBz
aXplIGlzIG9uZSB3YXkKICAgICAgICAgLy8gb2YgYWNjb21wbGlzaGluZyB0aGlzLgotICAgICAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UobV9pbnN0cnVjdGlvbnMuc2l6ZSgpICog
c2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1Y3Rpb25zLnJlZkNvdW50KCkpOworICAgICAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2Uob3duZXJFeGVjdXRhYmxlKCksIG1faW5z
dHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5y
ZWZDb3VudCgpKTsKICAgICB9CiAKICAgICB2aXNpdG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYwLDggKzEyNjAsOSBAQCBpbmxpbmUgdm9pZCBDb2Rl
QmxvY2tTZXQ6Om1hcmsodm9pZCogY2FuCiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0
b3IgaXRlciA9IG1fc2V0LmZpbmQoc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oY2FuZGlkYXRlQ29k
ZUJsb2NrKSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICAKKwogICAgICgqaXRlciktPm1fbWF5QmVFeGVjdXRpbmcgPSB0cnVlOworICAgIG1fY3Vy
cmVudGx5RXhlY3V0aW5nLmFwcGVuZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihjYW5kaWRhdGVD
b2RlQmxvY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxOSw4ICs5MTksMTEgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9j
YXRlQgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAg
IEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIG9iamVjdC0+d2lsbFJlcGxhY2VPbGRCdXR0
ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0dXJlKCksIG9iamVjdC0+YnV0dGVyZmx5KCkpOwogICAg
IEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwg
aW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKICAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhv
dXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIG9iamVjdC0+ZGlkUmVwbGFjZU9sZEJ1
dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtOTI5LDggKzkzMiwxMSBAQCBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAK
KyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgb2JqZWN0LT53aWxsUmVwbGFjZU9s
ZEJ1dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSwgb2JqZWN0LT5idXR0ZXJmbHkoKSk7
CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZt
LCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKICAg
ICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOwor
ICAgIG9iamVjdC0+ZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUo
KSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsK
IH0KIApAQCAtMTA5Niw2ICsxMTAyLDMwIEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZl
cnRKU1ZhbHVlVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9Cb29s
ZWFuKGV4ZWMpOwogfQogCit2b2lkIEpJVF9PUEVSQVRJT04gZGZnQ29weVdyaXRlQmFycmllcihF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6
ZSwgdm9pZCogbmV3UHRyLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAg
IGV4ZWMtPmhlYXAoKS0+Y29weVdyaXRlQmFycmllcihjZWxsLCBvbGRQdHIsIG9sZFNpemUsIG5l
d1B0ciwgbmV3U2l6ZSk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBkZmdVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQoreworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworCisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIoY2VsbCk7Cit9CisKK3ZvaWQg
SklUX09QRVJBVElPTiBkZmdXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93
bmVyLCBKU0NlbGwqIG93bmVkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgZXhlYy0+aGVhcCgp
LT53cml0ZUJhcnJpZXIob3duZXIsIG93bmVkKTsKK30KKwogdm9pZCBKSVRfT1BFUkFUSU9OIGRl
YnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lk
KiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IHRyaWdnZXJUaWVyVXBOb3coRXhlYwogY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50
cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVhbUlu
ZGV4KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKK3ZvaWQgSklU
X09QRVJBVElPTiBkZmdDb3B5V3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIHZvaWQq
LCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIGRmZ1dyaXRlQmFy
cmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3ZvaWQgSklUX09QRVJBVElPTiBk
ZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworCiB9IC8v
IGV4dGVybiAiQyIKIAogaW5saW5lIFBfSklUT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlw
ZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsMTcgKzI0MCwxNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGgucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVH
UFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJl
ZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQog
ewogICAgIAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJl
OwogICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQu
cGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVj
dHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKIAotICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2
YWx1ZUdQUiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNo
R1BSKTsKKyAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVXNlLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIpOwogCiAgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9h
ZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3Jl
V2l0aFBhdGNoID0gbV9qaXQuc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIs
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDApKTsKKyAgICAgICAgbV9qaXQuY29u
dmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxh
YmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRj
aCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIDApKTsKIAogICAg
IEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwogICAgIApAQCAt
MjgwLDcgKzI4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8K
ICAgICAgICAgICAgIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOwogICAgIH0KICAg
ICBSZWdpc3RlclNldCBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVycygpOwot
ICAgIGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaEdQUik7CisgICAgY3VycmVu
dGx5VXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoR1BSMSk7CiAgICAgQVNTRVJUKGN1cnJlbnRs
eVVzZWRSZWdpc3RlcnMuZ2V0KGJhc2VHUFIpKTsKICAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJl
Z2lzdGVycy5nZXQodmFsdWVHUFIpKTsKICAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcygKQEAg
LTI5NzksOCArMjk3OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5
cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyAmJiBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQo
KSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAg
ICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJl
ZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBjaGlsZDQpOwpAQCAtMzA1Myw4ICszMDU0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJh
cnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVy
dHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMSh0aGlzKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhp
cyk7CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBj
aGlsZDMsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKQEAgLTMx
NTAsNyArMzE1Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCiAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAogICAgICAgICAgICAgICAgICAgICAg
ICAgYmFzZVJlZywgT0JKRUNUX09GRlNFVE9GKEFyZ3VtZW50cywgbV9zbG93QXJndW1lbnRzKSkp
KTsKLSAgICAKKworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlUmVnLCBj
aGlsZDMsIHNjcmF0Y2hSZWcsIHNjcmF0Y2gyUmVnKTsKKwogICAgICAgICAgICAgbV9qaXQubW92
ZShwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwogICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVu
ZDMyVG9QdHIoc2NyYXRjaDJSZWcsIHNjcmF0Y2gyUmVnKTsKICAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoCkBAIC0zMjUzLDcgKzMyNTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkludDMyICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CiAgICAg
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJy
aWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwor
ICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hp
bGQyKCksIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3Rv
cmFnZUxlbmd0aEdQUik7CkBAIC0zMzAyLDcgKzMzMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFy
cmllckVuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9k
ZS0+Y2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQ
UiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNoLmdwcigpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTQwNjYsMTQgKzQwNzAsMTYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdp
c3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoUmVn
aXN0ZXIodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoUmVnaXN0ZXIyKHRoaXMp
OwogCiAgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgcmVnaXN0ZXJzR1BSID0gcmVnaXN0ZXJzLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoUmVn
aXN0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2hSZWdpc3Rl
cjIuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6
OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3Rl
cikpKTsKLSAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hp
bGQzKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQzKCksIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hHUFIyKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTQyNjksMTMgKzQyNzUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5ub3Rp
ZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1faml0LmdyYXBoKCkubV9wbGFuLCBtX2pp
dC5jb2RlQmxvY2soKSwgbm9kZSk7CiAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0
aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICAKLSNpZiBFTkFCTEUo
V1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhp
cyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWly
ZXMgaXQKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlLCBXcml0ZUJhcnJpZXJGb3JHZW5lcmljQWNjZXNzKTsK
LSNlbmRpZgorICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9kZS0+c3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIo
KSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpKTsKICAgICAgICAgCkBAIC00MzMwLDE4ICs0MzM1LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6IHsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotI2VuZGlmCiAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gyKHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIAotI2lmIEVO
QUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2Uu
Z3ByKCksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVy
dHlBY2Nlc3MpOwotI2VuZGlmCisgICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1
ZS5ncHIoKSwgbm9kZS0+Y2hpbGQzKCksIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7
CiAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQu
Z3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV07CiAgICAgICAgIApAQCAtNDM1NCwzNiArNDM1NywzNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRCeUlkOiB7CiAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgCiAgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwogICAgICAgICAKLSAgICAgICAgYmFz
ZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIGNhY2hlZFB1dEJ5SWQobm9k
ZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNo
R1BSMSwgc2NyYXRjaEdQUjIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsK
IAotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVl
R1BSLCBub2RlLT5jaGlsZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigp
LCBOb3REaXJlY3QpOwotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewogICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwor
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgICAgIAogICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGJhc2Uu
dXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9k
ZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNo
R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CisgICAgICAgIGNhY2hlZFB1
dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigp
LCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGly
ZWN0KTsKIAotICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBA
IC00NDAwLDEwICs0NDAxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAKICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7
Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlz
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9i
amVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMSgpLCBX
cml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICB3
cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCB2YWx1
ZS5ncHIoKSwgbm9kZS0+Y2hpbGQxKCksIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCks
IG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKTsKQEAgLTQ2ODQsOSArNDY4NSwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAKICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYWN0aXZhdGlvblZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0
aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICBHUFJS
ZWcgYWN0aXZhdGlvblZhbHVlR1BSID0gYWN0aXZhdGlvblZhbHVlLmdwcigpOwotICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSMSA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBzY3Jh
dGNoMi5ncHIoKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9q
aXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBhY3RpdmF0aW9uVmFsdWVHUFIpOwog
CkBAIC00Njk3LDEzICs0NzAwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgZm9yIChpbnQgaSA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQo
KTsgaSA+IGNhcHR1cmVFbmQ7IC0taSkgewogICAgICAgICAgICAgbV9qaXQubG9hZDY0KAogICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgaSAqIHNpemVvZihSZWdpc3RlcikpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NCgKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcygK
KyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoCiAgICAg
ICAgICAgICAgICAgICAgIGFjdGl2YXRpb25WYWx1ZUdQUiwgcmVnaXN0ZXJzT2Zmc2V0ICsgaSAq
IHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgfQotICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1
c3RlZEltbTMyKHJlZ2lzdGVyc09mZnNldCksIGFjdGl2YXRpb25WYWx1ZUdQUiwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGFjdGl2YXRpb25WYWx1ZUdQUiwgSlNBY3RpdmF0aW9uOjpvZmZzZXRPZlJlZ2lzdGVycygp
KSk7CisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJzT2Zmc2V0KSwg
YWN0aXZhdGlvblZhbHVlR1BSLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIG1faml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVzcyhhY3RpdmF0aW9uVmFsdWVHUFIsIEpT
QWN0aXZhdGlvbjo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSkpOworICAgICAgICB3cml0ZUJhcnJpZXIo
YWN0aXZhdGlvblZhbHVlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpOwogCiAgICAgICAg
IG5vdENyZWF0ZWQubGluaygmbV9qaXQpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk1LDUxICs4OTUsMjE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVuKE5vZGUqIG4KICAgICB9CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwg
RWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRj
aDEsIEdQUlJlZyBzY3JhdGNoMikKK3N0YXRpYyBKSVRDb21waWxlcjo6SnVtcCBnZW5lcmljV3Jp
dGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNo
MSwgR1BSUmVnIHNjcmF0Y2gyKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhbHVlR1BSKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAg
IFVOVVNFRF9QQVJBTShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworICAg
IC8vIENvcHkgb3duZXIgdG8gc2NyYXRjaDEKKyAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDEp
OworICAgIC8vIENvcHkgb3duZXIgdG8gc2NyYXRjaDIKKyAgICBqaXQubW92ZShvd25lciwgc2Ny
YXRjaDIpOwogCisgICAgLy8gTWFzayBzY3JhdGNoMSB0byBibG9jaworICAgIGppdC5hbmRQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2Ny
YXRjaDEpOworICAgIC8vIE1hc2sgc2NyYXRjaDIgdG8gaW5kZXgKKyAgICBqaXQuYW5kUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIofk1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3Jh
dGNoMik7CisKKyAgICAvLyBTaGlmdCBpbmRleAorICAgIGppdC5yc2hpZnQzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDMgKyA0KSwgc2NyYXRjaDIpOworCisgICAgLy8gRW1pdCBsb2Fk
IGFuZCBicmFuY2gKKyAgICByZXR1cm4gaml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSk7Cit9CisK
K3N0YXRpYyBKSVRDb21waWxlcjo6SnVtcCBnZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVy
cyYgaml0LCBKU0NlbGwqIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyAvKnNjcmF0Y2gy
Ki8pCit7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKG93
bmVyKTsKKyAgICBzaXplX3QgbWFya0luZGV4ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihv
d25lcikgJiB+TWFya2VkQmxvY2s6OmJsb2NrTWFzaykgPj4gKDMgKyA0KTsKKyAgICB1aW50OF90
KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oYmxvY2spICsgTWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MoKSkgKyBtYXJrSW5kZXg7
CisKKyAgICAvLyBFbWl0IGxvYWQgYW5kIGJyYW5jaAorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCBzY3JhdGNoMSk7CisgICAgcmV0dXJuIGppdC5i
cmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaDEpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNv
cHlXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIG9s
ZFN0b3JhZ2UsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcgbmV3U3RvcmFnZSwgc2l6ZV90IG5ld1Np
emUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKGppdCwgb3du
ZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0LnB1c2goR1BSSW5m
bzo6dG9SZWdpc3RlcihpKSk7CisgICAgaWYgKChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyAq
IHNpemVvZih2b2lkKikpICUgMTYpCisgICAgICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyAgICBq
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG93bmVyLCBvbGRTdG9yYWdlLCBUcnVzdGVk
SW1tMzIob2xkU2l6ZSksIG5ld1N0b3JhZ2UsIFRydXN0ZWRJbW0zMihuZXdTaXplKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAgaWYgKChHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyAqIHNpemVvZih2b2lkKikpICUgMTYpCisgICAgICAgIGppdC5w
b3Aoc2NyYXRjaDEpOworICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KQorICAgICAgICBqaXQucG9wKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwor
CisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZqaXQpOworICAgIHJldHVybiBjYWxsOwor
fQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmll
cihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCB2b2lkKiBvbGRTdG9yYWdlLCBzaXpl
X3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1N0b3JhZ2UsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0
ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihqaXQsIG93bmVyLCBzY3JhdGNoMSwg
c2NyYXRjaDIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGppdC5wdXNoKEdQUkluZm86OnRvUmVnaXN0ZXIo
aSkpOworICAgIGlmICgoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKiBzaXplb2Yodm9pZCop
KSAlIDE2KQorICAgICAgICBqaXQucHVzaChzY3JhdGNoMSk7CisgICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShvd25lciwgVHJ1c3RlZEltbVB0cihvbGRTdG9yYWdlKSwgVHJ1c3Rl
ZEltbTMyKG9sZFNpemUpLCBuZXdTdG9yYWdlLCBUcnVzdGVkSW1tMzIobmV3U2l6ZSkpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIGlmICgoR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopKSAlIDE2KQorICAgICAgICBqaXQu
cG9wKHNjcmF0Y2gxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgaS0tOykKKyAgICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsK
KworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmaml0KTsKKyAgICByZXR1cm4gY2FsbDsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFycmllcihHUFJSZWcgb3duZXIs
IEdQUlJlZyBvbGRTdG9yYWdlLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1N0b3JhZ2UsIHNp
emVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmll
cihtX2ppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvcHlXcml0
ZUJhcnJpZXIsIG93bmVyLCBvbGRTdG9yYWdlLCBvbGRTaXplLCBuZXdTdG9yYWdlLCBuZXdTaXpl
KTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIC8vIE5l
ZWQgdG8gcmVsb2FkIHRoZSBidXR0ZXJmbHkgcG9pbnRlciBzaW5jZSBmaWxsaW5nIHdvbid0IHJl
bG9hZCBpdCBzaW5jZSBpdCdzIGEgdGVtcG9yYXJ5LgorICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3duZXIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIG5l
d1N0b3JhZ2UpOworCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvcHlXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCB2b2lk
KiBvbGRTdG9yYWdlLCBzaXplX3Qgb2xkU2l6ZSwgR1BSUmVnIG5ld1N0b3JhZ2UsIHNpemVfdCBu
ZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2pp
dCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvcHlXcml0ZUJhcnJp
ZXIsIG93bmVyLCBvbGRTdG9yYWdlLCBvbGRTaXplLCBuZXdTdG9yYWdlLCBuZXdTaXplKTsKKyAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIC8vIE5lZWQgdG8g
cmVsb2FkIHRoZSBidXR0ZXJmbHkgcG9pbnRlciBzaW5jZSBmaWxsaW5nIHdvbid0IHJlbG9hZCBp
dCBzaW5jZSBpdCdzIGEgdGVtcG9yYXJ5LgorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3duZXIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIG5ld1N0b3Jh
Z2UpOworCisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7Cit9CisKK01hY3Jv
QXNzZW1ibGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7
CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gxKTsKKyAgICBBU1NFUlQob3duZXIgIT0gc2Ny
YXRjaDIpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdl
bmVyaWNXcml0ZUJhcnJpZXIoaml0LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytp
KQorICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICBpZiAoKEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKSkgJSAxNikKKyAgICAgICAg
aml0LnB1c2goc2NyYXRjaDEpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
b3duZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAg
IGlmICgoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopKSAlIDE2KQor
ICAgICAgICBqaXQucG9wKHNjcmF0Y2gxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKKworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmaml0KTsKKyAgICBy
ZXR1cm4gY2FsbDsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgSklU
Q29tcGlsZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIo
bV9qaXQsIG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihkZmdVbmNvbmRp
dGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lckdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyhJbnZhbGlkR1BSUmVnKTsKKworI2lmbmRlZiBOREVCVUcgICAgCisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgb3duZXJOb3ROdWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBvd25lckdQUik7CisgICAgbV9qaXQuYnJlYWtwb2ludCgpOworICAgIG93bmVy
Tm90TnVsbC5saW5rKCZtX2ppdCk7CisjZW5kaWYKKworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQu
bGluaygmbV9qaXQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BS
UmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQorewogICAgIGlmIChpc0tub3duTm90Q2VsbCh2YWx1ZVVz
ZS5ub2RlKCkpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChtX2ppdCwgV3JpdGVCYXJyaWVy
Q291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzTm90Q2VsbDsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAg
ICAgIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywg
dmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3du
ZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ1dyaXRlQmFycmllciwgb3du
ZXJHUFIsIHZhbHVlR1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJS
ZWcpOworCisjaWZuZGVmIE5ERUJVRyAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvd25lck5v
dE51bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG93bmVy
R1BSKTsKKyAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgb3duZXJOb3ROdWxsLmxpbmsoJm1f
aml0KTsKKyNlbmRpZgorCisjaWZuZGVmIE5ERUJVRworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHZhbHVlTm90TnVsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgdmFsdWVHUFIpOworICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICB2YWx1ZU5vdE51bGwu
bGluaygmbV9qaXQpOwogI2VuZGlmCisKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1f
aml0KTsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlz
Tm90Q2VsbC5saW5rKCZtX2ppdCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFy
cmllcihHUFJSZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQg
dXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBHUFJS
ZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJH
UFIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gx
KTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5k
KTsKLSAgICAKICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodmFsdWUpKQogICAgICAgICByZXR1cm47
CiAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6
OmVtaXRDb3VudChtX2ppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNl
S2luZCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5l
cmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKwor
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIGNhbGxPcGVy
YXRpb24oZGZnV3JpdGVCYXJyaWVyLCBvd25lckdQUiwgdmFsdWUpOworICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgb3duZXJOb3ROdWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBvd25lckdQUik7CisgICAgbV9qaXQuYnJlYWtwb2ludCgpOworICAg
IG93bmVyTm90TnVsbC5saW5rKCZtX2ppdCk7CiAjZW5kaWYKKworICAgIGRlZmluaXRlbHlOb3RN
YXJrZWQubGluaygmbV9qaXQpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJh
cnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1
ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVHUFIpOwotICAgIFVOVVNFRF9QQVJB
TShzY3JhdGNoKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0KICAgICBpZiAoaXNLbm93
bk5vdENlbGwodmFsdWVVc2Uubm9kZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxF
KFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQobV9q
aXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7CisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVz
ZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29t
cGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJy
aWVyKG1faml0LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKworICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIGNhbGxPcGVyYXRpb24oZGZnV3JpdGVC
YXJyaWVyLCBvd25lciwgdmFsdWVHUFIpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52
YWxpZEdQUlJlZyk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
dmFsdWVOb3ROdWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCB2YWx1ZUdQUik7CisgICAgbV9qaXQuYnJlYWtwb2ludCgpOworICAgIHZhbHVlTm90TnVsbC5s
aW5rKCZtX2ppdCk7CiAjZW5kaWYKKworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9q
aXQpOworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNO
b3RDZWxsLmxpbmsoJm1faml0KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlu
KE5vZGUqIG5vZGUpCkBAIC00NDkwLDYgKzQ2NTMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Cisg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
Myh0aGlzKTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKQEAgLTQ1MDcsNiArNDY3Miw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAgICAgc2xvd1Bh
dGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdp
dGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKICAgICAgICAgCiAgICAgbV9qaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgY29weVdyaXRlQmFycmllcihiYXNlR1BSLCAwLCAw
LCBzY3JhdGNoR1BSLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSks
IHNjcmF0Y2gyLmdwcigpLCBzY3JhdGNoMy5ncHIoKSk7CiAgICAgICAgIAogICAgIHN0b3JhZ2VS
ZXN1bHQoc2NyYXRjaEdQUiwgbm9kZSk7CiB9CkBAIC00NTM1LDYgKzQ3MDEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgU3RvcmFnZU9wZXJhbmQgb2xk
U3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gx
KHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDModGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKICAgICBHUFJSZWcgb2xkU3RvcmFnZUdQUiA9IG9sZFN0b3JhZ2UuZ3ByKCk7CkBAIC00
NTU0LDcgKzQ3MjEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVBy
CiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSMiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCop
KSkpOwogICAgIH0KICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7Ci0gICAgCisg
ICAgY29weVdyaXRlQmFycmllcihiYXNlR1BSLCBvbGRTdG9yYWdlR1BSLCBvbGRTaXplLCBzY3Jh
dGNoR1BSMiwgbmV3U2l6ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2gzLmdwcigpKTsKKwogICAgIHN0
b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTY0OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxMiw5ICszMTIsMTYgQEAgcHVibGljOgogICAgICAgICBzcGVjdWxhdGlvbldh
dGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4pOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BS
UmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcg
c2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlk
R1BSUmVnKTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEpTQ2VsbCog
dmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRH
UFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOwotICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwg
V3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZyk7
CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNvcHlXcml0ZUJhcnJpZXIoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIG93bmVyLCB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRTaXplLCBHUFJS
ZWcgbmV3UHRyLCBzaXplX3QgbmV3U2l6ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjb3B5V3JpdGVCYXJyaWVyKEND
YWxsSGVscGVycyYsIEdQUlJlZyBvd25lciwgR1BSUmVnIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUs
IEdQUlJlZyBuZXdQdHIsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y3JhdGNoMik7CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHdyaXRlQmFycmllcihD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKTsKKworICAgIHZvaWQgY29weVdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJl
ZyBvbGRQdHIsIHNpemVfdCBvbGRTaXplLCBHUFJSZWcgbmV3UHRyLCBzaXplX3QgbmV3U2l6ZSwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZvaWQgY29weVdyaXRlQmFy
cmllcihHUFJSZWcgb3duZXJHUFIsIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZFNpemUsIEdQUlJl
ZyBuZXdQdHIsIHNpemVfdCBuZXdTaXplLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
Mik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBH
UFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEpTQ2VsbCogdmFsdWUs
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lkIHdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKIAogICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRj
aEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9
IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcg
cHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykKICAgICB7CkBAIC03MjYsNyArNzMzLDcgQEAgcHVi
bGljOgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9y
aWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6
Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwotICAgIHZvaWQgY2Fj
aGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHZhbHVlLCBFZGdlIHZh
bHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0
S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVt
cCgpKTsKKyAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2UsIEdQ
UlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2Ny
YXRjaEdQUjIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcg
YmFzZVRhZ0dQUk9yTm9uZSwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFn
R1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpLCBT
cGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7CiAgICAgdm9pZCBjYWNoZWRQdXRCeUlk
KENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBH
UFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKQEAgLTEwNDAsNiArMTA0NywxNiBA
QCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNQU1BTIG9w
ZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBzaXplX3QgYXJnMywgR1BSUmVnIGFy
ZzQsIHNpemVfdCBhcmc1KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW0zMihhcmczKSwgYXJnNCwgVHJ1c3RlZElt
bTMyKGFyZzUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihW
X0pJVE9wZXJhdGlvbl9FQ1BTUFMgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgdm9pZCogYXJnMiwg
c2l6ZV90IGFyZzMsIEdQUlJlZyBhcmc0LCBzaXplX3QgYXJnNSkKKyAgICB7CisgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIp
LCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQsIFRydXN0ZWRJbW0zMihhcmc1KSk7CisgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpzc0pz
cyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcy
KTsKQEAgLTEwODUsMTIgKzExMDIsMjEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0K
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBv
cGVyYXRpb24sIEpTQ2VsbCogYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihhcmcxKSwgYXJnMik7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CisgICAgfQogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJh
dGlvbl9XIG9wZXJhdGlvbiwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkKICAgICB7CkBA
IC0xMzI4LDcgKzEzNTQsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0KICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihw
b2ludGVyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dyaXRlQmFycmll
ckVsaXNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXcml0ZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXcml0ZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHV3JpdGVCYXJyaWVyRWxpc2lvblBoYXNlLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dyaXRlQmFycmllckVsaXNpb25QaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV3JpdGVCYXJyaWVyRWxpc2lv
blBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dy
aXRlQmFycmllckVsaXNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIERGR1dyaXRlQmFycmllckVsaXNpb25QaGFzZV9oCisjZGVm
aW5lIERGR1dyaXRlQmFycmllckVsaXNpb25QaGFzZV9oCisKKworCisjZW5kaWYgLy8gREZHV3Jp
dGVCYXJyaWVyRWxpc2lvblBoYXNlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDUgKzEw
NSwxMiBAQCB2b2lkIENvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQoU2xvdFZpc2l0CiAgICAgfQog
fQogCit2b2lkIENvZGVCbG9ja1NldDo6cmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxv
Y2tzKEhlYXAqIGhlYXApCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRs
eUV4ZWN1dGluZy5zaXplKCk7ICsraSkKKyAgICAgICAgaGVhcC0+YWRkVG9SZW1lbWJlcmVkU2V0
KG1fY3VycmVudGx5RXhlY3V0aW5nW2ldLT5vd25lckV4ZWN1dGFibGUoKSk7CisgICAgbV9jdXJy
ZW50bHlFeGVjdXRpbmcuY2xlYXIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShyZXZpc2lvbiAxNTY0
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEyIEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJs
b2NrOworY2xhc3MgSGVhcDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiAvLyBDb2RlQmxvY2tTZXQg
dHJhY2tzIGFsbCBDb2RlQmxvY2tzLiBFdmVyeSBDb2RlQmxvY2sgc3RhcnRzIG91dCB3aXRoIG9u
ZQpAQCAtNjUsMTEgKzY3LDE2IEBAIHB1YmxpYzoKICAgICAvLyBtYXlCZUV4ZWN1dGluZy4KICAg
ICB2b2lkIHRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJik7CiAKKyAgICAvLyBBZGQgYWxsIGN1cnJl
bnRseSBleGVjdXRpbmcgQ29kZUJsb2NrcyB0byB0aGUgcmVtZW1iZXJlZCBzZXQgdG8gYmUgCisg
ICAgLy8gcmUtc2Nhbm5lZCBkdXJpbmcgdGhlIG5leHQgY29sbGVjdGlvbi4KKyAgICB2b2lkIHJl
bWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2NrcyhIZWFwKik7CisKIHByaXZhdGU6CiAg
ICAgLy8gVGhpcyBpcyBub3QgYSBzZXQgb2YgUmVmUHRyPENvZGVCbG9jaz4gYmVjYXVzZSB3ZSBu
ZWVkIHRvIGJlIGFibGUgdG8gZmluZAogICAgIC8vIGFyYml0cmFyeSBib2d1cyBwb2ludGVycy4g
SSBjb3VsZCBoYXZlIHdyaXR0ZW4gYSB0aGluZ3kgdGhhdCBoYWQgcGVlayB0eXBlcwogICAgIC8v
IGFuZCBhbGwsIGJ1dCB0aGF0IHNlZW1lZCBsaWtlIG92ZXJraWxsLgogICAgIEhhc2hTZXQ8Q29k
ZUJsb2NrKiA+IG1fc2V0OworICAgIFZlY3RvcjxDb2RlQmxvY2sqPiBtX2N1cnJlbnRseUV4ZWN1
dGluZzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMTU2NDk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3co
KQogICAgIG1fcm9vdHMgPSBuZXdSb290czsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hv
b2s+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaywgSGVhcE9wZXJhdGlvbiBvcGVyYXRpb24+
CiBpbmxpbmUgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIodm9pZCog
cCwgVGlueUJsb29tRmlsdGVyIGZpbHRlciwgTWFya0hvb2smIG1hcmtIb29rKQogewogICAgIG1h
cmtIb29rLm1hcmsocCk7CkBAIC05MCw3ICs5MCw3IEBAIGlubGluZSB2b2lkIENvbnNlcnZhdGl2
ZVJvb3RzOjpnZW5lcmljQWQKICAgICBtX3Jvb3RzW21fc2l6ZSsrXSA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KHApOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KK3RlbXBsYXRlPHR5
cGVuYW1lIE1hcmtIb29rLCBIZWFwT3BlcmF0aW9uIG9wZXJhdGlvbj4KIHZvaWQgQ29uc2VydmF0
aXZlUm9vdHM6OmdlbmVyaWNBZGRTcGFuKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIE1hcmtIb29r
JiBtYXJrSG9vaykKIHsKICAgICBpZiAoYmVnaW4gPiBlbmQpIHsKQEAgLTEwNSw3ICsxMDUsNyBA
QCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2CiAKICAgICBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyID0gbV9ibG9ja3MtPmZpbHRlcigpOyAvLyBNYWtlIGEgbG9jYWwgY29w
eSBvZiBmaWx0ZXIgdG8gc2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3QgYWxpYXMsIGFuZCBjYW4g
YmUgcmVnaXN0ZXItYWxsb2NhdGVkLgogICAgIGZvciAoY2hhcioqIGl0ID0gc3RhdGljX2Nhc3Q8
Y2hhcioqPihiZWdpbik7IGl0ICE9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsgKytpdCkKLSAg
ICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIsIG1hcmtIb29rKTsKKyAgICAgICAg
Z2VuZXJpY0FkZFBvaW50ZXI8TWFya0hvb2ssIG9wZXJhdGlvbj4oKml0LCBmaWx0ZXIsIG1hcmtI
b29rKTsKIH0KIAogY2xhc3MgRHVtbXlNYXJrSG9vayB7CkBAIC0xMTUsMTMgKzExNSwyMSBAQCBw
dWJsaWM6CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kKQogeworICAgIEhlYXBPcGVyYXRpb24gb3BlcmF0aW9uID0gbV9jb3BpZWRTcGFjZS0+aGVh
cCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCk7CiAgICAgRHVtbXlNYXJrSG9vayBkdW1teTsKLSAg
ICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBkdW1teSk7CisgICAgaWYgKG9wZXJhdGlvbiA9
PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgZ2VuZXJpY0FkZFNwYW48RHVtbXlNYXJrSG9vaywg
RnVsbENvbGxlY3Rpb24+KGJlZ2luLCBlbmQsIGR1bW15KTsKKyAgICBlbHNlCisgICAgICAgIGdl
bmVyaWNBZGRTcGFuPER1bW15TWFya0hvb2ssIEVkZW5Db2xsZWN0aW9uPihiZWdpbiwgZW5kLCBk
dW1teSk7CiB9CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKQogewotICAgIGdlbmVy
aWNBZGRTcGFuKGJlZ2luLCBlbmQsIGppdFN0dWJSb3V0aW5lcyk7CisgICAgSGVhcE9wZXJhdGlv
biBvcGVyYXRpb24gPSBtX2NvcGllZFNwYWNlLT5oZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3Mo
KTsKKyAgICBpZiAob3BlcmF0aW9uID09IEZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBnZW5lcmlj
QWRkU3BhbjxKSVRTdHViUm91dGluZVNldCwgRnVsbENvbGxlY3Rpb24+KGJlZ2luLCBlbmQsIGpp
dFN0dWJSb3V0aW5lcyk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmljQWRkU3BhbjxKSVRTdHVi
Um91dGluZVNldCwgRWRlbkNvbGxlY3Rpb24+KGJlZ2luLCBlbmQsIGppdFN0dWJSb3V0aW5lcyk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CkBAIC0xNDcsOCArMTU1LDEy
IEBAIHByaXZhdGU6CiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoCiAgICAgdm9pZCogYmVn
aW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJs
b2NrU2V0JiBjb2RlQmxvY2tzKQogeworICAgIEhlYXBPcGVyYXRpb24gb3BlcmF0aW9uID0gbV9j
b3BpZWRTcGFjZS0+aGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCk7CiAgICAgQ29tcG9zaXRl
TWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4gbWFya0hvb2soaml0U3R1
YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKLSAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBt
YXJrSG9vayk7CisgICAgaWYgKG9wZXJhdGlvbiA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAg
Z2VuZXJpY0FkZFNwYW48Q29tcG9zaXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIENvZGVC
bG9ja1NldD4sIEZ1bGxDb2xsZWN0aW9uPihiZWdpbiwgZW5kLCBtYXJrSG9vayk7CisgICAgZWxz
ZQorICAgICAgICBnZW5lcmljQWRkU3BhbjxDb21wb3NpdGVNYXJrSG9vazxKSVRTdHViUm91dGlu
ZVNldCwgQ29kZUJsb2NrU2V0PiwgRWRlbkNvbGxlY3Rpb24+KGJlZ2luLCBlbmQsIG1hcmtIb29r
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDEwICs1MywxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHkgPSAxMjg7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25JbmxpbmVDYXBh
Y2l0eSA9IDgxOTIgLyBzaXplb2YoSlNDZWxsKik7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWFya0hvb2s+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2ssIEhlYXBPcGVyYXRp
b24+CiAgICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgVGlueUJsb29tRmlsdGVyLCBN
YXJrSG9vayYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWFya0hvb2ssIEhlYXBPcGVyYXRpb24+CiAgICAgdm9pZCBnZW5lcmljQWRk
U3Bhbih2b2lkKiwgdm9pZCogZW5kLCBNYXJrSG9vayYpOwogICAgIAogICAgIHZvaWQgZ3Jvdygp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIGZhc3RQYXRoU2hvdWxkU3VjY2VlZChzaXplX3QgYnl0ZXMpIGNvbnN0OwogICAg
IENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cik7
CisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKHNpemVfdCBieXRl
cywgdm9pZCoqIG91dFB0cik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZSh2b2lk
ICpvbGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVzKTsKICAgICB2b2lkKiBm
b3JjZUFsbG9jYXRlKHNpemVfdCBieXRlcyk7CiAgICAgQ29waWVkQmxvY2sqIHJlc2V0Q3VycmVu
dEJsb2NrKCk7CkBAIC05Myw2ICs5NCwxNCBAQCBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVk
QWxsb2NhdG9yOjp0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSBDaGVja2VkQm9vbGVh
biBDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyhzaXplX3QgYnl0ZXMs
IHZvaWQqKiBvdXRQdHIpCit7CisgICAgaWYgKCF0cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fY3VycmVudEJsb2NrLT5yZXBvcnRMaXZlQnl0
ZXNEdXJpbmdDb3B5aW5nKGJ5dGVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogaW5saW5lIENo
ZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5UmVhbGxvY2F0ZSgKICAgICB2b2lkKiBv
bGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVzKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCShyZXZpc2lvbiAxNTY0OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NywxMiArNDcsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogY3JlYXRl
Tm9aZXJvRmlsbChEZWFkQmxvY2sqKTsKIAogICAgIHZvaWQgcGluKCk7CisgICAgdm9pZCB1bnBp
bigpOwogICAgIGJvb2wgaXNQaW5uZWQoKTsKIAorICAgIGJvb2wgaXNPbGQoKTsKICAgICBib29s
IGlzT3ZlcnNpemUoKTsKKyAgICB2b2lkIGRpZFByb21vdGUoKTsKIAogICAgIHVuc2lnbmVkIGxp
dmVCeXRlcygpOwotICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVzKEpTQ2VsbCosIENvcHlUb2tlbiwg
dW5zaWduZWQpOworICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVzKEpTQ2VsbCosIGJvb2wgaXNPd25l
clJlbWVtYmVyZWQsIENvcHlUb2tlbiwgdW5zaWduZWQpOworICAgIHZvaWQgcmVwb3J0TGl2ZUJ5
dGVzRHVyaW5nV3JpdGVCYXJyaWVyKHVuc2lnbmVkKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRl
c0R1cmluZ0NvcHlpbmcodW5zaWduZWQpOwogICAgIHZvaWQgZGlkU3Vydml2ZUdDKCk7CiAgICAg
dm9pZCBkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsKICAgICBib29sIHNob3VsZEV2YWN1YXRl
KCk7CkBAIC05NCw3ICs5OSw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPENvcHlXb3JrTGlzdD4g
bV93b3JrTGlzdDsKIAogICAgIHNpemVfdCBtX3JlbWFpbmluZzsKLSAgICB1aW50cHRyX3QgbV9p
c1Bpbm5lZDsKKyAgICBib29sIG1faXNQaW5uZWQgOiAxOworICAgIGJvb2wgbV9pc09sZCA6IDE7
CiAgICAgdW5zaWduZWQgbV9saXZlQnl0ZXM7CiAjaWZuZGVmIE5ERUJVRwogICAgIHVuc2lnbmVk
IG1fbGl2ZU9iamVjdHM7CkBAIC0xMDQsNyArMTEwLDcgQEAgcHJpdmF0ZToKIGlubGluZSBDb3Bp
ZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwoRGVhZEJsb2NrKiBibG9jaykK
IHsKICAgICBSZWdpb24qIHJlZ2lvbiA9IGJsb2NrLT5yZWdpb24oKTsKLSAgICByZXR1cm4gbmV3
KE5vdE51bGwsIGJsb2NrKSBDb3BpZWRCbG9jayhyZWdpb24pOworICAgIHJldHVybiBuZXcgKE5v
dE51bGwsIGJsb2NrKSBDb3BpZWRCbG9jayhyZWdpb24pOwogfQogCiBpbmxpbmUgQ29waWVkQmxv
Y2sqIENvcGllZEJsb2NrOjpjcmVhdGUoRGVhZEJsb2NrKiBibG9jaykKQEAgLTEzMCw2ICsxMzYs
NyBAQCBpbmxpbmUgQ29waWVkQmxvY2s6OkNvcGllZEJsb2NrKFJlZ2lvbiogCiAgICAgOiBIZWFw
QmxvY2s8Q29waWVkQmxvY2s+KHJlZ2lvbikKICAgICAsIG1fcmVtYWluaW5nKHBheWxvYWRDYXBh
Y2l0eSgpKQogICAgICwgbV9pc1Bpbm5lZChmYWxzZSkKKyAgICAsIG1faXNPbGQoZmFsc2UpCiAg
ICAgLCBtX2xpdmVCeXRlcygwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fbGl2ZU9iamVjdHMo
MCkKQEAgLTE1Niw2ICsxNjMsNyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6ZGlkU3Vydml2
ZUdDKCkKIGlubGluZSB2b2lkIENvcGllZEJsb2NrOjpkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVk
IGJ5dGVzKQogewogICAgIEFTU0VSVChtX2xpdmVCeXRlcyA+PSBieXRlcyk7CisgICAgQVNTRVJU
KG1fbGl2ZU9iamVjdHMpOwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBtX2xpdmVCeXRl
cyAtPSBieXRlczsKICNpZm5kZWYgTkRFQlVHCkBAIC0xODMsMTEgKzE5MSwyNiBAQCBpbmxpbmUg
dm9pZCBDb3BpZWRCbG9jazo6cGluKCkKICAgICAgICAgbV93b3JrTGlzdC5jbGVhcigpOwogfQog
CitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6dW5waW4oKQoreworICAgIG1faXNQaW5uZWQgPSBm
YWxzZTsKK30KKwogaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OmlzUGlubmVkKCkKIHsKICAgICBy
ZXR1cm4gbV9pc1Bpbm5lZDsKIH0KIAoraW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OmlzT2xkKCkK
K3sKKyAgICByZXR1cm4gbV9pc09sZDsKK30KKworaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRp
ZFByb21vdGUoKQoreworICAgIG1faXNPbGQgPSB0cnVlOworfQorCiBpbmxpbmUgYm9vbCBDb3Bp
ZWRCbG9jazo6aXNPdmVyc2l6ZSgpCiB7CiAgICAgcmV0dXJuIHJlZ2lvbigpLT5pc0N1c3RvbVNp
emUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2Nr
SW5saW5lcy5oCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTYgKzMxLDI3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAotaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9y
dExpdmVCeXRlcyhKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4gdG9rZW4sIHVuc2lnbmVkIGJ5dGVz
KQoraW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyhKU0NlbGwqIG93bmVy
LCBib29sIGlzT3duZXJSZW1lbWJlcmVkLCBDb3B5VG9rZW4gdG9rZW4sIHVuc2lnbmVkIGJ5dGVz
KQogewogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIo
Jm1fd29ya0xpc3RMb2NrKTsKICNlbmRpZgorCisgICAgLy8gV2Ugb25seSB3YW50IHRvIGFkZCB0
byBsaXZlIGJ5dGVzIGlmIHRoZSBvd25lciBpc24ndCBwYXJ0IG9mIHRoZSByZW1lbWJlcmVkIHNl
dC4KKyAgICAvLyBJZiB3ZSBhbHdheXMgYWRkZWQgbGl2ZSBieXRlcyB3ZSB3b3VsZCBkb3VibGUg
Y291bnQgZm9yIGVsZW1lbnRzIGluIHRoZSByZW1lbWJlcmVkCisgICAgLy8gc2V0IGFjcm9zcyBj
b2xsZWN0aW9ucy4gCisgICAgaWYgKCFpc093bmVyUmVtZW1iZXJlZCkgeworICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAjaWZuZGVmIE5ERUJVRwotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
LSAgICBtX2xpdmVPYmplY3RzKys7CisgICAgICAgIG1fbGl2ZU9iamVjdHMrKzsKICNlbmRpZgot
ICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVzOworICAgICAgICBtX2xpdmVCeXRlcyArPSBieXRlczsK
KyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0KKyAgICBBU1NFUlQobV9saXZlQnl0
ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7CisKKyAgICBpZiAoaXNQaW5uZWQoKSkKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFzaG91bGRFdmFjdWF0ZSgpKSB7CiAgICAgICAgIHBp
bigpOwpAQCAtNTAsNyArNjEsMzQgQEAgaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExp
dmVCeXRlcwogICAgIGlmICghbV93b3JrTGlzdCkKICAgICAgICAgbV93b3JrTGlzdCA9IGFkb3B0
UHRyKG5ldyBDb3B5V29ya0xpc3QoSGVhcDo6aGVhcChvd25lciktPmJsb2NrQWxsb2NhdG9yKCkp
KTsKIAotICAgIG1fd29ya0xpc3QtPmFwcGVuZChDb3B5V29ya2xpc3RJdGVtKG93bmVyLCB0b2tl
bikpOworICAgIC8vIFJlbWVtYmVyZWQgc2V0IGVsZW1lbnRzIHN0aWxsIG5lZWQgdG8gYmUgYWRk
ZWQgdG8gdGhlIHdvcmsgbGlzdCBpZiB0aGUgYmxvY2sgaXMgeW91bmcKKyAgICAvLyBiZWNhdXNl
IGlmIHdlIGRvIGNvcHlpbmcgdGhlbiB3ZSBhbHdheXMgZXZhY3VhdGUgeW91bmcgYmxvY2tzLCBl
dmVuIGR1cmluZyBFZGVuQ29sbGVjdGlvbnMuCisgICAgaWYgKCFpc093bmVyUmVtZW1iZXJlZCB8
fCAhbV9pc09sZCkKKyAgICAgICAgbV93b3JrTGlzdC0+YXBwZW5kKENvcHlXb3JrbGlzdEl0ZW0o
b3duZXIsIHRva2VuKSk7Cit9CisKK2lubGluZSB2b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZl
Qnl0ZXNEdXJpbmdXcml0ZUJhcnJpZXIodW5zaWduZWQgYnl0ZXMpCit7CisgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX2xpdmVPYmplY3RzKys7CisjZW5kaWYK
KyAgICBtX2xpdmVCeXRlcyArPSBieXRlczsKKyAgICBBU1NFUlQoISFtX2xpdmVCeXRlcyA9PSAh
IW1fbGl2ZU9iamVjdHMpOworICAgIEFTU0VSVChtX2xpdmVCeXRlcyA8PSBDb3BpZWRCbG9jazo6
YmxvY2tTaXplKTsKK30KKworaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRl
c0R1cmluZ0NvcHlpbmcodW5zaWduZWQgYnl0ZXMpCit7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgIC8vIFRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGxvY2tlZCBiZWNhdXNlIHRoZSB0aHJl
YWQgdGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uIG93bnMgdGhlIGN1cnJlbnQgYmxvY2suCisgICAg
bV9pc09sZCA9IHRydWU7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbGl2ZU9iamVjdHMrKzsKKyNl
bmRpZgorICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVzOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
KyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBDb3BpZWRTcGFjZTo6Q29waWVkU3BhY2UoSGVhcCogaGVhcCkKICAg
ICA6IG1faGVhcChoZWFwKQotICAgICwgbV90b1NwYWNlKDApCi0gICAgLCBtX2Zyb21TcGFjZSgw
KQogICAgICwgbV9pbkNvcHlpbmdQaGFzZShmYWxzZSkKICAgICAsIG1fc2hvdWxkRG9Db3B5UGhh
c2UoZmFsc2UpCiAgICAgLCBtX251bWJlck9mTG9hbmVkQmxvY2tzKDApCkBAIC00NiwyMSArNDQs
NDAgQEAgQ29waWVkU3BhY2U6OkNvcGllZFNwYWNlKEhlYXAqIGhlYXApCiAKIENvcGllZFNwYWNl
Ojp+Q29waWVkU3BhY2UoKQogewotICAgIHdoaWxlICghbV90b1NwYWNlLT5pc0VtcHR5KCkpCi0g
ICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpk
ZXN0cm95KG1fdG9TcGFjZS0+cmVtb3ZlSGVhZCgpKSk7CisgICAgd2hpbGUgKCFtX29sZEdlbi50
b1NwYWNlLT5pc0VtcHR5KCkpCisgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFs
bG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KG1fb2xkR2VuLnRvU3BhY2UtPnJlbW92ZUhlYWQo
KSkpOwogCi0gICAgd2hpbGUgKCFtX2Zyb21TcGFjZS0+aXNFbXB0eSgpKQotICAgICAgICBtX2hl
YXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX2Zy
b21TcGFjZS0+cmVtb3ZlSGVhZCgpKSk7CisgICAgd2hpbGUgKCFtX29sZEdlbi5mcm9tU3BhY2Ut
PmlzRW1wdHkoKSkKKyAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUo
Q29waWVkQmxvY2s6OmRlc3Ryb3kobV9vbGRHZW4uZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCkpKTsK
IAotICAgIHdoaWxlICghbV9vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpCi0gICAgICAgIG1faGVh
cC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVz
dHJveShtX292ZXJzaXplQmxvY2tzLnJlbW92ZUhlYWQoKSkpOworICAgIHdoaWxlICghbV9vbGRH
ZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKQorICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2Nh
dG9yKCkuZGVhbGxvY2F0ZUN1c3RvbVNpemUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV9vbGRHZW4u
b3ZlcnNpemVCbG9ja3MucmVtb3ZlSGVhZCgpKSk7CisKKyAgICB3aGlsZSAoIW1fbmV3R2VuLnRv
U3BhY2UtPmlzRW1wdHkoKSkKKyAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxs
b2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV9uZXdHZW4udG9TcGFjZS0+cmVtb3ZlSGVhZCgp
KSk7CisKKyAgICB3aGlsZSAoIW1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKQorICAgICAg
ICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJv
eShtX25ld0dlbi5mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKSkpOworCisgICAgd2hpbGUgKCFtX25l
d0dlbi5vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpCisgICAgICAgIG1faGVhcC0+YmxvY2tBbGxv
Y2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX25ld0dl
bi5vdmVyc2l6ZUJsb2Nrcy5yZW1vdmVIZWFkKCkpKTsKKworICAgIEFTU0VSVChtX29sZEdlbi50
b1NwYWNlLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1fbmV3R2VuLnRvU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fbmV3
R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9uZXdHZW4ub3ZlcnNpemVC
bG9ja3MuaXNFbXB0eSgpKTsKIH0KIAogdm9pZCBDb3BpZWRTcGFjZTo6aW5pdCgpCiB7Ci0gICAg
bV90b1NwYWNlID0gJm1fYmxvY2tzMTsKLSAgICBtX2Zyb21TcGFjZSA9ICZtX2Jsb2NrczI7Cisg
ICAgbV9vbGRHZW4udG9TcGFjZSA9ICZtX29sZEdlbi5ibG9ja3MxOworICAgIG1fb2xkR2VuLmZy
b21TcGFjZSA9ICZtX29sZEdlbi5ibG9ja3MyOwogICAgIAorICAgIG1fbmV3R2VuLnRvU3BhY2Ug
PSAmbV9uZXdHZW4uYmxvY2tzMTsKKyAgICBtX25ld0dlbi5mcm9tU3BhY2UgPSAmbV9uZXdHZW4u
YmxvY2tzMjsKKwogICAgIGFsbG9jYXRlQmxvY2soKTsKIH0gICAKIApAQCAtODMsOSArMTAwLDEw
IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZU8KICAgICBBU1NFUlQo
aXNPdmVyc2l6ZShieXRlcykpOwogICAgIAogICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGll
ZEJsb2NrOjpjcmVhdGUobV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFsbG9jYXRlQ3VzdG9tU2l6
ZShzaXplb2YoQ29waWVkQmxvY2spICsgYnl0ZXMsIENvcGllZEJsb2NrOjpibG9ja1NpemUpKTsK
LSAgICBtX292ZXJzaXplQmxvY2tzLnB1c2goYmxvY2spOwotICAgIG1fYmxvY2tGaWx0ZXIuYWRk
KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKKyAgICBtX25ld0dlbi5vdmVyc2l6ZUJs
b2Nrcy5wdXNoKGJsb2NrKTsKKyAgICBtX25ld0dlbi5ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnBy
ZXRfY2FzdDxCaXRzPihibG9jaykpOwogICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKKyAgICBB
U1NFUlQoIWJsb2NrLT5pc09sZCgpKTsKICAgICAKICAgICBDb3BpZWRBbGxvY2F0b3IgYWxsb2Nh
dG9yOwogICAgIGFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxvY2spOwpAQCAtMTM4LDcgKzE1
NiwxMCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0CiAKICAgICBD
b3BpZWRCbG9jayogb2xkQmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iob2xkUHRyKTsKICAg
ICBpZiAob2xkQmxvY2stPmlzT3ZlcnNpemUoKSkgewotICAgICAgICBtX292ZXJzaXplQmxvY2tz
LnJlbW92ZShvbGRCbG9jayk7CisgICAgICAgIGlmIChvbGRCbG9jay0+aXNPbGQoKSkKKyAgICAg
ICAgICAgIG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLnJlbW92ZShvbGRCbG9jayk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLnJlbW92ZShvbGRCbG9j
ayk7CiAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKG9sZEJsb2NrKTsKICAgICAgICAgbV9oZWFw
LT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGVDdXN0b21TaXplKENvcGllZEJsb2NrOjpkZXN0
cm95KG9sZEJsb2NrKSk7CiAgICAgfQpAQCAtMTY1LDEwICsxODYsMTEgQEAgdm9pZCBDb3BpZWRT
cGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIGJsb2NrLT56ZXJvRmlsbFdpbGRlcm5l
c3MoKTsKIAogICAgIHsKKyAgICAgICAgLy8gQWx3YXlzIHB1dCB0aGUgYmxvY2sgaW50byB0aGUg
b2xkIGdlbiBiZWNhdXNlIGl0J3MgYmVpbmcgcHJvbW90ZWQhCiAgICAgICAgIFNwaW5Mb2NrSG9s
ZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7Ci0gICAgICAgIG1fdG9TcGFjZS0+cHVzaChibG9j
ayk7CisgICAgICAgIG1fb2xkR2VuLnRvU3BhY2UtPnB1c2goYmxvY2spOwogICAgICAgICBtX2Js
b2NrU2V0LmFkZChibG9jayk7Ci0gICAgICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8Qml0cz4oYmxvY2spKTsKKyAgICAgICAgbV9vbGRHZW4uYmxvY2tGaWx0ZXIuYWRkKHJl
aW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICB9CiAKICAgICB7CkBAIC0xODEsNTIg
KzIwMywxNyBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllCiAgICAg
fQogfQogCi12b2lkIENvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZygpCit2b2lkIENvcGllZFNw
YWNlOjpkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCkKIHsKLSAgICBzdGQ6OnN3YXAobV9mcm9tU3Bh
Y2UsIG1fdG9TcGFjZSk7Ci0KLSAgICBtX2Jsb2NrRmlsdGVyLnJlc2V0KCk7Ci0gICAgbV9hbGxv
Y2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKLQotICAgIENvcGllZEJsb2NrKiBuZXh0ID0gMDsK
LSAgICBzaXplX3QgdG90YWxMaXZlQnl0ZXMgPSAwOwotICAgIHNpemVfdCB0b3RhbFVzYWJsZUJ5
dGVzID0gMDsKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fZnJvbVNwYWNlLT5oZWFk
KCk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IGJsb2NrLT5uZXh0KCk7
Ci0gICAgICAgIGlmICghYmxvY2stPmlzUGlubmVkKCkgJiYgYmxvY2stPmNhbkJlUmVjeWNsZWQo
KSkgewotICAgICAgICAgICAgcmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHRvdGFsTGl2ZUJ5dGVzICs9IGJsb2Nr
LT5saXZlQnl0ZXMoKTsKLSAgICAgICAgdG90YWxVc2FibGVCeXRlcyArPSBibG9jay0+cGF5bG9h
ZENhcGFjaXR5KCk7Ci0gICAgfQorICAgIEFTU0VSVChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jl
c3MoKSA9PSBGdWxsQ29sbGVjdGlvbik7CisgICAgQVNTRVJUKG1fb2xkR2VuLmZyb21TcGFjZS0+
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9uZXdHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOwog
Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7Ci0gICAg
d2hpbGUgKGJsb2NrKSB7Ci0gICAgICAgIENvcGllZEJsb2NrKiBuZXh0ID0gYmxvY2stPm5leHQo
KTsKLSAgICAgICAgaWYgKGJsb2NrLT5pc1Bpbm5lZCgpKSB7Ci0gICAgICAgICAgICBtX2Jsb2Nr
RmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7Ci0gICAgICAgICAgICB0
b3RhbExpdmVCeXRlcyArPSBibG9jay0+cGF5bG9hZENhcGFjaXR5KCk7Ci0gICAgICAgICAgICB0
b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKLSAgICAgICAgICAg
IGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1f
b3ZlcnNpemVCbG9ja3MucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIG1fYmxvY2tTZXQucmVt
b3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9j
YXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9jaykpOwotICAgICAgICB9IAot
ICAgICAgICBibG9jayA9IG5leHQ7Ci0gICAgfQotCi0gICAgZG91YmxlIG1hcmtlZFNwYWNlQnl0
ZXMgPSBtX2hlYXAtPm9iamVjdFNwYWNlKCkuY2FwYWNpdHkoKTsKLSAgICBkb3VibGUgdG90YWxG
cmFnbWVudGF0aW9uID0gKChkb3VibGUpdG90YWxMaXZlQnl0ZXMgKyBtYXJrZWRTcGFjZUJ5dGVz
KSAvICgoZG91YmxlKXRvdGFsVXNhYmxlQnl0ZXMgKyBtYXJrZWRTcGFjZUJ5dGVzKTsKLSAgICBt
X3Nob3VsZERvQ29weVBoYXNlID0gdG90YWxGcmFnbWVudGF0aW9uIDw9IE9wdGlvbnM6Om1pbkhl
YXBVdGlsaXphdGlvbigpOwotICAgIGlmICghbV9zaG91bGREb0NvcHlQaGFzZSkKLSAgICAgICAg
cmV0dXJuOworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4udG9TcGFjZS0+
aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBibG9jay0+ZGlk
U3Vydml2ZUdDKCk7CiAKLSAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFzZSk7Ci0gICAgQVNT
RVJUKCFtX2luQ29weWluZ1BoYXNlKTsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9j
a3MpOwotICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworICAgIGZvciAoQ29waWVkQmxvY2sq
IGJsb2NrID0gbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBi
bG9jay0+bmV4dCgpKQorICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7CiB9CiAKIHZvaWQg
Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKCkKQEAgLTI0MCwyMSArMjI3LDM1IEBAIHZvaWQgQ29w
aWVkU3BhY2U6OmRvbmVDb3B5aW5nKCkKICAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBt
X3Nob3VsZERvQ29weVBoYXNlKTsKICAgICBtX2luQ29weWluZ1BoYXNlID0gZmFsc2U7CiAKLSAg
ICB3aGlsZSAoIW1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ29waWVkQmxvY2sq
IGJsb2NrID0gbV9mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKTsKLSAgICAgICAgLy8gQWxsIG5vbi1w
aW5uZWQgYmxvY2tzIGluIGZyb20tc3BhY2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNsYWltZWQgYXMg
dGhleSB3ZXJlIGV2YWN1YXRlZC4KLSAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1Bpbm5lZCgpIHx8
ICFtX3Nob3VsZERvQ29weVBoYXNlKTsKLSAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOwor
ICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiB0b1NwYWNlLCAqZnJvbVNwYWNlOwor
ICAgIFRpbnlCbG9vbUZpbHRlciogYmxvY2tGaWx0ZXI7CisgICAgaWYgKGhlYXAoKS0+b3BlcmF0
aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uKSB7CisgICAgICAgIHRvU3BhY2UgPSBt
X29sZEdlbi50b1NwYWNlOworICAgICAgICBmcm9tU3BhY2UgPSBtX29sZEdlbi5mcm9tU3BhY2U7
CisgICAgICAgIGJsb2NrRmlsdGVyID0gJm1fb2xkR2VuLmJsb2NrRmlsdGVyOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHRvU3BhY2UgPSBtX25ld0dlbi50b1NwYWNlOworICAgICAgICBmcm9tU3Bh
Y2UgPSBtX25ld0dlbi5mcm9tU3BhY2U7CisgICAgICAgIGJsb2NrRmlsdGVyID0gJm1fbmV3R2Vu
LmJsb2NrRmlsdGVyOworICAgIH0KKworICAgIHdoaWxlICghZnJvbVNwYWNlLT5pc0VtcHR5KCkp
IHsKKyAgICAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCk7
CiAgICAgICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1
c2UgaXQgd2FzIG5ldmVyIHJlbW92ZWQuCiAgICAgICAgIEFTU0VSVChtX2Jsb2NrU2V0LmNvbnRh
aW5zKGJsb2NrKSk7Ci0gICAgICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8
Qml0cz4oYmxvY2spKTsKLSAgICAgICAgbV90b1NwYWNlLT5wdXNoKGJsb2NrKTsKKyAgICAgICAg
YmxvY2tGaWx0ZXItPmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CisgICAgICAg
IHRvU3BhY2UtPnB1c2goYmxvY2spOworICAgIH0KKworICAgIGlmIChoZWFwKCktPm9wZXJhdGlv
bkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAgICBtX29sZEdlbi50b1Nw
YWNlLT5jb25jYXQoKm1fbmV3R2VuLnRvU3BhY2UpOworICAgICAgICBtX29sZEdlbi5vdmVyc2l6
ZUJsb2Nrcy5jb25jYXQobV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MpOworICAgICAgICBtX29sZEdl
bi5ibG9ja0ZpbHRlci5hZGQobV9uZXdHZW4uYmxvY2tGaWx0ZXIpOworICAgICAgICBtX25ld0dl
bi5ibG9ja0ZpbHRlci5yZXNldCgpOwogICAgIH0KIAotICAgIGlmICghbV90b1NwYWNlLT5oZWFk
KCkpCi0gICAgICAgIGFsbG9jYXRlQmxvY2soKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYWxsb2Nh
dG9yLnNldEN1cnJlbnRCbG9jayhtX3RvU3BhY2UtPmhlYWQoKSk7CisgICAgQVNTRVJUKG1fbmV3
R2VuLnRvU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgYWxsb2NhdGVCbG9jaygpOwogCiAgICAgbV9z
aG91bGREb0NvcHlQaGFzZSA9IGZhbHNlOwogfQpAQCAtMjYzLDEzICsyNjQsMjIgQEAgc2l6ZV90
IENvcGllZFNwYWNlOjpzaXplKCkKIHsKICAgICBzaXplX3QgY2FsY3VsYXRlZFNpemUgPSAwOwog
Ci0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX3RvU3BhY2UtPmhlYWQoKTsgYmxvY2s7
IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1f
b2xkR2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAg
ICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKKworICAgIGZvciAoQ29waWVk
QmxvY2sqIGJsb2NrID0gbV9vbGRHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9
IGJsb2NrLT5uZXh0KCkpCiAgICAgICAgIGNhbGN1bGF0ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7
CiAKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fZnJvbVNwYWNlLT5oZWFkKCk7IGJs
b2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sg
PSBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5u
ZXh0KCkpCiAgICAgICAgIGNhbGN1bGF0ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7CiAKLSAgICBm
b3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsg
YmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9u
ZXdHZW4udG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAg
ICAgICBjYWxjdWxhdGVkU2l6ZSArPSBibG9jay0+c2l6ZSgpOworCisgICAgZm9yIChDb3BpZWRC
bG9jayogYmxvY2sgPSBtX25ld0dlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0g
YmxvY2stPm5leHQoKSkKKyAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsK
KworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3Mu
aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxhdGVk
U2l6ZSArPSBibG9jay0+c2l6ZSgpOwogCiAgICAgcmV0dXJuIGNhbGN1bGF0ZWRTaXplOwpAQCAt
Mjc5LDEzICsyODksMjIgQEAgc2l6ZV90IENvcGllZFNwYWNlOjpjYXBhY2l0eSgpCiB7CiAgICAg
c2l6ZV90IGNhbGN1bGF0ZWRDYXBhY2l0eSA9IDA7CiAKLSAgICBmb3IgKENvcGllZEJsb2NrKiBi
bG9jayA9IG1fdG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQor
ICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4udG9TcGFjZS0+aGVhZCgpOyBi
bG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkg
Kz0gYmxvY2stPmNhcGFjaXR5KCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1f
b2xkR2VuLmZyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQor
ICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisKKyAgICBm
b3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsg
YmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5
ICs9IGJsb2NrLT5jYXBhY2l0eSgpOwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBt
X2Zyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgIGZv
ciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4udG9TcGFjZS0+aGVhZCgpOyBibG9jazsg
YmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxv
Y2stPmNhcGFjaXR5KCk7CiAKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb3ZlcnNp
emVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgIGZvciAo
Q29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBi
bG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSArPSBibG9j
ay0+Y2FwYWNpdHkoKTsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4u
b3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAg
ICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7CiAKICAgICByZXR1
cm4gY2FsY3VsYXRlZENhcGFjaXR5OwpAQCAtMzExLDkgKzMzMCw1MiBAQCBzdGF0aWMgYm9vbCBp
c0Jsb2NrTGlzdFBhZ2VkT3V0KGRvdWJsZSBkCiAKIGJvb2wgQ29waWVkU3BhY2U6OmlzUGFnZWRP
dXQoZG91YmxlIGRlYWRsaW5lKQogewotICAgIHJldHVybiBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRl
YWRsaW5lLCBtX3RvU3BhY2UpIAotICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRs
aW5lLCBtX2Zyb21TcGFjZSkgCi0gICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxp
bmUsICZtX292ZXJzaXplQmxvY2tzKTsKKyAgICByZXR1cm4gaXNCbG9ja0xpc3RQYWdlZE91dChk
ZWFkbGluZSwgbV9vbGRHZW4udG9TcGFjZSkgCisgICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRP
dXQoZGVhZGxpbmUsIG1fb2xkR2VuLmZyb21TcGFjZSkgCisgICAgICAgIHx8IGlzQmxvY2tMaXN0
UGFnZWRPdXQoZGVhZGxpbmUsICZtX29sZEdlbi5vdmVyc2l6ZUJsb2NrcykKKyAgICAgICAgfHwg
aXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV9uZXdHZW4udG9TcGFjZSkgCisgICAgICAg
IHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fbmV3R2VuLmZyb21TcGFjZSkgCisg
ICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsICZtX25ld0dlbi5vdmVyc2l6
ZUJsb2Nrcyk7Cit9CisKK3ZvaWQgQ29waWVkU3BhY2U6OndpbGxBYmFuZG9uU3RvcmFnZSh2b2lk
KiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ29waWVkQmxvY2sqIG9sZEJsb2NrID0gYmxvY2tGb3IocHRyKTsKKworICAgIGlmIChv
bGRCbG9jay0+aXNPdmVyc2l6ZSgpKSB7CisgICAgICAgIG9sZEJsb2NrLT51bnBpbigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlIGJsb2NrIGlzIG9sZCAoaS5lLiBp
dCBoYXMgYWxyZWFkeSBiZWVuIHRocm91Z2ggYXQgbGVhc3Qgb25lIGNvbGxlY3Rpb24pCisgICAg
Ly8gdGhlbiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgYnl0ZXMgd2UgYWxsb2NhdGVkIGhlcmUgcHJl
dmlvdXNseSBzbyB0aGF0IHRoZSBibG9jaydzCisgICAgLy8gbV9saXZlQnl0ZXMgY291bnQgcmVt
YWlucyBhY2N1cmF0ZSBhY3Jvc3MgRWRlbkNvbGxlY3Rpb25zLiAKKyAgICAvLworICAgIC8vIEFk
ZGl0aW9uYWxseSwgaWYgdGhlIGJsb2NrIGlzIHRoZSBibG9jayB0aGF0IGlzIGN1cnJlbnRseSBi
ZWluZyBhbGxvY2F0ZWQgb3V0IG9mLCAKKyAgICAvLyB3ZSBuZWVkIHRvIHN1YnRyYWN0IHRoZSBi
eXRlcyBmcm9tIHRoZSBibG9jayBpbiBjYXNlIHdlIGVuZCB1cCByZWFsbG9jLWluZyBpbiB0aGUg
CisgICAgLy8gc2FtZSBibG9jay4gCisgICAgaWYgKG9sZEJsb2NrLT5pc09sZCgpIHx8IG9sZEJs
b2NrID09IG1fYWxsb2NhdG9yLmN1cnJlbnRCbG9jaygpKQorICAgICAgICBvbGRCbG9jay0+ZGlk
RXZhY3VhdGVCeXRlcyhieXRlcyk7Cit9CisKK3ZvaWQgQ29waWVkU3BhY2U6OmRpZEFzc2lnblN0
b3JhZ2Uodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKHB0cik7CisgICAg
Q29waWVkQmxvY2sqIG5ld0Jsb2NrID0gYmxvY2tGb3IocHRyKTsKKworICAgIGlmIChuZXdCbG9j
ay0+aXNPdmVyc2l6ZSgpKSB7CisgICAgICAgIG5ld0Jsb2NrLT5waW4oKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gbm90aWZ5IHRoZSBibG9jayBvZiBhZGRp
dGlvbmFsIGxpdmUgYnl0ZXMgaW4gY2FzZSBvdXIgbmV4dCBjb2xsZWN0aW9uIAorICAgIC8vIGlz
IGFuIEVkZW5Db2xsZWN0aW9uLiBUaGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiBh
c3NpZ25pbmcgQ29waWVkU3BhY2UKKyAgICAvLyBhbGxvY2F0aW9ucyB0byBvbGQtZ2VuZXJhdGlv
biBvYmplY3RzLCBiZWNhdXNlIHdlIHdvbid0IHJlcG9ydCB0aGVzZSBuZXcgYnl0ZXMgaW4gdGhl
IAorICAgIC8vIENvcGllZEJsb2NrIGR1cmluZyBtYXJraW5nIG9mIGFuIEVkZW5Db2xsZWN0aW9u
LgorICAgIG5ld0Jsb2NrLT5yZXBvcnRMaXZlQnl0ZXNEdXJpbmdXcml0ZUJhcnJpZXIoYnl0ZXMp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuaAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiQ29waWVkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSGVhcEJsb2NrLmgiCisj
aW5jbHVkZSAiSGVhcE9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRCb29sZWFu
Lmg+CkBAIC02MCw2ICs2MSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBDb3BpZWRBbGxvY2F0b3Im
IGFsbG9jYXRvcigpIHsgcmV0dXJuIG1fYWxsb2NhdG9yOyB9CiAKKyAgICB2b2lkIGRpZFN0YXJ0
RnVsbENvbGxlY3Rpb24oKTsKKworICAgIHRlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rp
b25UeXBlPgogICAgIHZvaWQgc3RhcnRlZENvcHlpbmcoKTsKICAgICB2b2lkIGRvbmVDb3B5aW5n
KCk7CiAgICAgYm9vbCBpc0luQ29weVBoYXNlKCkgeyByZXR1cm4gbV9pbkNvcHlpbmdQaGFzZTsg
fQpAQCAtODAsNiArODQsMTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBi
bG9ja0Zvcih2b2lkKik7CiAKKyAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV9oZWFw
OyB9CisKKyAgICB2b2lkIGNvcHlXcml0ZUJhcnJpZXIodm9pZCogb2xkUHRyLCBzaXplX3Qgb2xk
U2l6ZSk7CisgICAgdm9pZCB3aWxsQWJhbmRvblN0b3JhZ2Uodm9pZCogb2xkUHRyLCBzaXplX3Qg
b2xkU2l6ZSk7CisgICAgdm9pZCBkaWRBc3NpZ25TdG9yYWdlKHZvaWQqIG5ld1B0ciwgc2l6ZV90
IG5ld1NpemUpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzT3ZlcnNpemUoc2l6ZV90
KTsKIApAQCAtOTEsNiArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBDb3BpZWRCbG9jayogYWxsb2Nh
dGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOwogCiAgICAgdm9pZCBkb25lRmlsbGluZ0Jsb2NrKENv
cGllZEJsb2NrKiwgQ29waWVkQmxvY2sqKik7CisgICAgdGVtcGxhdGUgPEhlYXBPcGVyYXRpb24g
Y29sbGVjdGlvblR5cGU+CiAgICAgdm9pZCByZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxv
Y2sqKTsKICAgICB2b2lkIHJlY3ljbGVCb3Jyb3dlZEJsb2NrKENvcGllZEJsb2NrKik7CiAKQEAg
LTk4LDE3ICsxMDksMjkgQEAgcHJpdmF0ZToKIAogICAgIENvcGllZEFsbG9jYXRvciBtX2FsbG9j
YXRvcjsKIAotICAgIFRpbnlCbG9vbUZpbHRlciBtX2Jsb2NrRmlsdGVyOwogICAgIEhhc2hTZXQ8
Q29waWVkQmxvY2sqPiBtX2Jsb2NrU2V0OwogCiAgICAgU3BpbkxvY2sgbV90b1NwYWNlTG9jazsK
IAotICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBtX3RvU3BhY2U7Ci0gICAgRG91
Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIG1fZnJvbVNwYWNlOwotICAgIAotICAgIERvdWJs
eUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+IG1fYmxvY2tzMTsKLSAgICBEb3VibHlMaW5rZWRMaXN0
PENvcGllZEJsb2NrPiBtX2Jsb2NrczI7Ci0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9j
az4gbV9vdmVyc2l6ZUJsb2NrczsKKyAgICBzdHJ1Y3QgQ29waWVkR2VuZXJhdGlvbiB7CisgICAg
ICAgIENvcGllZEdlbmVyYXRpb24oKQorICAgICAgICAgICAgOiB0b1NwYWNlKDApCisgICAgICAg
ICAgICAsIGZyb21TcGFjZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBEb3Vi
bHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogdG9TcGFjZTsKKyAgICAgICAgRG91Ymx5TGlua2Vk
TGlzdDxDb3BpZWRCbG9jaz4qIGZyb21TcGFjZTsKKyAgICAgICAgCisgICAgICAgIERvdWJseUxp
bmtlZExpc3Q8Q29waWVkQmxvY2s+IGJsb2NrczE7CisgICAgICAgIERvdWJseUxpbmtlZExpc3Q8
Q29waWVkQmxvY2s+IGJsb2NrczI7CisgICAgICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxv
Y2s+IG92ZXJzaXplQmxvY2tzOworCisgICAgICAgIFRpbnlCbG9vbUZpbHRlciBibG9ja0ZpbHRl
cjsKKyAgICB9OworCisgICAgQ29waWVkR2VuZXJhdGlvbiBtX29sZEdlbjsKKyAgICBDb3BpZWRH
ZW5lcmF0aW9uIG1fbmV3R2VuOwogICAgCiAgICAgYm9vbCBtX2luQ29weWluZ1BoYXNlOwogICAg
IGJvb2wgbV9zaG91bGREb0NvcHlQaGFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIGJvb2wgQ29waWVk
U3BhY2U6OmNvbnRhaW5zKENvcGllZEJsb2NrKiBibG9jaykKIHsKLSAgICByZXR1cm4gIW1fYmxv
Y2tGaWx0ZXIucnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSkgJiYgbV9ibG9j
a1NldC5jb250YWlucyhibG9jayk7CisgICAgcmV0dXJuICghbV9uZXdHZW4uYmxvY2tGaWx0ZXIu
cnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSkgCisgICAgICAgICAgICB8fCAh
bV9vbGRHZW4uYmxvY2tGaWx0ZXIucnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2Nr
KSkpCisgICAgICAgICYmIG1fYmxvY2tTZXQuY29udGFpbnMoYmxvY2spOwogfQogCiBpbmxpbmUg
Ym9vbCBDb3BpZWRTcGFjZTo6Y29udGFpbnModm9pZCogcHRyLCBDb3BpZWRCbG9jayomIHJlc3Vs
dCkKQEAgLTkyLDYgKzk0LDcgQEAgaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnBpbklmTmVjZXNz
YXJ5KAogICAgICAgICBwaW4oYmxvY2spOwogfQogCit0ZW1wbGF0ZSA8SGVhcE9wZXJhdGlvbiBj
b2xsZWN0aW9uVHlwZT4KIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewogICAgIEFTU0VSVChibG9jayk7CkBAIC0xMDAs
NyArMTAzLDEwIEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGUKICAg
ICB7CiAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7CiAgICAg
ICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgbV9mcm9tU3BhY2UtPnJlbW92
ZShibG9jayk7CisgICAgICAgIGlmIChjb2xsZWN0aW9uVHlwZSA9PSBFZGVuQ29sbGVjdGlvbikK
KyAgICAgICAgICAgIG1fbmV3R2VuLmZyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9vbGRHZW4uZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOwogICAg
IH0KICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6
ZGVzdHJveShibG9jaykpOwogfQpAQCAtMTQxLDggKzE0Nyw4IEBAIGlubGluZSB2b2lkIENvcGll
ZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKICAgICAKICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBD
b3BpZWRCbG9jazo6Y3JlYXRlKG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5hbGxvY2F0ZTxDb3Bp
ZWRCbG9jaz4oKSk7CiAgICAgICAgIAotICAgIG1fdG9TcGFjZS0+cHVzaChibG9jayk7Ci0gICAg
bV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOworICAgIG1f
bmV3R2VuLnRvU3BhY2UtPnB1c2goYmxvY2spOworICAgIG1fbmV3R2VuLmJsb2NrRmlsdGVyLmFk
ZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CiAgICAgbV9ibG9ja1NldC5hZGQoYmxv
Y2spOwogICAgIG1fYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhibG9jayk7CiB9CkBAIC0xNzMs
NiArMTc5LDgxIEBAIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmJsb2NrRm8KICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb3BpZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8
c2l6ZV90PihwdHIpICYgc19ibG9ja01hc2spOwogfQogCit0ZW1wbGF0ZSA8SGVhcE9wZXJhdGlv
biBjb2xsZWN0aW9uVHlwZT4KK2lubGluZSB2b2lkIENvcGllZFNwYWNlOjpzdGFydGVkQ29weWlu
ZygpCit7CisgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIHRvU3BhY2UsICpmcm9t
U3BhY2UsICpvdmVyc2l6ZUJsb2NrczsKKyAgICBUaW55Qmxvb21GaWx0ZXIqIGJsb2NrRmlsdGVy
OworICAgIGlmIChjb2xsZWN0aW9uVHlwZSA9PSBGdWxsQ29sbGVjdGlvbikgeworICAgICAgICBB
U1NFUlQobV9vbGRHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQobV9u
ZXdHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOworCisgICAgICAgIG1fb2xkR2VuLnRvU3BhY2Ut
PmNvbmNhdCgqbV9uZXdHZW4udG9TcGFjZSk7CisgICAgICAgIG1fb2xkR2VuLm92ZXJzaXplQmxv
Y2tzLmNvbmNhdChtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcyk7CisKKyAgICAgICAgQVNTRVJUKG1f
bmV3R2VuLnRvU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtX25ld0dlbi5vdmVy
c2l6ZUJsb2Nrcy5pc0VtcHR5KCkpOworCisgICAgICAgIHN0ZDo6c3dhcChtX29sZEdlbi5mcm9t
U3BhY2UsIG1fb2xkR2VuLnRvU3BhY2UpOworICAgICAgICB0b1NwYWNlID0gbV9vbGRHZW4udG9T
cGFjZTsKKyAgICAgICAgZnJvbVNwYWNlID0gbV9vbGRHZW4uZnJvbVNwYWNlOworICAgICAgICBv
dmVyc2l6ZUJsb2NrcyA9ICZtX29sZEdlbi5vdmVyc2l6ZUJsb2NrczsKKyAgICAgICAgYmxvY2tG
aWx0ZXIgPSAmbV9vbGRHZW4uYmxvY2tGaWx0ZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3Rk
Ojpzd2FwKG1fbmV3R2VuLmZyb21TcGFjZSwgbV9uZXdHZW4udG9TcGFjZSk7CisgICAgICAgIHRv
U3BhY2UgPSBtX25ld0dlbi50b1NwYWNlOworICAgICAgICBmcm9tU3BhY2UgPSBtX25ld0dlbi5m
cm9tU3BhY2U7CisgICAgICAgIG92ZXJzaXplQmxvY2tzID0gJm1fbmV3R2VuLm92ZXJzaXplQmxv
Y2tzOworICAgICAgICBibG9ja0ZpbHRlciA9ICZtX25ld0dlbi5ibG9ja0ZpbHRlcjsKKyAgICB9
CisKKyAgICBibG9ja0ZpbHRlci0+cmVzZXQoKTsKKyAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJl
bnRCbG9jaygpOworCisgICAgQ29waWVkQmxvY2sqIG5leHQgPSAwOworICAgIHNpemVfdCB0b3Rh
bExpdmVCeXRlcyA9IDA7CisgICAgc2l6ZV90IHRvdGFsVXNhYmxlQnl0ZXMgPSAwOworICAgIC8v
IFRPRE86IE1ha2Ugc3VyZSB3ZSBhY2N1cmF0ZWx5IGtlZXAgdHJhY2sgb2YgdGhlIHRvdGFsIGxp
dmUgYnl0ZXMgZm9yIEVkZW5Db2xsZWN0aW9ucy4KKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9j
ayA9IGZyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBuZXh0KSB7CisgICAgICAgIG5l
eHQgPSBibG9jay0+bmV4dCgpOworICAgICAgICBpZiAoIWJsb2NrLT5pc1Bpbm5lZCgpICYmIGJs
b2NrLT5jYW5CZVJlY3ljbGVkKCkpIHsKKyAgICAgICAgICAgIHJlY3ljbGVFdmFjdWF0ZWRCbG9j
azxjb2xsZWN0aW9uVHlwZT4oYmxvY2spOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgQVNTRVJUKGJsb2NrLT5saXZlQnl0ZXMoKSA8PSBDb3BpZWRCbG9jazo6Ymxv
Y2tTaXplKTsKKyAgICAgICAgdG90YWxMaXZlQnl0ZXMgKz0gYmxvY2stPmxpdmVCeXRlcygpOwor
ICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAg
ICAgICAgYmxvY2stPmRpZFByb21vdGUoKTsKKyAgICB9CisKKyAgICBDb3BpZWRCbG9jayogYmxv
Y2sgPSBvdmVyc2l6ZUJsb2Nrcy0+aGVhZCgpOworICAgIHdoaWxlIChibG9jaykgeworICAgICAg
ICBDb3BpZWRCbG9jayogbmV4dCA9IGJsb2NrLT5uZXh0KCk7CisgICAgICAgIGlmIChibG9jay0+
aXNQaW5uZWQoKSkgeworICAgICAgICAgICAgYmxvY2tGaWx0ZXItPmFkZChyZWludGVycHJldF9j
YXN0PEJpdHM+KGJsb2NrKSk7CisgICAgICAgICAgICB0b3RhbExpdmVCeXRlcyArPSBibG9jay0+
cGF5bG9hZENhcGFjaXR5KCk7CisgICAgICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2Nr
LT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAgICAgICAgICAgIGJsb2NrLT5kaWRQcm9tb3RlKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdmVyc2l6ZUJsb2Nrcy0+cmVtb3ZlKGJsb2Nr
KTsKKyAgICAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgICAgIG1f
aGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6
ZGVzdHJveShibG9jaykpOworICAgICAgICB9IAorICAgICAgICBibG9jayA9IG5leHQ7CisgICAg
fQorCisgICAgZG91YmxlIG1hcmtlZFNwYWNlQnl0ZXMgPSBtX2hlYXAtPm9iamVjdFNwYWNlKCku
Y2FwYWNpdHkoKTsKKyAgICBkb3VibGUgdG90YWxGcmFnbWVudGF0aW9uID0gKChkb3VibGUpdG90
YWxMaXZlQnl0ZXMgKyBtYXJrZWRTcGFjZUJ5dGVzKSAvICgoZG91YmxlKXRvdGFsVXNhYmxlQnl0
ZXMgKyBtYXJrZWRTcGFjZUJ5dGVzKTsKKyAgICBtX3Nob3VsZERvQ29weVBoYXNlID0gLyptX2hl
YXAtPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiB8fCAqL3RvdGFsRnJh
Z21lbnRhdGlvbiA8PSBPcHRpb25zOjptaW5IZWFwVXRpbGl6YXRpb24oKTsKKyAgICBpZiAoIW1f
c2hvdWxkRG9Db3B5UGhhc2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3Nob3Vs
ZERvQ29weVBoYXNlKTsKKyAgICBBU1NFUlQoIW1faW5Db3B5aW5nUGhhc2UpOworICAgIEFTU0VS
VCghbV9udW1iZXJPZkxvYW5lZEJsb2Nrcyk7CisgICAgbV9pbkNvcHlpbmdQaGFzZSA9IHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQ29waWVkU3BhY2VJbmxpbmVz
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJl
dmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTAgQEAgdm9pZCBDb3B5VmlzaXRvcjo6
Y29weUZyb21TaGFyZWQoKQogICAgICAgICAgICAgICAgIHZpc2l0SXRlbSgqaXQpOwogCiAgICAg
ICAgICAgICBBU1NFUlQoIWJsb2NrLT5saXZlQnl0ZXMoKSk7Ci0gICAgICAgICAgICBtX3NoYXJl
ZC5tX2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworICAgICAgICAg
ICAgaWYgKG1fc2hhcmVkLm1fdm0tPmhlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5D
b2xsZWN0aW9uKQorICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnJlY3lj
bGVFdmFjdWF0ZWRCbG9jazxFZGVuQ29sbGVjdGlvbj4oYmxvY2spOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnJlY3ljbGVFdmFjdWF0
ZWRCbG9jazxGdWxsQ29sbGVjdGlvbj4oYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIG1fc2hh
cmVkLmdldE5leHRCbG9ja3NUb0NvcHkobmV4dCwgZW5kKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24g
MTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgaW5saW5lIGJvb2wgQ29weVZpc2l0
b3I6OmNoZWNrSWZTaG91bGRDbwogaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5l
d1NwYWNlKHNpemVfdCBieXRlcykKIHsKICAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBDb21waWxl
cnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4KLSAgICBpZiAoTElL
RUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KSkpCisgICAg
aWYgKExJS0VMWShtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoYnl0
ZXMsICZyZXN1bHQpKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICByZXN1bHQg
PSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7CkBAIC03MCw3ICs3MCw3IEBAIGlubGluZSB2
b2lkKiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGEKICAgICBtX2NvcGllZEFsbG9jYXRvci5z
ZXRDdXJyZW50QmxvY2sobmV3QmxvY2spOwogCiAgICAgdm9pZCogcmVzdWx0ID0gMDsKLSAgICBD
aGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUo
Ynl0ZXMsICZyZXN1bHQpOworICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGll
ZEFsbG9jYXRvci50cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoYnl0ZXMsICZyZXN1bHQpOwogICAg
IEFTU0VSVChkaWRTdWNjZWVkKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCShyZXZp
c2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJl
ZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgxLDMxIEBAIHZvaWQgR0NUaHJl
YWRTaGFyZWREYXRhOjpkaWRTdGFydENvcHlpbmcKIHsKICAgICB7CiAgICAgICAgIFNwaW5Mb2Nr
SG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7Ci0gICAgICAgIFdURjo6Y29weVRvVmVjdG9yKG1f
Y29waWVkU3BhY2UtPm1fYmxvY2tTZXQsIG1fYmxvY2tzVG9Db3B5KTsKKyAgICAgICAgaWYgKG1f
dm0tPmhlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgICAgICAgICBDb3BpZWRCbG9jayogYmxv
Y2sgPSBtX2NvcGllZFNwYWNlLT5tX25ld0dlbi5mcm9tU3BhY2UtPmhlYWQoKTsgCisgICAgICAg
ICAgICB3aGlsZSAoYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9ibG9j
a3NUb0NvcHkuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBtX2Jsb2Nrc1RvQ29weVtpbmRleCsrXSA9IGJsb2NrOyAKKyAgICAgICAgICAgICAgICBi
bG9jayA9IGJsb2NrLT5uZXh0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdl
IGRvIHRoZSByZXNpemUgaGVyZSBpbnN0ZWFkIG9mIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBiZWNh
dXNlIGl0J3MKKyAgICAgICAgICAgIC8vIE8obikgdG8gZ2V0IHRoZSBsZW5ndGggb2YgdGhlIGxp
bmtlZCBsaXN0IG9mIGJsb2Nrcy4KKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgbV9ibG9ja3NUb0NvcHkucmVzaXplKGluZGV4KTsKKworICAgICAgICAgICAgLy8gSWYg
d2UgZXhoYXVzdGVkIHRoZSBwcmUtZXhpc3RpbmcgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IgdGhlbiBz
dGFydAorICAgICAgICAgICAgLy8gYXBwZW5kaW5nIHRvIHRoZSBlbmQgb2YgaXQuCisgICAgICAg
ICAgICB3aGlsZSAoYmxvY2spIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weS5hcHBl
bmQoYmxvY2spOworICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2stPm5leHQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3ZtLT5oZWFw
Lm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbik7CisgICAgICAgICAgICBX
VEY6OmNvcHlUb1ZlY3RvcihtX2NvcGllZFNwYWNlLT5tX2Jsb2NrU2V0LCBtX2Jsb2Nrc1RvQ29w
eSk7CisgICAgICAgIH0KICAgICAgICAgbV9jb3B5SW5kZXggPSAwOwogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBAIG5hbWVzcGFjZSB7IAogc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUhlYXBTaXplID0g
MzIgKiBNQjsgLy8gQWJvdXQgMS41WCB0aGUgYXZlcmFnZSB3ZWJwYWdlLgogc3RhdGljIGNvbnN0
IHNpemVfdCBzbWFsbEhlYXBTaXplID0gMSAqIE1COyAvLyBNYXRjaGVzIHRoZSBGYXN0TWFsbG9j
IHBlci10aHJlYWQgY2FjaGUuCiAKLSNkZWZpbmUgRU5BQkxFX0dDX0xPR0dJTkcgMAorI2RlZmlu
ZSBFTkFCTEVfR0NfTE9HR0lORyAxCiAKICNpZiBFTkFCTEUoR0NfTE9HR0lORykKICNpZiBDT01Q
SUxFUihDTEFORykKQEAgLTE1Miw2ICsxNTIsMTAgQEAgc3RydWN0IEdDQ291bnRlciB7CiAjZGVm
aW5lIEdDQ09VTlRFUihuYW1lLCB2YWx1ZSkgZG8geyB9IHdoaWxlIChmYWxzZSkKICNlbmRpZgog
CisjdW5kZWYgRU5BQkxFX0dDX0xPR0dJTkcKKworI2RlZmluZSBFTkFCTEVfR0VORVJBVElPTkFM
X0NPTExFQ1RPUiAxCisKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1pbkhlYXBTaXplKEhlYXBUeXBl
IGhlYXBUeXBlLCBzaXplX3QgcmFtU2l6ZSkKIHsKICAgICBpZiAoaGVhcFR5cGUgPT0gTGFyZ2VI
ZWFwKQpAQCAtMTYzLDcgKzE2NywxMSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBwcm9wb3J0aW9u
YWxIZWFwU2l6CiB7CiAgICAgLy8gVHJ5IHRvIHN0YXkgdW5kZXIgMS8yIFJBTSBzaXplIHRvIGxl
YXZlIHJvb20gZm9yIHRoZSBET00sIHJlbmRlcmluZywgbmV0d29ya2luZywgZXRjLgogICAgIGlm
IChoZWFwU2l6ZSA8IHJhbVNpemUgLyA0KQorI2lmIEVOQUJMRShHRU5FUkFUSU9OQUxfQ09MTEVD
VE9SKQorICAgICAgICByZXR1cm4gMyAqIGhlYXBTaXplOworI2Vsc2UKICAgICAgICAgcmV0dXJu
IDIgKiBoZWFwU2l6ZTsKKyNlbmRpZgogICAgIGlmIChoZWFwU2l6ZSA8IHJhbVNpemUgLyAyKQog
ICAgICAgICByZXR1cm4gMS41ICogaGVhcFNpemU7CiAgICAgcmV0dXJuIDEuMjUgKiBoZWFwU2l6
ZTsKQEAgLTI1MSw5ICsyNTksMTUgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBU
eXBlKQogICAgICwgbV9yYW1TaXplKHJhbVNpemUoKSkKICAgICAsIG1fbWluQnl0ZXNQZXJDeWNs
ZShtaW5IZWFwU2l6ZShtX2hlYXBUeXBlLCBtX3JhbVNpemUpKQogICAgICwgbV9zaXplQWZ0ZXJM
YXN0Q29sbGVjdCgwKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZExpbWl0KG1fbWluQnl0ZXNQZXJD
eWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWQoMCkKLSAgICAsIG1fYnl0ZXNBYmFuZG9uZWQo
MCkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1fYnl0ZXNBYmFu
ZG9uZWRUaGlzQ3ljbGUoMCkKKy8qCisgICAgLCBtX2Z1bGxDb2xsZWN0VGhyZXNob2xkKG1fbWlu
Qnl0ZXNQZXJDeWNsZSkKKyAgICAsIG1fY29sbGVjdFRocmVzaG9sZCgwLjEgKiBtX2Z1bGxDb2xs
ZWN0VGhyZXNob2xkKQorKi8KKyAgICAsIG1fbWF4RWRlblNpemUobV9taW5CeXRlc1BlckN5Y2xl
KQorICAgICwgbV9tYXhIZWFwU2l6ZShtX21pbkJ5dGVzUGVyQ3ljbGUpCisgICAgLCBtX3Nob3Vs
ZERvRnVsbENvbGxlY3Rpb24oZmFsc2UpCiAgICAgLCBtX3RvdGFsQnl0ZXNWaXNpdGVkKDApCiAg
ICAgLCBtX3RvdGFsQnl0ZXNDb3BpZWQoMCkKICAgICAsIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyhO
b09wZXJhdGlvbikKQEAgLTMzMyw4ICszNDcsOCBAQCB2b2lkIEhlYXA6OnJlcG9ydEFiYW5kb25l
ZE9iamVjdEdyYXBoKCkKIAogdm9pZCBIZWFwOjpkaWRBYmFuZG9uKHNpemVfdCBieXRlcykKIHsK
LSAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWQgKyBt
X2J5dGVzQWJhbmRvbmVkKTsKLSAgICBtX2J5dGVzQWJhbmRvbmVkICs9IGJ5dGVzOworICAgIG1f
YWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAr
IG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUpOworICAgIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3lj
bGUgKz0gYnl0ZXM7CiB9CiAKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCkBAIC00ODcs
NiArNTAxLDE4IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB2aXNpdG9yLnNldHVwKCk7
CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKIAorLyoKKyAg
ICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAg
IEdDUEhBU0UoQWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVUb1JlbWVtYmVyZWRTZXQpOworICAg
ICAgICAvLyBXZSBuZWVkIHRvIHJlLXByb2Nlc3MgYWxsIG9sZC1nZW5lcmF0aW9uIGV4ZWN1dGFi
bGVzIHNvIHRoYXQgdGhleQorICAgICAgICAvLyB1cGRhdGUgdGhlaXIgQ29kZUJsb2Nrcy4KKyAg
ICAgICAgYWRkT2xkR2VuZXJhdGlvbkV4ZWN1dGFibGVzVG9SZW1lbWJlcmVkU2V0KCk7CisgICAg
fQorKi8KKworICAgIFZlY3Rvcjxjb25zdCBKU0NlbGwqPiByZW1lbWJlcmVkU2V0KG1fc2xvdFZp
c2l0b3IubWFya1N0YWNrKCkuc2l6ZSgpKTsKKyAgICBtX3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygp
LmZpbGxWZWN0b3IocmVtZW1iZXJlZFNldCk7CisKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9k
ZUVuYWJsZXIgZW5hYmxlcih2aXNpdG9yKTsKIApAQCAtNTkwLDYgKzYxNiwxNCBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cygpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB7CisgICAgICAgIEdDUEhB
U0UoQ2xlYXJSZW1lbWJlcmVkU2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlbWVtYmVyZWRTZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEpTQ2VsbCog
Y2VsbCA9IHJlbWVtYmVyZWRTZXRbaV07CisgICAgICAgICAgICBNYXJrZWRCbG9jazo6YmxvY2tG
b3IoY2VsbCktPmNsZWFyUmVtZW1iZXJlZChjZWxsKTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IEdDQ09VTlRFUihWaXNpdGVkVmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOwogCiAg
ICAgbV9zaGFyZWREYXRhLmRpZEZpbmlzaE1hcmtpbmcoKTsKQEAgLTYwMSw4ICs2MzUsMTQgQEAg
dm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIE1BUktfTE9HX01FU1NBR0UyKCJcbk51bWJlciBv
ZiBsaXZlIE9iamVjdHMgYWZ0ZXIgZnVsbCBHQyAlbHUsIHRvb2sgJS42ZiBzZWNzXG4iLCB2aXNp
dENvdW50LCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRpbWUp
OwogI2VuZGlmCiAKLSAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0gdmlzaXRvci5ieXRlc1Zpc2l0
ZWQoKTsKLSAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7Cisg
ICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAg
ICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IHZpc2l0b3IuYnl0ZXNWaXNpdGVkKCk7CisgICAgICAg
IG1fdG90YWxCeXRlc0NvcGllZCArPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlv
bik7CisgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSB2aXNpdG9yLmJ5dGVzVmlzaXRlZCgp
OworICAgICAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7Cisg
ICAgfQogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9
IG1fc2hhcmVkRGF0YS5jaGlsZEJ5dGVzVmlzaXRlZCgpOwogICAgIG1fdG90YWxCeXRlc0NvcGll
ZCArPSBtX3NoYXJlZERhdGEuY2hpbGRCeXRlc0NvcGllZCgpOwpAQCAtNjEzLDExICs2NTMsMTgg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIG1fc2hhcmVkRGF0YS5yZXNldENoaWxkcmVu
KCk7CiAjZW5kaWYKICAgICBtX3NoYXJlZERhdGEucmVzZXQoKTsKKworICAgIHsKKyAgICAgICAg
R0NQSEFTRShBZGRDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzVG9SZW1lbWJlcmVkU2V0KTsK
KyAgICAgICAgbV9jb2RlQmxvY2tzLnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2Nr
cyh0aGlzKTsKKyAgICB9CisKIH0KIAordGVtcGxhdGUgPEhlYXBPcGVyYXRpb24gY29sbGVjdGlv
blR5cGU+CiB2b2lkIEhlYXA6OmNvcHlCYWNraW5nU3RvcmVzKCkKIHsKLSAgICBtX3N0b3JhZ2VT
cGFjZS5zdGFydGVkQ29weWluZygpOworICAgIG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5n
PGNvbGxlY3Rpb25UeXBlPigpOwogICAgIGlmIChtX3N0b3JhZ2VTcGFjZS5zaG91bGREb0NvcHlQ
aGFzZSgpKSB7CiAgICAgICAgIG1fc2hhcmVkRGF0YS5kaWRTdGFydENvcHlpbmcoKTsKICAgICAg
ICAgbV9jb3B5VmlzaXRvci5zdGFydENvcHlpbmcoKTsKQEAgLTcyMywxMSArNzcwLDM0IEBAIHZv
aWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQogICAgIG1faml0U3R1YlJvdXRp
bmVzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwogfQogCit2b2lkIEhl
YXA6OmFkZE9sZEdlbmVyYXRpb25FeGVjdXRhYmxlc1RvUmVtZW1iZXJlZFNldCgpCit7CisgICAg
QVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbik7CisgICAgZm9y
IChFeGVjdXRhYmxlQmFzZSogY3VycmVudCA9IG1fY29tcGlsZWRDb2RlLmhlYWQoKTsgY3VycmVu
dDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkgeworICAgICAgICBpZiAoaXNNYXJrZWQoY3Vy
cmVudCkpCisgICAgICAgICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoY3VycmVudCk7CisgICAgfQor
fQorCit2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlbGwqIGNlbGwpCit7
CisgICAgQVNTRVJUKGNlbGwpOworICAgIEFTU0VSVCghT3B0aW9uczo6ZW5hYmxlQ29uY3VycmVu
dEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChpc01hcmtlZChj
ZWxsKSk7CisgICAgaWYgKGlzSW5SZW1lbWJlcmVkU2V0KGNlbGwpKQorICAgICAgICByZXR1cm47
CisgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRSZW1lbWJlcmVkKGNlbGwpOwor
I2lmIEVOQUJMRShHRU5FUkFUSU9OQUxfQ09MTEVDVE9SKQorICAgIC8vZGF0YUxvZ0YoIkFkZGVk
ICVwIHRvIHJlbWVtYmVyZWQgc2V0XG4iLCBjZWxsKTsKKyAgICBtX3Nsb3RWaXNpdG9yLnVuY29u
ZGl0aW9uYWxseUFwcGVuZChjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKyNlbmRpZgorfQor
CiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKIHsKICAgICBpZiAoIW1faXNTYWZlVG9D
b2xsZWN0KQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBjb2xsZWN0KERvU3dlZXApOwog
fQogCkBAIC03NTgsOSArODI4LDMyIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBz
d2VlcFRvZ2cKICAgICBtX2RlZmVycmFsRGVwdGgrKzsgLy8gTWFrZSBzdXJlIHRoYXQgd2UgZG9u
J3QgR0MgaW4gdGhpcyBjYWxsLgogICAgIG1fdm0tPnByZXBhcmVUb0Rpc2NhcmRDb2RlKCk7CiAg
ICAgbV9kZWZlcnJhbERlcHRoLS07IC8vIERlY3JlbWVudCBkZWZlcmFsIG1hbnVhbGx5LCBzbyB3
ZSBkb24ndCBHQyB3aGVuIHdlIGRvIHNvLCBzaW5jZSB3ZSBhcmUgYWxyZWFkeSBHQ2luZyEuCi0g
ICAgCi0gICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKLSAgICBtX2V4dHJh
TWVtb3J5VXNhZ2UgPSAwOworCisvKiAKKyAgICBkYXRhTG9nRigiYnl0ZXMgYWxsb2NhdGVkIHRo
aXMgY3ljbGU6ICVsdVxuIiwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSk7CisgICAgZGF0YUxv
Z0YoInNpemUgYWZ0ZXIgbGFzdCBjb2xsZWN0OiAlbHVcbiIsIG1fc2l6ZUFmdGVyTGFzdENvbGxl
Y3QpOworICAgIGRhdGFMb2dGKCJjb2xsZWN0IHRocmVzaG9sZDogJWx1XG4iLCBtX2NvbGxlY3RU
aHJlc2hvbGQpOyAKKyAgICBkYXRhTG9nRigiZnVsbCBjb2xsZWN0IHRocmVzaG9sZDogJWx1XG4i
LCBtX2Z1bGxDb2xsZWN0VGhyZXNob2xkKTsKKyAgICBib29sIGlzRnVsbENvbGxlY3Rpb24gPSAo
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSArIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QgPiBtX2Z1
bGxDb2xsZWN0VGhyZXNob2xkKSB8fCBzd2VlcFRvZ2dsZSA9PSBEb1N3ZWVwOworKi8KKyAgICBi
b29sIGlzRnVsbENvbGxlY3Rpb24gPSBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24gfHwgc3dlZXBU
b2dnbGUgPT0gRG9Td2VlcDsKKyAgICBpZiAoaXNGdWxsQ29sbGVjdGlvbikgeworICAgICAgICBt
X29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBGdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgbV9zbG90Vmlz
aXRvci5jbGVhck1hcmtTdGFjaygpOworICAgICAgICBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24g
PSBmYWxzZTsKKyAgICAgICAgZGF0YUxvZ0YoIkZ1bGxDb2xsZWN0aW9uXG4iKTsKKyAgICB9IGVs
c2UgeworI2lmIEVOQUJMRShHRU5FUkFUSU9OQUxfQ09MTEVDVE9SKQorICAgICAgICBtX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPSBFZGVuQ29sbGVjdGlvbjsKKyAgICAgICAgZGF0YUxvZ0YoIkVkZW5D
b2xsZWN0aW9uXG4iKTsKKyNlbHNlCisgICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEZ1
bGxDb2xsZWN0aW9uOworICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Cisg
ICAgICAgIGRhdGFMb2dGKCJGdWxsQ29sbGVjdGlvblxuIik7CisjZW5kaWYKKyAgICB9CisgICAg
aWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgbV9l
eHRyYU1lbW9yeVVzYWdlID0gMDsKIAogICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+d2lsbENvbGxl
Y3QoKTsKIApAQCAtNzczLDYgKzg2Niw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2ds
ZSBzd2VlcFRvZ2cKICAgICB7CiAgICAgICAgIEdDUEhBU0UoU3RvcEFsbG9jYXRpb24pOwogICAg
ICAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgICAgIGlmIChtX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgICAgICBtX3N0b3JhZ2VT
cGFjZS5kaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCk7CiAgICAgfQogCiAgICAgbWFya1Jvb3RzKCk7
CkBAIC03ODksMTMgKzg4NCwxNiBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dl
ZXBUb2dnCiAgICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CiAgICAgfQogCi0gICAgewor
ICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pIHsKICAgICAg
ICAgbV9ibG9ja1NuYXBzaG90LnJlc2l6ZShtX29iamVjdFNwYWNlLmJsb2NrcygpLnNldCgpLnNp
emUoKSk7CiAgICAgICAgIE1hcmtlZEJsb2NrU25hcHNob3RGdW5jdG9yIGZ1bmN0b3IobV9ibG9j
a1NuYXBzaG90KTsKICAgICAgICAgbV9vYmplY3RTcGFjZS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7
CiAgICAgfQogCi0gICAgY29weUJhY2tpbmdTdG9yZXMoKTsKKyAgICBpZiAobV9vcGVyYXRpb25J
blByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBjb3B5QmFja2luZ1N0b3JlczxG
dWxsQ29sbGVjdGlvbj4oKTsKKyAgICBlbHNlCisgICAgICAgIGNvcHlCYWNraW5nU3RvcmVzPEVk
ZW5Db2xsZWN0aW9uPigpOwogCiAgICAgewogICAgICAgICBHQ1BIQVNFKEZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMpOwpAQCAtODE5LDggKzkxNywxMCBAQCB2b2lkIEhlYXA6OmNvbGxl
Y3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIG1fb2JqZWN0U3BhY2Uuc2hyaW5rKCk7
CiAgICAgfQogCi0gICAgbV9zd2VlcGVyLT5zdGFydFN3ZWVwaW5nKG1fYmxvY2tTbmFwc2hvdCk7
Ci0gICAgbV9ieXRlc0FiYW5kb25lZCA9IDA7CisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgbV9zd2VlcGVyLT5zdGFydFN3ZWVwaW5nKG1f
YmxvY2tTbmFwc2hvdCk7CisKKyAgICBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlID0gMDsKIAog
ICAgIHsKICAgICAgICAgR0NQSEFTRShSZXNldEFsbG9jYXRvcnMpOwpAQCAtODMxLDIxICs5MzEs
NDQgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIGlmIChP
cHRpb25zOjpnY01heEhlYXBTaXplKCkgJiYgY3VycmVudEhlYXBTaXplID4gT3B0aW9uczo6Z2NN
YXhIZWFwU2l6ZSgpKQogICAgICAgICBIZWFwU3RhdGlzdGljczo6ZXhpdFdpdGhGYWlsdXJlKCk7
CiAKLSAgICBtX3NpemVBZnRlckxhc3RDb2xsZWN0ID0gY3VycmVudEhlYXBTaXplOworLyoKKyAg
ICBzaXplX3Qgb2xkQ29sbGVjdFRocmVzaG9sZCA9IG1fY29sbGVjdFRocmVzaG9sZDsKKyAgICBt
X2NvbGxlY3RUaHJlc2hvbGQgPSAwLjEgKiBjdXJyZW50SGVhcFNpemU7CisgICAgaWYgKGN1cnJl
bnRIZWFwU2l6ZSA+IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QpCisgICAgICAgIG1fY29sbGVjdFRo
cmVzaG9sZCA9IG1heChtX2NvbGxlY3RUaHJlc2hvbGQsIGN1cnJlbnRIZWFwU2l6ZSAtIG1fc2l6
ZUFmdGVyTGFzdENvbGxlY3QpOworICAgIG1fY29sbGVjdFRocmVzaG9sZCA9IG1heChtX2NvbGxl
Y3RUaHJlc2hvbGQsIHNpemVfdChvbGRDb2xsZWN0VGhyZXNob2xkICogKDIuMCAvIDMuMCkpKTsK
KyAgICBtX2NvbGxlY3RUaHJlc2hvbGQgPSBtYXgobV9jb2xsZWN0VGhyZXNob2xkLCBzaXplX3Qo
MC4xICogbV9taW5CeXRlc1BlckN5Y2xlKSk7CisKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dy
ZXNzID09IEZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBtX2Z1bGxDb2xsZWN0VGhyZXNob2xkID0g
MyAqIGN1cnJlbnRIZWFwU2l6ZTsKKyovCisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9
PSBGdWxsQ29sbGVjdGlvbikgeworICAgICAgICAvLyBUbyBhdm9pZCBwYXRob2xvZ2ljYWwgR0Mg
Y2h1cm4gaW4gdmVyeSBzbWFsbCBhbmQgdmVyeSBsYXJnZSBoZWFwcywgd2Ugc2V0CisgICAgICAg
IC8vIHRoZSBuZXcgYWxsb2NhdGlvbiBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVudCBzaXplIG9m
IHRoZSBoZWFwLCB3aXRoIGEKKyAgICAgICAgLy8gZml4ZWQgbWluaW11bS4KKyAgICAgICAgbV9t
YXhIZWFwU2l6ZSA9IG1heChtaW5IZWFwU2l6ZShtX2hlYXBUeXBlLCBtX3JhbVNpemUpLCBwcm9w
b3J0aW9uYWxIZWFwU2l6ZShjdXJyZW50SGVhcFNpemUsIG1fcmFtU2l6ZSkpOworICAgICAgICBt
X21heEVkZW5TaXplID0gbV9tYXhIZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsKKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQoY3VycmVudEhlYXBTaXplID49IG1fc2l6ZUFmdGVyTGFzdENv
bGxlY3QpOworICAgICAgICBtX21heEVkZW5TaXplID0gbV9tYXhIZWFwU2l6ZSAtIGN1cnJlbnRI
ZWFwU2l6ZTsKKyAgICAgICAgaWYgKChkb3VibGUpbV9tYXhFZGVuU2l6ZSAvIChkb3VibGUpbV9t
YXhIZWFwU2l6ZSA8ICgxLjAgLyAzLjApKQorICAgICAgICAgICAgbV9zaG91bGREb0Z1bGxDb2xs
ZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9tYXhIZWFwU2l6ZSArPSBjdXJyZW50SGVhcFNpemUg
LSBtX3NpemVBZnRlckxhc3RDb2xsZWN0OworICAgICAgICBtX21heEVkZW5TaXplID0gbV9tYXhI
ZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsKKyAgICB9CisjaWYgIUVOQUJMRShHRU5FUkFUSU9O
QUxfQ09MTEVDVE9SKQorICAgIG1fbWF4RWRlblNpemUgPSBtX21heEhlYXBTaXplOworI2VuZGlm
CiAKLSAgICAvLyBUbyBhdm9pZCBwYXRob2xvZ2ljYWwgR0MgY2h1cm4gaW4gdmVyeSBzbWFsbCBh
bmQgdmVyeSBsYXJnZSBoZWFwcywgd2Ugc2V0Ci0gICAgLy8gdGhlIG5ldyBhbGxvY2F0aW9uIGxp
bWl0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAsIHdpdGggYQotICAgIC8v
IGZpeGVkIG1pbmltdW0uCi0gICAgc2l6ZV90IG1heEhlYXBTaXplID0gbWF4KG1pbkhlYXBTaXpl
KG1faGVhcFR5cGUsIG1fcmFtU2l6ZSksIHByb3BvcnRpb25hbEhlYXBTaXplKGN1cnJlbnRIZWFw
U2l6ZSwgbV9yYW1TaXplKSk7Ci0gICAgbV9ieXRlc0FsbG9jYXRlZExpbWl0ID0gbWF4SGVhcFNp
emUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCA9IGN1cnJl
bnRIZWFwU2l6ZTsKIAotICAgIG1fYnl0ZXNBbGxvY2F0ZWQgPSAwOworICAgIG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGUgPSAwOwogICAgIGRvdWJsZSBsYXN0R0NFbmRUaW1lID0gV1RGOjptb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICBtX2xhc3RHQ0xlbmd0aCA9IGxhc3RHQ0Vu
ZFRpbWUgLSBsYXN0R0NTdGFydFRpbWU7CiAKICAgICBpZiAoT3B0aW9uczo6cmVjb3JkR0NQYXVz
ZVRpbWVzKCkpCiAgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpyZWNvcmRHQ1BhdXNlVGltZShsYXN0
R0NTdGFydFRpbWUsIGxhc3RHQ0VuZFRpbWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BlcmF0
aW9uSW5Qcm9ncmVzcyA9PSBDb2xsZWN0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24gfHwgbV9vcGVyYXRpb25JblByb2dyZXNz
ID09IEZ1bGxDb2xsZWN0aW9uKTsKIAogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3Bl
cmF0aW9uOwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwpAQCAtODYzLDEwICs5ODYsNiBA
QCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIGRvdWJs
ZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9y
ZSwgIiBtcywgIiwgY3VycmVudEhlYXBTaXplIC8gMTAyNCwgIiBrYl1cbiIpOwogICAgIH0KLQot
I2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgZGF0YUxvZ0YoIkpTQyBHQyBmaW5p
c2hpbmcgY29sbGVjdGlvbi5cbiIpOwotI2VuZGlmCiB9CiAKIGJvb2wgSGVhcDo6Y29sbGVjdElm
TmVjZXNzYXJ5T3JEZWZlcigpCkBAIC04NzYsNyArOTk1LDcgQEAgYm9vbCBIZWFwOjpjb2xsZWN0
SWZOZWNlc3NhcnlPckRlZmVyKCkKICAgICAKICAgICBpZiAoIXNob3VsZENvbGxlY3QoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgY29sbGVjdChEb05vdFN3ZWVwKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTkwOSw4ICsxMDI4LDggQEAgdm9pZCBIZWFwOjpzZXRHYXJi
YWdlQ29sbGVjdGlvblRpbWVyRW5hYgogCiB2b2lkIEhlYXA6OmRpZEFsbG9jYXRlKHNpemVfdCBi
eXRlcykKIHsKLSAgICBtX2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxv
Y2F0ZWQgKyBtX2J5dGVzQWJhbmRvbmVkKTsKLSAgICBtX2J5dGVzQWxsb2NhdGVkICs9IGJ5dGVz
OworICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSArIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUpOworICAgIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGUgKz0gYnl0ZXM7CiB9CiAKIGJvb2wgSGVhcDo6aXNWYWxpZEFsbG9jYXRpb24o
c2l6ZV90KQpAQCAtOTg3LDQgKzExMDYsNDIgQEAgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoQW5kR0NJZgogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIAordm9p
ZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7CisgICAgaWYg
KCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAgICAgICAgcmV0dXJuOworICAgIEhlYXA6Omhl
YXAoZnJvbSktPmFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwordm9pZCBIZWFwOjp3aWxs
QWJhbmRvblN0b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxsLCB2b2lkKiBwdHIsIHNpemVfdCBieXRl
cykKK3sKKyAgICBpZiAoIWNlbGwgfHwgIWlzTWFya2VkKGNlbGwpKQorICAgICAgICByZXR1cm47
CisgICAgbV9zdG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9yYWdlKHB0ciwgYnl0ZXMpOworfQor
Cit2b2lkIEhlYXA6OmRpZEFzc2lnblN0b3JhZ2UoY29uc3QgSlNDZWxsKiBjZWxsLCB2b2lkKiBw
dHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBpZiAoIWNlbGwgfHwgIWlzTWFya2VkKGNlbGwpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zdG9yYWdlU3BhY2UuZGlkQXNzaWduU3RvcmFnZShwdHIs
IGJ5dGVzKTsKK30KKwordm9pZCBIZWFwOjpjb3B5V3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCog
ZnJvbSwgdm9pZCogb2xkUHRyLCBzaXplX3Qgb2xkU2l6ZSwgdm9pZCogbmV3UHRyLCBzaXplX3Qg
bmV3U2l6ZSkKK3sKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0X2Nhc3Q8
SlNDZWxsKj4oZnJvbSkpOworCisgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghbmV3UHRyKSB7CisgICAgICAgIEFTU0VSVCghbmV3U2l6
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAo
ZnJvbSk7CisgICAgaGVhcC0+bV9zdG9yYWdlU3BhY2Uud2lsbEFiYW5kb25TdG9yYWdlKG9sZFB0
ciwgb2xkU2l6ZSk7CisgICAgaGVhcC0+bV9zdG9yYWdlU3BhY2UuZGlkQXNzaWduU3RvcmFnZShu
ZXdQdHIsIG5ld1NpemUpOworICAgIGhlYXAtPmFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShy
ZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDEwICs5MiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAKKyAgICAgICAgdm9pZCBhZGRPbGRHZW5l
cmF0aW9uRXhlY3V0YWJsZXNUb1JlbWVtYmVyZWRTZXQoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBhZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKik7CisgICAgICAgIGJv
b2wgaXNJblJlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoY2VsbCk7CisgICAgICAgICAgICBBU1NFUlQoIU9wdGlvbnM6
OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzUmVtZW1iZXJlZChj
ZWxsKTsKKyAgICAgICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1dyaXRlQmFycmllckVuYWJs
ZWQoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVy
KGNvbnN0IEpTQ2VsbCopOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKiwgSlNWYWx1ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqLCBKU0NlbGwqKTsKLSAgICAgICAgc3RhdGljIHVpbnQ4X3QqIGFkZHJlc3NPZkNh
cmRGb3IoSlNDZWxsKik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Y29weVdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRT
aXplLCB2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCB3aWxsQWJhbmRvblN0b3JhZ2UoY29uc3QgSlNDZWxsKiwgdm9pZCogb2xkUHRy
LCBzaXplX3Qgb2xkU2l6ZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlkQXNz
aWduU3RvcmFnZShjb25zdCBKU0NlbGwqLCB2b2lkKiBuZXdQdHIsIHNpemVfdCBuZXdTaXplKTsK
IAogICAgICAgICBIZWFwKFZNKiwgSGVhcFR5cGUpOwogICAgICAgICB+SGVhcCgpOwpAQCAtMTEz
LDYgKzEyNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIHRydWUgaWYgY29sbGVj
dGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0NvbGxlY3RpbmcoKTsK
KyAgICAgICAgaW5saW5lIEhlYXBPcGVyYXRpb24gb3BlcmF0aW9uSW5Qcm9ncmVzcygpIHsgcmV0
dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzczsgfQogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9j
YXRpb24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBp
c0J1c3koKTsKICAgICAgICAgCkBAIC0yMjUsNiArMjM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgbWFya1Jvb3RzKCk7CiAgICAgICAgIHZvaWQgbWFya1Byb3RlY3RlZE9iamVj
dHMoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgbWFya1RlbXBTb3J0VmVjdG9ycyhI
ZWFwUm9vdFZpc2l0b3ImKTsKKyAgICAgICAgdGVtcGxhdGUgPEhlYXBPcGVyYXRpb24gY29sbGVj
dGlvblR5cGU+CiAgICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsKICAgICAgICAgdm9p
ZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzKCk7CkBAIC0yNDYsMTAgKzI2MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKICAgICAgICAgc2l6ZV90
IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3Q7CiAKLSAgICAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0
ZWRMaW1pdDsKLSAgICAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWQ7Ci0gICAgICAgIHNpemVf
dCBtX2J5dGVzQWJhbmRvbmVkOwotCisgICAgICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlOworICAgICAgICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFRoaXNDeWNsZTsKKyAgICAg
ICAgc2l6ZV90IG1fbWF4RWRlblNpemU7CisgICAgICAgIHNpemVfdCBtX21heEhlYXBTaXplOwor
ICAgICAgICBib29sIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbjsKKy8qCisgICAgICAgIHNpemVf
dCBtX2Z1bGxDb2xsZWN0VGhyZXNob2xkOworICAgICAgICBzaXplX3QgbV9jb2xsZWN0VGhyZXNo
b2xkOworKi8KICAgICAgICAgc2l6ZV90IG1fdG90YWxCeXRlc1Zpc2l0ZWQ7CiAgICAgICAgIHNp
emVfdCBtX3RvdGFsQnl0ZXNDb3BpZWQ7CiAgICAgICAgIApAQCAtMjY0LDYgKzI4Myw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBWVGFibGVTcGVjdHJ1bSBtX2Rlc3Ryb3llZFR5cGVDb3Vu
dHM7CiAjZW5kaWYKIAorICAgICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1fY29weWluZ1Jl
bWVtYmVyZWRTZXQ7CisKICAgICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVz
OwogICAgICAgICBWZWN0b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+KiA+IG1fdGVtcFNvcnRpbmdWZWN0b3JzOwogICAgICAgICBPd25QdHI8SGFzaFNl
dDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+ID4gbV9tYXJrTGlzdFNldDsKQEAgLTMxMyw4ICszMzQs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKGlzRGVmZXJyZWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzQWxsb2NhdGVkID4gT3B0aW9uczo6Z2NNYXhIZWFw
U2l6ZSgpICYmIG1faXNTYWZlVG9Db2xsZWN0ICYmIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBO
b09wZXJhdGlvbjsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQgPiBtX2J5dGVzQWxs
b2NhdGVkTGltaXQgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNz
ID09IE5vT3BlcmF0aW9uOworICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgPiBPcHRpb25zOjpnY01heEhlYXBTaXplKCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYg
bV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uOworICAgICAgICByZXR1cm4gbV9i
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA+IG1fbWF4RWRlblNpemUgJiYgbV9pc1NhZmVUb0NvbGxl
Y3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uOworLy8gICAgICAgIHJl
dHVybiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID4gbV9jb2xsZWN0VGhyZXNob2xkICYmIG1f
aXNTYWZlVG9Db2xsZWN0ICYmIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbjsK
ICAgICB9CiAKICAgICBib29sIEhlYXA6OmlzQnVzeSgpCkBAIC0zMjQsNyArMzQ2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBib29sIEhlYXA6OmlzQ29sbGVjdGluZygpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IENvbGxlY3Rpb247CisgICAgICAg
IHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24gfHwgbV9vcGVy
YXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uOwogICAgIH0KIAogICAgIGlubGluZSBI
ZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKQEAgLTM2NCwxOCArMzg2LDMwIEBA
IG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6d3Jp
dGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopCisgICAgaW5saW5lIHZvaWQgSGVhcDo6
d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKICAgICB7CisjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAgICBXcml0ZUJhcnJpZXJDb3Vu
dGVyczo6Y291bnRXcml0ZUJhcnJpZXIoKTsKKyNlbmRpZgorICAgICAgICBpZiAoIWZyb20gfHwg
IWlzTWFya2VkKGZyb20pKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXRvIHx8
IGlzTWFya2VkKHRvKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSGVhcDo6aGVhcChm
cm9tKS0+YWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOwogICAgIH0KIAotICAgIGlubGluZSB2b2lk
IEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKQorICAgIGlubGluZSB2
b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8pCiAg
ICAgeworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgV3JpdGVC
YXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CisjZW5kaWYKKyAgICAgICAgaWYg
KCF0by5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd3JpdGVCYXJyaWVy
KGZyb20sIHRvLmFzQ2VsbCgpKTsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBIZWFwOjpyZXBv
cnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcE9wZXJhdGlvbi5oCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWVudW0gSGVhcE9wZXJhdGlvbiB7IE5vT3Bl
cmF0aW9uLCBBbGxvY2F0aW9uLCBDb2xsZWN0aW9uIH07CitlbnVtIEhlYXBPcGVyYXRpb24geyBO
b09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgRnVsbENvbGxlY3Rpb24sIEVkZW5Db2xsZWN0aW9uIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDI5IEBAIE1h
cmtTdGFja0FycmF5OjpNYXJrU3RhY2tBcnJheShCbG9ja0FsbG8KIAogTWFya1N0YWNrQXJyYXk6
On5NYXJrU3RhY2tBcnJheSgpCiB7Ci0gICAgQVNTRVJUKG1fbnVtYmVyT2ZTZWdtZW50cyA9PSAx
ICYmIG1fc2VnbWVudHMuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChtX251bWJlck9mU2VnbWVu
dHMgPT0gMSk7CisgICAgQVNTRVJUKG1fc2VnbWVudHMuc2l6ZSgpID09IDEpOwogICAgIG1fYmxv
Y2tBbGxvY2F0b3IuZGVhbGxvY2F0ZShNYXJrU3RhY2tTZWdtZW50OjpkZXN0cm95KG1fc2VnbWVu
dHMucmVtb3ZlSGVhZCgpKSk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgQVNTRVJU
KCFtX251bWJlck9mU2VnbWVudHMpOworICAgIEFTU0VSVCghbV9zZWdtZW50cy5zaXplKCkpOwor
fQorCit2b2lkIE1hcmtTdGFja0FycmF5OjpjbGVhcigpCit7CisgICAgaWYgKCFtX3NlZ21lbnRz
LmhlYWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE1hcmtTdGFja1NlZ21lbnQqIG5leHQ7Cisg
ICAgZm9yIChNYXJrU3RhY2tTZWdtZW50KiBjdXJyZW50ID0gbV9zZWdtZW50cy5oZWFkKCk7IGN1
cnJlbnQtPm5leHQoKTsgY3VycmVudCA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IGN1cnJlbnQt
Pm5leHQoKTsKKyAgICAgICAgbV9zZWdtZW50cy5yZW1vdmUoY3VycmVudCk7CisgICAgICAgIG1f
YmxvY2tBbGxvY2F0b3IuZGVhbGxvY2F0ZShNYXJrU3RhY2tTZWdtZW50OjpkZXN0cm95KGN1cnJl
bnQpKTsKKyAgICB9CisgICAgbV90b3AgPSAwOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cyA9IDE7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1fc2VnbWVudHMuaGVhZCgpLT5tX3RvcCA9IDA7
CisjZW5kaWYKIH0KIAogdm9pZCBNYXJrU3RhY2tBcnJheTo6ZXhwYW5kKCkKQEAgLTE2Nyw0ICsx
ODgsMjggQEAgdm9pZCBNYXJrU3RhY2tBcnJheTo6c3RlYWxTb21lQ2VsbHNGcm9tKAogICAgICAg
ICBhcHBlbmQob3RoZXIucmVtb3ZlTGFzdCgpKTsKIH0KIAordm9pZCBNYXJrU3RhY2tBcnJheTo6
ZmlsbFZlY3RvcihWZWN0b3I8Y29uc3QgSlNDZWxsKj4mIHZlY3RvcikKK3sKKyAgICBBU1NFUlQo
dmVjdG9yLnNpemUoKSA9PSBzaXplKCkpOworCisgICAgTWFya1N0YWNrU2VnbWVudCogY3VycmVu
dFNlZ21lbnQgPSBtX3NlZ21lbnRzLmhlYWQoKTsKKyAgICBpZiAoIWN1cnJlbnRTZWdtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdG9wOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRTZWdt
ZW50LT5kYXRhKClbaV0pOworICAgICAgICB2ZWN0b3JbY291bnQrK10gPSBjdXJyZW50U2VnbWVu
dC0+ZGF0YSgpW2ldOworICAgIH0KKworICAgIGN1cnJlbnRTZWdtZW50ID0gY3VycmVudFNlZ21l
bnQtPm5leHQoKTsKKyAgICB3aGlsZSAoY3VycmVudFNlZ21lbnQpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNfc2VnbWVudENhcGFjaXR5OyArK2kpIHsKKyAgICAgICAgICAg
IEFTU0VSVChjdXJyZW50U2VnbWVudC0+ZGF0YSgpW2ldKTsKKyAgICAgICAgICAgIHZlY3Rvcltj
b3VudCsrXSA9IGN1cnJlbnRTZWdtZW50LT5kYXRhKClbaV07CisgICAgICAgIH0KKyAgICAgICAg
Y3VycmVudFNlZ21lbnQgPSBjdXJyZW50U2VnbWVudC0+bmV4dCgpOworICAgIH0KK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAKIAogI2luY2x1ZGUgIkhlYXBC
bG9jay5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMDAsNiArMTAxLDkgQEAgcHVibGljOgog
ICAgIHNpemVfdCBzaXplKCk7CiAgICAgYm9vbCBpc0VtcHR5KCk7CiAKKyAgICB2b2lkIGZpbGxW
ZWN0b3IoVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CisgICAgdm9pZCBjbGVhcigpOworCiBwcml2
YXRlOgogICAgIHRlbXBsYXRlIDxzaXplX3Qgc2l6ZT4gc3RydWN0IENhcGFjaXR5RnJvbVNpemUg
ewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZhbHVlID0gKHNpemUgLSBzaXplb2YoTWFy
a1N0YWNrU2VnbWVudCkpIC8gc2l6ZW9mKGNvbnN0IEpTQ2VsbCopOwpAQCAtMTIxLDcgKzEyNSw2
IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGNvbnN0IHNpemVfdCBz
X3NlZ21lbnRDYXBhY2l0eSA9IENhcGFjaXR5RnJvbVNpemU8TWFya1N0YWNrU2VnbWVudDo6Ymxv
Y2tTaXplPjo6dmFsdWU7CiAgICAgc2l6ZV90IG1fdG9wOwogICAgIHNpemVfdCBtX251bWJlck9m
U2VnbWVudHM7Ci0gICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNTY0
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05LDEwICs5LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29s
IE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCitzdGF0aWMgYm9v
bCBpc0xpc3RQYWdlZE91dChkb3VibGUgZGVhZGxpbmUsIERvdWJseUxpbmtlZExpc3Q8TWFya2Vk
QmxvY2s+JiBsaXN0KQogewogICAgIHVuc2lnbmVkIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0g
MDsKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBtX2Jsb2NrTGlzdC5oZWFkKCk7CisgICAgTWFy
a2VkQmxvY2sqIGJsb2NrID0gbGlzdC5oZWFkKCk7CiAgICAgd2hpbGUgKGJsb2NrKSB7CiAgICAg
ICAgIGJsb2NrID0gYmxvY2stPm5leHQoKTsKICAgICAgICAgKytpdGVyc1NpbmNlTGFzdFRpbWVD
aGVjazsKQEAgLTIzLDcgKzIzLDEzIEBAIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0
KGRvdWJsZSAKICAgICAgICAgICAgIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKICAgICAg
ICAgfQogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKK2Jvb2wgTWFya2VkQWxsb2NhdG9y
Ojppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKK3sKKyAgICBpZiAoaXNMaXN0UGFnZWRPdXQo
ZGVhZGxpbmUsIG1fYmxvY2tMaXN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCkBAIC0zMSwxNSArMzcsMzUgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdAogewogICAgIGlmICghbV9mcmVlTGlzdC5oZWFkKSB7CiAgICAgICAg
IGlmIChtX2N1cnJlbnRCbG9jaykgewotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2Nr
ID09IG1fYmxvY2tzVG9Td2VlcCk7CisgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2sg
PT0gbV9uZXh0QmxvY2tUb1N3ZWVwKTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRD
b25zdW1lRnJlZUxpc3QoKTsKLSAgICAgICAgICAgIG1fYmxvY2tzVG9Td2VlcCA9IG1fY3VycmVu
dEJsb2NrLT5uZXh0KCk7CisgICAgICAgICAgICBtX25leHRCbG9ja1RvU3dlZXAgPSBtX2N1cnJl
bnRCbG9jay0+bmV4dCgpOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChNYXJrZWRCbG9jayom
IGJsb2NrID0gbV9ibG9ja3NUb1N3ZWVwOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKSB7
CisgICAgICAgIE1hcmtlZEJsb2NrKiBuZXh0OworICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYg
YmxvY2sgPSBtX25leHRCbG9ja1RvU3dlZXA7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAg
ICAgICAgIG5leHQgPSBibG9jay0+bmV4dCgpOworCiAgICAgICAgICAgICBNYXJrZWRCbG9jazo6
RnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9GcmVl
TGlzdCk7CisvKgorICAgICAgICAgICAgdW5zaWduZWQgZnJlZUxpc3RMZW5ndGggPSBmcmVlTGlz
dC5ieXRlcyAvIGJsb2NrLT5jZWxsU2l6ZSgpOworICAgICAgICAgICAgdW5zaWduZWQgbWF4TnVt
T2JqZWN0cyA9IChibG9jay0+Y2FwYWNpdHkoKSAtIHNpemVvZihNYXJrZWRCbG9jaykpIC8gYmxv
Y2stPmNlbGxTaXplKCk7CisqLworICAgICAgICAgICAgCisgICAgICAgICAgICAvL2lmIChkb3Vi
bGUobWF4TnVtT2JqZWN0cyAtIGZyZWVMaXN0TGVuZ3RoKSAvIGRvdWJsZShtYXhOdW1PYmplY3Rz
KSA+IDAuNzUpIHsKICAgICAgICAgICAgIGlmICghZnJlZUxpc3QuaGVhZCkgeworLyoKKyAgICAg
ICAgICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIG5leHQ7CisgICAgICAgICAgICAgICAg
Zm9yIChNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGN1cnJlbnQgPSBmcmVlTGlzdC5oZWFkOyBjdXJy
ZW50OyBjdXJyZW50ID0gbmV4dCkgeworICAgICAgICAgICAgICAgICAgICBuZXh0ID0gY3VycmVu
dC0+bmV4dDsKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihj
dXJyZW50KS0+emFwKCk7CisgICAgICAgICAgICAgICAgfQorKi8KICAgICAgICAgICAgICAgICBi
bG9jay0+ZGlkQ29uc3VtZUVtcHR5RnJlZUxpc3QoKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nr
TGlzdC5yZW1vdmUoYmxvY2spOworICAgICAgICAgICAgICAgIG1fYmxvY2tMaXN0LnB1c2goYmxv
Y2spOworICAgICAgICAgICAgICAgIGlmICghbV9sYXN0RnVsbEJsb2NrKQorICAgICAgICAgICAg
ICAgICAgICBtX2xhc3RGdWxsQmxvY2sgPSBibG9jazsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIApAQCAtNDgsNiArNzQsNyBAQCBpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAKKyAgICAKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAg
ICAgICAgICBtX2ZyZWVMaXN0ID0gZnJlZUxpc3Q7CiAgICAgICAgICAgICBicmVhazsKQEAgLTYy
LDYgKzg5LDcgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdAogICAg
IE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBtX2Zy
ZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwogICAgIEFTU0VSVChoZWFkKTsKKyAgICBtX21hcmtl
ZFNwYWNlLT5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOwogICAgIHJldHVybiBo
ZWFkOwogfQogICAgIApAQCAtMTI3LDcgKzE1NSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjph
ZGRCbG9jayhNYXJrZWRCbG8KICAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAgCiAg
ICAgbV9ibG9ja0xpc3QuYXBwZW5kKGJsb2NrKTsKLSAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2N1
cnJlbnRCbG9jayA9IGJsb2NrOworICAgIG1fbmV4dEJsb2NrVG9Td2VlcCA9IG1fY3VycmVudEJs
b2NrID0gYmxvY2s7CiAgICAgbV9mcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6
U3dlZXBUb0ZyZWVMaXN0KTsKICAgICBtX21hcmtlZFNwYWNlLT5kaWRBZGRCbG9jayhibG9jayk7
CiB9CkBAIC0xMzgsOSArMTY2LDI3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9j
ayhNYXJrZWQKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2N1cnJlbnRCbG9jay0+bmV4dCgp
OwogICAgICAgICBtX2ZyZWVMaXN0ID0gTWFya2VkQmxvY2s6OkZyZWVMaXN0KCk7CiAgICAgfQot
ICAgIGlmIChtX2Jsb2Nrc1RvU3dlZXAgPT0gYmxvY2spCi0gICAgICAgIG1fYmxvY2tzVG9Td2Vl
cCA9IG1fYmxvY2tzVG9Td2VlcC0+bmV4dCgpOworICAgIGlmIChtX25leHRCbG9ja1RvU3dlZXAg
PT0gYmxvY2spCisgICAgICAgIG1fbmV4dEJsb2NrVG9Td2VlcCA9IG1fbmV4dEJsb2NrVG9Td2Vl
cC0+bmV4dCgpOworCisgICAgaWYgKGJsb2NrID09IG1fbGFzdEZ1bGxCbG9jaykKKyAgICAgICAg
bV9sYXN0RnVsbEJsb2NrID0gbV9sYXN0RnVsbEJsb2NrLT5wcmV2KCk7CisgICAgCiAgICAgbV9i
bG9ja0xpc3QucmVtb3ZlKGJsb2NrKTsKIH0KIAordm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc2V0
KCkKK3sKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IDA7CisgICAgbV9jdXJyZW50QmxvY2sgPSAw
OworICAgIG1fZnJlZUxpc3QgPSBNYXJrZWRCbG9jazo6RnJlZUxpc3QoKTsKKyAgICBpZiAobV9o
ZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgIG1f
bGFzdEZ1bGxCbG9jayA9IDA7CisKKyAgICBpZiAobV9sYXN0RnVsbEJsb2NrKQorICAgICAgICBt
X25leHRCbG9ja1RvU3dlZXAgPSBtX2xhc3RGdWxsQmxvY2stPm5leHQoKSA/IG1fbGFzdEZ1bGxC
bG9jay0+bmV4dCgpIDogbV9sYXN0RnVsbEJsb2NrOworICAgIGVsc2UKKyAgICAgICAgbV9uZXh0
QmxvY2tUb1N3ZWVwID0gbV9ibG9ja0xpc3QuaGVhZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
CShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsOCBAQCBwcml2YXRlOgogICAg
IE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBtX2ZyZWVMaXN0OwogICAgIE1hcmtlZEJsb2NrKiBtX2N1
cnJlbnRCbG9jazsKICAgICBNYXJrZWRCbG9jayogbV9sYXN0QWN0aXZlQmxvY2s7Ci0gICAgTWFy
a2VkQmxvY2sqIG1fYmxvY2tzVG9Td2VlcDsKKyAgICBNYXJrZWRCbG9jayogbV9uZXh0QmxvY2tU
b1N3ZWVwOworICAgIE1hcmtlZEJsb2NrKiBtX2xhc3RGdWxsQmxvY2s7CiAgICAgRG91Ymx5TGlu
a2VkTGlzdDxNYXJrZWRCbG9jaz4gbV9ibG9ja0xpc3Q7CiAgICAgc2l6ZV90IG1fY2VsbFNpemU7
CiAgICAgTWFya2VkQmxvY2s6OkRlc3RydWN0b3JUeXBlIG1fZGVzdHJ1Y3RvclR5cGU7CkBAIC02
OCw3ICs2OSw4IEBAIGlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXQKIGlu
bGluZSBNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcigpCiAgICAgOiBtX2N1cnJlbnRC
bG9jaygwKQogICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKLSAgICAsIG1fYmxvY2tzVG9Td2Vl
cCgwKQorICAgICwgbV9uZXh0QmxvY2tUb1N3ZWVwKDApCisgICAgLCBtX2xhc3RGdWxsQmxvY2so
MCkKICAgICAsIG1fY2VsbFNpemUoMCkKICAgICAsIG1fZGVzdHJ1Y3RvclR5cGUoTWFya2VkQmxv
Y2s6Ok5vbmUpCiAgICAgLCBtX2hlYXAoMCkKQEAgLTEwMiwxNCArMTA0LDYgQEAgaW5saW5lIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUocwogICAgIHJldHVybiBoZWFkOwogfQogCi1p
bmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc2V0KCkKLXsKLSAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IDA7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAgIG1fZnJlZUxpc3QgPSBNYXJr
ZWRCbG9jazo6RnJlZUxpc3QoKTsKLSAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2Jsb2NrTGlzdC5o
ZWFkKCk7Ci19Ci0KIGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmco
KQogewogICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMTU2NDk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTksNiArMTk5LDQ1IEBAIHZvaWQgTWFya2VkQmxvY2s6OnN0b3BBbGxvY2F0aW5nKGNvbnN0
IEYKICAgICBtX3N0YXRlID0gTWFya2VkOwogfQogCit2b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1h
cmtzKCkKK3sKKyAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gSlNDOjpF
ZGVuQ29sbGVjdGlvbikKKyAgICAgICAgdGhpcy0+Y2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlw
ZTxFZGVuQ29sbGVjdGlvbj4oKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXMtPmNsZWFyTWFya3NX
aXRoQ29sbGVjdGlvblR5cGU8RnVsbENvbGxlY3Rpb24+KCk7Cit9CisKK3ZvaWQgTWFya2VkQmxv
Y2s6OmNsZWFyUmVtZW1iZXJlZFNldCgpCit7CisgICAgbV9yZW1lbWJlcmVkU2V0LmNsZWFyQWxs
KCk7Cit9CisKK3RlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgordm9pZCBN
YXJrZWRCbG9jazo6Y2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlwZSgpCit7CisgICAgQVNTRVJU
KGNvbGxlY3Rpb25UeXBlID09IEZ1bGxDb2xsZWN0aW9uIHx8IGNvbGxlY3Rpb25UeXBlID09IEVk
ZW5Db2xsZWN0aW9uKTsKKyAgICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMp
OworCisgICAgQVNTRVJUKG1fc3RhdGUgIT0gTmV3ICYmIG1fc3RhdGUgIT0gRnJlZUxpc3RlZCk7
CisgICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEZ1bGxDb2xsZWN0aW9uKSB7CisgICAgICAgIG1f
bWFya3MuY2xlYXJBbGwoKTsKKyAgICAgICAgbV9yZW1lbWJlcmVkU2V0LmNsZWFyQWxsKCk7Cisg
ICAgfQorCisgICAgLy8gVGhpcyB3aWxsIGJlY29tZSB0cnVlIGF0IHRoZSBlbmQgb2YgdGhlIG1h
cmsgcGhhc2UuIFdlIHNldCBpdCBub3cgdG8KKyAgICAvLyBhdm9pZCBhbiBleHRyYSBwYXNzIHRv
IGRvIHNvIGxhdGVyLgorICAgIG1fc3RhdGUgPSBNYXJrZWQ7Cit9CisKK3ZvaWQgTWFya2VkQmxv
Y2s6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKK3sKKyAgICBtX3dlYWtTZXQubGFzdENoYW5jZVRv
RmluYWxpemUoKTsKKworICAgIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKKyAgICBjbGVhck1hcmtz
V2l0aENvbGxlY3Rpb25UeXBlPEZ1bGxDb2xsZWN0aW9uPigpOworICAgIHN3ZWVwKCk7Cit9CisK
IE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6cmVzdW1lQWxsb2NhdGluZygpCiB7
CiAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMTU2NDk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
SGVhcEJsb2NrLmgiCiAKKyNpbmNsdWRlICJIZWFwT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiV2Vh
a1NldC5oIgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5o
PgpAQCAtNjksOCArNzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBzaXplLgogCiAgICAg
Y2xhc3MgTWFya2VkQmxvY2sgOiBwdWJsaWMgSGVhcEJsb2NrPE1hcmtlZEJsb2NrPiB7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21TaXplID0gODsgLy8gYnl0ZXMKKyAgICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBhdG9tU2l6ZSA9IDE2OyAvLyBieXRlcwogICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGJsb2NrU2l6ZSA9IDY0ICogS0I7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgYmxvY2tNYXNrID0gfihibG9ja1NpemUgLSAxKTsgLy8gYmxvY2tTaXplIG11c3Qg
YmUgYSBwb3dlciBvZiB0d28uCiAKQEAgLTEzNSwxMSArMTM3LDE3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKGNvbnN0IEZyZWVMaXN0Jik7CiAgICAgICAg
IEZyZWVMaXN0IHJlc3VtZUFsbG9jYXRpbmcoKTsgLy8gQ2FsbCB0aGlzIGlmIHlvdSBjYW5vbmlj
YWxpemVkIGEgYmxvY2sgZm9yIHNvbWUgbm9uLWNvbGxlY3Rpb24gcmVsYXRlZCBwdXJwb3NlLgog
ICAgICAgICB2b2lkIGRpZENvbnN1bWVFbXB0eUZyZWVMaXN0KCk7IC8vIENhbGwgdGhpcyBpZiB5
b3Ugc3dlZXAgYSBibG9jaywgYnV0IHRoZSByZXR1cm5lZCBGcmVlTGlzdCBpcyBlbXB0eS4KKyAg
ICAgICAgdm9pZCBkaWRTd2VlcFRvTm9BdmFpbCgpOyAvLyBDYWxsIHRoaXMgaWYgeW91IHN3ZWVw
IGEgYmxvY2sgYW5kIGdldCBhbiBlbXB0eSBmcmVlIGxpc3QgYmFjay4KIAogICAgICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlICJuZXdseSBhbGxvY2F0ZWQiIGJpdG1hcCB3YXMgbm9uLW51bGwg
CiAgICAgICAgIC8vIGFuZCB3YXMgc3VjY2Vzc2Z1bGx5IGNsZWFyZWQgYW5kIGZhbHNlIG90aGVy
d2lzZS4KICAgICAgICAgYm9vbCBjbGVhck5ld2x5QWxsb2NhdGVkKCk7CisKICAgICAgICAgdm9p
ZCBjbGVhck1hcmtzKCk7CisgICAgICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkU2V0KCk7CisgICAg
ICAgIHRlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgorICAgICAgICB2b2lk
IGNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGUoKTsKKwogICAgICAgICBzaXplX3QgbWFya0Nv
dW50KCk7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpOwogCkBAIC0xNTYsNiArMTY0LDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAg
ICAgIHZvaWQgY2xlYXJNYXJrZWQoY29uc3Qgdm9pZCopOwogCisgICAgICAgIGJvb2wgbWlnaHRC
ZVZhbGlkQ2VsbChjb25zdCB2b2lkKik7CisKKyAgICAgICAgdm9pZCBzZXRSZW1lbWJlcmVkKGNv
bnN0IHZvaWQqKTsKKyAgICAgICAgdm9pZCBjbGVhclJlbWVtYmVyZWQoY29uc3Qgdm9pZCopOwor
ICAgICAgICB2b2lkIGF0b21pY0NsZWFyUmVtZW1iZXJlZChjb25zdCB2b2lkKik7CisgICAgICAg
IGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZvaWQqKTsKKwogICAgICAgICBib29sIGlzTmV3bHlB
bGxvY2F0ZWQoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIHNldE5ld2x5QWxsb2NhdGVkKGNv
bnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBjbGVhck5ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQq
KTsKQEAgLTE2Niw2ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKEZ1bmN0b3ImKTsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaERlYWRDZWxsKEZ1bmN0
b3ImKTsKIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWFya3MoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoTWFya2VkQmxvY2ssIG1fbWFya3MpOyB9CisKICAgICBwcml2YXRl
OgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNrID0gYXRvbVNp
emUgLSAxOyAvLyBhdG9tU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgogCkBAIC0xODMsOSAr
MjAwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgbV9hdG9tc1BlckNlbGw7
CiAgICAgICAgIHNpemVfdCBtX2VuZEF0b207IC8vIFRoaXMgaXMgYSBmdXp6eSBlbmQuIEFsd2F5
cyB0ZXN0IGZvciA8IG1fZW5kQXRvbS4KICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgICAg
IFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwQXRvbWljPiBtX21hcmtzOwor
ICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBXVEY6OkJpdG1hcEF0b21pYywgdWlu
dDhfdD4gbV9tYXJrczsKKyAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RGOjpC
aXRtYXBBdG9taWMsIHVpbnQ4X3Q+IG1fcmVtZW1iZXJlZFNldDsKICNlbHNlCi0gICAgICAgIFdU
Rjo6Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwTm90QXRvbWljPiBtX21hcmtzOwor
ICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBXVEY6OkJpdG1hcE5vdEF0b21pYywg
dWludDhfdD4gbV9tYXJrczsKKyAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RG
OjpCaXRtYXBOb3RBdG9taWMsIHVpbnQ4X3Q+IG1fcmVtZW1iZXJlZFNldDsKICNlbmRpZgogICAg
ICAgICBPd25QdHI8V1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gPiBtX25ld2x5QWxsb2NhdGVk
OwogCkBAIC0yMjcsMTUgKzI0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxNYXJrZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkg
JiBibG9ja01hc2spOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpsYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpCi0gICAgewotICAgICAgICBtX3dlYWtTZXQubGFzdENoYW5jZVRv
RmluYWxpemUoKTsKLQotICAgICAgICBjbGVhck5ld2x5QWxsb2NhdGVkKCk7Ci0gICAgICAgIGNs
ZWFyTWFya3MoKTsKLSAgICAgICAgc3dlZXAoKTsKLSAgICB9Ci0KICAgICBpbmxpbmUgTWFya2Vk
QWxsb2NhdG9yKiBNYXJrZWRCbG9jazo6YWxsb2NhdG9yKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2FsbG9jYXRvcjsKQEAgLTI4NCwyNiArMjk0LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOwogCiAgICAg
ICAgIEFTU0VSVCghbV9uZXdseUFsbG9jYXRlZCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1Bl
ckNlbGwpCi0gICAgICAgICAgICBBU1NFUlQobV9tYXJrcy5nZXQoaSkpOwotI2VuZGlmCiAgICAg
ICAgIEFTU0VSVChtX3N0YXRlID09IEZyZWVMaXN0ZWQpOwogICAgICAgICBtX3N0YXRlID0gTWFy
a2VkOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKCkK
LSAgICB7Ci0gICAgICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7Ci0K
LSAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0gTmV3ICYmIG1fc3RhdGUgIT0gRnJlZUxpc3RlZCk7
Ci0gICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKLQotICAgICAgICAvLyBUaGlzIHdpbGwgYmVj
b21lIHRydWUgYXQgdGhlIGVuZCBvZiB0aGUgbWFyayBwaGFzZS4gV2Ugc2V0IGl0IG5vdyB0bwot
ICAgICAgICAvLyBhdm9pZCBhbiBleHRyYSBwYXNzIHRvIGRvIHNvIGxhdGVyLgotICAgICAgICBt
X3N0YXRlID0gTWFya2VkOwotICAgIH0KLQogICAgIGlubGluZSBzaXplX3QgTWFya2VkQmxvY2s6
Om1hcmtDb3VudCgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXJrcy5jb3VudCgpOwpAQCAt
MzM5LDYgKzMzMywyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIChyZWludGVy
cHJldF9jYXN0PEJpdHM+KHApIC0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPih0aGlzKSkgLyBhdG9t
U2l6ZTsKICAgICB9CiAKKyAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6c2V0UmVtZW1iZXJl
ZChjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgbV9yZW1lbWJlcmVkU2V0LnNldChhdG9t
TnVtYmVyKHApKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJS
ZW1lbWJlcmVkKGNvbnN0IHZvaWQqIHApCisgICAgeworICAgICAgICBtX3JlbWVtYmVyZWRTZXQu
Y2xlYXIoYXRvbU51bWJlcihwKSk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya2VkQmxv
Y2s6OmF0b21pY0NsZWFyUmVtZW1iZXJlZChjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAg
bV9yZW1lbWJlcmVkU2V0LmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIoYXRvbU51bWJlcihwKSk7Cisg
ICAgfQorCisgICAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzUmVtZW1iZXJlZChjb25zdCB2
b2lkKiBwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVtZW1iZXJlZFNldC5nZXQoYXRvbU51
bWJlcihwKSk7CisgICAgfQorCiAgICAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2Vk
KGNvbnN0IHZvaWQqIHApCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51
bWJlcihwKSk7CkBAIC00MDMsNyArNDE3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNMaXZl
Q2VsbChjb25zdCB2b2lkKiBwKQorICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjptaWdodEJl
VmFsaWRDZWxsKGNvbnN0IHZvaWQqIHApCiAgICAgewogICAgICAgICBBU1NFUlQoTWFya2VkQmxv
Y2s6OmlzQXRvbUFsaWduZWQocCkpOwogICAgICAgICBzaXplX3QgYXRvbU51bWJlciA9IHRoaXMt
PmF0b21OdW1iZXIocCk7CkBAIC00MTQsNyArNDI4LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoYXRvbU51bWJlciA+PSBtX2VuZEF0
b20pIC8vIEZpbHRlcnMgcG9pbnRlcnMgaW50byBpbnZhbGlkIGNlbGxzIG91dCBvZiB0aGUgcmFu
Z2UuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KIAorICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0xpdmVDZWxsKGNvbnN0IHZvaWQq
IHApCisgICAgeworICAgICAgICBpZiAoIW1pZ2h0QmVWYWxpZENlbGwocCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBpc0xpdmUoc3RhdGljX2Nhc3Q8Y29uc3Qg
SlNDZWxsKj4ocCkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcg
QEAgTWFya2VkU3BhY2U6On5NYXJrZWRTcGFjZSgpCiB7CiAgICAgRnJlZSBmcmVlKEZyZWU6OkZy
ZWVBbGwsIHRoaXMpOwogICAgIGZvckVhY2hCbG9jayhmcmVlKTsKKyAgICBBU1NFUlQoIW1fYmxv
Y2tzLnNldCgpLnNpemUoKSk7CiB9CiAKIHN0cnVjdCBMYXN0Q2hhbmNlVG9GaW5hbGl6ZSA6IE1h
cmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CkBAIC0xMzgsMTcgKzEzOSwyNyBAQCB2b2lkIE1hcmtl
ZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMoKQogICAgIG1fbm9ybWFsU3BhY2UubGFyZ2VBbGxvY2F0
b3IucmVzZXQoKTsKICAgICBtX25vcm1hbERlc3RydWN0b3JTcGFjZS5sYXJnZUFsbG9jYXRvci5y
ZXNldCgpOwogICAgIG1faW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxv
Y2F0b3IucmVzZXQoKTsKKworICAgIG1fYmxvY2tzV2l0aE5ld09iamVjdHMuY2xlYXIoKTsKIH0K
IAogdm9pZCBNYXJrZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBS
b290VmlzaXRvcikKIHsKICAgICBWaXNpdFdlYWtTZXQgdmlzaXRXZWFrU2V0KGhlYXBSb290Vmlz
aXRvcik7Ci0gICAgZm9yRWFjaEJsb2NrKHZpc2l0V2Vha1NldCk7CisgICAgaWYgKG1faGVhcC0+
b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgdmlzaXRXZWFrU2V0KG1fYmxvY2tzV2l0aE5ld09iamVjdHNbaV0pOworICAg
IH0gZWxzZQorICAgICAgICBmb3JFYWNoQmxvY2sodmlzaXRXZWFrU2V0KTsKIH0KIAogdm9pZCBN
YXJrZWRTcGFjZTo6cmVhcFdlYWtTZXRzKCkKIHsKLSAgICBmb3JFYWNoQmxvY2s8UmVhcFdlYWtT
ZXQ+KCk7CisgICAgaWYgKG1faGVhcC0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xs
ZWN0aW9uKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrc1dpdGhO
ZXdPYmplY3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0
c1tpXS0+cmVhcFdlYWtTZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZm9yRWFjaEJsb2NrPFJl
YXBXZWFrU2V0PigpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KQEAgLTI5OSw2
ICszMTAsMjUgQEAgdm9pZCBNYXJrZWRTcGFjZTo6Y2xlYXJOZXdseUFsbG9jYXRlZCgpCiAjZW5k
aWYKIH0KIAorI2lmbmRlZiBOREVCVUcKK3N0cnVjdCBWZXJpZnlNYXJrZWQgOiBNYXJrZWRCbG9j
azo6Vm9pZEZ1bmN0b3IgeworICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2sp
IHsgQVNTRVJUKGJsb2NrLT5uZWVkc1N3ZWVwaW5nKCkpOyB9Cit9OworI2VuZGlmCisKK3ZvaWQg
TWFya2VkU3BhY2U6OmNsZWFyTWFya3MoKQoreworICAgIGlmIChtX2hlYXAtPm9wZXJhdGlvbklu
UHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAgICAvL2RhdGFMb2dGKCJudW1i
ZXIgb2YgYmxvY2tzIHdpdGggbmV3IG9iamVjdHMgPSAlbHVcbiIsIG1fYmxvY2tzV2l0aE5ld09i
amVjdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tz
V2l0aE5ld09iamVjdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhOZXdP
YmplY3RzW2ldLT5jbGVhck1hcmtzKCk7CisgICAgfSBlbHNlCisgICAgICAgIGZvckVhY2hCbG9j
azxDbGVhck1hcmtzPigpOworI2lmbmRlZiBOREVCVUcKKyAgICBmb3JFYWNoQmxvY2s8VmVyaWZ5
TWFya2VkPigpOworI2VuZGlmCit9CisKIHZvaWQgTWFya2VkU3BhY2U6OndpbGxTdGFydEl0ZXJh
dGluZygpCiB7CiAgICAgQVNTRVJUKCFpc0l0ZXJhdGluZygpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsMTcgQEAgY2xhc3MgV2Vha0dDSGFuZGxlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKIHN0
cnVjdCBDbGVhck1hcmtzIDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAgICB2b2lkIG9w
ZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJsb2NrKSB7IGJsb2NrLT5jbGVhck1hcmtzKCk7IH0KKyAg
ICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgYmxv
Y2stPmNsZWFyTWFya3MoKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2xlYXJSZW1lbWJlcmVkU2V0
IDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2Vk
QmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgYmxvY2stPmNsZWFyUmVtZW1iZXJlZFNldCgp
OworICAgIH0KIH07CiAKIHN0cnVjdCBTd2VlcCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7
CkBAIC0xMDQsOCArMTE0LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkQWRkQmxvY2soTWFy
a2VkQmxvY2sqKTsKICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdChNYXJrZWRCbG9jayopOwor
ICAgIHZvaWQgZGlkQWxsb2NhdGVJbkJsb2NrKE1hcmtlZEJsb2NrKik7CiAKICAgICB2b2lkIGNs
ZWFyTWFya3MoKTsKKyAgICB2b2lkIGNsZWFyUmVtZW1iZXJlZFNldCgpOwogICAgIHZvaWQgY2xl
YXJOZXdseUFsbG9jYXRlZCgpOwogICAgIHZvaWQgc3dlZXAoKTsKICAgICBzaXplX3Qgb2JqZWN0
Q291bnQoKTsKQEAgLTE0NCw2ICsxNTYsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2NhcGFj
aXR5OwogICAgIGJvb2wgbV9pc0l0ZXJhdGluZzsKICAgICBNYXJrZWRCbG9ja1NldCBtX2Jsb2Nr
czsKKyAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzOwogfTsK
IAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJl
dHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hMaXZlQ2VsbChIZWFwSXRlcmF0aW9uU2NvcGUm
LCBGdW5jdG9yJiBmdW5jdG9yKQpAQCAtMjU0LDkgKzI2NywxNCBAQCBpbmxpbmUgdm9pZCBNYXJr
ZWRTcGFjZTo6ZGlkQWRkQmxvY2soTWFyCiAgICAgbV9ibG9ja3MuYWRkKGJsb2NrKTsKIH0KIAot
aW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmNsZWFyTWFya3MoKQoraW5saW5lIHZvaWQgTWFya2Vk
U3BhY2U6OmRpZEFsbG9jYXRlSW5CbG9jayhNYXJrZWRCbG9jayogYmxvY2spCit7CisgICAgbV9i
bG9ja3NXaXRoTmV3T2JqZWN0cy5hcHBlbmQoYmxvY2spOworfQorCitpbmxpbmUgdm9pZCBNYXJr
ZWRTcGFjZTo6Y2xlYXJSZW1lbWJlcmVkU2V0KCkKIHsKLSAgICBmb3JFYWNoQmxvY2s8Q2xlYXJN
YXJrcz4oKTsKKyAgICBmb3JFYWNoQmxvY2s8Q2xlYXJSZW1lbWJlcmVkU2V0PigpOwogfQogCiBp
bmxpbmUgc2l6ZV90IE1hcmtlZFNwYWNlOjpvYmplY3RDb3VudCgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAxNTY0OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEdDVGhyZWFkU2hhcmVk
RAogCiBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIHsKLSAgICBBU1NFUlQobV9zdGFjay5p
c0VtcHR5KCkpOworICAgIGNsZWFyTWFya1N0YWNrKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6
OnNldHVwKCkKQEAgLTYzLDYgKzYzLDExIEBAIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKICAg
ICB9CiB9CiAKK3ZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKCkKK3sKKyAgICBtX3N0
YWNrLmNsZWFyKCk7Cit9CisKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVS
b290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7CiAgICAgU3RhY2tTdGF0czo6cHJvYmUoKTsKQEAg
LTgwLDcgKzg1LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKAog
I2VuZGlmCiAKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwotICAgIAorCiAgICAg
aWYgKGlzSlNTdHJpbmcoY2VsbCkpIHsKICAgICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4o
Y29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRvcik7CiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMTU2
NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNiArNDksMTAgQEAgcHVibGljOgogICAgIFNsb3RWaXNpdG9yKEdDVGhy
ZWFkU2hhcmVkRGF0YSYpOwogICAgIH5TbG90VmlzaXRvcigpOwogCisgICAgTWFya1N0YWNrQXJy
YXkmIG1hcmtTdGFjaygpIHsgcmV0dXJuIG1fc3RhY2s7IH0KKworICAgIEhlYXAqIGhlYXAoKSBj
b25zdDsKKwogICAgIHZvaWQgYXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQoSklUV3JpdGVCYXJyaWVyPFQ+Kik7CkBA
IC02MCwxNyArNjQsMTkgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWRWYWx1
ZShKU1ZhbHVlKik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGFwcGVuZFVu
YmFycmllcmVkV2VhayhXZWFrPFQ+Kik7CisgICAgdm9pZCB1bmNvbmRpdGlvbmFsbHlBcHBlbmQo
SlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBib29s
IGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgVHJpU3RhdGUgY29udGFpbnNPcGFxdWVS
b290VHJpU3RhdGUodm9pZCopOwogICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKIAotICAgIEdD
VGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIHsgcmV0dXJuIG1fc2hhcmVkOyB9CisgICAg
R0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWQ7
IH0KICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQogCiAg
ICAgdm9pZCBzZXR1cCgpOwogICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGNsZWFyTWFya1N0
YWNrKCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
c1Zpc2l0ZWQ7IH0KICAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzQ29waWVkOyB9CkBAIC04OCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29weUxh
dGVyKEpTQ2VsbCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCi0gICAgdm9pZCBy
ZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHNpemVfdCBzaXplKTsKKyAgICB2b2lkIHJlcG9ydEV4dHJh
TWVtb3J5VXNhZ2UoSlNDZWxsKiBvd25lciwgc2l6ZV90IHNpemUpOwogICAgIAogI2lmIEVOQUJM
RShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCiAgICAgVlRhYmxlU3BlY3RydW0gbV92aXNpdGVkVHlw
ZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwx
NCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsCiAgICAgICAgIAog
ICAgIE1BUktfTE9HX0NISUxEKCp0aGlzLCBjZWxsKTsKIAorICAgIHVuY29uZGl0aW9uYWxseUFw
cGVuZChjZWxsKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp1bmNvbmRp
dGlvbmFsbHlBcHBlbmQoSlNDZWxsKiBjZWxsKQoreworICAgIEFTU0VSVChIZWFwOjppc01hcmtl
ZChjZWxsKSk7CisgICAgbV92aXNpdENvdW50Kys7CisgICAgICAgIAogICAgIC8vIFNob3VsZCBu
ZXZlciBhdHRlbXB0IHRvIG1hcmsgc29tZXRoaW5nIHRoYXQgaXMgemFwcGVkLgogICAgIEFTU0VS
VCghY2VsbC0+aXNaYXBwZWQoKSk7CiAgICAgICAgIApAQCAtMjEyLDcgKzIyMCw5IEBAIGlubGlu
ZSB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigKIGlubGluZSB2b2lkIFNsb3RWaXNp
dG9yOjpjb3B5TGF0ZXIoSlNDZWxsKiBvd25lciwgQ29weVRva2VuIHRva2VuLCB2b2lkKiBwdHIs
IHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQoYnl0ZXMpOwotICAgIG1fYnl0ZXNDb3BpZWQg
Kz0gYnl0ZXM7CisgICAgYm9vbCBpc1JlbWVtYmVyZWQgPSBoZWFwKCktPm9wZXJhdGlvbkluUHJv
Z3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiAmJiBNYXJrZWRCbG9jazo6YmxvY2tGb3Iob3duZXIp
LT5pc1JlbWVtYmVyZWQob3duZXIpOworICAgIGlmICghaXNSZW1lbWJlcmVkKQorICAgICAgICBt
X2J5dGVzQ29waWVkICs9IGJ5dGVzOwogCiAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVk
U3BhY2U6OmJsb2NrRm9yKHB0cik7CiAgICAgaWYgKGJsb2NrLT5pc092ZXJzaXplKCkpIHsKQEAg
LTIyMCwxNCArMjMwLDE0IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIoSlND
ZWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChibG9jay0+aXNQaW5uZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYmxvY2stPnJlcG9ydExpdmVCeXRlcyhvd25lciwgdG9r
ZW4sIGJ5dGVzKTsKKyAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKG93bmVyLCBpc1JlbWVtYmVy
ZWQsIHRva2VuLCBieXRlcyk7CiB9CiAgICAgCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVw
b3J0RXh0cmFNZW1vcnlVc2FnZShzaXplX3Qgc2l6ZSkKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9y
OjpyZXBvcnRFeHRyYU1lbW9yeVVzYWdlKEpTQ2VsbCogb3duZXIsIHNpemVfdCBzaXplKQogewor
ICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiAm
JiBNYXJrZWRCbG9jazo6YmxvY2tGb3Iob3duZXIpLT5pc1JlbWVtYmVyZWQob3duZXIpKQorICAg
ICAgICByZXR1cm47CisKICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9zaGFyZWQubV92bS0+aGVh
cC5tX2V4dHJhTWVtb3J5VXNhZ2U7CiAgICAgCiAjaWYgRU5BQkxFKENPTVBBUkVfQU5EX1NXQVAp
CkBAIC0yNDEsNiArMjUxLDExIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRy
YU1lbW8KICNlbmRpZgogfQogCitpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25z
dAoreworICAgIHJldHVybiAmc2hhcmVkRGF0YSgpLm1fdm0tPmhlYXA7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVzX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RpbnlCbG9vbUZpbHRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RpbnlCbG9vbUZpbHRlci5oCShyZXZpc2lvbiAxNTY0
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaW55Qmxvb21GaWx0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBwdWJsaWM6CiAgICAgVGlueUJsb29tRmlsdGVy
KCk7CiAKICAgICB2b2lkIGFkZChCaXRzKTsKKyAgICB2b2lkIGFkZChUaW55Qmxvb21GaWx0ZXIm
KTsKICAgICBib29sIHJ1bGVPdXQoQml0cykgY29uc3Q7IC8vIFRydWUgZm9yIDAuCiAgICAgdm9p
ZCByZXNldCgpOwogCkBAIC01Miw2ICs1MywxMSBAQCBpbmxpbmUgdm9pZCBUaW55Qmxvb21GaWx0
ZXI6OmFkZChCaXRzIGJpCiAgICAgbV9iaXRzIHw9IGJpdHM7CiB9CiAKK2lubGluZSB2b2lkIFRp
bnlCbG9vbUZpbHRlcjo6YWRkKFRpbnlCbG9vbUZpbHRlciYgb3RoZXIpCit7CisgICAgbV9iaXRz
IHw9IG90aGVyLm1fYml0czsKK30KKwogaW5saW5lIGJvb2wgVGlueUJsb29tRmlsdGVyOjpydWxl
T3V0KEJpdHMgYml0cykgY29uc3QKIHsKICAgICBpZiAoIWJpdHMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
NSw2ICsyNjUsMjggQEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CiAg
ICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BS
UmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJn
dW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFy
Z3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgICAgIGFk
ZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQs
IFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7
CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Cisg
ICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmc0KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOworICAgIH0KKwogICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFy
ZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBH
UFJSZWcgYXJnNSkKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwpAQCAtOTcx
LDYgKzk5MywyMCBAQCBwdWJsaWM6CiAgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIs
IFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCisgICAg
eworICAgICAgICBwb2tlKGFyZzUsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUICsgMSk7CisgICAgICAg
IHBva2UoYXJnNCwgUE9LRV9BUkdVTUVOVF9PRkZTRVQpOworICAgICAgICBzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorIAorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1
KQorICAgIHsKKyAgICAgICAgcG9rZShhcmc1LCBQT0tFX0FSR1VNRU5UX09GRlNFVCArIDEpOwor
ICAgICAgICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKKyAgICAgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKwogICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMy
IGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCiAgICAg
ewogICAgICAgICBwb2tlKGFyZzQsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUKTsKQEAgLTEwNjgsNiAr
MTEwNCwyOCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKKyNpZiBOVU1CRVJfT0ZfQVJHVU1F
TlRfUkVHSVNURVJTID09IDYKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJbW0z
MiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCisgICAgeworICAgICAgICBz
ZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRH
UFI0PihhcmcxLCBhcmc0KTsKKyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjIpOworICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAg
IG1vdmUoYXJnNSwgR1BSSW5mbzo6YXJndW1lbnRHUFI1KTsKKyAgICAgICAgbW92ZShHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB9CisgCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3Rl
ZEltbTMyIGFyZzUpCisgICAgeworICAgICAgICBwdXNoKGFyZzEpOworICAgICAgICBzZXR1cFR3
b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFI0Pihh
cmcyLCBhcmc0KTsKKyAgICAgICAgcG9wKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAg
ICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorI2Vu
ZGlmCisKICAgICB2b2lkIHNldHVwUmVzdWx0cyhHUFJSZWcgZGVzdEEsIEdQUlJlZyBkZXN0QikK
ICAgICB7CiAgICAgICAgIEdQUlJlZyBzcmNBID0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFI7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNiw2ICs0
MDYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfdG9fdGhpcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2NyZWF0ZV90aGlzKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGl2KQorICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZW50ZXIpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9lcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9jYWxsZWUpCiAgICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsOCArNDUxLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVy
LCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVyIGlu
IHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCiAgICAg
ICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3JhdGNo
IHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3du
ZXIsIFJlZ2lzdGVySUQgdmFsdWVUYWcsIFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7Ci0gICAgICAg
IHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBS
ZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQp
OworICAgICAgICBKdW1wIGNoZWNrTWFya1dvcmQoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJ
RCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3JhdGNoMik7CisgICAgICAgIEp1bXAgY2hlY2tNYXJr
V29yZChKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gpOworICAgICAgICB2b2lkIGVt
aXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVn
aXN0ZXJJRCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9kZSwg
SnVtcExpc3QmIHNsb3dDYXNlcyk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFy
cmllck1vZGUsIEp1bXBMaXN0JiBzbG93Q2FzZXMpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFN0cnVjdHVyZVR5cGU+IC8vIFN0cnVjdHVyZVR5cGUgY2FuIGJlIFJlZ2lzdGVySUQgb3Ig
SW1tUHRyLgogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KFJlZ2lzdGVySUQgYWxs
b2NhdG9yLCBTdHJ1Y3R1cmVUeXBlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKTsKQEAgLTc0NSw2ICs3NDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90b190aGlzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NyZWF0ZV90aGlzKEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2RpdihJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lbnRlcihJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9l
cShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTc1
Myw2ICs3NTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYXJndW1lbnRfYnlfdmFsKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9wbmFtZShJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jaGVja19oYXNfaW5zdGFuY2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5pdF9nbG9i
YWxfY29uc3QoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
ZmFsc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw4ICszODgsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZShSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVn
aXN0ZXJJRCBzY3JhdGNoLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oc2NyYXRjaCk7IC8vIFdlIGhhZCBmb3VuZCB0aGlzIHNjcmF0Y2ggcmVnaXN0ZXIg
dXNlZnVsIGhlcmUgYmVmb3JlLCBzbyBJIHdpbGwga2VlcCBpdCBmb3Igbm93LgotICAgIAorICAg
IFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKICAgICBSZWdpc3RlcklEIHN0cnVjdHVyZSA9IHN0cnVj
dHVyZUFuZEluZGV4aW5nVHlwZTsKICAgICBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSA9IHN0cnVj
dHVyZUFuZEluZGV4aW5nVHlwZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM0LDYgKzgzNCwxNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlvbiopCiAgICAgc2l6ZV90IGNvdW50
ID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNv
dW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIobG9jYWxUb09wZXJhbmQoaikpOwor
CisgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Vu
dGVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIAorICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfZW50ZXIpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV9hY3RpdmF0aW9uKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklU
T3BlcmF0aW9uX0VDSWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsK
IHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNDSWNmKShFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIHR5cGVkZWYgdm9p
ZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNQU1BTKShFeGVjU3RhdGUqLCBKU0NlbGwqLCB2b2lk
Kiwgc2l6ZV90LCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXRpb25fRUpDSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0lt
cGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDcgKzMzMCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICAKICAgICBQYXRj
aGFibGVKdW1wIGJhZFR5cGU7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAorCiAgICAg
SklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CiAgICAgc3dpdGNo
IChtb2RlKSB7CiAgICAgY2FzZSBKSVRJbnQzMjoKQEAgLTM1Nyw3ICszNTcsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgCiAgICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwg
YmFkVHlwZSwgbW9kZSwgZG9uZSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVn
VDMsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MpOwogfQogCiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCkBAIC0zNzQsNiArMzcz
LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91cwogCiAgICAgTGFi
ZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QzKTsKKwogICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewogICAgIGNhc2UgSW50
MzJTaGFwZToKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChlbWl0SnVtcElmTm90SW1tZWRpYXRl
SW50ZWdlcihyZWdUMykpOwpAQCAtMzkyLDYgKzM5Miw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0R2VuZXJpY0NvbnRpZ3VvdXMKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ29u
dGlndW91c1NoYXBlOgorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVn
VDIsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBzbG93Q2FzZXMpOwogICAgICAgICBz
dG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC00MzAsNiArNDMxLDcgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeQogCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhp
cyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOworICAgIGVtaXRX
cml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMiwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVk
aWF0ZXMsIHNsb3dDYXNlcyk7CiAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCkBAIC00NjUsNiArNDY3LDEwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBjYXNlIEpJVERv
dWJsZToKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2YWx1ZSB0eXBlIGNoZWNrCiAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICBjYXNlIEpJVEFycmF5
U3RvcmFnZToKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC02MDcsNiArNjEzLDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICAvLyBKdW1wIHRvIGEg
c2xvdyBjYXNlIGlmIGVpdGhlciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1tZWRpYXRlLCBvciBp
ZiB0aGUgU3RydWN0dXJlIGRvZXMgbm90IG1hdGNoLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRl
ckltbWVkaWF0ZXMsIHNsb3dDYXNlcyk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKwog
ICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKIAogICAg
IExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsKQEAgLTYyMCw4ICs2MzAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9T
RVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwg
cmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MpOwotCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5m
by5hcHBlbmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWQs
IG1fYnl0ZWNvZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBwcm9w
ZXJ0eVN0b3JhZ2VMb2FkLCBkaXNwbGFjZW1lbnRMYWJlbCkpOwogfQogCkBAIC02MzMsNiArNjQx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChJbnN0cnVjdAogCiAgICAgbGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZVZSZWcpOwogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdCA6IGN0aV9vcF9wdXRfYnlf
aWQpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKQEAgLTczMSwxMiArNzQwLDI5
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAgICAgcmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwogICAgIH0KIAotICAgIC8vIFBs
YW50aW5nIHRoZSBuZXcgc3RydWN0dXJlIHRyaWdnZXJzIHRoZSB3cml0ZSBiYXJyaWVyIHNvIHdl
IG5lZWQKLSAgICAvLyBhbiB1bmNvbmRpdGlvbmFsIGJhcnJpZXIgaGVyZS4KLSAgICBlbWl0V3Jp
dGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVC
YXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0KICAgICBBU1NFUlQobmV3
U3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKICAg
ICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVjdHVyZSksIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKKworICAgIEp1bXBMaXN0IHdyaXRlQmFycmllclNs
b3dDYXNlczsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDMsIHJlZ1Qz
LCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCB3cml0ZUJhcnJpZXJTbG93Q2FzZXMpOworICAg
IEp1bXAgd3JpdGVCYXJyaWVyTm90VGFrZW4gPSBqdW1wKCk7CisgICAgd3JpdGVCYXJyaWVyU2xv
d0Nhc2VzLmxpbmsodGhpcyk7CisKKyAgICBwdXNoKHJlZ1QwKTsKKyAgICBwdXNoKHJlZ1QxKTsK
KyAgICBwdXNoKHJlZ1QyKTsKKyAgICBwdXNoKHJlZ1QzKTsKKyAgICBwdXNoKHJlZ1Q0KTsKKyAg
ICBKSVRTdHViQ2FsbCB3cml0ZUJhcnJpZXJTdHViQ2FsbCh0aGlzLCBjdGlfaGVhcF91bmNvbmRp
dGlvbmFsX3dyaXRlX2JhcnJpZXIpOworICAgIHdyaXRlQmFycmllclN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KHJlZ1QwKTsKKyAgICB3cml0ZUJhcnJpZXJTdHViQ2FsbC5jYWxsKCk7CisgICAgcG9wKHJl
Z1Q0KTsKKyAgICBwb3AocmVnVDMpOworICAgIHBvcChyZWdUMik7CisgICAgcG9wKHJlZ1QxKTsK
KyAgICBwb3AocmVnVDApOworCisgICAgd3JpdGVCYXJyaWVyTm90VGFrZW4ubGluayh0aGlzKTsK
ICAgICBjb21waWxlUHV0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsK
IAogICAgIHJldCgpOwpAQCAtNzUxLDkgKzc3NywxMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVu
Y3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9w
dXRfYnlfaWRfZmFpbCkpOwogCiAgICAgaWYgKHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MpIHsKLSAg
ICAgICAgQVNTRVJUKG1fY2FsbHMuc2l6ZSgpID09IDEpOwogICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0
aW9uX3JlYWxsb2MpKTsKLSAgICB9CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1sx
XS5mcm9tLCBGdW5jdGlvblB0cihjdGlfaGVhcF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXIp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20s
IEZ1bmN0aW9uUHRyKGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcikpOwogICAg
IAogICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAogICAg
ICAgICBGSU5BTElaRV9DT0RFKApAQCAtMTM0MywxNiArMTM3MCwyNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zCiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJv
cGVydHkodWludHB0cl90KiBvcGVyYW5kU2xvdCwgaW50IHZhbHVlKQogeworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMiwgcmVnVDEsIHJlZ1QxLCBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzLCBzbG93Q2FzZXMpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7
CisKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CiAgICAgbmVnUHRy
KHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAg
c3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlKQog
ewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAKKyAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgc2xvd0Nh
c2VzKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworCiAgICAgc3RvcmVQdHIocmVnVDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wZXJhbmQpKTsKIH0KIApAQCAtMTM2MCw2ICsxMzk3
LDExIEBAIHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHUKIHsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgcmVnVDApOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGVt
aXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDIsIFNob3VsZEZpbHRlcklt
bWVkaWF0ZXMsIHNsb3dDYXNlcyk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3Rl
cnMoKSksIHJlZ1QwKTsKICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgb3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikpKTsKIH0KQEAgLTEzOTMsMTUgKzE0MzUsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwogICAgICAgICBicmVhazsKICAgICB9CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQpLnR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKKyAgICAvLyBGb3IgdmFyIGluamVjdGlvbiBjaGVja3Mgb3Igc3RydWN0dXJlIGNoZWNr
cy4KKyAgICBpZiAobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbFByb3BlcnR5KQorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisK
KyAgICAvLyBGb3IgdGhlIHdyaXRlIGJhcnJpZXIuCisgICAgaWYgKHJlc29sdmVUeXBlICE9IER5
bmFtaWMpCisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRfdG9fc2NvcGUpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9uKSk7CkBAIC0xNDE0LDkgKzE0NjAs
MjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3QoSW5zdAogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdU
MCk7CiAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgZW1pdFdyaXRlQmFycmllcihnbG9i
YWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgc2xvd0Nhc2Vz
KTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworCiAgICAgc3RvcmU2NChyZWdUMCwgY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsKLSAgICBpZiAoSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpCi0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2Jq
ZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZv
clZhcmlhYmxlQWNjZXNzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luaXRfZ2xvYmFs
X2NvbnN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2luaXRfZ2xvYmFsX2NvbnN0KTsKKyAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGN1cnJlbnRJbnN0cnVjdGlvbikp
OworICAgIHN0dWJDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlk
KFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bykKQEAgLTE0MzksMzMgKzE0OTYsMTg2IEBAIHZvaWQgSklUOjpyZXNldFBhdGNoUHV0QnlJZChS
ZXBhdGNoQnVmZmUKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVy
SUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlLCBX
cml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCitKSVQ6Okp1bXAgSklUOjpjaGVja01hcmtXb3Jk
KFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgc2NyYXRjaDEsIFJlZ2lzdGVySUQgc2NyYXRj
aDIpCit7CisgICAgbW92ZShvd25lciwgc2NyYXRjaDEpOworICAgIG1vdmUob3duZXIsIHNjcmF0
Y2gyKTsKKworICAgIGFuZFB0cihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayks
IHNjcmF0Y2gxKTsKKyAgICBhbmRQdHIoVHJ1c3RlZEltbTMyKH5NYXJrZWRCbG9jazo6YmxvY2tN
YXNrKSwgc2NyYXRjaDIpOworCisgICAgcnNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMgKyA0KSwgc2Ny
YXRjaDIpOworCisgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KFplcm8sIEJhc2VJbmRleChzY3JhdGNo
MSwgc2NyYXRjaDIsIFRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSk7Cit9
CisKK0pJVDo6SnVtcCBKSVQ6OmNoZWNrTWFya1dvcmQoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJ
RCBzY3JhdGNoKQoreworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpibG9j
a0Zvcihvd25lcik7CisgICAgc2l6ZV90IGluZGV4ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90
Pihvd25lcikgJiB+TWFya2VkQmxvY2s6OmJsb2NrTWFzaykgPj4gKDMgKyA0KTsKKyAgICB1aW50
MzJfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPigocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oYmxvY2spICsgTWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MoKSkpICsgaW5k
ZXg7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIHNjcmF0Y2gpOworICAgIHJl
dHVybiBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHNjcmF0Y2gpKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVn
aXN0ZXJJRCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9kZSBt
b2RlLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQogewogICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgQVNT
RVJUKG93bmVyICE9IHNjcmF0Y2gpOworICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMSk7CiAg
ICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKLSAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCi0gICAgZW1pdENvdW50KFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRD
b3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgorCisvKgorICAgIHVuc2lnbmVkIG51bUNhbGxz
QmVmb3JlID0gbV9jYWxscy5zaXplKCk7CisgICAgSnVtcCB2YWx1ZU5vdENlbGw7CisqLworICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlckltbWVkaWF0ZXMpIAorICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCB2YWx1ZSwgdGFnTWFza1JlZ2lzdGVyKSk7CisgICAg
ZWxzZQorICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKy8qCisgICAgYm9vbCBu
ZWVkVG9SZXN0b3JlVmFsdWUgPSBmYWxzZTsKKyAgICBpZiAoc2NyYXRjaDEgPT0gc2NyYXRjaDIp
IHsKKyAgICAgICAgcHVzaCh2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2gyID0gdmFsdWU7CisgICAg
ICAgIG5lZWRUb1Jlc3RvcmVWYWx1ZSA9IHRydWU7CisgICAgfQorICAgIEp1bXAgZGVmaW5pdGVs
eU5vdE1hcmtlZCA9IGNoZWNrTWFya1dvcmQob3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Cisg
ICAgaWYgKG5lZWRUb1Jlc3RvcmVWYWx1ZSkKKyAgICAgICAgcG9wKHZhbHVlKTsKKyovCisKKy8q
CisgICAgcHVzaChyZWdUMCk7CisgICAgcHVzaChyZWdUMSk7CisgICAgcHVzaChyZWdUMik7Cisg
ICAgcHVzaChyZWdUMyk7CisgICAgcHVzaChyZWdUNCk7CisKKyAgICAvLyBGSVhNRTogRmlndXJl
IG91dCB3aHkgd2UgbmVlZCB0aGlzLgorICAgIHB1c2gocmVnVDQpOworICAgIHB1c2gocmVnVDQp
OworCisgICAgLy8gQ2FsbCBIZWFwOjp3cml0ZUJhcnJpZXIuCisgICAgaWYgKG1vZGUgPT0gVW5j
b25kaXRpb25hbFdyaXRlQmFycmllcikgeworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfaGVhcF91bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChvd25lcik7CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfaGVhcF93cml0
ZV9iYXJyaWVyKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3duZXIpOworICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudCh2YWx1ZSk7CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aHkgd2UgbmVlZCB0aGlzLgorICAg
IHBvcChyZWdUNCk7CisgICAgcG9wKHJlZ1Q0KTsKKworICAgIHBvcChyZWdUNCk7CisgICAgcG9w
KHJlZ1QzKTsKKyAgICBwb3AocmVnVDIpOworICAgIHBvcChyZWdUMSk7CisgICAgcG9wKHJlZ1Qw
KTsKKyovCisvKgorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBkZWZpbml0ZWx5Tm90TWFy
a2VkLmxpbmsodGhpcyk7CisgICAgaWYgKG5lZWRUb1Jlc3RvcmVWYWx1ZSkKKyAgICAgICAgcG9w
KHZhbHVlKTsKKworICAgIGRvbmUubGluayh0aGlzKTsKKyovCisvKgorICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlckltbWVkaWF0ZXMpIAorICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlz
KTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2Nr
KTsKKyAgICBpZiAobW9kZSA9PSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKSB7CisgICAgICAg
IEFTU0VSVChtX2NhbGxzW251bUNhbGxzQmVmb3JlXS50byA9PSBjdGlfaGVhcF91bmNvbmRpdGlv
bmFsX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbbnVt
Q2FsbHNCZWZvcmVdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3Jp
dGVfYmFycmllcikpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChtX2NhbGxzW251bUNh
bGxzQmVmb3JlXS50byA9PSBjdGlfaGVhcF93cml0ZV9iYXJyaWVyKTsKKyAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2NhbGxzW251bUNhbGxzQmVmb3JlXS5mcm9tLCBGdW5jdGlvblB0cihjdGlf
aGVhcF93cml0ZV9iYXJyaWVyKSk7CisgICAgfQorKi8KIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3Jh
dGNoLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkK
K3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFs
dWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlLCBKdW1wTGlzdCYg
c2xvd0Nhc2VzKQogewogICAgIFVOVVNFRF9QQVJBTShvd25lcik7CiAgICAgVU5VU0VEX1BBUkFN
KHNjcmF0Y2gpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLSAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICAKLSNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpCi0gICAgZW1pdENvdW50KFdyaXRlQmFycmllckNvdW50ZXJzOjpq
aXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgorLyoKKyAgICBKdW1wIHZhbHVlTm90Q2Vs
bDsKKyAgICB1bnNpZ25lZCBudW1DYWxsc0JlZm9yZSA9IG1fY2FsbHMuc2l6ZSgpOworKi8KKwor
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckltbWVkaWF0ZXMpIAorICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCB2YWx1ZSwgdGFnTWFza1JlZ2lzdGVyKSk7Cisg
ICAgZWxzZQorICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKy8qCisgICAgSnVt
cCBkZWZpbml0ZWx5Tm90TWFya2VkID0gY2hlY2tNYXJrV29yZChvd25lciwgc2NyYXRjaCk7Cisq
LworCisvKgorICAgIHB1c2gocmVnVDApOworICAgIHB1c2gocmVnVDEpOworICAgIHB1c2gocmVn
VDIpOworICAgIHB1c2gocmVnVDMpOworICAgIHB1c2gocmVnVDQpOworKi8KKworICAgIC8vIEZJ
WE1FOiBGaWd1cmUgb3V0IHdoeSB3ZSBuZWVkIHRoaXMuCisvKgorICAgIHB1c2gocmVnVDQpOwor
ICAgIHB1c2gocmVnVDQpOworKi8KKworLyoKKyAgICBpZiAobW9kZSA9PSBVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyKSB7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9o
ZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVfYmFycmllcik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIob3duZXIpKTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9oZWFw
X3dyaXRlX2JhcnJpZXIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1t
UHRyKG93bmVyKSk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHZhbHVlKTsKKyAgICAg
ICAgc3R1YkNhbGwuY2FsbCgpOworICAgIH0KKyovCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQg
d2h5IHdlIG5lZWQgdGhpcy4KKy8qCisgICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDQpOwor
Ki8KKy8qCisgICAgcG9wKHJlZ1Q0KTsKKyAgICBwb3AocmVnVDMpOworICAgIHBvcChyZWdUMik7
CisgICAgcG9wKHJlZ1QxKTsKKyAgICBwb3AocmVnVDApOworKi8KKy8qCisgICAgZGVmaW5pdGVs
eU5vdE1hcmtlZC5saW5rKHRoaXMpOworKi8KKy8qCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVySW1tZWRpYXRlcykgCisgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOworCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIGlm
IChtb2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgQVNTRVJUKG1f
Y2FsbHNbbnVtQ2FsbHNCZWZvcmVdLnRvID09IGN0aV9oZWFwX3VuY29uZGl0aW9uYWxfd3JpdGVf
YmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tudW1DYWxsc0JlZm9y
ZV0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX2hlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVy
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHNbbnVtQ2FsbHNCZWZvcmVd
LnRvID09IGN0aV9oZWFwX3dyaXRlX2JhcnJpZXIpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG1fY2FsbHNbbnVtQ2FsbHNCZWZvcmVdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9oZWFwX3dyaXRl
X2JhcnJpZXIpKTsKKyAgICB9CisqLwogfQogCiBKSVQ6Okp1bXAgSklUOjphZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFJlZ2lzdGVySUQgc2NyYXRjaCkKQEAgLTE1ODIsNyAr
MTc5Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAK
ICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
IAorCiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKICAgICBjYXNlIEpJVEludDMyOgogICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOwpAQCAtMTYwOCwxMCArMTgxOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsKEJ5VmFsSW4KICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7Ci0gICAgCiAgICAgcGF0Y2hCdWZm
ZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgp
KSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0g
ICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIAogICAgIGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjczLDYgKzIyNzMsMjkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X3RvX3Nj
bwogICAgIH0KIH0KIAorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgaGVhcF93cml0ZV9iYXJy
aWVyKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICBzdGFj
a0ZyYW1lLmNhbGxGcmFtZS0+aGVhcCgpLT53cml0ZUJhcnJpZXIoc3RhY2tGcmFtZS5hcmdzWzBd
LmpzVmFsdWUoKS5hc0NlbGwoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKSk7Cit9CisK
K0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIGhlYXBfdW5jb25kaXRpb25hbF93cml0ZV9iYXJy
aWVyKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICBzdGFj
a0ZyYW1lLmNhbGxGcmFtZS0+aGVhcCgpLT53cml0ZUJhcnJpZXIoc3RhY2tGcmFtZS5hcmdzWzBd
LmpzVmFsdWUoKS5hc0NlbGwoKSk7Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
X2luaXRfZ2xvYmFsX2NvbnN0KQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0Zy
YW1lKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAgICBJ
bnN0cnVjdGlvbiogcGMgPSBzdGFja0ZyYW1lLmFyZ3NbMF0ucGMoKTsKKworICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gcGNbMV0udS5yZWdpc3RlclBvaW50ZXI7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnIocGNbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7
CisgICAgcmVnaXN0ZXJQb2ludGVyLT5zZXQoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCB2YWx1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlz
aW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw3IEBAIHZvaWQgSklUX1NUVUIgY3RpX2hhbmRsZV93
YXRjaGRvZ190aW1lcigKIGludCBKSVRfU1RVQiBjdGlfaGFzX3Byb3BlcnR5KFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfZGVidWcoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9l
bmQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9TVFVCIGN0
aV9vcF9pbml0X2dsb2JhbF9jb25zdChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX3BvcF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9w
cm9maWxlX3dpbGxfY2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKQEAg
LTQyMSw3ICs0MjIsOCBAQCB2b2lkKiBKSVRfU1RVQiBjdGlfdm1fdGhyb3coU1RVQl9BUkdTX0RF
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfcmVzb2x2ZV9zY29wZShTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9v
cF9nZXRfZnJvbV9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZv
aWQgSklUX1NUVUIgY3RpX29wX3B1dF90b19zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKLQordm9pZCBKSVRfU1RVQiBjdGlfaGVhcF93cml0ZV9iYXJyaWVyKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfU1RVQiBjdGlfaGVhcF91
bmNvbmRpdGlvbmFsX3dyaXRlX2JhcnJpZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIEVuY29kZWRFeGNlcHRpb25IYW5kbGVyIEpJ
VF9TVFVCIGN0aV92bV9oYW5kbGVfZXhjZXB0aW9uKENhbGxGcmFtZSopIFJFRkVSRU5DRURfRlJP
TV9BU00gV1RGX0lOVEVSTkFMOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVk
ZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgorI2luY2x1
ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC02NDUsNzAgKzY0Nyw1NSBAQCBzdGF0aWMgdm9p
ZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwogI2VuZGlmCiAgICAg
R1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcu
dmFsdWVHUFIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8u
cGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5H
KQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5l
ZWRlZCA9IHRydWU7Ci0jZWxzZQotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0g
ZmFsc2U7CisKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZv
LnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKKyAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsK
ICNlbmRpZgorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKICAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlciBzdHViSml0OwotICAgIAotICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJS
ZWcgJiYgKHdyaXRlQmFycmllck5lZWRlZCB8fCBpc091dE9mTGluZU9mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzY3JhdGNoR1BSID0g
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSKTsKLSNl
bHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BS
KTsKLSAgICB9CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKKworICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBleGVjLT5jb2RlQmxv
Y2soKSk7CisKKyAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmco
c3R1YkppdCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHVi
Sml0LmJyYW5jaFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7
Ci0gICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgc2NyYXRjaEdQUjIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICBzY3JhdGNoR1BS
MiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwg
dmFsdWVUYWdHUFIsIHNjcmF0Y2hHUFIpOwotI2VuZGlmCi0gICAgc3R1YkppdC5wdXNoKHNjcmF0
Y2hHUFIyKTsKLSAgICBBc3NlbWJseUhlbHBlcnM6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNl
R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MpOwotICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIyKTsKLSNlbmRpZgorCisgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgd3JpdGVCYXJyaWVyT3BlcmF0aW9uID0gREZHOjpTcGVjdWxhdGl2ZUpJ
VDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BS
Mik7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpCiAgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIH0KICNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
KSB7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkp
OwogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNl
dEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKICAgICB9CiAjZW5kaWYKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7CiAgICAgCi0gICAgaWYgKG5lZWRU
b1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAg
IGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKICAgICAgICAgc3VjY2Vz
cyA9IHN0dWJKaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgYmFkU3RydWN0dXJlLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgYWxs
b2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CiAgICAgICAg
IGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKICAgICB9IGVsc2UgewogICAgICAgICBzdWNjZXNz
ID0gc3R1YkppdC5qdW1wKCk7CkBAIC03MTYsNiArNzAzLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1
dFJlcGxhY2VTdHViKAogICAgIH0KICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHdy
aXRlQmFycmllck9wZXJhdGlvbiwgREZHOjpkZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CiAgICAgICAgICAgICAK
QEAgLTc2MCwzNSArNzQ4LDM0IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigK
ICAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7CiAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIxICE9IHZhbHVlR1BSKTsKICAgICAKLSAgICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFs
c2U7Ci0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRF
X0JBUlJJRVJfUFJPRklMSU5HKQotICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSNlbmRp
ZgorICAgIGJvb2wgbmVlZEZvdXJ0aFNjcmF0Y2ggPSBmYWxzZTsKICAgICBpZiAoc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KQogICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOwotICAgICAgICBuZWVkVGhpcmRTY3JhdGNoID0g
dHJ1ZTsKKyAgICAgICAgbmVlZEZvdXJ0aFNjcmF0Y2ggPSB0cnVlOwogICAgIH0KIAotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMjsKLSAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gpIHsKLSAgICAgICAg
c2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEFT
U0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIy
ICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIx
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAgICAg
ICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAg
QVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQ
UjMgIT0gdmFsdWVHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQ
UjEpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBB
U1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQUik7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9
IHZhbHVlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOworCisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwor
ICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQ
UjMgIT0gdmFsdWVHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7
CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIyKTsKKyAgICAKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjQ7CisgICAgaWYgKG5lZWRGb3VydGhTY3JhdGNoKSB7CisgICAgICAgIHNj
cmF0Y2hHUFI0ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBBU1NF
UlQoc2NyYXRjaEdQUjQgIT0gYmFzZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAh
PSB2YWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMSk7
CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMik7CisgICAgICAgIEFT
U0VSVChzY3JhdGNoR1BSNCAhPSBzY3JhdGNoR1BSMyk7CiAgICAgfSBlbHNlCi0gICAgICAgIHNj
cmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIAorICAgICAgICBzY3JhdGNo
R1BSNCA9IEludmFsaWRHUFJSZWc7CisKICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdp
c3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZmFpbHVyZUNhc2VzOwpAQCAtODA5LDEyICs3OTYsOSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCiAgICAgICAgIH0KICAgICB9CiAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklF
Ul9QUk9GSUxJTkcpCi0gICAgQVNTRVJUKG5lZWRTZWNvbmRTY3JhdGNoKTsKLSAgICBBU1NFUlQo
c2NyYXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0
aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1
aXJlcyBpdAotICAgIEFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VH
UFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MpOwotI2VuZGlmCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgd3JpdGVCYXJyaWVyT3BlcmF0
aW9uID0gREZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY29w
eVdyaXRlQmFycmllck9wZXJhdGlvbjsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAgICAgCkBAIC04MzAsNiArODE0LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1
dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAgICAgICAgICAgIHN0
dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIGNvcHlXcml0ZUJhcnJpZXJP
cGVyYXRpb24gPSBERkc6OlNwZWN1bGF0aXZlSklUOjpjb3B5V3JpdGVCYXJyaWVyKHN0dWJKaXQs
IGJhc2VHUFIsIDAsIDAsIHNjcmF0Y2hHUFIxLCBuZXdTaXplLCBzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjMpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKQEAgLTg0MSw2ICs4MjYsOCBAQCBzdGF0aWMgdm9p
ZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgICAg
ICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwogICAgICAgICAgICAgc3R1YkppdC5h
ZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5t
X2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgLy8gVE9ETzog
R2V0IHRoZSByZWFsIGJhc2Ugb2YgdGhlIG9sZCBCdXR0ZXJmbHkuCisgICAgICAgICAgICBjb3B5
V3JpdGVCYXJyaWVyT3BlcmF0aW9uID0gREZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29weVdyaXRlQmFy
cmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMywgb2xkU2l6ZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSNCk7CiAgICAgICAgICAgICBzdHViSml0
LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNj
cmF0Y2hHUFIxKTsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjEgPSBuZXcgc3Rv
cmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwgc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUK
ICAgICAgICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CkBAIC05
MDcsNiArODk0LDkgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgIH0K
ICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNv
ZGVCbG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHdyaXRlQmFycmllck9wZXJhdGlvbiwg
REZHOjpkZmdVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKTsKKyAgICBpZiAoc2NyYXRjaEdQUjFI
YXNTdG9yYWdlKQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNvcHlXcml0ZUJhcnJpZXJPcGVy
YXRpb24sIERGRzo6ZGZnQ29weVdyaXRlQmFycmllcik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhz
dWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVz
ZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVM
YWJlbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAko
cmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNlbmRpZgogCiAvLyBEaXNh
YmxlIGlubGluZSBjYWNoaW5nIG9mIGdldF9ieV9pZCBhbmQgcHV0X2J5X2lkLgotI2RlZmluZSBM
TElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgMAorI2RlZmluZSBMTElOVF9BTFdBWVNfQUNDRVNTX1NM
T1cgMQogCiAvLyBFbmFibGUgT1NSIGludG8gdGhlIEpJVC4gRGlzYWJsaW5nIHRoaXMgd2hpbGUg
dGhlIExMSW50IGlzIGVuYWJsZWQgZWZmZWN0aXZlbHkKIC8vIHR1cm5zIG9mZiBhbGwgSklUJ2lu
Zywgc2luY2UgaW4gTExJbnQncyBwYXJsYW5jZSwgT1NSIHN1YnN1bWVzIGFueSBmb3JtIG9mIEpJ
VApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDggQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgCiAgICAgdm9pZCoganVtcFRhcmdldCA9IGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmctPm1f
bWFjaGluZUNvZGVPZmZzZXQpOwogICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKKworICAgIEhlYXA6
OmhlYXAoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSktPndyaXRlQmFycmllcihjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpKTsKICAgICAKICAgICBMTElOVF9SRVRVUk5fVFdPKGp1bXBU
YXJnZXQsIGV4ZWMpOwogfQpAQCAtMTMyOCw2ICsxMzMwLDE4IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wdXRfdG9fc2MKICAgICBMTElOVF9FTkQoKTsKIH0KIAorZXh0ZXJuICJD
IiB2b2lkIGxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyhKU0NlbGwqIG93bmVyLCBKU0NlbGwqIHZh
bHVlKQoreworICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKG93bmVyKTsKKyAgICBoZWFwLT53
cml0ZUJhcnJpZXIob3duZXIsIHZhbHVlKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIGxsaW50X3Vu
Y29uZGl0aW9uYWxfd3JpdGVfYmFycmllcl9zbG93KEpTQ2VsbCogb3duZXIpCit7CisgICAgSGVh
cCogaGVhcCA9IEhlYXA6OmhlYXAob3duZXIpOworICAgIGhlYXAtPndyaXRlQmFycmllcihvd25l
cik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludAogCiAjZW5kaWYgLy8gRU5BQkxF
KExMSU5UKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmgJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIG5hbWVzcGFj
ZSBMTEludCB7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX29w
ZXJhbmQoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJlLCBpbnQgb3BlcmFu
ZCk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShFeGVj
U3RhdGUqLCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIGludCBvcGVyYW5kKTsKK2V4dGVy
biAiQyIgdm9pZCBsbGludF93cml0ZV9iYXJyaWVyX3Nsb3coSlNDZWxsKiwgSlNDZWxsKik7Citl
eHRlcm4gIkMiIHZvaWQgbGxpbnRfdW5jb25kaXRpb25hbF93cml0ZV9iYXJyaWVyX3Nsb3coSlND
ZWxsKik7CiAKICNkZWZpbmUgTExJTlRfU0xPV19QQVRIX0RFQ0wobmFtZSkgXAogICAgIGV4dGVy
biAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50XyMjbmFtZShFeGVjU3RhdGUqIGV4ZWMsIElu
c3RydWN0aW9uKiBwYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTcyLDggKzE3MiwxMDQgQEAgbWFjcm8gbG9hZENvbnN0YW50T3JWYXJpYWJs
ZUNlbGwoaW5kZXgsIAogICAgIGJ0cW56IHZhbHVlLCB0YWdNYXNrLCBzbG93CiBlbmQKIAotbWFj
cm8gd3JpdGVCYXJyaWVyKHZhbHVlKQotICAgICMgTm90aGluZyB0byBkbywgc2luY2Ugd2UgZG9u
J3QgaGF2ZSBhIGdlbmVyYXRpb25hbCBvciBpbmNyZW1lbnRhbCBjb2xsZWN0b3IuCitjb25zdCBN
YXJrZWRCbG9ja1NpemUgPSA2NCAqIDEwMjQKK2NvbnN0IE1hcmtlZEJsb2NrSGVhZGVyTWFzayA9
IH4oTWFya2VkQmxvY2tTaXplIC0gMSkKKyMgc2l6ZW9mKGF0b20pID09IDgKK2NvbnN0IEF0b21O
dW1iZXJTaGlmdCA9IDMKK2NvbnN0IEJpdE1hcFdvcmRTaGlmdCA9IDUKK2NvbnN0IEJpdE1hcFdv
cmRTaXplID0gMzIKK2NvbnN0IEJpdE1hcFdvcmRNb2QgPSBCaXRNYXBXb3JkU2l6ZSAtIDEKKwor
IyBDbG9iYmVycyBib3RoIGNlbGwgYW5kIHNjcmF0Y2guCittYWNybyBpc01hcmtlZChjZWxsLCBz
Y3JhdGNoLCBjb250aW51YXRpb24pCisgICAgbW92ZSBjZWxsLCBzY3JhdGNoCisKKyMgR2V0IHRo
ZSBpbmRleCBvZiB0aGUgd29yZCBpbiB0aGUgYml0bWFwLgorICAgIGFuZHEgfk1hcmtlZEJsb2Nr
SGVhZGVyTWFzaywgY2VsbAorICAgIHB1c2hxIGNlbGwKKyAgICByc2hpZnRwIEF0b21OdW1iZXJT
aGlmdCArIEJpdE1hcFdvcmRTaGlmdCwgY2VsbAorCisjIExvYWQgdGhlIHdvcmQgZnJvbSB0aGUg
Yml0bWFwLgorICAgIGFuZHEgTWFya2VkQmxvY2tIZWFkZXJNYXNrLCBzY3JhdGNoCisgICAgbG9h
ZGkgTWFya2VkQmxvY2s6Om1fbWFya3Nbc2NyYXRjaCwgY2VsbCwgNF0sIHNjcmF0Y2gKKworIyBH
ZXQgdGhlIGFtb3VudCB0byByaWdodCBzaGlmdCB0aGUgcmVzdWx0IGJ5LgorICAgIHBvcHEgY2Vs
bAorICAgIHJzaGlmdHAgQXRvbU51bWJlclNoaWZ0LCBjZWxsCisgICAgYW5kcSBCaXRNYXBXb3Jk
TW9kLCBjZWxsCisgICAgcnNoaWZ0cCBjZWxsLCBzY3JhdGNoCisKKyMgQ2hlY2sgdGhlIHJpZ2h0
LW1vc3QgYml0LgorICAgIGFuZHEgMSwgc2NyYXRjaAorCisgICAgY29udGludWF0aW9uKHNjcmF0
Y2gpCitlbmQKKworbWFjcm8gdW5jb25kaXRpb25hbFdyaXRlQmFycmllcihvd25lcikKKyAgICBw
dXNocSB0MAorICAgIHB1c2hxIHQxCisgICAgcHVzaHEgdDIKKyAgICBwdXNocSB0MworICAgIHB1
c2hxIHQ0CisgICAgcHVzaHEgdDUKKyAgICBwdXNocSB0NgorICAgIGNDYWxsMihfbGxpbnRfdW5j
b25kaXRpb25hbF93cml0ZV9iYXJyaWVyX3Nsb3csIG93bmVyLCBvd25lcikKKyAgICBwb3BxIHQ2
CisgICAgcG9wcSB0NQorICAgIHBvcHEgdDQKKyAgICBwb3BxIHQzCisgICAgcG9wcSB0MgorICAg
IHBvcHEgdDEKKyAgICBwb3BxIHQwCisjICAgIHN0b3JlcSAwLCBbc3BdCisjICAgIHN0b3JlcSAw
LCA4W3NwXQorIyAgICBzdG9yZXEgMCwgMTZbc3BdCisjICAgIHN0b3JlcSAwLCAyNFtzcF0KKyMg
ICAgc3RvcmVxIDAsIDMyW3NwXQorIyAgICBzdG9yZXEgMCwgNDBbc3BdCisjICAgIHN0b3JlcSAw
LCA0OFtzcF0KK2VuZAorCittYWNybyB3cml0ZUJhcnJpZXJXaXRoVmFsdWUob3duZXIsIHZhbHVl
KQorIyBTa2lwIGlmIHZhbHVlIGlzIG51bGwgb3Igbm90IGEgY2VsbC4KKyAgICBidHB6IHZhbHVl
LCAud3JpdGVCYXJyaWVyRG9uZQorICAgIGJ0cW56IHZhbHVlLCB0YWdNYXNrLCAud3JpdGVCYXJy
aWVyRG9uZQorIyAgICBwdXNocSBvd25lcgorIyAgICBwdXNocSB2YWx1ZQorIyAgICBpc01hcmtl
ZChvd25lciwgdmFsdWUsIAorIyAgICAgICAgbWFjcm8gKG1hcmtlZCkKKyMjIElmIG93bmVyIGlz
bid0IG1hcmtlZCwgdGhlbiB3ZSdyZSBnb29kIHRvIGdvLgorIyAgICAgICAgICAgIGJ0YnogbWFy
a2VkLCAudmFsdWVJc05vbk51bGxDZWxsCisjICAgICAgICAgICAgcG9wcSB2YWx1ZQorIyAgICAg
ICAgICAgIHBvcHEgb3duZXIKKyAgICAgICAgICAgIHB1c2hxIHQwCisgICAgICAgICAgICBwdXNo
cSB0MQorICAgICAgICAgICAgcHVzaHEgdDIKKyAgICAgICAgICAgIHB1c2hxIHQzCisgICAgICAg
ICAgICBwdXNocSB0NAorICAgICAgICAgICAgcHVzaHEgdDUKKyAgICAgICAgICAgIHB1c2hxIHQ2
CisgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X3dyaXRlX2JhcnJpZXJfc2xvdywgb3duZXIsIHZh
bHVlKQorICAgICAgICAgICAgcG9wcSB0NgorICAgICAgICAgICAgcG9wcSB0NQorICAgICAgICAg
ICAgcG9wcSB0NAorICAgICAgICAgICAgcG9wcSB0MworICAgICAgICAgICAgcG9wcSB0MgorICAg
ICAgICAgICAgcG9wcSB0MQorICAgICAgICAgICAgcG9wcSB0MAorIyAgICBzdG9yZXEgMCwgW3Nw
XQorIyAgICBzdG9yZXEgMCwgOFtzcF0KKyMgICAgc3RvcmVxIDAsIDE2W3NwXQorIyAgICBzdG9y
ZXEgMCwgMjRbc3BdCisjICAgIHN0b3JlcSAwLCAzMltzcF0KKyMgICAgc3RvcmVxIDAsIDQwW3Nw
XQorIyAgICBzdG9yZXEgMCwgNDhbc3BdCisjICAgICAgICAgICAgam1wIC53cml0ZUJhcnJpZXJE
b25lCisjICAgICAgICBlbmQpCisjLnZhbHVlSXNOb25OdWxsQ2VsbDoKKyMgICAgcG9wcSB2YWx1
ZQorIyAgICBwb3BxIG93bmVyCisud3JpdGVCYXJyaWVyRG9uZToKIGVuZAogCiBtYWNybyB2YWx1
ZVByb2ZpbGUodmFsdWUsIG9wZXJhbmQsIHNjcmF0Y2gpCkBAIC0yMzAsNyArMzI2LDYgQEAgbWFj
cm8gZnVuY3Rpb25Bcml0eUNoZWNrKGRvbmVMYWJlbCwgc2xvdwogICAgIGptcCBkb25lTGFiZWwK
IGVuZAogCi0KICMgSW5zdHJ1Y3Rpb24gaW1wbGVtZW50YXRpb25zCiAKIF9sbGludF9vcF9lbnRl
cjoKQEAgLTI0Niw2ICszNDEsNyBAQCBfbGxpbnRfb3BfZW50ZXI6CiAgICAgc3RvcmVxIHQwLCBb
Y2ZyLCB0MiwgOF0KICAgICBidHFueiB0MiwgLm9wRW50ZXJMb29wCiAub3BFbnRlckRvbmU6Cisg
ICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZW50ZXIpCiAgICAgZGlzcGF0Y2goMSkKIAogCkBA
IC04MzcsMTEgKzkzMywxMyBAQCBlbmQKIAogbWFjcm8gc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVP
ZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAg
YmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5l
CisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAg
IGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5k
U3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4aTJxIHByb3BlcnR5
T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxp
bmU6CisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQog
ICAgIGFkZHAgc2l6ZW9mIEpTT2JqZWN0IC0gKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiA4
LCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6CiAgICAgc3RvcmVxIHZhbHVlLCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0lu
dCwgOF0KQEAgLTg1Miw3ICs5NTAsOSBAQCBfbGxpbnRfb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9u
KDEsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQotICAgIHdyaXRlQmFy
cmllcih0MikKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKKyAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1fZ2xvYmFsT2JqZWN0W3QxXSwgdDEKKyAgICB3cml0ZUJhcnJpZXJXaXRoVmFsdWUodDEs
IHQyKQogICAgIHN0b3JlcSB0MiwgW3QwXQogICAgIGRpc3BhdGNoKDUpCiAKQEAgLTk0MSwxMyAr
MTA0MSwxNCBAQCBtYWNybyBwdXRCeUlkKGdldFByb3BlcnR5U3RvcmFnZSkKICAgICBnZXRQcm9w
ZXJ0eVN0b3JhZ2UoCiAgICAgICAgIHQwLAogICAgICAgICB0MywKLSAgICAgICAgbWFjcm8gKHBy
b3BlcnR5U3RvcmFnZSwgc2NyYXRjaCkKLSAgICAgICAgICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1
Y3R1cmVbdDBdLCB0MSwgLm9wUHV0QnlJZFNsb3cKLSAgICAgICAgICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbig1LCB0MSkKLSAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHNj
cmF0Y2gpCi0gICAgICAgICAgICB3cml0ZUJhcnJpZXIodDApCi0gICAgICAgICAgICBzdG9yZXEg
c2NyYXRjaCwgW3Byb3BlcnR5U3RvcmFnZSwgdDFdCi0gICAgICAgICAgICBkaXNwYXRjaCg5KQor
ICAgICAgICBtYWNybyAocHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoKSAgICAgICAgICAgICAgICAg
ICAgICAgICMgTGl2ZSB2YXJpYWJsZXMKKyAgICAgICAgICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1
Y3R1cmVbdDBdLCB0MSwgLm9wUHV0QnlJZFNsb3cgICAjIHQwLCB0MSwgdDIsIHQzCisgICAgICAg
ICAgICBtb3ZlIHQwLCB0MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IyB0MCwgdDEsIHQyLCB0MworICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0Miwg
c2NyYXRjaCkgICAgICAgICAgICAgICAgICMgdDAsIHQxLCB0MiwgdDMKKyAgICAgICAgICAgIHdy
aXRlQmFycmllcldpdGhWYWx1ZSh0MSwgc2NyYXRjaCkgICAgICAgICAgICAgICAgICAjIHQwLCB0
MSwgICAsIHQzCisgICAgICAgICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNSwgdDEpICAgICAg
ICAgICAgICAgICAgICAgICAgIyB0MCwgdDEsICAgLCB0MworICAgICAgICAgICAgc3RvcmVxIHNj
cmF0Y2gsIFtwcm9wZXJ0eVN0b3JhZ2UsIHQxXSAgICAgICAgICAgICAgICMgdDAsIHQxLCAgICwg
dDMKKyAgICAgICAgICAgIGRpc3BhdGNoKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjICAgLCAgICwgICAsICAKICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTk3OCw5
ICsxMDc5LDEwIEBAIG1hY3JvIHB1dEJ5SWRUcmFuc2l0aW9uKGFkZGl0aW9uYWxDaGVja3MKICAg
ICAgICAgbWFjcm8gKHByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaCkKICAgICAgICAgICAgIGFkZHAg
dDEsIHByb3BlcnR5U3RvcmFnZSwgdDMKICAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUodDIsIHQxKQotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKHQxKQorICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyV2l0aFZhbHVlKHQwLCB0MSkKICAgICAgICAgICAgIHN0b3JlcSB0MSwgW3QzXQog
ICAgICAgICAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCisgICAgICAgICAgICB3cml0
ZUJhcnJpZXJXaXRoVmFsdWUodDAsIHQxKQogICAgICAgICAgICAgc3RvcmVwIHQxLCBKU0NlbGw6
Om1fc3RydWN0dXJlW3QwXQogICAgICAgICAgICAgZGlzcGF0Y2goOSkKICAgICAgICAgZW5kKQpA
QCAtMTEzNSw3ICsxMjM3LDggQEAgbWFjcm8gY29udGlndW91c1B1dEJ5VmFsKHN0b3JlQ2FsbGJh
Y2spCiAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIC5vdXRPZkJvdW5kcwogLnN0b3JlUmVzdWx0
OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MikKLSAgICBzdG9yZUNhbGxiYWNrKHQy
LCB0MSwgW3QwLCB0MywgOF0pCisgICAgbGVhcCBbdDAsIHQzLCA4XSwgdDAKKyAgICBzdG9yZUNh
bGxiYWNrKHQyLCB0MywgW3QwXSkKICAgICBkaXNwYXRjaCg1KQogCiAub3V0T2ZCb3VuZHM6CkBA
IC0xMTkwLDcgKzEyOTMsNyBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAgICBjb250aWd1b3Vz
UHV0QnlWYWwoCiAgICAgICAgIG1hY3JvIChvcGVyYW5kLCBzY3JhdGNoLCBhZGRyZXNzKQogICAg
ICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShvcGVyYW5kLCBzY3JhdGNoKQotICAgICAg
ICAgICAgd3JpdGVCYXJyaWVyKHNjcmF0Y2gpCisgICAgICAgICAgICB3cml0ZUJhcnJpZXJXaXRo
VmFsdWUodDEsIHNjcmF0Y2gpCiAgICAgICAgICAgICBzdG9yZXAgc2NyYXRjaCwgYWRkcmVzcwog
ICAgICAgICBlbmQpCiAKQEAgLTExOTksMjEgKzEzMDIsMjIgQEAgX2xsaW50X29wX3B1dF9ieV92
YWw6CiAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6dS5sZW5ndGhzLnZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsT3V0T2ZCb3VuZHMKICAg
ICBidHF6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJh
eVN0b3JhZ2VFbXB0eQogLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdDoKKyAgICBs
ZWFwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgdDAKICAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMywgdDIpCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCi0g
ICAgd3JpdGVCYXJyaWVyKHQxKQotICAgIHN0b3JlcSB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rv
clt0MCwgdDMsIDhdCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDMpCisgICAgd3Jp
dGVCYXJyaWVyV2l0aFZhbHVlKHQxLCB0MykKKyAgICBzdG9yZXEgdDMsIFt0MF0KICAgICBkaXNw
YXRjaCg1KQogCiAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BS
T0ZJTEVSCi0gICAgICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDQsIHQxKQotICAgICAgICBzdG9y
ZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QxXQorICAgICAgICBsb2FkcEZy
b21JbnN0cnVjdGlvbig0LCB0MikKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9t
YXlTdG9yZVRvSG9sZVt0Ml0KICAgICBlbmQKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9u
dW1WYWx1ZXNJblZlY3Rvclt0MF0KICAgICBiaWIgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFs
QXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKLSAgICBhZGRpIDEsIHQzLCB0MQotICAgIHN0b3JlaSB0
MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVi
bGljTGVuZ3RoW3QwXQorICAgIGFkZGkgMSwgdDMsIHQyCisgICAgc3RvcmVpIHQyLCAtc2l6ZW9m
IEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhb
dDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0
QnlWYWxPdXRPZkJvdW5kczoKQEAgLTE4NDAsMTIgKzE5NDQsMTYgQEAgbWFjcm8gcHV0R2xvYmFs
VmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZSh0MCwgdDEpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDApCisgICAg
bG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9i
amVjdFt0Ml0sIHQyCisgICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQyLCB0MSkKICAgICBzdG9y
ZXEgdDEsIFt0MF0KIGVuZAogCiBtYWNybyBwdXRDbG9zdXJlVmFyKCkKICAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMywgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIpCisg
ICAgd3JpdGVCYXJyaWVyV2l0aFZhbHVlKHQwLCB0MikKICAgICBsb2FkcCBKU1ZhcmlhYmxlT2Jq
ZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQwCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQx
KQogICAgIHN0b3JlcSB0MiwgW3QwLCB0MSwgOF0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIJKHJldmlzaW9uIDE1NjQ5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNyArODYsOSBAQCBNQUNST19JTlNUUlVDVElPTlMgPQogICAgICAiYmNk
MmkiLAogICAgICAibW92ZHoiLAogICAgICAicG9wIiwKKyAgICAgInBvcHEiLAogICAgICAicHVz
aCIsCisgICAgICJwdXNocSIsCiAgICAgICJtb3ZlIiwKICAgICAgInN4aTJxIiwKICAgICAgInp4
aTJxIiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlz
aW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIGNsYXNzIFJlZ2lzdGVySUQKICAgICAg
ICAgICAgIHdoZW4gOnF1YWQKICAgICAgICAgICAgICAgICBpc1g2NCA/ICIlcmF4IiA6IHJhaXNl
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAg
ICByYWlzZSAiSW52YWxpZCBraW5kICN7a2luZH0gZm9yIG5hbWUgI3tuYW1lfSIKICAgICAgICAg
ICAgIGVuZAogICAgICAgICB3aGVuICJ0MSIsICJhMSIsICJyMSIKICAgICAgICAgICAgIGNhc2Ug
a2luZApAQCAtOTgyLDggKzk4MiwxMiBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICAgICAg
ZW5kCiAgICAgICAgIHdoZW4gInBvcCIKICAgICAgICAgICAgICRhc20ucHV0cyAicG9wICN7b3Bl
cmFuZHNbMF0ueDg2T3BlcmFuZCg6cHRyKX0iCisgICAgICAgIHdoZW4gInBvcHEiCisgICAgICAg
ICAgICAkYXNtLnB1dHMgInBvcHEgI3tvcGVyYW5kc1swXS54ODZPcGVyYW5kKDpwdHIpfSIKICAg
ICAgICAgd2hlbiAicHVzaCIKICAgICAgICAgICAgICRhc20ucHV0cyAicHVzaCAje29wZXJhbmRz
WzBdLng4Nk9wZXJhbmQoOnB0cil9IgorICAgICAgICB3aGVuICJwdXNocSIKKyAgICAgICAgICAg
ICRhc20ucHV0cyAicHVzaHEgI3tvcGVyYW5kc1swXS54ODZPcGVyYW5kKDpwdHIpfSIKICAgICAg
ICAgd2hlbiAibW92ZSIKICAgICAgICAgICAgIGhhbmRsZU1vdmUKICAgICAgICAgd2hlbiAic3hp
MnEiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2
aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAtMTsKICAgICB9CiAKKyAgICBzaXplX3QgdG90YWxTaXplKFN0cnVjdHVyZSopOworCiAg
ICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBh
Y2l0eTsgfQogICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDE1
NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsMjIgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGVVbmluaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSBzaXpl
X3QgQnV0dGVyZmx5Ojp0b3RhbFNpemUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Cisg
ICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlczsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gc3RydWN0dXJlLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsK
KyAgICAgICAgcHJlQ2FwYWNpdHkgPSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1
Y3R1cmUpOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGluZGV4aW5nSGVh
ZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IDA7CisgICAgfQorICAgIHJldHVybiBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKK30KKwogaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDggQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogCiAgICAgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5ID0gcGNbM10udS5vcGVyYW5kOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y29uc3RydWN0b3ItPmFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+c3Ry
dWN0dXJlKCk7Ci0gICAgUkVUVVJOKGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVy
ZSkpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBz
dHJ1Y3R1cmUpOworICAgIFJFVFVSTihyZXN1bHQpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfdG9fdGhpcykKQEAgLTQ3OCw2ICs0NzksMTQgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3RvX3ByaW1pdGl2ZSkKICAgICBSRVRVUk4oT1BfQygyKS5qc1ZhbHVlKCkudG9QcmltaXRp
dmUoZXhlYykpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZW50ZXIpCit7CisgICAg
QkVHSU4oKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUgPSBleGVjLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCk7CisgICAgSGVhcDo6aGVhcChvd25lckV4ZWN1
dGFibGUpLT53cml0ZUJhcnJpZXIob3duZXJFeGVjdXRhYmxlKTsKKyAgICBFTkQoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJ
TlQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuaAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw2ICsxNTMsNyBAQCBT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGxfYXJpCiBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eUNoZWNrKTsKIFNMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfY3JlYXRlX2FyZ3VtZW50cyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2NyZWF0ZV90aGlzKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
ZW50ZXIpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfY2FsbGVlKTsKIFNM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9fdGhpcyk7CiBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX25vdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
MSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90
IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBjYW5ub3QgYmUKICAgICAvLyB1c2Vk
IG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFkZXIuCi0gICAgc2l6ZV90IHByZUNhcGFjaXR5
KFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBwcmVDYXBhY2l0eShT
dHJ1Y3R1cmUqKTsKICAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0
dXJlKik7CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiArMjcwLDcgQEAg
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIC8vIFdlJ3JlIGVp
dGhlciBnb2luZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdlLCBvciB3
ZSdyZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb25lLgogCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUo
KSwgbV9idXR0ZXJmbHkpOwogICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7CiAgICAgdW5zaWdu
ZWQgbmV3U3RvcmFnZUNhcGFjaXR5OwogICAgIC8vIElmIHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJy
YXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBr
ZWVwIHVzaW5nIGl0LgpAQCAtMzIxLDggKzMyMiw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50U2xvd0Nhc2UoVk0mIHYKIAogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNl
dFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotCi0gICAgbV9idXR0ZXJmbHkg
PSBuZXdCdXR0ZXJmbHk7CisgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJl
KCksIG5ld0J1dHRlcmZseSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY5Nyw5ICs2OTgs
OSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgCiAgICAg
aWYgKHN0YXJ0SW5kZXggKyBjb3VudCA+IHZlY3Rvckxlbmd0aCkKICAgICAgICAgY291bnQgPSB2
ZWN0b3JMZW5ndGggLSBzdGFydEluZGV4OwotICAgIAorCiAgICAgdW5zaWduZWQgdXNlZFZlY3Rv
ckxlbmd0aCA9IG1pbih2ZWN0b3JMZW5ndGgsIG9sZExlbmd0aCk7Ci0gICAgCisKICAgICB1bnNp
Z25lZCBudW1FbGVtZW50c0JlZm9yZVNoaWZ0UmVnaW9uID0gc3RhcnRJbmRleDsKICAgICB1bnNp
Z25lZCBmaXJzdEluZGV4QWZ0ZXJTaGlmdFJlZ2lvbiA9IHN0YXJ0SW5kZXggKyBjb3VudDsKICAg
ICB1bnNpZ25lZCBudW1FbGVtZW50c0FmdGVyU2hpZnRSZWdpb24gPSB1c2VkVmVjdG9yTGVuZ3Ro
IC0gZmlyc3RJbmRleEFmdGVyU2hpZnRSZWdpb247CkBAIC03NDMsNyArNzQ0LDYgQEAgYm9vbCBK
U0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZQogICAgICAgICAvLyBwb3J0aW9uIG9m
IHRoZSB2ZWN0b3IuIFdlIGFsc28gZG9uJ3QgbW9kaWZ5IHRoZSB2ZWN0b3IgbGVuZ3RoIGJlY2F1
c2Ugd2UncmUgbm90IGFjdHVhbGx5IGNoYW5naW5nCiAgICAgICAgIC8vIGl0cyBsZW5ndGg7IHdl
J3JlIGp1c3QgdXNpbmcgbGVzcyBvZiBpdC4KICAgICB9Ci0gICAgCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTg1NywxMCArODU3LDExIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0
aEFycmF5U3RvcmEKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKTsKIAogICAgIGlmIChtb3ZlRnJvbnQgJiYgc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0g
Y291bnQpIHsKLSAgICAgICAgbV9idXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+dW5z
aGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOwotICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3Jh
Z2UtPmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgIHN0
b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5t
X2luZGV4QmlhcyAtPSBjb3VudDsKICAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZl
Y3Rvckxlbmd0aCArIGNvdW50KTsKKyAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5n
U3RydWN0dXJlKG5ld0J1dHRlcmZseSk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZyb250ICYmIHZl
Y3Rvckxlbmd0aCAtIGxlbmd0aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIGlmICh1bnNoaWZ0Q291bnRT
bG93Q2FzZShleGVjLT52bSgpLCBtb3ZlRnJvbnQsIGNvdW50KSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0
Niw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgICAgIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9O
KQotICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVj
dHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CisgICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7IH0KICNl
bmRpZgogICAgICAgICAKICAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJh
eVN0b3JhZ2VUeXBlID0gTm90VHlwZWRBcnJheTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQ2
LDcgKzQ0Niw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7Ci0gICAgICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAg
ICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNPYmplY3QsIHRoaXNPYmpl
Y3QtPmJ5dGVTaXplKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTU2
NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NDcsMTMgKzU0NywxNSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpl
bnRlckRpY3Rpb25hcnlJCiAgICAgfQogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwor
ICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkp
OyAKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5y
ZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cigwKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5KTsKLSAgICAKLSAgICBtX2J1
dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1faW5kZXhCaWFzID0gMDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5z
ZXRWZWN0b3JMZW5ndGgoMCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXAuc2V0KHZtLCB0aGlzLCBtYXApOworICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZShuZXdCdXR0ZXJmbHkpOworICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHko
dm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgIAogICAgIHJldHVybiBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQpAQCAtNjEzLDcgKzYxNSwxMSBAQCBCdXR0ZXJmbHkq
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRT
dG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpLCBBbGxvY2F0ZVVuZGVjaWRlZCk7CisKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRl
cmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBkaWRSZXBsYWNl
T2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisKICAgICByZXR1
cm4gbmV3QnV0dGVyZmx5OwogfQogCkBAIC02MjIsNyArNjI4LDExIEBAIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3Jh
Z2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKCksIEFsbG9jYXRlSW50MzIpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0s
IHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1
dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTYzMyw3ICs2NDMsMTEgQEAgQ29u
dGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUU5hTjsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUo
KSwgQWxsb2NhdGVEb3VibGUpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZs
eSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC02NDIsNyArNjU2LDExIEBAIENvbnRp
Z3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5k
ZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisKKyAgICB3aWxsUmVwbGFjZU9s
ZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG1fYnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBkaWRS
ZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisKICAg
ICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKQEAgLTY2Myw3ICs2ODEs
MTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJlc3Vs
dC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7
CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3Jh
Z2VUcmFuc2l0aW9uKCkpOworCisgICAgd2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBu
ZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2
bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtNzMwLDcgKzc1MiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5k
ZWNpZGVkCiAgICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgogICAgIAogICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlkUmVw
bGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7
CisKICAgICByZXR1cm4gc3RvcmFnZTsKIH0KIApAQCAtNzg3LDcgKzgxMywxMSBAQCBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgfQogICAgIAogICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgZGlk
UmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJm
bHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtODU2LDcgKzg4NiwxMSBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgfQogICAgIAog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxSZXBsYWNlT2xk
QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7
CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdl
LT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtODg1LDcg
KzkxOSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAg
fQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKworICAgIHdpbGxS
ZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIHNl
dFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0
ZXJmbHkoKSk7CisgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBu
ZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApA
QCAtMjMyMSwxOCArMjM1OSwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0
aChWTSYgCiAgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRo
ZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KICAgICBpZiAoTElLRUxZKCFpbmRleEJp
YXMpKSB7CiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgd2lsbFJl
cGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBtX2J1dHRlcmZseSk7CiAgICAgICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJh
eVJpZ2h0KAogICAgICAgICAgICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKICAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3Ro
KSk7CiAgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKwogICAgICAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsK
KyAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKG5ld0J1dHRlcmZs
eSk7CisgICAgICAgIGRpZFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdC
dXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgLy8gUmVt
b3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAm
IGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKKyAgICB3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCks
IG1fYnV0dGVyZmx5KTsgCiAgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gc3RkOjptaW4oaW5k
ZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgp
OwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJl
c2l6ZUFycmF5KAogICAgICAgICB2bSwgdGhpcywKQEAgLTIzNDAsMTAgKzIzODIsMTEgQEAgYm9v
bCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdJbmRleEJp
YXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBp
ZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fYnV0
dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CisgICAgc2V0QnV0dGVy
Zmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKG5ld0J1dHRlcmZseSk7CisgICAgZGlkUmVwbGFj
ZU9sZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTIzNTgsMTUgKzI0MDEsMTkgQEAgdm9pZCBKU09iamVjdDo6ZW5zdXJl
TGVuZ3RoU2xvdyhWTSYgdm0sIAogICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsK
ICAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIHdpbGxSZXBsYWNlT2xkQnV0
dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIG1fYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAogICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJl
KCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAogICAgICAgICBvbGRW
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAogICAgICAgICBuZXdWZWN0b3JM
ZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgIG1fYnV0dGVyZmx5LT5zZXRW
ZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOworCiAgICAgaWYgKGhhc0RvdWJsZShzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9s
ZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKClbaV0gPSBRTmFOOwogICAgIH0KLSAg
ICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiB9CiAKIEJ1
dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXdTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5j
bHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJEZWZlckdDLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVh
ZGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2xv
dC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgpAQCAtNjA0LDEzICs2MDYsMTYgQEAg
cHVibGljOgogICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRl
KiBleGVjKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGlu
ZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIHZvaWQg
c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZseSopOyAvLyBZb3Ug
cHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCisgICAgdm9pZCBzZXRCdXR0ZXJmbHlX
aXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7CiAgICAgICAgIAogICAgIHZvaWQg
c2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKICAgICB2b2lkIHNldFN0cnVj
dHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCB1bnNpZ25lZCBvbGRDYXBh
Y2l0eSwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3Rv
cmFnZUlmTmVjZXNzYXJ5KFZNJiwgU3RydWN0dXJlKik7CiAKKyAgICB2b2lkIHdpbGxSZXBsYWNl
T2xkQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CisgICAgdm9pZCBkaWRS
ZXBsYWNlT2xkQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CisKICAgICB2
b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0cnVj
dHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CkBAIC0xMTIzLDgg
KzExMjgsMjggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzRXJyb3JJbnN0YW5jZSgpIAogICAg
IHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRXJyb3JJbnN0YW5jZVR5
cGU7CiB9CiAKK2lubGluZSB2b2lkIEpTT2JqZWN0Ojp3aWxsUmVwbGFjZU9sZEJ1dHRlcmZseShW
TSYgdm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBCdXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSkK
K3sKKyAgICBpZiAoIW9sZEJ1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIG9s
ZEJhc2UgPSBvbGRCdXR0ZXJmbHkgPyBvbGRCdXR0ZXJmbHktPmJhc2Uob2xkU3RydWN0dXJlKSA6
IDA7CisgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRCdXR0ZXJmbHkgPyBvbGRCdXR0ZXJmbHktPnRv
dGFsU2l6ZShvbGRTdHJ1Y3R1cmUpIDogMDsKKyAgICB2bS5oZWFwLndpbGxBYmFuZG9uU3RvcmFn
ZSh0aGlzLCBvbGRCYXNlLCBvbGRTaXplKTsKK30KKworaW5saW5lIHZvaWQgSlNPYmplY3Q6OmRp
ZFJlcGxhY2VPbGRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkpCit7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAg
IHJldHVybjsKKyAgICB2b2lkKiBuZXdCYXNlID0gbmV3QnV0dGVyZmx5ID8gbmV3QnV0dGVyZmx5
LT5iYXNlKG5ld1N0cnVjdHVyZSkgOiAwOworICAgIHNpemVfdCBuZXdTaXplID0gbmV3QnV0dGVy
Zmx5ID8gbmV3QnV0dGVyZmx5LT50b3RhbFNpemUobmV3U3RydWN0dXJlKSA6IDA7CisgICAgdm0u
aGVhcC5kaWRBc3NpZ25TdG9yYWdlKHRoaXMsIG5ld0Jhc2UsIG5ld1NpemUpOworfQorCiBpbmxp
bmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogeworICAgIEFTU0VSVChzdHJ1
Y3R1cmUpOworICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7CiAgICAg
bV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUp
OwogfQpAQCAtMTI5MywxMCArMTMxOCwxNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwoCiAKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwotICAgICAgICBpZiAoc3Ry
dWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQorICAgICAgICBib29sIGRp
ZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gZmFsc2U7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+
cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpIHsKKyAgICAgICAgICAgIHdpbGxSZXBsYWNl
T2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgICAgICAgICAg
bmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFn
ZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSB0cnVl
OworICAgICAgICB9CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVu
Y3Rpb24pOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgp
LCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBpZiAoZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkpCisg
ICAgICAgICAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0
dGVyZmx5KTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CkBAIC0xMzE0LDEyICsxMzQ1
LDE5IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBpZiAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0KSkgewogICAgICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHk7Ci0gICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKQorICAgICAgICBib29sIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gZmFsc2U7
CisgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVy
ZSgpKTsKKyAgICAgICAgICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1
Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091
dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKKyAgICAgICAgICAgIGRpZEFsbG9jYXRlTmV3QnV0dGVyZmx5ID0gdHJ1ZTsK
KyAgICAgICAgfQogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBp
ZiAoZGlkQWxsb2NhdGVOZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICBkaWRSZXBsYWNlT2xkQnV0
dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2
bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRy
YW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxl
LAogICAgICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgpA
QCAtMTM4OSw5ICsxNDI3LDExIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVB
bmRSZWEKICAgICB9CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IAorICAgIHdpbGxS
ZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbV9idXR0ZXJmbHkpOwogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCiAgICAgICAgIHZt
LCBvbGRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
KyAgICBkaWRSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRl
U3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiB2bSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCkBAIC0x
NDI3LDEwICsxNDY3LDE2IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0
VHIKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dl
dHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKLSAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQorICAgIGJvb2wgZGlkQWxsb2NhdGVOZXdCdXR0ZXJm
bHkgPSBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3Rv
cmFnZSgpKSB7CisgICAgICAgIHdpbGxSZXBsYWNlT2xkQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUo
KSwgbV9idXR0ZXJmbHkpOwogICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3Rv
cmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIGRpZEFsbG9j
YXRlTmV3QnV0dGVyZmx5ID0gdHJ1ZTsKKyAgICB9CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKICAgICBzZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgIGlm
IChkaWRBbGxvY2F0ZU5ld0J1dHRlcmZseSkKKyAgICAgICAgZGlkUmVwbGFjZU9sZEJ1dHRlcmZs
eSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZz
ZXQsIHZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkocmV2aXNpb24gMTU2NDk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDksOSArMTA5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiBtX2VudW1lcmF0aW9uQ2FjaGUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIGlubGlu
ZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiB2bSwgY29u
c3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpCisgICAg
aW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldEVudW1lcmF0aW9uQ2FjaGUoVk0mIHZt
LCBjb25zdCBTdHJ1Y3R1cmUqLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIG1fZW51bWVyYXRpb25DYWNoZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CisgICAg
ICAgIG1fZW51bWVyYXRpb25DYWNoZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmNwcAkocmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQg
SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICBlbHNlIHsKICAgICAgICAg
U3RyaW5nSW1wbCogaW1wbCA9IHRoaXNPYmplY3QtPm1fdmFsdWUuaW1wbCgpOwogICAgICAgICBB
U1NFUlQoaW1wbCk7Ci0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZShpbXBs
LT5jb3N0RHVyaW5nR0MoKSk7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2Fn
ZSh0aGlzT2JqZWN0LCBpbXBsLT5jb3N0RHVyaW5nR0MoKSk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNwcAkocmV2aXNpb24gMTU2NDk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5NywxNiArMTk3LDE4IEBAIENoZWNrZWRCb29sZWFuIE1hcERhdGE6OmVuc3Vy
ZVNwYWNlRm9yQXAKIAogICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzdGQ6Om1heChtX2NhcGFj
aXR5ICsgKG1fY2FwYWNpdHkgLyAyKSArIDEsIG1pbmltdW1NYXBTaXplKTsKICAgICB2b2lkKiBu
ZXdTdG9yYWdlID0gMDsKKyAgICBEZWZlckdDIGRlZmVyKCpjYWxsRnJhbWUtPmhlYXAoKSk7Cisg
ICAgY2FsbEZyYW1lLT5oZWFwKCktPndpbGxBYmFuZG9uU3RvcmFnZSh0aGlzLCBtX2VudHJpZXMs
IG1fY2FwYWNpdHkgKiBzaXplb2YoRW50cnkpKTsKICAgICBpZiAoIWNhbGxGcmFtZS0+aGVhcCgp
LT50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgcmVxdWlyZWRTaXplICogc2l6ZW9mKEVudHJ5KSwg
Jm5ld1N0b3JhZ2UpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihjYWxsRnJhbWUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIERlZmVyR0MgZGVmZXIoKmNhbGxG
cmFtZS0+aGVhcCgpKTsKICAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5
Kj4obmV3U3RvcmFnZSk7CiAgICAgaWYgKHNob3VsZFBhY2soKSkKICAgICAgICAgcmVwbGFjZUFu
ZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgcmVxdWlyZWRTaXplKTsKICAgICBlbHNlCiAg
ICAgICAgIHJlcGxhY2VCYWNraW5nU3RvcmUobmV3RW50cmllcywgcmVxdWlyZWRTaXplKTsKKyAg
ICBjYWxsRnJhbWUtPmhlYXAoKS0+ZGlkQXNzaWduU3RvcmFnZSh0aGlzLCBtX2VudHJpZXMsIHJl
cXVpcmVkU2l6ZSAqIHNpemVvZihFbnRyeSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTU2
NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQog
I2lmICFFTkFCTEUoWUFSUl9KSVQpCiAgICAgdXNlUmVnRXhwSklUKCkgPSBmYWxzZTsKICNlbmRp
ZgotICAgIAorCiAgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdoZXJlIG5lZWRlZCBhbmQgbWFrZSBj
b3JyZWN0aW9ucyB0byB0aGUgb3B0aW9uczoKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXAoKSA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkp
OwogICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPj0gdGhyZXNo
b2xkRm9yT3B0aW1pemVTb29uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxNTY0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjcz
LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgIGZpbmRT
dHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwg
dGFibGUpOwogICAgIAogICAgIGlmICh0YWJsZSkgewotICAgICAgICB0YWJsZSA9IHRhYmxlLT5j
b3B5KHZtLCAwLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVD
YXBhY2l0eSkpOworICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBzdHJ1Y3R1cmUsIG51
bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiAg
ICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwogICAgIH0KICAgICAKQEAgLTcwNSw4
ICs3MDUsMTEgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogCiAg
ICAgLy8gSWYgdGhlIG9iamVjdCBoYWQgYSBCdXR0ZXJmbHkgYnV0IGFmdGVyIGZsYXR0ZW5pbmcv
Y29tcGFjdGluZyB3ZSBubyBsb25nZXIgaGF2ZSBuZWVkIG9mIGl0LAogICAgIC8vIHdlIG5lZWQg
dG8gemVybyBpdCBvdXQgYmVjYXVzZSB0aGUgY29sbGVjdG9yIGRlcGVuZHMgb24gdGhlIFN0cnVj
dHVyZSB0byBrbm93IHRoZSBzaXplIGZvciBjb3B5aW5nLgotICAgIGlmIChvYmplY3QtPmJ1dHRl
cmZseSgpICYmICF0aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICF0aGlzLT5oYXNJbmRleGlu
Z0hlYWRlcihvYmplY3QpKQorICAgIGlmIChvYmplY3QtPmJ1dHRlcmZseSgpICYmICF0aGlzLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICYmICF0aGlzLT5oYXNJbmRleGluZ0hlYWRlcihvYmplY3QpKSB7
CisgICAgICAgIG9iamVjdC0+d2lsbFJlcGxhY2VPbGRCdXR0ZXJmbHkodm0sIG9iamVjdC0+c3Ry
dWN0dXJlKCksIG9iamVjdC0+YnV0dGVyZmx5KCkpOwogICAgICAgICBvYmplY3QtPnNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcywgMCk7CisgICAgICAgIG9iamVjdC0+ZGlkUmVwbGFj
ZU9sZEJ1dHRlcmZseSh2bSwgdGhpcywgMCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRoaXM7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gMTU2NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyMiw2ICs0MjIsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBz
ZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7CisgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uID09IHRoaXMpOwogICAg
ICAgICBpZiAodHlwZUluZm8oKS5zdHJ1Y3R1cmVIYXNSYXJlRGF0YSgpKQogICAgICAgICAgICAg
cmFyZURhdGEoKS0+c2V0UHJldmlvdXNJRCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAg
ICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGFJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZVJhcmVEYXRhOjpwcmUKICAgICByZXR1cm4gbV9wcmV2aW91cy5nZXQoKTsKIH0KIAotaW5saW5l
IHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIHZvaWQgU3RydWN0dXJl
UmFyZURhdGE6OnNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKLSAgICBtX3ByZXZpb3VzLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
KTsKKyAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgc3RydWN0dXJlKTsKIH0KIAogaW5saW5l
IHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmNsZWFyUHJldmlvdXNJRCgpCkBAIC01MCw5ICs1MCw5
IEBAIGlubGluZSBKU1N0cmluZyogU3RydWN0dXJlUmFyZURhdGE6Om9iamUKICAgICByZXR1cm4g
bV9vYmplY3RUb1N0cmluZ1ZhbHVlLmdldCgpOwogfQogCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmVS
YXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIEpTU3RyaW5nKiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRP
YmplY3RUb1N0cmluZ1ZhbHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiwgSlNTdHJpbmcqIHZhbHVl
KQogewotICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7Cisg
ICAgbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwRGF0YS5jcHAJKHJldmlzaW9uIDE1NjQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCB2b2lkIFdlYWtNYXBEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgLy8gUm91Z2gg
YXBwcm94aW1hdGlvbiBvZiB0aGUgZXh0ZXJuYWwgc3RvcmFnZSBuZWVkZWQgZm9yIHRoZSBoYXNo
dGFibGUuCiAgICAgLy8gVGhpcyBpc24ndCBleGFjdCwgYnV0IGl0IGlzIGNsb3NlIGVub3VnaCwg
YW5kIHByb3BvcnRpb25hbCB0byB0aGUgYWN0dWFsCiAgICAgLy8gZXh0ZXJuYWwgbWVybW9yeSB1
c2FnZS4KLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UodGhpc09iai0+bV9tYXAu
Y2FwYWNpdHkoKSAqIChzaXplb2YoSlNPYmplY3QqKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CisgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNPYmosIHRo
aXNPYmotPm1fbWFwLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKEpTT2JqZWN0KikgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOwogfQogCiB2b2lkIFdlYWtNYXBEYXRhOjpzZXQoVk0mIHZt
LCBKU09iamVjdCoga2V5LCBKU1ZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjUxOCkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTMtMDktMjYgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBnZW5lcmF0aW9uYWwgZ2FyYmFnZSBjb2xsZWN0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTA3NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0Rv
dWJseUxpbmtlZExpc3QuaDoKKyAgICAgICAgKFdURjo6Ojpjb25jYXQpOgorCiAyMDEzLTA5LTI2
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5kb3dz
XSBXb3JrIGFyb3VuZCBtaXNzaW5nIEMrKzExIGZlYXR1cmVzIG9mIE1TVkMgYnkgcHJvdmlkaW5n
IGFuIGltcGxlbWVudGF0aW9uIGZvcgpJbmRleDogU291cmNlL1dURi93dGYvRG91Ymx5TGlua2Vk
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RvdWJseUxpbmtlZExpc3QuaAko
cmV2aXNpb24gMTU2NDk5KQorKysgU291cmNlL1dURi93dGYvRG91Ymx5TGlua2VkTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1c2goVCop
OwogICAgIHZvaWQgYXBwZW5kKFQqKTsKICAgICB2b2lkIHJlbW92ZShUKik7CisgICAgdm9pZCBj
b25jYXQoRG91Ymx5TGlua2VkTGlzdDxUPiYpOwogCiBwcml2YXRlOgogICAgIFQqIG1faGVhZDsK
QEAgLTE4Niw2ICsxODcsMzEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIERvdWJs
eUxpbgogICAgIHJldHVybiBub2RlOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dm9pZCBEb3VibHlMaW5rZWRMaXN0PFQ+Ojpjb25jYXQoRG91Ymx5TGlua2VkTGlzdDxUPiYgb3Ro
ZXIpCit7CisgICAgaWYgKCFvdGhlci5oZWFkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghaGVhZCgpKSB7CisgICAgICAgIG1faGVhZCA9IG90aGVyLmhlYWQoKTsKKyAgICAgICAgbV90
YWlsID0gb3RoZXIudGFpbCgpOworICAgICAgICBvdGhlci5jbGVhcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUKHRhaWwoKSk7CisgICAgQVNTRVJUKG90aGVyLmhlYWQo
KSk7CisgICAgVCogb3RoZXJIZWFkID0gb3RoZXIuaGVhZCgpOworICAgIFQqIG90aGVyVGFpbCA9
IG90aGVyLnRhaWwoKTsKKyAgICBvdGhlci5jbGVhcigpOworCisgICAgQVNTRVJUKCFtX3RhaWwt
Pm5leHQoKSk7CisgICAgbV90YWlsLT5zZXROZXh0KG90aGVySGVhZCk7CisgICAgQVNTRVJUKCFv
dGhlckhlYWQtPnByZXYoKSk7CisgICAgb3RoZXJIZWFkLT5zZXRQcmV2KG1fdGFpbCk7CisgICAg
bV90YWlsID0gb3RoZXJUYWlsOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RG
OjpEb3VibHlMaW5rZWRMaXN0Tm9kZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>